@8wave/ai-elements 0.119.0-beta.48 → 0.119.0-beta.49
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/_chunks/{PkStreamingMarkdown-xnhBbPf5.js → PkStreamingMarkdown-pEgm7m-B.js} +4 -4
- package/dist/_chunks/PkStreamingMarkdown-pEgm7m-B.js.map +1 -0
- package/dist/_chunks/{PkToolShowArtifact-DPt1qDUk.js → PkToolShowArtifact-D6ZTw5vh.js} +2 -2
- package/dist/_chunks/{PkToolShowArtifact-DPt1qDUk.js.map → PkToolShowArtifact-D6ZTw5vh.js.map} +1 -1
- package/dist/_chunks/{PkToolShowContactForm-OdC7bsXd.js → PkToolShowContactForm-CW7gKQ7h.js} +2 -2
- package/dist/_chunks/{PkToolShowContactForm-OdC7bsXd.js.map → PkToolShowContactForm-CW7gKQ7h.js.map} +1 -1
- package/dist/_chunks/{PkToolShowForm-uFmaQoI1.js → PkToolShowForm-D_2FmDwq.js} +2 -2
- package/dist/_chunks/{PkToolShowForm-uFmaQoI1.js.map → PkToolShowForm-D_2FmDwq.js.map} +1 -1
- package/dist/_chunks/{PkToolShowSources-BlpCKc4N.js → PkToolShowSources-DyzheirE.js} +2 -2
- package/dist/_chunks/{PkToolShowSources-BlpCKc4N.js.map → PkToolShowSources-DyzheirE.js.map} +1 -1
- package/dist/ai-elements.es.js +1172 -1170
- package/dist/ai-elements.es.js.map +1 -1
- package/dist-vue/PkChatbot.js +1 -1
- package/dist-vue/PkChatbotEmptyState.js +1 -1
- package/dist-vue/PkChatbotInput.js +1 -1
- package/dist-vue/PkChatbotMessages.js +1 -1
- package/dist-vue/PkChatbotStepPayload.js +1 -1
- package/dist-vue/PkChatbotStepToolDetail.js +1 -1
- package/dist-vue/PkChatbotSteps.js +1 -1
- package/dist-vue/PkChatbotViewChat.js +1 -1
- package/dist-vue/PkChatbotViewConversations.js +1 -1
- package/dist-vue/_chunks/{PkChatbot-DXwMfwN4.js → PkChatbot-viqlDa9r.js} +5 -5
- package/dist-vue/_chunks/{PkChatbot-DXwMfwN4.js.map → PkChatbot-viqlDa9r.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotEmptyState-Dve5Ci2Y.js → PkChatbotEmptyState-B-2GZ2ZU.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotEmptyState-Dve5Ci2Y.js.map → PkChatbotEmptyState-B-2GZ2ZU.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotInput-DiCxEime.js → PkChatbotInput-D4bT_1be.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotInput-DiCxEime.js.map → PkChatbotInput-D4bT_1be.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotMessages-CTp0NkY2.js → PkChatbotMessages-BgcGen7D.js} +14 -14
- package/dist-vue/_chunks/{PkChatbotMessages-CTp0NkY2.js.map → PkChatbotMessages-BgcGen7D.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotStepPayload-B1o2DbQz.js → PkChatbotStepPayload-CzCHmvUG.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotStepPayload-B1o2DbQz.js.map → PkChatbotStepPayload-CzCHmvUG.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotStepToolDetail-DpYV0KLn.js → PkChatbotStepToolDetail-qSHrVOGO.js} +3 -3
- package/dist-vue/_chunks/{PkChatbotStepToolDetail-DpYV0KLn.js.map → PkChatbotStepToolDetail-qSHrVOGO.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotSteps-BPon4zjv.js → PkChatbotSteps-dgj6C2hA.js} +5 -5
- package/dist-vue/_chunks/{PkChatbotSteps-BPon4zjv.js.map → PkChatbotSteps-dgj6C2hA.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewChat-dJE2iHPN.js → PkChatbotViewChat-BtbE6V2u.js} +173 -173
- package/dist-vue/_chunks/PkChatbotViewChat-BtbE6V2u.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotViewConversations-DcEcJgwV.js → PkChatbotViewConversations-Cw9fL47_.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotViewConversations-DcEcJgwV.js.map → PkChatbotViewConversations-Cw9fL47_.js.map} +1 -1
- package/dist-vue/_chunks/{PkStreamingMarkdown-CqT_orLj.js → PkStreamingMarkdown-DXoUbGsP.js} +2 -2
- package/dist-vue/_chunks/{PkStreamingMarkdown-CqT_orLj.js.map → PkStreamingMarkdown-DXoUbGsP.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowArtifact-Qfkz64NY.js → PkToolShowArtifact-BRtz1x7K.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowArtifact-Qfkz64NY.js.map → PkToolShowArtifact-BRtz1x7K.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowContactForm-CRLEkYSE.js → PkToolShowContactForm-D0CR80e2.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowContactForm-CRLEkYSE.js.map → PkToolShowContactForm-D0CR80e2.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowDiagram-j4FJ34Ta.js → PkToolShowDiagram-CYpqqWLo.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowDiagram-j4FJ34Ta.js.map → PkToolShowDiagram-CYpqqWLo.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowForm-DdFBwLMf.js → PkToolShowForm-BIsu4XhQ.js} +3 -3
- package/dist-vue/_chunks/{PkToolShowForm-DdFBwLMf.js.map → PkToolShowForm-BIsu4XhQ.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowImageGallery-CxlOwuTJ.js → PkToolShowImageGallery-DkEv-6Nu.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowImageGallery-CxlOwuTJ.js.map → PkToolShowImageGallery-DkEv-6Nu.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowProductList-dfd3vmhl.js → PkToolShowProductList-Dr2mQqsb.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowProductList-dfd3vmhl.js.map → PkToolShowProductList-Dr2mQqsb.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowSources-B8Euk3rp.js → PkToolShowSources-CxUDh6cC.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowSources-B8Euk3rp.js.map → PkToolShowSources-CxUDh6cC.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowVideo-C84UrvZ7.js → PkToolShowVideo-Bh1oagOm.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowVideo-C84UrvZ7.js.map → PkToolShowVideo-Bh1oagOm.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowWebPages-CzzuVQqL.js → PkToolShowWebPages-ilQ1qTEC.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowWebPages-CzzuVQqL.js.map → PkToolShowWebPages-ilQ1qTEC.js.map} +1 -1
- package/dist-vue/_chunks/{utils-7oPvmwwu.js → utils-Bopp5IPf.js} +4 -4
- package/dist-vue/_chunks/utils-Bopp5IPf.js.map +1 -0
- package/dist-vue/composables.js +3 -1
- package/dist-vue/composables.js.map +1 -1
- package/dist-vue/index.js +20 -20
- package/dist-vue/index.js.map +1 -1
- package/dist-vue/locales.js +2 -0
- package/package.json +1 -1
- package/dist/_chunks/PkStreamingMarkdown-xnhBbPf5.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotViewChat-dJE2iHPN.js.map +0 -1
- package/dist-vue/_chunks/utils-7oPvmwwu.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PkStreamingMarkdown-xnhBbPf5.js","names":["Sn","On","w","Tn","F","L","Rn","yn","wn","_","T","K","X","I","A","M","f","h","Y","q","v","z","Q","Z","j","J","V","N","x","y","$","O","C","ne","ee","re","te","U","ie","oe","se","le","ae","fe","ge","de","me","be","ke","Ie","Ee","Se","Oe","Te","D","Me","Ce","Pe","_e","B","Re","ye","DOMPurify","marked","remend","_openBlock","_createElementBlock","_sfc_main","_style_0","defineComponent","onMounted","useTemplateRef","openBlock","nextTick","init_runtime_core_esm_bundler","onBeforeUnmount","watch","init_reactivity_esm_bundler","computed","createElementBlock","toRef","useI18n","loadCdnCss","getShadowRoot","MCP_TOOL_PREFIX","isPresentationTool","API_TOOL_PREFIX","SUBAGENT_TOOL_PREFIX","fromAnyCase","capitalizeFirstLetter","isSameSite","refThrottled","useShortUrlResolver","_plugin_vue_export_helper_default","useChatImageGate","DELIMITED_MARKER","DEGRADED_MARKER","STRAY_DELIMITERS","stripProviderCitationMarkers","text","isTextPart","part","isToolPart","getToolPartName","isFilePart","getFilePartMedia","media","getFilePartTranscript","transcript","withAudioTranscripts","messages","own","updates","update","message","storedFileName","isReasoningPart","getTextPart","parts","mergeConsecutiveTextParts","merged","prev","isWidgetPart","dropCorrectedWidgetErrors","lastDrawn","index","isStreamingPart","FILE_OUTPUT_PARTS","moveFileOutputsLast","files","feedPartKey","toolCallId","LIVE_REASONING_TAIL_LENGTH","FENCE_LINE","getMarkdownTail","markdown","maxLength","from","limit","boundary","length","cut","openFence","match","marker","rest","TOOL_APPROVAL_STATES","isToolApprovalPart","CONFIRM_TOOL_NAME","isToolConfirmPart","isConfirmationCardPart","getToolApprovalId","getPartState","getContrast","hex","hexcolor","char","r","g","b","linearize","c","resolveContrastColor","textColor","mainColor","agentThemeStyle","contrastColor","formatDuration","ms","$n","stringifyPayload","value","json","hasPayload","formAnswerAsSpoken","input","answer","question","questionById","step","said","id","formStepOptions","option","formAnswerSlots","slots","output","steps","assign","list","WEB_SEARCH_TOOL_TYPES","RICH_DETAIL_TOOL_TYPES","hasRichToolDetail","asRecord","pickString","keys","key","record","getToolPartSummary","queries","valid","query","sheet","range","getPartIcon","TOOL_KEY_PREFIXES","toolLabel","te","name","prefix","p","bare","PART_TYPE_LABELS","t","getPartTypeLabel","translator","label","localizeSummaryLabels","summary","labels","colon","getToolPartLabel","$t","En","Sn$1","On$1","w$1","Tn$1","Mn","F$1","e","n","L$1","P","Cn","Ln","Pn","_n","o","s","l","Rn$1","Nn","yn$1","a","u","Un","Dn","W","Bn","wn$1","i","Fn","Wn","_$1","T$1","K$1","H","X$1","I$1","R","Kn","Hn","Gn","Xn","Yn","qn","k","vn","zn","A$1","Qn","M$1","f$1","h$1","Zn","Y$1","q$1","v$1","z$1","Q$1","Z$1","j$1","J$1","V$1","N$1","x$1","nn","m","en","y$1","$$1","O$1","Vn","C$1","xn","ne$1","on","ee$1","re$1","te$1","U$1","rn","ie$1","oe$1","S","tn","se$1","sn","le$1","ln","ae$1","ce","an","cn","ue","fe$1","un","ge$1","de$1","fn","me$1","he","pe","be$1","gn","dn","ke$1","Ie$1","Ae","mn","hn","E","Ee$1","pn","Se$1","Oe$1","Te$1","D$1","Me$1","Ce$1","Le","Pe$1","bn","_e$1","kn","In","An","B$1","Re$1","d","Ne","ye$1","Or","B","y","V","M","D","h","x","ze","Q","Ee","Me","Ce","N","Ie","Y","fe","me","Be","ee","De","qe","Ze","ne","ve","xe","He","Ge","re","de","Qe","je","Fe","Ue","be","Ke","q","j","Xe","We","Re","Ve","Je","Ye","Te","et","tt","rt","Oe","st","it","at","lt","pt","ct","dt","kt","gt","ft","mt","xt","we","K","bt","Rt","Tt","ke","Ot","wt","ge","yt","se","St","J","_t","F","Z","Pe","w","ye","ie","oe","A","ae","v","le","X","Se","Lt","_e","_","$e","G","T","$","z","O","L","C","I","f","At","_OverloadYield","_arrayLikeToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_slicedToArray","_unsupportedIterableToArray","AsyncGenerator","resume","settle","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","_ref","apply","construct","args","func","thisArg","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySlice","arraySplice","arrayIsArray","setCreate","unconstruct","setAdd","setHas","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","numberToString","booleanToString","bigintToString","symbolToString","objectHasOwnProperty","objectToString","regExpTest","typeErrorCreate","addToSet","transformCaseFunc","set","array","element","lcElement","cleanArray","clone","newObject","_ref2","object","_ref3","property","stringifyValue","valueAsRecord","valueToString","lookupGetter","stringified","desc","prop","fallbackValue","lookupAccessor","isRegex","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","ELEMENT_MARKUP_PROBE","COMMENT_MARKUP_PROBE","FALLBACK_TAG_CLOSE","SELF_CLOSING_TAG","NODE_TYPE","LITERAL_TEXT_ELEMENTS","getGlobal","_createTrustedTypesPolicy","trustedTypes","suffix","ATTR_NAME","purifyHostElement","policyName","scriptUrl","_createHooksMap","_resolveSetOption","cfg","options","fallback","_resolveObjectOption","makeFallback","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","HTMLTemplateElement","Node","Element","NodeFilter","DOMParser","ElementPrototype","cloneNode","remove","removeAttributeNode","getNextSibling","getChildNodes","getParentNode","getAttributes","getNodeType","getNodeName","getOwnerDocument","_readNodeType","node","_readNodeName","getNamespaceURI","_readNamespaceURI","template","trustedTypesPolicy","emptyHTML","defaultTrustedTypesPolicy","defaultTrustedTypesPolicyResolved","IN_TRUSTED_TYPES_POLICY","_assertNotInTrustedTypesPolicy","_createTrustedHTML","_createTrustedScriptURL","_getDefaultTrustedTypesPolicy","_document","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","SET_CONFIG_ALLOWED_TAGS","SET_CONFIG_ALLOWED_ATTR","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","IN_PLACE_VISITED","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","DEFAULT_MATHML_TEXT_INTEGRATION_POINTS","MATHML_TEXT_INTEGRATION_POINTS","DEFAULT_HTML_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","customElementHandling","previousTrustedTypesPolicy","error","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkSvgNamespace","parent","tagName","parentTagName","_checkMathMlNamespace","_checkHtmlNamespace","_checkValidNamespace","elementNamespace","parentNode","_forceRemove","_stripAttributeNode","attribute","_neutralizeRoot","childNodes","child","attributes","_removeAttribute","attr","_stripDisallowedAttributes","_walkTree","intoShadow","stack","visit","shadowRoot","_isDocumentFragment","_neutralizeSubtree","_collectLiveNodes","nodes","_neutralizeEscapedElements","reachable","before","_neutralizeDiscarded","rootRemoved","entry","_sanitizeUnvisitedNodes","visited","original","getOriginal","beforeNode","round","live","containers","pending","container","_sanitizeUnvisitedIn","iterator","_createNodeIterator","inShadow","_executeHooks","_sanitizeElements","_sanitizeAttributes","_sanitizeShadowDOM2","_markVisited","_isPatchLinkageAttribute","lcName","lcTag","_neutralizePatchLinkage","nodeType","_initDocument","doc","leadingWhitespace","dirty","matches","dirtyPayload","body","_stripTemplateExpressions","_scrubTemplateExpressions2","templates","tmpl","_scrubOwnCharacterData","walker","currentNode","_isClobbered","realTagName","_isNode","data","_isUnsafeNode","_matchesNameCheck","check","_sanitizeDisallowedNode","_isBasicCustomElement","childCount","hoisted","_forkSharedAllowlist","hookList","defaultSet","setConfigSet","_handleHookDetachedNode","removed","content","_isValidAttribute","nameIsPermitted","RESERVED_CUSTOM_ELEMENT_NAMES","_applyTrustedTypesToAttribute","namespaceURI","_setAttributeValue","_isUnsafeAttributeValue","hookEvent","attrValue","initValue","recreatedNamedProp","shadowNode","shadowIterator","fragment","innerSr","_sanitizeAttachedShadowRoots","item","isElement","rootName","sr","importedNode","returnNode","inPlace","inPlaceNodes","outerVisited","walkRoot","nodeIterator","serializedHTML","tag","hookFunction","entryPoint","purify_default","escapeHtml","renderKatexPlaceholder","displayMode","SANITIZE_CONFIG","HELD_IMAGE_ATTRIBUTE","sanitizeMarkdownHtml","held","image","src","button","_hoisted_1","RENDER_INTERVAL_MS","PkStreamingMarkdown_default","props","__props","beautifulMermaidPromise","loadBeautifulMermaid","katexPromise","loadKatex","mod","inlineKatexRule","blockKatexRule","idx","token","renderer","escapeAttribute","UNSAFE_LINK_SCHEME","isRenderingTable","shortenAddress","address","tokens","target","href","isBareAddressInTable","tooltip","title","titleAttr","targetAttrs","cell","renderRow","cells","align","MERMAID_PREFIXES","normalizeLatexDelimiters","md","stripLeakedJson","fenced","fenceRe","fenceMatch","offset","preprocessors","containerRef","renderedMarkdown","visibleMarkdown","expandedMarkdown","resolveText","imageGate","onContentClick","event","renderMermaid","theme","THEMES","code","renderMermaidSVG","highlightCode","blocks","hljs","block","renderKatex","katex","tex","rerenderMermaidOnThemeChange","handleImageError","img","placeholder","prevCharCount","createAnimatedSpan","span","delay","insertAnimatedWords","startIndex","refNode","collectTextNodes","annotateNewContent","textNodes","charsSeen","wordIdx","textNode","nodeStart","nodeEnd","ref","splitAt","newTextNode","newText","newVal","oldVal"],"sources":["../../../../packages/utils/src/citations.ts","../../../../packages/utils/src/message.ts","../../../../packages/components/src/chat/utils.ts","../../../../node_modules/.pnpm/remend@1.4.0/node_modules/remend/dist/index.js","../../../../node_modules/.pnpm/marked@18.1.1/node_modules/marked/lib/marked.esm.js","../../../../node_modules/.pnpm/dompurify@3.4.17/node_modules/dompurify/dist/purify.es.mjs","../../../../packages/components/src/chat/markdownHtml.ts","../../../../packages/components/src/chat/PkStreamingMarkdown.vue","../../../../packages/components/src/chat/PkStreamingMarkdown.vue","../../../../packages/components/src/chat/PkStreamingMarkdown.vue"],"sourcesContent":["/**\n * OpenAI's Responses API (native `web_search`, also through Azure and the\n * gateway) emits inline citations as a marker wrapped in Private Use Area\n * delimiters:\n *\n * \\uE200cite\\uE202turn1view1\\uE201\n *\n * `cite` is the marker kind and `turn1view1` is the reference: browsing turn 1,\n * first page viewed (`search4` = 4th search result, `news2`, `fetch0`, …).\n * Several refs can share one block.\n *\n * Those delimiters are invisible in every renderer and get dropped by most text\n * pipelines (JSON round-trips, markdown sanitizers, terminal output), which\n * leaves the bare payload behind as literal prose: `citeturn1view1`. Either way\n * the marker is display noise: the usable data lives in the part's\n * `providerMetadata.<provider>.annotations`, which carries url, title and the\n * span the marker occupied.\n *\n * IMPORTANT: those annotation `start_index`/`end_index` offsets are computed on\n * the text WITH the delimiters still in it. Render the citations from the\n * annotations FIRST (walking them last-to-first so earlier offsets stay valid),\n * and only then strip. Stripping first makes every offset stale.\n */\n\n/** A whole PUA-delimited block, `\\uE200…\\uE201`, plus the space before it. */\nconst DELIMITED_MARKER = /[ \\t]*\\uE200[^\\uE201]*\\uE201/g\n\n/**\n * The same payload once the delimiters are already lost: a marker keyword glued\n * to one or more `turn<n><kind><n>` refs. Anchored on both the keyword and the\n * ref shape, because on degraded text there are no boundaries left to trust and\n * a looser pattern would start eating prose. Tried only where a run of blanks\n * starts: from every position inside a long run it walked the rest of the run,\n * and 64k spaces took 7 seconds.\n */\nconst DEGRADED_MARKER =\n /(?<![ \\t])[ \\t]*(?:cite|filecite|videocite|audiocite|imagecite|screenshot)(?:turn\\d+[a-z]+\\d+)+/gi\n\n/**\n * Orphan delimiters: a block truncated mid-stream, or one whose payload some\n * upstream pass already removed.\n */\nconst STRAY_DELIMITERS = /[\\uE200-\\uE20F]/g\n\n/**\n * Removes provider citation markers from text meant for display, in all three\n * states they show up in: well-formed, delimiter-stripped, and truncated.\n */\nexport function stripProviderCitationMarkers(text: string): string {\n if (!text) {\n return text\n }\n return text\n .replace(DELIMITED_MARKER, '')\n .replace(DEGRADED_MARKER, '')\n .replace(STRAY_DELIMITERS, '')\n}\n","import type { UIMessage } from 'ai'\nimport type { ChatAudioTranscript, MediaSource, UIChatMessage } from 'models'\n\ntype MessagePart = UIMessage['parts'][number]\n\nexport function isTextPart(\n part?: MessagePart | null | undefined,\n): part is Extract<MessagePart, { type: 'text' }> {\n if (!part) {\n return false\n }\n return part.type === 'text'\n}\n\nexport function isToolPart(\n part?: MessagePart | null | undefined,\n): part is Extract<MessagePart, { type: `tool-${string}` }> {\n if (!part) {\n return false\n }\n return part.type.startsWith('tool-')\n}\n\nexport function getToolPartName(part?: MessagePart): string {\n if (!isToolPart(part)) {\n return ''\n }\n return part.type.slice('tool-'.length)\n}\n\nexport function isFilePart(\n part?: MessagePart | null | undefined,\n): part is Extract<MessagePart, { type: 'file' }> {\n if (!part) {\n return false\n }\n return part.type === 'file'\n}\n\n/**\n * Returns the persisted `MediaSource` carried by a file part, when present.\n * Uploaded attachments stash the full upload metadata (size, extension,\n * storage handle…) under `providerMetadata['8bot'].media`, which survives\n * persistence — so saved messages can surface size/details without a schema\n * change or extra request.\n */\nexport function getFilePartMedia(\n part?: MessagePart | null | undefined,\n): MediaSource | undefined {\n if (!isFilePart(part)) {\n return undefined\n }\n const container = part.providerMetadata?.['8bot'] as\n { media?: unknown } | undefined\n const media = container?.media\n return media && typeof media === 'object' && !Array.isArray(media)\n ? (media as MediaSource)\n : undefined\n}\n\n/**\n * Returns the transcript a chat turn stamped on an audio file part, under\n * `providerMetadata['8bot'].transcript` (spec `audio-file-transcription.md`,\n * D4), when present.\n */\nexport function getFilePartTranscript(\n part?: MessagePart | null | undefined,\n): ChatAudioTranscript | undefined {\n if (!isFilePart(part)) {\n return undefined\n }\n const container = part.providerMetadata?.['8bot'] as\n { transcript?: unknown } | undefined\n const transcript = container?.transcript\n return transcript &&\n typeof transcript === 'object' &&\n !Array.isArray(transcript)\n ? (transcript as ChatAudioTranscript)\n : undefined\n}\n\n/** The transcript a turn made of one audio the client sent, as streamed. */\nexport interface AudioTranscriptUpdate {\n messageId: string\n storedFileName: string\n transcript: ChatAudioTranscript\n}\n\n/**\n * The messages with the transcripts a turn streamed (`data-audioTranscripts`)\n * stamped on their audio parts: the stored message has them, the client's\n * copy of the message it sent gets them here. What the updates do not name is\n * returned as it was, the same objects.\n */\nexport function withAudioTranscripts<T extends UIMessage>(\n messages: T[],\n updates: AudioTranscriptUpdate[],\n): T[] {\n return messages.map((message) => {\n const own = updates.filter((update) => update.messageId === message.id)\n if (own.length === 0) {\n return message\n }\n return {\n ...message,\n parts: message.parts.map((part) => {\n const update = own.find(\n ({ storedFileName }) =>\n storedFileName ===\n getFilePartMedia(part)?.storedFileName,\n )\n return update && isFilePart(part)\n ? {\n ...part,\n providerMetadata: {\n ...part.providerMetadata,\n '8bot': {\n ...part.providerMetadata?.['8bot'],\n transcript: update.transcript,\n },\n },\n }\n : part\n }),\n }\n })\n}\n\nexport function isReasoningPart(\n part?: MessagePart | null | undefined,\n): part is Extract<MessagePart, { type: 'reasoning' }> {\n if (!part) {\n return false\n }\n return part.type === 'reasoning'\n}\n\nexport function hasPartText(\n part?: MessagePart | null | undefined,\n): part is Extract<MessagePart, { text: string }> {\n if (!part) {\n return false\n }\n if (isTextPart(part)) {\n return true\n }\n return (\n 'text' in part &&\n part.text !== undefined &&\n part.text !== null &&\n part.text !== ''\n )\n}\n\nexport function hasTextPart(\n message?: UIMessage | UIChatMessage | null | undefined,\n): boolean {\n if (!message) {\n return false\n }\n return (message as UIMessage).parts.some((part) => isTextPart(part))\n}\n\nexport function getTextPart(\n message?: UIMessage | UIChatMessage | null | undefined,\n): string | undefined {\n if (!message) {\n return undefined\n }\n const parts = (message as UIMessage).parts\n if (!Array.isArray(parts)) {\n return undefined\n }\n const textPart = parts.find((part) => isTextPart(part))\n return textPart?.text\n}\n\nexport function getMessageText(\n message?: UIMessage | UIChatMessage | null | undefined,\n): string {\n if (!message) {\n return ''\n }\n const parts = (message as UIMessage).parts\n if (!Array.isArray(parts)) {\n return ''\n }\n return parts\n .filter((p): p is Extract<MessagePart, { type: 'text' }> =>\n isTextPart(p),\n )\n .map((p) => p.text)\n .join('')\n}\n","import type { UIMessage } from 'ai'\nimport {\n API_TOOL_PREFIX,\n MCP_TOOL_PREFIX,\n SUBAGENT_TOOL_PREFIX,\n isPresentationTool,\n} from 'models'\nimport {\n isTextPart,\n isFilePart,\n isToolPart,\n isReasoningPart,\n hasPartText,\n hasTextPart,\n getTextPart,\n getMessageText,\n getToolPartName,\n capitalizeFirstLetter,\n fromAnyCase,\n} from 'utils'\n\nexport {\n isTextPart,\n isFilePart,\n isToolPart,\n isReasoningPart,\n hasPartText,\n hasTextPart,\n getTextPart,\n getMessageText,\n}\n\n/**\n * Merges consecutive text parts into a single text part.\n * Claude (and other models) often produce multiple text parts during streaming\n * that should logically be a single block of text.\n */\nexport function mergeConsecutiveTextParts(\n parts: UIMessage['parts'],\n): UIMessage['parts'] {\n const merged: UIMessage['parts'] = []\n for (const part of parts) {\n if (!isTextPart(part)) {\n merged.push(part)\n continue\n }\n const prev = merged[merged.length - 1]\n if (prev && isTextPart(prev)) {\n merged[merged.length - 1] = { ...prev, text: prev.text + part.text }\n } else {\n merged.push(part)\n }\n }\n return merged\n}\n\nconst isWidgetPart = (\n part: UIMessage['parts'][number],\n): part is Extract<UIMessage['parts'][number], { type: `tool-${string}` }> =>\n isToolPart(part) && isPresentationTool(getToolPartName(part))\n\n/**\n * Drops a widget call refused for its arguments when a later call of the same\n * widget in the message was drawn: the turn corrected it (the backend's\n * `correctableInputRefusals`), and the refusal would sit next to the working\n * widget, `showForm` drawing its render error above the form. A refusal with\n * nothing drawn after it stays. Only the feed reads this: the steps timeline\n * keeps every call, the refused one included.\n */\nexport function dropCorrectedWidgetErrors(\n parts: UIMessage['parts'],\n): UIMessage['parts'] {\n const lastDrawn = new Map<string, number>()\n for (const [index, part] of parts.entries()) {\n if (\n isWidgetPart(part) &&\n part.state !== 'output-error' &&\n !isStreamingPart(part)\n ) {\n lastDrawn.set(part.type, index)\n }\n }\n return parts.filter(\n (part, index) =>\n !(\n isWidgetPart(part) &&\n part.state === 'output-error' &&\n (lastDrawn.get(part.type) ?? -1) > index\n ),\n )\n}\n\n/**\n * Tool calls whose output is a file for the user to download. The feed draws\n * them after the answer, where the reader arrives, wherever in the message the\n * model made the call: a version written before a long answer sat above it,\n * out of sight.\n */\nconst FILE_OUTPUT_PARTS: ReadonlySet<string> = new Set(['tool-editSpreadsheet'])\n\n/** The parts with the file outputs moved last, in their own order. */\nexport function moveFileOutputsLast(\n parts: UIMessage['parts'],\n): UIMessage['parts'] {\n const files = parts.filter((part) => FILE_OUTPUT_PARTS.has(part.type))\n return files.length > 0\n ? [\n ...parts.filter((part) => !FILE_OUTPUT_PARTS.has(part.type)),\n ...files,\n ]\n : parts\n}\n\n/**\n * The key of a part in the feed. Its position, except for a file output: that\n * one is always last, so its position moves as the answer grows, and keyed by\n * it the card would be redrawn at every new part.\n */\nexport function feedPartKey(\n part: UIMessage['parts'][number],\n index: number,\n): string | number {\n const toolCallId = (part as { toolCallId?: string }).toolCallId\n return FILE_OUTPUT_PARTS.has(part.type) && toolCallId\n ? `file-${toolCallId}`\n : index\n}\n\nexport function isStreamingPart(\n part: UIMessage['parts'][number] | null | undefined,\n): part is Extract<UIMessage['parts'][number], { streaming?: boolean }> {\n if (!part) {\n return false\n }\n if ('state' in part) {\n return part.state === 'streaming' || part.state === 'input-streaming'\n }\n return false\n}\n\n/**\n * How much of a reasoning still being written its live box renders. The box is\n * a few lines tall and follows the bottom, while the reasoning of one turn runs\n * to tens of kilobytes: chat `st0Eg8iG0zUX0HQN` wrote 92KB, and parsing all of\n * it at every delta froze the tab. Four thousand characters leave a few screens\n * to scroll back through, and a finished step renders all of it.\n */\nexport const LIVE_REASONING_TAIL_LENGTH = 4000\n\n// A fence opener or closer, also inside a list item or a quote, whose markers\n// and indentation are skipped. The rest of the line tells them apart: a\n// closing fence carries no info string.\nconst FENCE_LINE =\n /^[ \\t]*(?:(?:[-*+]|\\d{1,9}[.)])[ \\t]+|>[ \\t]?)*(`{3,}|~{3,})(.*)$/gm\n\n/**\n * The end of a markdown text, at most `maxLength` characters long, cut on a\n * blank line (a line break when there is none) so it does not open on half a\n * paragraph. A table or a formula can still be cut in two. An ellipsis marks\n * the cut. A cut inside a fenced code block reopens the fence, or the rest of\n * the text would render as code and the code as prose.\n */\nexport function getMarkdownTail(markdown: string, maxLength: number): string {\n if (markdown.length <= maxLength) {\n return markdown\n }\n const from = markdown.length - maxLength\n // The boundary is looked for in the first half of the window only: the one\n // blank line of the window can be the last thing written, and cutting there\n // would leave nothing to render.\n const limit = from + maxLength / 2\n const boundary = (index: number, length: number) =>\n index !== -1 && index < limit ? index + length : undefined\n const cut =\n boundary(markdown.indexOf('\\n\\n', from), 2) ??\n boundary(markdown.indexOf('\\n', from), 1) ??\n from\n let openFence: string | undefined\n for (const match of markdown.matchAll(FENCE_LINE)) {\n if (match.index >= cut) {\n break\n }\n const [, marker, rest] = match\n if (!openFence) {\n // A backtick in a backtick fence's info string makes it inline\n // code, not a fence.\n if (marker[0] === '`' && rest.includes('`')) {\n continue\n }\n openFence = marker\n } else if (\n marker[0] === openFence[0] &&\n marker.length >= openFence.length &&\n !rest.trim()\n ) {\n openFence = undefined\n }\n }\n const reopen = openFence ? `${openFence}\\n` : ''\n return `…\\n\\n${reopen}${markdown.slice(cut)}`\n}\n\n/**\n * States a tool part goes through when it needs the user's approval. They are\n * rendered by `PkToolApprovalCard` whatever the tool is, so the decision (and\n * its outcome) stays visible in the transcript.\n */\nconst TOOL_APPROVAL_STATES = new Set([\n 'approval-requested',\n 'approval-responded',\n 'output-denied',\n])\n\nexport function isToolApprovalPart(\n part: UIMessage['parts'][number] | null | undefined,\n): boolean {\n if (!isToolPart(part)) {\n return false\n }\n if (TOOL_APPROVAL_STATES.has(part.state)) {\n return true\n }\n // An executed (or errored) call that went through the gate keeps its\n // verdict in `approval`: the card stays in the transcript, so the user's\n // decision remains visible in the chat and in the log viewers (parity\n // with requestConfirm, whose 'confirmed' output is persisted).\n return (part as { approval?: unknown }).approval != null\n}\n\n/**\n * The client-side tool the model uses to have an action it described approved.\n * It predates the SDK's approval gate and keeps its own round-trip (it resolves\n * through `addToolOutput`), but it asks the user the very same question, so it\n * shares `PkToolApprovalCard` instead of having a card of its own.\n */\nexport const CONFIRM_TOOL_NAME = 'requestConfirm'\n\nexport function isToolConfirmPart(\n part: UIMessage['parts'][number] | null | undefined,\n): boolean {\n return isToolPart(part) && part.type === `tool-${CONFIRM_TOOL_NAME}`\n}\n\n/** True for any part the confirmation card is responsible for. */\nexport function isConfirmationCardPart(\n part: UIMessage['parts'][number] | null | undefined,\n): boolean {\n return isToolApprovalPart(part) || isToolConfirmPart(part)\n}\n\n/** The id of the pending approval request on a tool part, if any. */\nexport function getToolApprovalId(\n part: UIMessage['parts'][number] | null | undefined,\n): string | undefined {\n if (!isToolPart(part)) {\n return undefined\n }\n return (part as { approval?: { id?: string } }).approval?.id\n}\n\nexport function getPartState(\n part: UIMessage['parts'][number] | null | undefined,\n): string | undefined {\n if (!part) {\n return undefined\n }\n if ('state' in part) {\n return part.state\n }\n return undefined\n}\n\nexport function isLoadingState(state?: string): boolean {\n if (!state) {\n return false\n }\n return ['streaming'].includes(state)\n}\n\nexport function getContrast(hexcolor: string = '000000'): 'black' | 'white' {\n let hex = hexcolor.replace('#', '')\n\n // Expand 3-character hex to 6-character (e.g., #ccc -> #cccccc)\n if (hex.length === 3) {\n hex = hex\n .split('')\n .map((char) => char + char)\n .join('')\n }\n\n // WCAG relative luminance\n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n\n const linearize = (c: number) =>\n c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n\n const luminance =\n 0.2126 * linearize(r) + 0.7152 * linearize(g) + 0.0722 * linearize(b)\n\n return luminance > 0.179 ? 'black' : 'white'\n}\n\n/**\n * Resolves the contrast color based on the user's `textColor` preference.\n * Falls back to WCAG auto-detection via `getContrast` when set to `'auto'` or `undefined`.\n */\nexport function resolveContrastColor(\n textColor: 'auto' | 'white' | 'black' | undefined,\n mainColor: string | undefined,\n): 'black' | 'white' {\n if (textColor === 'white' || textColor === 'black') {\n return textColor\n }\n return getContrast(mainColor)\n}\n\n/**\n * The style of a chat root (PkChatbot, the widget's shell): the agent's color\n * as the brand. Volver derives every role of the brand (graphic, readable,\n * contrast, tinted surface) on any element with `.theme`, which both roots\n * carry, so the focus ring, the primary buttons, the links and the checkboxes\n * take the agent's color with the contrast each theme needs, instead of the\n * platform's purple. The fields' focus takes the brand's graphic role in both\n * themes, since the dark theme's accent is the platform's too.\n */\nexport function agentThemeStyle(\n mainColor: string | undefined,\n contrastColor: 'black' | 'white',\n): Record<string, string> | undefined {\n if (!mainColor) {\n return undefined\n }\n return {\n '--chatbot-main-color': mainColor,\n '--chatbot-contrast-color': contrastColor,\n '--color-brand': mainColor,\n '--color-brand-contrast': contrastColor,\n '--input-focus-color': 'var(--color-brand-graphic)',\n }\n}\n\n/**\n * Formats a duration in milliseconds using the i18n `seconds` number format\n * (e.g. \"12,4 secondi\" / \"12.4 seconds\"). Returns undefined for durations\n * that would render as \"0 seconds\" (less than 0.05s).\n */\nexport function formatDuration(\n $n: (value: number, format: string) => string,\n ms?: number,\n): string | undefined {\n if (ms === undefined || ms < 50) {\n return undefined\n }\n return $n(ms / 1000, 'seconds')\n}\n\n/**\n * Stringifies a tool payload for the raw fallback view. Returns undefined for\n * empty values so the caller can skip rendering the block entirely.\n */\nexport function stringifyPayload(value: unknown): string | undefined {\n if (value === undefined) {\n return undefined\n }\n if (typeof value === 'string') {\n return value.trim() || undefined\n }\n try {\n const json = JSON.stringify(value, null, 2)\n return json === '{}' || json === '[]' ? undefined : json\n } catch {\n return undefined\n }\n}\n\n/**\n * True when a tool payload carries something worth rendering, so a caller can\n * skip the block without stringifying the value twice.\n */\nexport function hasPayload(value: unknown): boolean {\n return stringifyPayload(value) !== undefined\n}\n\n/**\n * Turns the answers of a form into the sentence the caller would have said.\n *\n * On a call the tool loop is over by the time the form is on screen, so the\n * answers go back to the agent as a user message (see `sendUserMessage` in\n * `useVoiceSession`). Each answer is paired with its question, because that is\n * how a person would say it and because the agent hears it with no widget\n * attached.\n */\nexport function formAnswerAsSpoken(\n part: unknown,\n answer: string | { answers: { id: string; value: unknown }[] },\n): string {\n const input = (\n part as {\n input?: {\n steps?: { id: string; question?: string }[]\n question?: string\n }\n }\n )?.input\n\n if (typeof answer === 'string') {\n const question = input?.question ?? input?.steps?.[0]?.question\n return question ? `${question} ${answer}` : answer\n }\n\n const questionById = new Map(\n (input?.steps ?? []).map((step) => [step.id, step.question]),\n )\n const lines = answer.answers\n .filter(\n ({ value }) =>\n value !== null &&\n value !== '' &&\n !(Array.isArray(value) && !value.length),\n )\n .map(({ id, value }) => {\n const said = Array.isArray(value) ? value.join(', ') : String(value)\n const question = questionById.get(id)\n return question ? `${question} ${said}` : said\n })\n\n return lines.join('. ')\n}\n\n/**\n * The choices of a form step, as the radio and checkbox editors take them.\n *\n * The `value` is the LABEL and not the position, because it is what travels\n * back to the model as the answer: it reads the words it wrote, not an index.\n * Nothing here caps the list, and nothing should: the number of options an\n * agent configures is advice to the model, so a step can legitimately carry\n * more (see `showForm.tool.ts`).\n */\nexport function formStepOptions(\n step: { options?: { label: string; description?: string }[] } | undefined,\n): { label: string; value: string; description?: string }[] {\n if (!step?.options) {\n return []\n }\n return step.options.map((option) => ({\n label: option.label,\n value: option.label,\n description: option.description,\n }))\n}\n\n/**\n * Spreads the answers a form comes back with onto one slot PER STEP.\n *\n * A form's answers travel paired with step ids, and the tool schema does not\n * enforce that those ids are unique: a `.refine()` there would refuse the whole\n * form over a duplicate, which is the failure the schema was just cured of (see\n * the gotchas entry \"A configurable cap does not belong in an inputSchema\").\n * So the duplicate has to be survivable here. Keyed by id, two steps sharing\n * one collapsed onto a single answer: the second question showed the first\n * one's reply, and submitting sent that reply twice. Keyed by position, each\n * step keeps its own.\n *\n * A duplicated id restores the same incoming value to every step claiming it,\n * which is as much as the payload allows: the ids are all it says.\n */\nexport function formAnswerSlots(\n steps: { id: string }[],\n output: unknown,\n): Record<number, unknown> {\n const slots: Record<number, unknown> = {}\n if (output === undefined || output === null) {\n return slots\n }\n // A legacy single-choice answer is the plain string, and it can only\n // belong to a single-step form.\n if (typeof output === 'string') {\n if (steps.length === 1) {\n slots[0] = output\n }\n return slots\n }\n const assign = (id: string, value: unknown) => {\n steps.forEach((step, index) => {\n if (step.id === id) {\n slots[index] = value\n }\n })\n }\n const list = (output as { answers?: unknown }).answers\n if (Array.isArray(list)) {\n for (const answer of list as { id?: unknown; value?: unknown }[]) {\n if (typeof answer?.id === 'string') {\n assign(answer.id, answer.value)\n }\n }\n return slots\n }\n // Forms answered on a platform channel (the Teams modal) come back as a\n // flat record keyed by step id.\n for (const [id, value] of Object.entries(\n output as Record<string, unknown>,\n )) {\n if (value !== undefined) {\n assign(id, value)\n }\n }\n return slots\n}\n\n// Provider-native web search tool part types\nexport const WEB_SEARCH_TOOL_TYPES = [\n 'tool-perplexity_search',\n 'tool-parallel_search',\n 'tool-web_search',\n 'tool-google_search',\n]\n\n// Tool part types with a dedicated rich rendering in PkChatbotStepToolDetail\nconst RICH_DETAIL_TOOL_TYPES = new Set([\n 'tool-searchInKnowledgeBase',\n 'tool-retrieveRevisedAnswers',\n 'tool-expandChunkContext',\n 'tool-readDocumentFile',\n 'tool-getWeather',\n 'tool-geocode',\n 'tool-recallUserMemory',\n 'tool-saveUserMemory',\n ...WEB_SEARCH_TOOL_TYPES,\n])\n\nexport function hasRichToolDetail(\n part?: UIMessage['parts'][number] | null,\n): boolean {\n return isToolPart(part) && RICH_DETAIL_TOOL_TYPES.has(part.type)\n}\n\nconst asRecord = (value: unknown): Record<string, unknown> | undefined =>\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined\n\nconst pickString = (\n record: Record<string, unknown> | undefined,\n ...keys: string[]\n): string | undefined => {\n for (const key of keys) {\n const value = record?.[key]\n if (typeof value === 'string' && value.trim()) {\n return value\n }\n }\n return undefined\n}\n\n/**\n * Returns a short inline summary for a tool part (search queries, location,\n * document name, ...) to be shown next to the step label without expanding\n * the step body.\n */\nexport function getToolPartSummary(\n part?: UIMessage['parts'][number] | null,\n): string | undefined {\n if (!isToolPart(part)) {\n return undefined\n }\n const input = asRecord('input' in part ? part.input : undefined)\n const output = asRecord('output' in part ? part.output : undefined)\n if (\n part.type === 'tool-searchInKnowledgeBase' ||\n WEB_SEARCH_TOOL_TYPES.includes(part.type)\n ) {\n const queries = input?.queries\n if (Array.isArray(queries)) {\n const valid = queries.filter(\n (query): query is string =>\n typeof query === 'string' && Boolean(query.trim()),\n )\n return valid.length ? valid.join(' · ') : undefined\n }\n return pickString(input, 'query', 'objective')\n }\n if (part.type === 'tool-retrieveRevisedAnswers') {\n return pickString(input, 'query')\n }\n if (part.type === 'tool-getWeather') {\n return (\n pickString(output, 'location') ?? pickString(input, 'locationName')\n )\n }\n if (part.type === 'tool-geocode') {\n return pickString(input, 'locationName')\n }\n if (part.type === 'tool-expandChunkContext') {\n return pickString(output, 'documentName')\n }\n if (part.type === 'tool-readDocumentFile') {\n return pickString(output, 'name')\n }\n if (part.type === 'tool-readSpreadsheet') {\n const sheet = pickString(input, 'sheet')\n const range = pickString(input, 'range')\n return sheet && range ? `${sheet}!${range}` : sheet\n }\n if (part.type === 'tool-editSpreadsheet') {\n return pickString(output, 'filename')\n }\n if (part.type === 'tool-querySpreadsheet') {\n // The file when the step asked for the schema; a query has no name.\n return pickString(output, 'file')\n }\n if (part.type === 'tool-recallUserMemory') {\n return pickString(input, 'query')\n }\n if (part.type === 'tool-saveUserMemory') {\n return pickString(input, 'content', 'query')\n }\n return undefined\n}\n\n// Get part icon\nexport function getPartIcon(\n part?: UIMessage['parts'][number] | null,\n): string | undefined {\n if (isToolPart(part)) {\n if (part.type.includes('tool-subagent')) {\n return 'ri:robot-2-line'\n }\n if (part.type === 'tool-runWorker') {\n return 'ri:flow-chart'\n }\n if (part.type === 'tool-scheduleWakeup') {\n return 'ri:alarm-line'\n }\n if (part.type === 'tool-fetchTeamsChannelHistory') {\n return 'ri:chat-history-line'\n }\n if (part.type === 'tool-readEarlierMessages') {\n return 'ri:history-line'\n }\n if (part.type === 'tool-enableTools') {\n return 'ri:toggle-line'\n }\n if (part.type.includes('tool-mcp')) {\n return 'mcp'\n }\n if (part.type === 'tool-retrieveRevisedAnswers') {\n return 'ri:file-edit-line'\n }\n if (part.type === 'tool-searchInKnowledgeBase') {\n return 'ri:search-line'\n }\n if (part.type === 'tool-expandChunkContext') {\n return 'ri:file-search-line'\n }\n if (part.type === 'tool-readDocumentFile') {\n return 'ri:file-text-line'\n }\n if (part.type === 'tool-readSpreadsheet') {\n return 'ri:table-line'\n }\n if (part.type === 'tool-editSpreadsheet') {\n return 'ri:file-excel-2-line'\n }\n if (part.type === 'tool-querySpreadsheet') {\n return 'ri:database-2-line'\n }\n if (part.type === 'tool-geocode') {\n return 'ri:map-2-line'\n }\n if (part.type === 'tool-getWeather') {\n return 'ri:sun-cloudy-line'\n }\n if (part.type === 'tool-recallUserMemory') {\n return 'ri:brain-line'\n }\n if (part.type === 'tool-saveUserMemory') {\n return 'ri:save-3-line'\n }\n if (part.type === 'tool-showWeather') {\n return 'ri:sun-line'\n }\n if (part.type === 'tool-showDiagram') {\n return 'ri:flow-chart'\n }\n if (part.type === 'tool-showSources') {\n return 'ri:book-2-line'\n }\n if (part.type === 'tool-showForm') {\n return 'ri:survey-line'\n }\n if (part.type === 'tool-showMultipleChoice') {\n return 'ri:checkbox-multiple-line'\n }\n if (part.type === 'tool-showArtifact') {\n return 'ri:file-code-line'\n }\n if (part.type === 'tool-showEmail') {\n return 'ri:mail-line'\n }\n if (part.type === 'tool-showMessage') {\n return 'ri:chat-1-line'\n }\n if (part.type === 'tool-showWebPages') {\n return 'ri:pages-line'\n }\n if (part.type === 'tool-showProductList') {\n return 'ri:shopping-bag-line'\n }\n if (part.type === 'tool-showContactForm') {\n return 'ri:send-plane-2-line'\n }\n if (part.type === 'tool-showCalendarEvent') {\n return 'ri:calendar-event-line'\n }\n if (part.type === 'tool-showComparison') {\n return 'ri:scales-line'\n }\n if (part.type === 'tool-showLocation') {\n return 'ri:map-pin-line'\n }\n if (part.type === 'tool-showQrCode') {\n return 'ri:qr-code-line'\n }\n if (part.type === 'tool-showImageGallery') {\n return 'ri:image-line'\n }\n if (part.type === 'tool-showVideo') {\n return 'ri:film-line'\n }\n if (part.type === 'tool-showSuggestedReply') {\n return 'ri:corner-down-right-line'\n }\n if (part.type === 'tool-requestGeolocation') {\n return 'ri:map-pin-user-line'\n }\n if (part.type === 'tool-disconnectOAuthConnection') {\n return 'ri:link-unlink'\n }\n if (part.type === 'tool-requestAccountLink') {\n return 'ri:link'\n }\n if (part.type === 'tool-unlinkAccount') {\n return 'ri:link-unlink'\n }\n if (\n part.type === 'tool-perplexity_search' ||\n part.type === 'tool-parallel_search' ||\n part.type === 'tool-web_search' ||\n part.type === 'tool-google_search'\n ) {\n return 'ri:global-line'\n }\n return 'ri:tools-line'\n }\n if (isReasoningPart(part)) {\n return 'ri:lightbulb-line'\n }\n if (isTextPart(part)) {\n return 'ri:double-quotes-r'\n }\n return undefined\n}\n\n/** What `toolLabel` and `getPartTypeLabel` need from vue-i18n. */\nexport interface LabelTranslator {\n t: (key: string) => string\n te: (key: string) => boolean\n}\n\nconst TOOL_KEY_PREFIXES = [\n API_TOOL_PREFIX,\n MCP_TOOL_PREFIX,\n SUBAGENT_TOOL_PREFIX,\n] as const\n\n/**\n * The name a person reads for a tool of the turn: the translated label of a\n * built-in tool, otherwise the name the agent configured, without its\n * tool-set prefix and in words (`api-festivita_nazionali` reads \"Festivita\n * nazionali\"). Never the raw key, and never an i18n key with no translation,\n * which vue-i18n would print as the key itself.\n */\nexport function toolLabel(name: string, { t, te }: LabelTranslator): string {\n if (te(`agent.tool.${name}`)) {\n return t(`agent.tool.${name}`)\n }\n const prefix = TOOL_KEY_PREFIXES.find((p) => name.startsWith(p))\n const bare = prefix ? name.slice(prefix.length) : name\n return capitalizeFirstLetter(fromAnyCase(bare).trim().toLowerCase())\n}\n\n/**\n * The kinds of message part a person can meet, each with its label. Written\n * as literal keys so the widget's library build, which keeps only the keys it\n * finds written out (apps/web-component/vite-plugins/chatLocales.ts), ships\n * them too.\n */\nconst PART_TYPE_LABELS: Record<string, (t: LabelTranslator['t']) => string> = {\n custom: (t) => t('messagePart.type.custom'),\n data: (t) => t('messagePart.type.data'),\n file: (t) => t('messagePart.type.file'),\n reasoning: (t) => t('messagePart.type.reasoning'),\n 'source-document': (t) => t('messagePart.type.sourceDocument'),\n 'source-url': (t) => t('messagePart.type.sourceUrl'),\n 'step-start': (t) => t('messagePart.type.stepStart'),\n text: (t) => t('messagePart.type.text'),\n}\n\n/**\n * The label of a message part in the message details: the tool for a tool\n * call, the translated kind otherwise (text, reasoning, provider data...),\n * and the kind in words for one the catalog does not know yet.\n */\nexport function getPartTypeLabel(\n part: UIMessage['parts'][number],\n translator: LabelTranslator,\n): string {\n if (isToolPart(part)) {\n return toolLabel(getToolPartName(part), translator)\n }\n if (part.type === 'dynamic-tool') {\n return toolLabel(part.toolName, translator)\n }\n const kind = part.type.startsWith('data-') ? 'data' : part.type\n const label = PART_TYPE_LABELS[kind]\n return label\n ? label(translator.t)\n : capitalizeFirstLetter(fromAnyCase(part.type))\n}\n\n/**\n * The commercial name of a provider the gateway routed a turn through, from\n * its slug (`anthropic`, `bedrock`): proper nouns, so no translation. A slug\n * not listed here shows with a capital, never as the bare id.\n */\nconst PROVIDER_NAMES: Record<string, string> = {\n alibaba: 'Alibaba Cloud',\n anthropic: 'Anthropic',\n azure: 'Microsoft Azure',\n baseten: 'Baseten',\n bedrock: 'Amazon Bedrock',\n cerebras: 'Cerebras',\n cohere: 'Cohere',\n deepinfra: 'DeepInfra',\n deepseek: 'DeepSeek',\n fireworks: 'Fireworks AI',\n google: 'Google',\n groq: 'Groq',\n mistral: 'Mistral AI',\n moonshotai: 'Moonshot AI',\n openai: 'OpenAI',\n perplexity: 'Perplexity',\n togetherai: 'Together AI',\n vertex: 'Google Vertex AI',\n xai: 'xAI',\n zai: 'Z.ai',\n}\n\n/** The name of a provider slug, see `PROVIDER_NAMES`. */\nexport function providerLabel(slug: string): string {\n return (\n PROVIDER_NAMES[slug.toLowerCase()] ??\n capitalizeFirstLetter(fromAnyCase(slug))\n )\n}\n\n/**\n * The conversation summary in the reader's language. The analysis asks the\n * model for four bold labels (`SUMMARY_FORMAT` in\n * apps/backend/src/prompts/analysis.prompt.ts) and the model copies them in\n * English whatever the conversation's language, so every stored summary\n * holds them: they are translated where a summary is read. An empty summary\n * comes back as it is, so a `??` fallback after it still works.\n */\nexport function localizeSummaryLabels<T extends string | null | undefined>(\n summary: T,\n t: (key: string) => string,\n): T {\n if (!summary) {\n return summary\n }\n const labels: Record<string, string> = {\n Intent: t('conversationSummary.intent'),\n 'Topics covered': t('conversationSummary.topicsCovered'),\n 'Key facts': t('conversationSummary.keyFacts'),\n 'Open questions': t('conversationSummary.openQuestions'),\n }\n return summary.replace(\n /\\*\\*(Intent|Topics covered|Key facts|Open questions)(:?)\\*\\*/g,\n (_, label: string, colon: string) => `**${labels[label]}${colon}**`,\n ) as T\n}\n\n// Get part label\nexport function getToolPartLabel(\n $t: (key: string) => string,\n part?: UIMessage['parts'][number] | null,\n): string | undefined {\n if (isToolPart(part)) {\n if (part.type.includes('tool-subagent')) {\n return $t(`messagePart.runSubagent`)\n }\n if (part.type === 'tool-runWorker') {\n return $t(`messagePart.runWorker`)\n }\n if (part.type === 'tool-scheduleWakeup') {\n return $t(`messagePart.scheduleWakeup`)\n }\n if (part.type === 'tool-fetchTeamsChannelHistory') {\n return $t(`messagePart.fetchTeamsChannelHistory`)\n }\n if (part.type === 'tool-readEarlierMessages') {\n return $t(`messagePart.readEarlierMessages`)\n }\n if (part.type === 'tool-enableTools') {\n return $t(`messagePart.enableTools`)\n }\n if (part.type === 'tool-retrieveRevisedAnswers') {\n return $t(`messagePart.revisedAnswers`)\n }\n if (part.type === 'tool-searchInKnowledgeBase') {\n return $t(`messagePart.searchingDocuments`)\n }\n if (part.type === 'tool-expandChunkContext') {\n return $t(`messagePart.expandChunkContext`)\n }\n if (part.type === 'tool-readDocumentFile') {\n return $t(`messagePart.readDocumentFile`)\n }\n if (part.type === 'tool-readSpreadsheet') {\n return $t(`messagePart.readSpreadsheet`)\n }\n if (part.type === 'tool-editSpreadsheet') {\n return $t(`messagePart.editSpreadsheet`)\n }\n if (part.type === 'tool-querySpreadsheet') {\n return $t(`messagePart.querySpreadsheet`)\n }\n if (part.type === 'tool-geocode') {\n return $t(`messagePart.geocode`)\n }\n if (part.type === 'tool-getWeather') {\n return $t(`messagePart.getWeather`)\n }\n if (part.type === 'tool-recallUserMemory') {\n return $t(`messagePart.recallUserMemory`)\n }\n if (part.type === 'tool-saveUserMemory') {\n return $t(`messagePart.saveUserMemory`)\n }\n if (part.type === 'tool-showWeather') {\n return $t(`messagePart.showWeather`)\n }\n if (part.type === 'tool-showForm') {\n return $t(`messagePart.showForm`)\n }\n if (part.type === 'tool-showDiagram') {\n return $t(`messagePart.showDiagram`)\n }\n if (part.type === 'tool-showSources') {\n return $t(`messagePart.showSources`)\n }\n if (part.type === 'tool-showMultipleChoice') {\n return $t(`messagePart.showMultipleChoice`)\n }\n if (part.type === 'tool-showArtifact') {\n return $t(`messagePart.showArtifact`)\n }\n if (part.type === 'tool-showEmail') {\n return $t(`messagePart.showEmail`)\n }\n if (part.type === 'tool-showMessage') {\n return $t(`messagePart.showMessage`)\n }\n if (part.type === 'tool-showWebPages') {\n return $t(`messagePart.showWebPages`)\n }\n if (part.type === 'tool-showProducts') {\n return $t(`messagePart.showProducts`)\n }\n if (part.type === 'tool-showContactForm') {\n return $t(`messagePart.showContactForm`)\n }\n if (part.type === 'tool-showCalendarEvent') {\n return $t(`messagePart.showCalendarEvent`)\n }\n if (part.type === 'tool-showComparison') {\n return $t(`messagePart.showComparison`)\n }\n if (part.type === 'tool-showLocation') {\n return $t(`messagePart.showLocation`)\n }\n if (part.type === 'tool-showQrCode') {\n return $t(`messagePart.showQrCode`)\n }\n if (part.type === 'tool-showImageGallery') {\n return $t(`messagePart.showImageGallery`)\n }\n if (part.type === 'tool-showVideo') {\n return $t(`messagePart.showVideo`)\n }\n if (part.type === 'tool-showSuggestedReply') {\n return $t(`messagePart.showSuggestedReply`)\n }\n if (part.type === 'tool-requestGeolocation') {\n return $t(`messagePart.requestGeolocation`)\n }\n if (part.type === 'tool-disconnectOAuthConnection') {\n return $t(`messagePart.disconnectOAuthConnection`)\n }\n if (part.type === 'tool-requestAccountLink') {\n return $t(`messagePart.requestAccountLink`)\n }\n if (part.type === 'tool-unlinkAccount') {\n return $t(`messagePart.unlinkAccount`)\n }\n if (WEB_SEARCH_TOOL_TYPES.includes(part.type)) {\n return $t(`messagePart.webSearch`)\n }\n return $t(`messagePart.tool`)\n }\n if (isReasoningPart(part)) {\n return $t(`messagePart.reasoning`)\n }\n return $t(`messagePart.streaming`)\n}\n","var En=Object.defineProperty,Sn=Object.defineProperties;var On=Object.getOwnPropertyDescriptors;var w=Object.getOwnPropertySymbols;var Tn=Object.prototype.hasOwnProperty,Mn=Object.prototype.propertyIsEnumerable;var F=(n,e,r)=>e in n?En(n,e,{enumerable:true,configurable:true,writable:true,value:r}):n[e]=r,L=(n,e)=>{for(var r in e||(e={}))Tn.call(e,r)&&F(n,r,e[r]);if(w)for(var r of w(e))Mn.call(e,r)&&F(n,r,e[r]);return n},P=(n,e)=>Sn(n,On(e));var c={PROSE:0,FENCE_MARKER:1,FENCE_INFO:2,FENCE_BODY:3,CODE_SPAN:4,CODE_SPAN_OPEN:5},Cn=/^(`{3,}|~{3,})(.*)$/,Ln=n=>n!==void 0&&n>=\"0\"&&n<=\"9\",Pn=(n,e)=>{let r=e;if(n[r]===\"-\"||n[r]===\"*\"||n[r]===\"+\")r+=1;else {for(;Ln(n[r])&&r-e<9;)r+=1;if(r===e||n[r]!==\".\"&&n[r]!==\")\")return -1;r+=1;}return n[r]===\" \"?r+1:-1},_n=(n,e,r)=>{let t=0,i=e,o=false,s=e;for(;;){for(;s<r&&n[s]===\" \";)s+=1;if(n[s]===\">\"){t+=1,s+=n[s+1]===\" \"?2:1,i=s,o=false;continue}let l=s<r?Pn(n,s):-1;if(l===-1)return {contentStart:s,listIndent:o?s-i:0,quoteDepth:t};s=l,o=true;}},Rn=(n,e,r,t)=>{let i=e;for(let o=0;o<t;o+=1){for(;i<r&&n[i]===\" \";)i+=1;if(n[i]!==\">\")return -1;i+=1,n[i]===\" \"&&(i+=1);}return i},Nn=(n,e,r,t,i)=>{let o=e+t;n.fill(c.FENCE_MARKER,o,o+i),n.fill(c.FENCE_INFO,o+i,Math.min(r+1,n.length));},yn=(n,e,r,t)=>{let i=e;for(;i<r&&n[i]===\" \";)i+=1;let o=0;for(;i<r&&n[i]===t.char;)i+=1,o+=1;if(o<t.length)return false;for(;i<r;){if(n[i]!==\" \"&&n[i]!==\"\t\"&&n[i]!==\"\\r\")return false;i+=1;}return true},$n=(n,e,r,t)=>{let i=t>r&&n[t-1]===\"\\r\"?t-1:t,o=_n(n,r,i),s=n.slice(o.contentStart,i).match(Cn);if(!s)return null;let[,l,a]=s,u=l[0];return u===\"`\"&&a.includes(\"`\")?null:(Nn(e,r,t,o.contentStart-r,l.length),{char:u,length:l.length,listIndent:o.listIndent,quoteDepth:o.quoteDepth})},Un=(n,e,r,t)=>{let i=Rn(n,e,r,t.quoteDepth);if(i===-1||t.listIndent===0)return i;let o=i;for(;o<r&&n[o]===\" \";)o+=1;return o===r||n[o]===\"\\r\"&&o+1===r||o-i>=t.listIndent?i:-1},Dn=(n,e)=>{let r=n.length,t=null,i=0;for(;i<r;){let o=n.indexOf(`\n`,i);o===-1&&(o=r);let s=t?Un(n,i,o,t):-1;t&&s===-1&&(t=null),t?yn(n,s,o,t)?(e.fill(c.FENCE_MARKER,i,o),t=null):e.fill(c.FENCE_BODY,i,Math.min(o+1,r)):t=$n(n,e,i,o),i=o+1;}return t},W=(n,e)=>{let r=e+1;for(;r<n.length&&n[r]===\"`\";)r+=1;return r},Bn=(n,e)=>{let r=e+1;for(;r<n.length&&(n[r]===\" \"||n[r]===\"\t\"||n[r]===\"\\r\");)r+=1;return r<n.length&&n[r]===`\n`},wn=(n,e,r)=>{let t=r;for(;;){let i=n.indexOf(\"`\",t);if(i===-1)return -1;let o=i>t&&n[i-1]===\"\\\\\"&&e[i-1]===c.PROSE;if(e[i]===c.PROSE&&!o)return i;t=i+1;}},Fn=(n,e)=>{let r=n.length,t=-1,i=0,o=0;for(;o<r;){if(t<0){if(o=wn(n,e,o),o===-1)break;let l=W(n,o);t=o,i=l-o,o=l;continue}if(e[o]!==c.PROSE){e.fill(c.CODE_SPAN_OPEN,t,o),t=-1,o+=1;continue}if(n[o]===`\n`&&Bn(n,o)){t=-1,o+=1;continue}if(n[o]!==\"`\"){o+=1;continue}let s=W(n,o);s-o===i&&(e.fill(c.CODE_SPAN,t,s),t=-1),o=s;}return t>=0?(e.fill(c.CODE_SPAN_OPEN,t,r),{start:t,runLength:i}):null},Wn=n=>{let e=new Uint8Array(n.length),r=Dn(n,e),t=Fn(n,e);return {text:n,regions:e,openFence:r,openSpan:t,mathMask:null,linkUrlMask:null,htmlTagMask:null}},_=null,T=null,g=n=>{if(T!==null&&n===_)return T;let e=Wn(n);return _=n,T=e,e},K=()=>{_=null,T=null;},H=(n,e)=>e>=n.regions.length?n.openFence!==null||n.openSpan!==null:e<0?false:n.regions[e]!==c.PROSE,G=(n,e)=>{if(e>=n.regions.length)return n.openFence!==null;if(e<0)return false;let r=n.regions[e];return r===c.FENCE_MARKER||r===c.FENCE_INFO||r===c.FENCE_BODY},X=(n,e)=>n.regions[e]===c.CODE_SPAN,I=(n,e)=>{let r=g(n),t=e+e,i=0;for(let o=n.indexOf(t);o!==-1;o=n.indexOf(t,o))r.regions[o]===c.PROSE?(i+=1,o+=2):o+=1;return i},R=new Uint8Array(0),Kn=n=>n===\"inlineLatex\"||n===\"blockLatex\",Hn=(n,e)=>e===\"[\"&&n===\"none\"?\"blockLatex\":e===\"]\"&&n===\"blockLatex\"?\"none\":e===\"(\"&&n===\"none\"?\"inlineLatex\":e===\")\"&&n===\"inlineLatex\"?\"none\":null,Gn=(n,e)=>e?n===\"blockDollar\"?\"none\":\"blockDollar\":n===\"blockDollar\"?n:n===\"inlineDollar\"?\"none\":\"inlineDollar\",Xn=n=>n.includes(\"$\")||n.includes(\"\\\\(\")||n.includes(\"\\\\[\"),Yn=(n,e,r)=>{let t=n[e+1];if(n[e]===\"\\\\\"){if(t===\"$\")return {context:r,length:2};let i=Hn(r,t);return i===null?null:{context:i,length:2}}if(n[e]===\"$\"&&!Kn(r)){let i=t===\"$\";return {context:Gn(r,i),length:i?2:1}}return null},qn=n=>{let{text:e,regions:r}=n,t=e.length,i=new Uint8Array(t),o=\"none\",s=0;for(;s<t;){i[s]=o===\"none\"?0:1;let l=r[s]===c.PROSE?Yn(e,s,o):null;if(l===null){s+=1;continue}o=l.context,l.length===2&&(i[s+1]=o===\"none\"?0:1),s+=l.length;}return i},k=(n,e)=>e<0||e>=n.text.length?false:(n.mathMask===null&&(n.mathMask=Xn(n.text)?qn(n):R),n.mathMask[e]===1),vn=(n,e,r,t)=>{let{text:i,regions:o}=n,s=new Uint8Array(r-e),l=0;for(let u=r-1;u>=e;u-=1)i[u]===\")\"&&o[u]===c.PROSE&&(l=1),s[u-e]=l;let a=false;for(let u=e;u<r;u+=1)a&&s[u-e]===1&&(t[u]=1),o[u]===c.PROSE&&(i[u]===\")\"?a=false:i[u]===\"(\"&&(a=u>0&&i[u-1]===\"]\"));},zn=n=>{let{text:e}=n,r=e.length,t=new Uint8Array(r),i=0;for(;i<r;){let o=e.indexOf(`\n`,i);o===-1&&(o=r),vn(n,i,o,t),i=o+1;}return t},A=(n,e)=>e<0||e>=n.text.length?false:(n.linkUrlMask===null&&(n.linkUrlMask=n.text.includes(\"](\")?zn(n):R),n.linkUrlMask[e]===1),Qn=n=>{let{text:e,regions:r}=n,t=e.length,i=new Uint8Array(t),o=false;for(let s=0;s<t;s+=1){if(e[s]===`\n`){o=false;continue}if(i[s]=o?1:0,r[s]===c.PROSE){if(e[s]===\">\")o=false;else if(e[s]===\"<\"){let l=e[s+1];o=l!==void 0&&(l>=\"a\"&&l<=\"z\"||l>=\"A\"&&l<=\"Z\"||l===\"/\");}}}return i},M=(n,e)=>e<0||e>=n.text.length?false:(n.htmlTagMask===null&&(n.htmlTagMask=n.text.includes(\"<\")?Qn(n):R),n.htmlTagMask[e]===1);var f=(n,e)=>H(g(n),e),h=(n,e)=>X(g(n),e);var Zn=/^(\\s*(?:[-*+]|\\d+[.)]) +)>(=?\\s*[$]?\\d)/gm,Y=n=>!n||typeof n!=\"string\"||!n.includes(\">\")?n:n.replace(Zn,(e,r,t,i)=>f(n,i)?e:`${r}\\\\>${t}`);var p=(n,{delimiter:e,markerLength:r,regex:t})=>{let i=n.lastIndexOf(e,n.length-2),o=i===-1?n.length-1:i;return n.slice(Math.max(0,o-r+1)).match(t)},q={delimiter:\"*\",markerLength:2,regex:/(\\*\\*)([^*]*\\*?)$/},v={delimiter:\"_\",markerLength:2,regex:/(__)([^_]*?)$/},z={delimiter:\"*\",markerLength:3,regex:/(\\*\\*\\*)([^*]*?)$/},Q={delimiter:\"*\",markerLength:1,regex:/(\\*)([^*]*?)$/},Z={delimiter:\"_\",markerLength:1,regex:/(_)([^_]*?)$/},j={delimiter:\"~\",markerLength:2,regex:/(~~)([^~]*?)$/},J={delimiter:\"_\",markerLength:2,regex:/(__)([^_]+)_$/},V={delimiter:\"~\",markerLength:2,regex:/(~~)([^~]+)~$/},b=/^[\\s_~*`]*$/,N=/^[\\s]*[-*+][\\s]+$/,x=/[\\p{L}\\p{N}_]/u,nn=/^\\*{4,}$/;var m=n=>{if(!n)return false;let e=n.charCodeAt(0);return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===95?true:x.test(n)},jn=(n,e)=>G(g(n),e),en=(n,e)=>{let r=1;for(let t=e-1;t>=0;t-=1)if(n[t]===\"]\")r+=1;else if(n[t]===\"[\"&&(r-=1,r===0))return t;return -1},y=(n,e)=>{let r=1;for(let t=e+1;t<n.length;t+=1)if(n[t]===\"[\")r+=1;else if(n[t]===\"]\"&&(r-=1,r===0))return t;return -1},$=(n,e)=>k(g(n),e),Jn=(n,e)=>A(g(n),e);var O=(n,e,r)=>{let t=0;for(let a=e-1;a>=0;a-=1)if(n[a]===`\n`){t=a+1;break}let i=n.length;for(let a=e;a<n.length;a+=1)if(n[a]===`\n`){i=a;break}let o=n.substring(t,i),s=0,l=false;for(let a of o)if(a===r)s+=1;else if(a!==\" \"&&a!==\"\t\"){l=true;break}return s>=3&&!l};var Vn=(n,e,r,t)=>r===\"\\\\\"||k(n,e)?true:r!==\"*\"&&t===\"*\"?(e<n.text.length-2?n.text[e+2]:\"\")!==\"*\":r===\"*\"||(!r||r===\" \"||r===\"\t\"||r===`\n`)&&(!t||t===\" \"||t===\"\t\"||t===`\n`),C=n=>n===\" \"||n===\"\t\"||n===`\n`,xn=(n,e)=>!!(n&&e&&m(n)&&m(e)),ne=(n,e,r,t)=>{let i=xn(n,e),o=!!e&&!C(e),s=!!n&&!C(n);return i&&r%2===0&&!t?{count:false}:s&&r%2===1||o?{count:true,inWordAsteriskChain:i}:{count:false}},on=n=>{let e=g(n),r=0,t=false,i=n.length;for(let o=0;o<i;o+=1){if(n[o]!==\"*\"||e.regions[o]!==c.PROSE){m(n[o])||(t=false);continue}let s=o>0?n[o-1]:\"\",l=o<i-1?n[o+1]:\"\";if(Vn(e,o,s,l))continue;let a=ne(s,l,r,t);a.count&&(r+=1,t=a.inWordAsteriskChain);}return r},ee=(n,e,r,t)=>!!(r===\"\\\\\"||k(n,e)||A(n,e)||M(n,e)||r===\"_\"||t===\"_\"||r&&t&&m(r)&&m(t)),re=n=>{let e=g(n),r=0,t=n.length;for(let i=0;i<t;i+=1){if(n[i]!==\"_\"||e.regions[i]!==c.PROSE)continue;let o=i>0?n[i-1]:\"\",s=i<t-1?n[i+1]:\"\";ee(e,i,o,s)||(r+=1);}return r},te=n=>{let e=g(n),r=0,t=0;for(let i=0;i<n.length;i+=1)n[i]===\"*\"&&e.regions[i]===c.PROSE?t+=1:(t>=3&&(r+=Math.floor(t/3)),t=0);return t>=3&&(r+=Math.floor(t/3)),r},U=n=>I(n,\"*\"),rn=n=>n===\"\"||n===\" \"||n===\"\t\"||n===`\n`,ie=(n,e,r,t,i)=>{if(!(rn(r)&&rn(t)))return false;if(e>i.lineEnd){let o=n.indexOf(`\n`,e);i.lineEnd=o===-1?n.length:o,i.result=O(n,e,\"_\");}return i.result},oe=(n,e,r,t)=>{let i=n.text,o=e,s=false;o>0&&i[o-1]===\"\\\\\"&&(o+=1,s=true);let l=r-o;if(l<2)return false;let a=o>0?i[o-1]:\"\",u=s?\"\\\\\":a,S=r<i.length?i[r]:\"\";return m(u)&&m(S)||ie(i,o,u,S,t)||k(n,o)||A(n,o)||M(n,o)?false:Math.floor(l/2)%2===1},tn=n=>{let e=g(n),r=n.length,t={lineEnd:-1,result:false},i=false,o=0;for(;o<r;){if(n[o]!==\"_\"||e.regions[o]!==c.PROSE){o+=1;continue}let s=o,l=o+1;for(;l<r&&n[l]===\"_\"&&e.regions[l]===c.PROSE;)l+=1;o=l,oe(e,s,l,t)&&(i=!i);}return i},se=(n,e,r)=>{if(!e||b.test(e))return true;let i=n.substring(0,r).lastIndexOf(`\n`),o=i===-1?0:i+1,s=n.substring(o,r);return N.test(s)&&e.includes(`\n`)?true:O(n,r,\"*\")},sn=n=>{let e=p(n,q);if(!e)return n;let r=e[2],t=n.lastIndexOf(e[1]);return f(n,t)||h(n,t)||se(n,r,t)?n:U(n)%2===1?r.endsWith(\"*\")?`${n}*`:`${n}**`:n},le=(n,e,r)=>{if(!e||b.test(e))return true;let i=n.substring(0,r).lastIndexOf(`\n`),o=i===-1?0:i+1,s=n.substring(o,r);return N.test(s)&&e.includes(`\n`)?true:O(n,r,\"_\")},ln=n=>{let e=p(n,v);if(!e){let i=p(n,J);if(i){let o=n.lastIndexOf(i[1]);if(!(f(n,o)||h(n,o))&&tn(n))return `${n}_`}return n}let r=e[2],t=n.lastIndexOf(e[1]);return f(n,t)||h(n,t)||le(n,r,t)?n:tn(n)?`${n}__`:n},ae=(n,e)=>{let{text:r}=n;return r[e]===\"*\"&&n.regions[e]===c.PROSE&&r[e-1]!==\"*\"&&r[e+1]!==\"*\"&&r[e-1]!==\"\\\\\"&&!k(n,e)},ce=n=>{let e=g(n);for(let r=n.indexOf(\"*\");r!==-1;r=n.indexOf(\"*\",r+1)){if(!ae(e,r))continue;let t=r>0?n[r-1]:\"\",i=r<n.length-1?n[r+1]:\"\",o=!t||C(t),s=!i||C(i);if(!(o&&s)&&!(t&&i&&m(t)&&m(i))&&!s)return r}return -1},an=n=>{if(!p(n,Q))return n;let r=ce(n);if(r===-1||f(n,r)||h(n,r))return n;let t=n.substring(r+1);return !t||b.test(t)?n:on(n)%2===1?`${n}*`:n},cn=n=>{let e=g(n);for(let r=n.indexOf(\"_\");r!==-1;r=n.indexOf(\"_\",r+1))if(e.regions[r]===c.PROSE&&n[r-1]!==\"_\"&&n[r+1]!==\"_\"&&n[r-1]!==\"\\\\\"&&!k(e,r)&&!A(e,r)){let t=r>0?n[r-1]:\"\",i=r<n.length-1?n[r+1]:\"\";if(t&&i&&m(t)&&m(i))continue;return r}return -1},ue=n=>{let e=n.length;for(;e>0&&n[e-1]===`\n`;)e-=1;if(e<n.length){let r=n.slice(0,e),t=n.slice(e);return `${r}_${t}`}return `${n}_`},fe=n=>{if(!n.endsWith(\"**\"))return null;let e=n.slice(0,-2);if(U(e)%2!==1)return null;let t=e.indexOf(\"**\"),i=cn(e);return t!==-1&&i!==-1&&t<i?`${e}_**`:null},un=n=>{if(!p(n,Z))return n;let r=cn(n);if(r===-1)return n;let t=n.substring(r+1);if(!t||b.test(t)||f(n,r)||h(n,r))return n;if(re(n)%2===1){let o=fe(n);return o!==null?o:ue(n)}return n},ge=n=>{let e=U(n),r=on(n);return e%2===0&&r%2===0},de=(n,e,r)=>!e||b.test(e)||f(n,r)||h(n,r)?true:O(n,r,\"*\"),fn=n=>{if(nn.test(n))return n;let e=p(n,z);if(!e)return n;let r=e[2],t=n.lastIndexOf(e[1]);return de(n,r,t)?n:te(n)%2===1?ge(n)?n:`${n}***`:n};var me=/<[a-zA-Z/][^>]*$/,he=/[a-zA-Z/]/,pe=n=>n.includes(\"$\")||n.includes(\"\\\\(\")||n.includes(\"\\\\[\"),be=(n,e)=>{let r=n[e+1];return r!==void 0&&he.test(r)},gn=n=>{let e=n.match(me);if(!e||e.index===void 0)return n;let r=pe(n);for(let t=e.index;t<n.length;t+=1)if(!(n[t]!==\"<\"||!be(n,t))&&!f(n,t)&&!(r&&$(n,t)))return n.substring(0,t).trimEnd();return n};var dn=n=>{let e=g(n);if(e.openFence)return n;let r=e.openSpan;if(!r)return n;let t=n.slice(r.start+r.runLength);if(!t||b.test(t))return n;let i=0,o=n.length-1;for(;o>=0&&n[o]===\"`\";)i+=1,o-=1;return i>=r.runLength?n:n+\"`\".repeat(r.runLength-i)};var ke=n=>I(n,\"$\"),Ie=n=>{let e=g(n),r=0;for(let t=0;t<n.length;t+=1){if(n[t]===\"\\\\\"){t+=1;continue}e.regions[t]===c.PROSE&&n[t]===\"$\"&&(t+1<n.length&&n[t+1]===\"$\"?t+=1:r+=1);}return r},Ae=n=>{if(n.endsWith(\"$\")&&!n.endsWith(\"$$\"))return `${n}$`;let e=n.indexOf(\"$$\");return e!==-1&&n.indexOf(`\n`,e)!==-1&&!n.endsWith(`\n`)?`${n}\n$$`:`${n}$$`},mn=n=>ke(n)%2===0?n:Ae(n),hn=n=>Ie(n)%2===1?`${n}$`:n;var E=\"streamdown:incomplete-image\",Ee=(n,e,r)=>{if(n.substring(e+2).includes(\")\"))return null;let i=en(n,e);if(i===-1||f(n,i))return null;let o=i>0&&n[i-1]===\"!\",s=o?i-1:i,l=n.substring(0,s),a=n.substring(i+1,e);return o?`${l}`:r===\"text-only\"?`${l}${a}`:`${l}[${a}](streamdown:incomplete-link)`},pn=(n,e)=>{for(let r=0;r<e;r++)if(n[r]===\"[\"&&!f(n,r)){if(r>0&&n[r-1]===\"!\")continue;let t=y(n,r);if(t===-1)return r;if(t+1<n.length&&n[t+1]===\"(\"){let i=n.indexOf(\")\",t+2);i!==-1&&(r=i);}}return e},Se=(n,e,r)=>{let t=e>0&&n[e-1]===\"!\",i=t?e-1:e;if(!n.substring(e+1).includes(\"]\")){let l=n.substring(0,i);if(t){let a=n.substring(e+1);return `${l}`}if(r===\"text-only\"){let a=pn(n,e);return n.substring(0,a)+n.substring(a+1)}return `${n}](streamdown:incomplete-link)`}if(y(n,e)===-1){let l=n.substring(0,i);if(t){let a=n.substring(e+1);return `${l}`}if(r===\"text-only\"){let a=pn(n,e);return n.substring(0,a)+n.substring(a+1)}return `${n}](streamdown:incomplete-link)`}return null},Oe=(n,e)=>{let r=n.lastIndexOf(\"](\");if(r!==-1&&!f(n,r)){let t=Ee(n,r,e);if(t!==null)return t}for(let t=n.lastIndexOf(\"[\");t!==-1;t=t===0?-1:n.lastIndexOf(\"[\",t-1))if(!f(n,t)){let i=Se(n,t,e);if(i!==null)return i}return n},Te=32,D=(n,e=\"protocol\")=>{let r=n;for(let t=0;t<Te;t+=1){let i=Oe(r,e);if(i.length>=r.length)return i;r=i;}return r};var Me=/^-{1,2}$/,Ce=/^[\\s]*-{1,2}[\\s]+$/,Le=/^={1,2}$/,Pe=/^[\\s]*={1,2}[\\s]+$/,bn=n=>{if(!n||typeof n!=\"string\")return n;let e=n.lastIndexOf(`\n`);if(e===-1)return n;let r=n.substring(e+1),t=n.substring(0,e),i=r.trim();if(Me.test(i)&&!r.match(Ce)){let s=t.split(`\n`).at(-1);if(s&&s.trim().length>0)return `${n}\\u200B`}if(Le.test(i)&&!r.match(Pe)){let s=t.split(`\n`).at(-1);if(s&&s.trim().length>0)return `${n}\\u200B`}return n};var _e=/([\\p{L}\\p{N}_])~(?!~)(?=[\\p{L}\\p{N}_])/gu,kn=n=>!n||typeof n!=\"string\"||!n.includes(\"~\")?n:n.replace(_e,(e,r,t)=>{let i=t+r.length;return f(n,i)?e:`${r}\\\\~`});var In=n=>I(n,\"~\"),An=n=>{let e=p(n,j);if(e){let r=e[2];if(!r||b.test(r))return n;let t=n.lastIndexOf(e[1]);if(f(n,t)||h(n,t))return n;if(In(n)%2===1)return `${n}~~`}else {let r=p(n,V);if(r){let t=n.lastIndexOf(r[0].slice(0,2));if(f(n,t)||h(n,t))return n;if(In(n)%2===1)return `${n}~`}}return n};var B=n=>n!==false,Re=n=>n===true,d={SINGLE_TILDE:0,COMPARISON_OPERATORS:5,HTML_TAGS:10,SETEXT_HEADINGS:15,LINKS:20,BOLD_ITALIC:30,BOLD:35,ITALIC_DOUBLE_UNDERSCORE:40,ITALIC_SINGLE_ASTERISK:41,ITALIC_SINGLE_UNDERSCORE:42,INLINE_CODE:50,STRIKETHROUGH:60,KATEX:70,INLINE_KATEX:75,DEFAULT:100},Ne=[{handler:{name:\"singleTilde\",handle:kn,priority:d.SINGLE_TILDE},optionKey:\"singleTilde\"},{handler:{name:\"comparisonOperators\",handle:Y,priority:d.COMPARISON_OPERATORS},optionKey:\"comparisonOperators\"},{handler:{name:\"htmlTags\",handle:gn,priority:d.HTML_TAGS},optionKey:\"htmlTags\"},{handler:{name:\"setextHeadings\",handle:bn,priority:d.SETEXT_HEADINGS},optionKey:\"setextHeadings\"},{handler:{name:\"links\",handle:D,priority:d.LINKS},optionKey:\"links\",earlyReturn:n=>n.endsWith(\"](streamdown:incomplete-link)\")||n.endsWith(`](${E})`)},{handler:{name:\"boldItalic\",handle:fn,priority:d.BOLD_ITALIC},optionKey:\"boldItalic\"},{handler:{name:\"bold\",handle:sn,priority:d.BOLD},optionKey:\"bold\"},{handler:{name:\"italicDoubleUnderscore\",handle:ln,priority:d.ITALIC_DOUBLE_UNDERSCORE},optionKey:\"italic\"},{handler:{name:\"italicSingleAsterisk\",handle:an,priority:d.ITALIC_SINGLE_ASTERISK},optionKey:\"italic\"},{handler:{name:\"italicSingleUnderscore\",handle:un,priority:d.ITALIC_SINGLE_UNDERSCORE},optionKey:\"italic\"},{handler:{name:\"inlineCode\",handle:dn,priority:d.INLINE_CODE},optionKey:\"inlineCode\"},{handler:{name:\"strikethrough\",handle:An,priority:d.STRIKETHROUGH},optionKey:\"strikethrough\"},{handler:{name:\"katex\",handle:mn,priority:d.KATEX},optionKey:\"katex\"},{handler:{name:\"inlineKatex\",handle:hn,priority:d.INLINE_KATEX},optionKey:\"inlineKatex\"}],ye=n=>{var r;let e=(r=n==null?void 0:n.linkMode)!=null?r:\"protocol\";return Ne.filter(({handler:t,optionKey:i})=>t.name===\"links\"?B(n==null?void 0:n.links)||B(n==null?void 0:n.images):t.name===\"inlineKatex\"?Re(n==null?void 0:n.inlineKatex):B(n==null?void 0:n[i])).map(({handler:t,earlyReturn:i})=>t.name===\"links\"?{handler:P(L({},t),{handle:o=>D(o,e)}),earlyReturn:e===\"protocol\"?i:void 0}:{handler:t,earlyReturn:i})},$e=(n,e)=>{var s;if(!n||typeof n!=\"string\")return n;let r=n.endsWith(\" \")&&!n.endsWith(\" \")?n.slice(0,-1):n,t=ye(e),i=((s=e==null?void 0:e.handlers)!=null?s:[]).map(l=>{var a;return {handler:P(L({},l),{priority:(a=l.priority)!=null?a:d.DEFAULT}),earlyReturn:void 0}}),o=[...t,...i].sort((l,a)=>{var u,S;return ((u=l.handler.priority)!=null?u:0)-((S=a.handler.priority)!=null?S:0)});try{for(let{handler:l,earlyReturn:a}of o)if(r=l.handle(r),a!=null&&a(r))return r;return r.endsWith(\" \")&&!r.endsWith(\" \")?r.slice(0,-1):r}finally{K();}},Or=$e;export{E as INCOMPLETE_IMAGE_PLACEHOLDER,Or as default,jn as isWithinCodeBlock,Jn as isWithinLinkOrImageUrl,$ as isWithinMathBlock,m as isWordChar};","/**\n * marked v18.1.1 - a markdown parser\n * Copyright (c) 2018-2026, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction B(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var y=B();function V(a){y=a}var M={exec:()=>null};function D(a){let e=[];return t=>{let n=Math.max(0,Math.min(3,t-1)),i=e[n];return i||(i=a(n),e[n]=i),i}}function h(a,e=\"\"){let t=typeof a==\"string\"?a:a.source,n={replace:(i,r)=>{let o=typeof r==\"string\"?r:r.source;return o=o.replace(x.caret,\"$1\"),t=t.replace(i,o),n},getRegex:()=>new RegExp(t,e)};return n}var ze=((a=\"\")=>{try{return!!new RegExp(\"(?<=1)(?<!1)\"+a)}catch{return!1}})(),x={codeRemoveIndent:/^(?: {0,3}\\t| {1,4})/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \\t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,leadingSpaceTab:/^[ \\t]+/,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,numericCharacterReference:/&#(?:(\\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/,numericCharacterReferenceOrAmpersand:/&#(?:(\\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:a=>new RegExp(`^( {0,3}${a})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:D(a=>new RegExp(`^ {0,${a}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`)),hrRegex:D(a=>new RegExp(`^ {0,${a}}((?:-[ \t]*){3,}|(?:_[ \t]*){3,}|(?:\\\\*[ \t]*){3,})(?:\\\\n+|$)`)),fencesBeginRegex:D(a=>new RegExp(`^ {0,${a}}(?:\\`\\`\\`|~~~)`)),headingBeginRegex:D(a=>new RegExp(`^ {0,${a}}#`)),htmlBeginRegex:D(a=>new RegExp(`^ {0,${a}}(?:</?(?:${Q})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)`,\"i\")),blockquoteBeginRegex:D(a=>new RegExp(`^ {0,${a}}>`))},Ee=/^(?:[ \\t]*(?:\\n|$))+/,Me=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Ce=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,N=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Ie=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,Y=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,fe=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |fences|blockquote|heading|hr|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,me=h(fe).replace(/bull/g,Y).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Be=h(fe).replace(/bull/g,Y).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),ee=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\t]+\\n)[^\\n]+)*)/,De=/^[^\\n]+/,te=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,qe=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",te).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Ze=h(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/).replace(/bull/g,Y).getRegex(),Q=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",ne=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,ve=h(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n*|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>[^\\\\n]*\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>[^\\\\n]*\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>[^\\\\n]*\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!(?:script|pre|style|textarea)(?![a-z0-9-]))([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</[a-z][a-z0-9-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",ne).replace(\"tag\",Q).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),xe=a=>h(ee).replace(\"hr\",N).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~~~)[^\\\\n]*(?:\\\\n|$)\").replace(\"list\",a).replace(\"html\",\" {0,3}(?:</?(?:tag)(?: +|\\\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)\").replace(\"tag\",Q).getRegex(),He=xe(/ {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]/),Ge=xe(/ {0,3}(?:[*+-]|\\d{1,9}[.)])(?:[ \\t]|\\n|$)/),Ne=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",Ge).getRegex(),re={blockquote:Ne,code:Me,def:qe,fences:Ce,heading:Ie,hr:N,html:ve,lheading:me,list:Ze,newline:Ee,paragraph:He,table:M,text:De},de=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",N).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~~~)[^\\\\n]*(?:\\\\n|$)\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\" {0,3}(?:</?(?:tag)(?: +|\\\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)\").replace(\"tag\",Q).getRegex(),Qe={...re,lheading:Be,table:de,paragraph:h(ee).replace(\"hr\",N).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",de).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~~~)[^\\\\n]*(?:\\\\n|$)\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]\").replace(\"html\",\" {0,3}(?:</?(?:tag)(?: +|\\\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)\").replace(\"tag\",Q).getRegex()},je={...re,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",ne).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:M,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(ee).replace(\"hr\",N).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",me).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Fe=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ue=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,be=/^( {2,}|\\\\)\\n(?!\\s*$)[ \\t]*/,Ke=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,S=/[\\p{P}\\p{S}]/u,q=/[\\s\\p{P}\\p{S}]/u,j=/[^\\s\\p{P}\\p{S}]/u,Xe=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,q).getRegex(),We=/[\\p{Pi}\\p{Ps}\"']/u,Re=/(?!~)[\\p{P}\\p{S}]/u,Ve=/(?!~)[\\s\\p{P}\\p{S}]/u,Je=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Ye=h(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",ze?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),Te=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,et=h(Te,\"u\").replace(/punct/g,S).getRegex(),tt=h(Te,\"u\").replace(/punct/g,Re).getRegex(),nt=/^(?:\\*+(?:((?!\\*)(?!openQuote)punct)|([^\\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\\s_]))?/,rt=h(nt,\"u\").replace(/openQuote/g,We).replace(/punct/g,S).getRegex(),Oe=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",st=h(Oe,\"gu\").replace(/notPunctSpace/g,j).replace(/punctSpace/g,q).replace(/punct/g,S).getRegex(),it=h(Oe,\"gu\").replace(/notPunctSpace/g,Je).replace(/punctSpace/g,Ve).replace(/punct/g,Re).getRegex(),ot=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)[\\\\s](\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|(?:(?!\\\\*)punct|notPunctSpace)(\\\\*+)(?!\\\\*)(?=notPunctSpace)\",at=h(ot,\"gu\").replace(/notPunctSpace/g,j).replace(/punctSpace/g,q).replace(/punct/g,S).getRegex(),lt=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,j).replace(/punctSpace/g,q).replace(/punct/g,S).getRegex(),ut=\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\\\s](_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)\",pt=h(ut,\"gu\").replace(/notPunctSpace/g,j).replace(/punctSpace/g,q).replace(/punct/g,S).getRegex(),ct=h(/^~~?(?:((?!~)punct)|[^\\s~])/,\"u\").replace(/punct/g,S).getRegex(),ht=\"^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)\",dt=h(ht,\"gu\").replace(/notPunctSpace/g,j).replace(/punctSpace/g,q).replace(/punct/g,S).getRegex(),kt=h(/\\\\(punct)/,\"gu\").replace(/punct/g,S).getRegex(),gt=h(/(`+)(?:[^`]|[^`][\\s\\S]*?[^`])\\1(?!`)|`+|\\\\(punct)/,\"gu\").replace(/punct/g,S).getRegex(),ft=h(/^<(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(),mt=h(ne).replace(\"(?:-->|$)\",\"-->\").getRegex(),xt=h(\"^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",mt).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),we=/\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]/,K=h(/(?:\\[(?:brackets|\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/).replace(\"brackets\",we).getRegex(),bt=h(/^!?\\[(label)\\]\\([ \\t\\n]*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?[ \\t\\n]*\\)/).replace(\"label\",K).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]+|(?=\\))/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),Rt=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",K).replace(\"ref\",te).getRegex(),Tt=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",te).getRegex(),ke=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\]){1,999}/,Ot=h(/(?:[^\\[\\]\\\\`]*(?:\\[(?:brackets|\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\]))){0,999}?[^\\[\\]\\\\`]*?/).replace(\"brackets\",we).getRegex(),wt=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",Ot).replace(\"ref\",ke).getRegex()).replace(\"nolink\",h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",ke).getRegex()).getRegex(),ge=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Pt=/[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\\w-])/,yt=h(/(?:mailto:email|xmpp:email(?:\\/[A-Za-z0-9@.]+)?)/).replace(/email/g,Pt).getRegex(),se={_backpedal:M,anyPunctuation:kt,anyPunctuationOutsideCode:gt,autolink:ft,blockSkip:Ye,br:be,code:Ue,del:M,delLDelim:M,delRDelim:M,emStrongLDelim:et,emStrongRDelimAst:st,emStrongRDelimUnd:lt,escape:Fe,link:bt,nolink:Tt,punctuation:Xe,reflink:Rt,reflinkSearch:wt,tag:xt,text:Ke,url:M},St={...se,emStrongLDelim:rt,emStrongRDelimAst:at,emStrongRDelimUnd:pt,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",K).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",K).getRegex()},J={...se,emStrongRDelimAst:it,emStrongLDelim:tt,delLDelim:ct,delRDelim:dt,url:h(/^emailProtocol|^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"emailProtocol\",yt).replace(\"protocol\",ge).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:h(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))))/).replace(\"protocol\",ge).replace(/emailProtocol/g,/(?:mailto|xmpp):/).getRegex()},_t={...J,br:h(be).replace(\"{2,}\",\"*\").getRegex(),text:h(J.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},F={normal:re,gfm:Qe,pedantic:je},Z={normal:se,gfm:J,breaks:_t,pedantic:St};var $t={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},Pe=a=>$t[a];function w(a,e){if(e){if(x.escapeTest.test(a))return a.replace(x.escapeReplace,Pe)}else if(x.escapeTestNoEncode.test(a))return a.replace(x.escapeReplaceNoEncode,Pe);return a}function ye(a){return x.numericCharacterReference.test(a)?a.replace(x.numericCharacterReferenceOrAmpersand,(e,t,n)=>{if(t===void 0&&n===void 0)return\"&\";let i=t===void 0?Number.parseInt(n,16):Number.parseInt(t,10);return i===0||i>1114111||i>=55296&&i<=57343?\"\\uFFFD\":i===38?\"&\":String.fromCodePoint(i)}):a}function ie(a){try{a=encodeURI(a).replace(x.percentDecode,\"%\")}catch{return null}return a}function oe(a,e){let t=a.replace(x.findPipe,(r,o,s)=>{let l=!1,u=o;for(;--u>=0&&s[u]===\"\\\\\";)l=!l;return l?\"|\":\" |\"}),n=t.split(x.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;i<n.length;i++)n[i]=n[i].trim().replace(x.slashPipe,\"|\");return n}function A(a,e,t){let n=a.length;if(n===0)return\"\";let i=0;for(;i<n;){let r=a.charAt(n-i-1);if(r===e&&!t)i++;else if(r!==e&&t)i++;else break}return a.slice(0,n-i)}function ae(a){let e=a.split(`\n`),t=e.length-1;for(;t>=0&&x.blankLine.test(e[t]);)t--;return e.length-t<=2?a:e.slice(0,t+1).join(`\n`)}function v(a){return a.trim().toLowerCase().toUpperCase().toLowerCase()}function le(a,e){if(a.indexOf(e[0])===-1&&a.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<a.length;n++)if(a[n]===\"\\\\\")n++;else if(a[n]===e[0])t++;else if(a[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function X(a,e=0){let t=e,n=\"\";for(let i of a)if(i===\"\t\"){let r=4-t%4;n+=\" \".repeat(r),t+=r}else n+=i,t++;return n}function Se(a,e,t,n,i){let r=e.href,o=e.title||null,s=a[1].replace(i.other.outputLinkReplace,\"$1\"),l=a[0].charAt(0)===\"!\",u=n.state.inLink,c=n.state.linkEmitted,p=n.state.inRawBlock;n.state.inLink=!0,n.state.linkEmitted=!1;let d=n.inlineTokens(s),g=n.state.linkEmitted;if(n.state.linkEmitted=c,n.state.inLink=u,!l){if(g){n.state.inRawBlock=p;return}n.state.linkEmitted=!0}return{type:l?\"image\":\"link\",raw:t,href:r,title:o,text:s,tokens:d}}function Lt(a,e,t){let n=a.match(t.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(`\n`).map(r=>{let o=r.match(t.other.beginningSpace);if(o===null)return r;let[s]=o;return r.slice(Math.min(s.length,i.length))}).join(`\n`)}function _e(a,e,t,n){if(!e.includes(\"<\"))return!1;for(let i=0;i<e.length;i++){if(e[i]===\"\\\\\"){i++;continue}if(e[i]===\"`\"){let s=n.inline.code.exec(e.slice(i));if(s){i+=s[0].length-1;continue}}if(e[i]!==\"<\")continue;let r=a.slice(t+i),o=n.inline.tag.exec(r)||n.inline.autolink.exec(r);if(o){if(o[0].length>e.length-i)return!0;i+=o[0].length-1}}return!1}var _=class{options;rules;lexer;constructor(e){this.options=e||y}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:ae(t[0]),i=n.replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:n,codeBlockStyle:\"indented\",text:i}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],i=Lt(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:i}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let i=A(n,\"#\");(this.options.pedantic||!i||this.rules.other.endingSpaceTabChar.test(i))&&(n=i.trim())}return{type:\"heading\",raw:A(t[0],`\n`),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:A(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=A(t[0],`\n`).split(`\n`),i=\"\",r=\"\",o=[];for(;n.length>0;){let s=!1,l=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))l.push(n[u]),s=!0;else if(!s)l.push(n[u]);else break;n=n.slice(u);let c=l.join(`\n`),p=c.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");i=i?`${i}\n${c}`:c,r=r?`${r}\n${p}`:p;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(p,o,!0),this.lexer.state.top=d,n.length===0)break;let g=o.at(-1);if(g?.type===\"code\"||g?.type===\"heading\"||g?.type===\"hr\"||g?.type===\"html\")break;if(g?.type===\"blockquote\"){let k=g,P=n.join(`\n`),R=k.raw+`\n`+P.replace(this.rules.other.blockquoteSetextReplace2,\"\"),m=this.blockquote(R);o[o.length-1]=m;let E=R.substring(m.raw.length).replace(/^\\n/,\"\"),b=E?E.split(`\n`).length:0,H=b?n.slice(0,-b):n;H.length>0&&(i=`${i}\n${H.join(`\n`)}`),r=r.substring(0,r.length-k.text.length)+m.text;break}else if(g?.type===\"list\"){let k=g,P=k.raw+`\n`+n.join(`\n`),R=this.list(P);o[o.length-1]=R,i=i.substring(0,i.length-g.raw.length)+R.raw,r=r.substring(0,r.length-k.raw.length)+R.raw,n=P.substring(o.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:i,tokens:o,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=e,i=()=>n.length-e.length,r=t[1].trim(),o=r.length>1,s={type:\"list\",raw:\"\",ordered:o,start:o?+r.slice(0,-1):\"\",loose:!1,items:[]};r=o?`\\\\d{1,9}\\\\${r.slice(-1)}`:`\\\\${r}`,this.options.pedantic&&(r=o?r:\"[*+-]\");let l=this.rules.other.listItemRegex(r),u=!1;for(;e;){let p=!1,d=\"\";if(!(t=l.exec(e))||this.rules.block.hr.test(e))break;let g=i();e=e.substring(t[0].length);let k=t[2].split(`\n`,1)[0],P=t[1].length,R=this.options.pedantic?X(k,P):k.replace(this.rules.other.leadingSpaceTab,W=>X(W,P)),m=e.split(`\n`,1)[0],E=!R.trim(),b=0;if(this.options.pedantic?(b=2,d=R.trimStart()):E?b=P+1:(b=R.search(this.rules.other.nonSpaceChar),b=b>4?1:b,d=R.slice(b),b+=P),E&&this.rules.other.blankLine.test(m)&&(e=e.substring(m.length+1),p=!0),!p){let W=this.rules.other.nextBulletRegex(b),ue=this.rules.other.hrRegex(b),pe=this.rules.other.fencesBeginRegex(b),ce=this.rules.other.headingBeginRegex(b),$e=this.rules.other.htmlBeginRegex(b),Le=this.rules.other.blockquoteBeginRegex(b);for(;e;){let he=e.split(`\n`,1)[0],G;if(m=he,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting,\" \"),G=m):G=m.replace(this.rules.other.leadingSpaceTab,Ae=>X(Ae)),pe.test(m)||ce.test(m)||$e.test(m)||Le.test(m)||W.test(m)||ue.test(m))break;if(G.search(this.rules.other.nonSpaceChar)>=b||!m.trim())d+=`\n`+G.slice(b);else{if(E||R.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||pe.test(R)||ce.test(R)||ue.test(R))break;d+=`\n`+m}E=!m.trim(),e=e.substring(he.length+1),R=G.slice(b)}}let H=n.slice(g,i());s.loose||(u?s.loose=!0:this.rules.other.doubleBlankLine.test(H)&&(u=!0)),s.items.push({type:\"list_item\",raw:H,task:!!this.options.gfm&&this.rules.other.listIsTask.test(d),loose:!1,text:d,tokens:[]})}let c=s.items.at(-1);if(c)c.raw=c.raw.trimEnd(),c.text=c.text.trimEnd();else return;s.raw=n.slice(0,i()).trimEnd();for(let p of s.items)if(this.lexer.state.top=!1,p.tokens=this.lexer.blockTokens(p.text,[]),!s.loose){let d=p.tokens.filter(k=>k.type===\"space\"),g=d.length>0&&d.some(k=>this.rules.other.anyLine.test(k.raw));s.loose=g}for(let p of s.items){let d=p.tokens[0];if(p.task&&(d?.type===\"text\"||d?.type===\"paragraph\")){p.text=p.text.replace(this.rules.other.listReplaceTask,\"\"),d.raw=d.raw.replace(this.rules.other.listReplaceTask,\"\"),d.text=d.text.replace(this.rules.other.listReplaceTask,\"\");for(let k=this.lexer.inlineQueue.length-1;k>=0;k--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)){this.lexer.inlineQueue[k].src=this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask,\"\");break}let g=this.rules.other.listTaskCheckbox.exec(p.raw);if(g){let k={type:\"checkbox\",raw:g[0]+\" \",checked:g[0]!==\"[ ]\"};p.checked=k.checked,s.loose?p.tokens[0]&&[\"paragraph\",\"text\"].includes(p.tokens[0].type)&&\"tokens\"in p.tokens[0]&&p.tokens[0].tokens?(p.tokens[0].raw=k.raw+p.tokens[0].raw,p.tokens[0].text=k.raw+p.tokens[0].text,p.tokens[0].tokens.unshift(k)):p.tokens.unshift({type:\"paragraph\",raw:k.raw,text:k.raw,tokens:[k]}):p.tokens.unshift(k)}}else p.task&&(p.task=!1)}if(s.loose)for(let p of s.items){p.loose=!0;for(let d of p.tokens)d.type===\"text\"&&(d.type=\"paragraph\")}return s}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=ae(t[0]);return{type:\"html\",block:!0,raw:n,pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){if(!this.rules.other.startAngleBracket.test(t[2])&&le(t[2],\"()\")!==-1)return;let n=v(t[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:A(t[0],`\n`),href:i,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=oe(t[1]),i=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],o={type:\"table\",raw:A(t[0],`\n`),header:[],align:[],rows:[]};if(n.length===i.length){for(let s of i)this.rules.other.tableAlignRight.test(s)?o.align.push(\"right\"):this.rules.other.tableAlignCenter.test(s)?o.align.push(\"center\"):this.rules.other.tableAlignLeft.test(s)?o.align.push(\"left\"):o.align.push(null);for(let s=0;s<n.length;s++)o.header.push({text:n[s],tokens:this.lexer.inline(n[s]),header:!0,align:o.align[s]});for(let s of r)o.rows.push(oe(s,o.header.length).map((l,u)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:o.align[u]})));return o}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:\"heading\",raw:A(t[0],`\n`),depth:t[2].charAt(0)===\"=\"?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){if(this.lexer.state.linkParenPossible===!1)return;let t=this.rules.inline.link.exec(e);if(t){let n=t[0].charAt(0)===\"!\"?2:1;if(!this.options.pedantic&&_e(e,t[1],n,this.rules))return;let i=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(i)){if(!this.rules.other.endAngleBracket.test(i))return;let s=A(i.slice(0,-1),\"\\\\\");if((i.length-s.length)%2===0)return}else{let s=le(t[2],\"()\");if(s===-2)return;if(s>-1){let u=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,u).trim(),t[3]=\"\"}}let r=t[2],o=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],o=s[3])}else o=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(i)?r=r.slice(1):r=r.slice(1,-1)),Se(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:o&&o.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=n[0].charAt(0)===\"!\"?2:1;if(!this.options.pedantic&&_e(e,n[1],i,this.rules))return;let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),o=t[v(r)];if(!o){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return Se(n,o,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||!i[1]&&!i[2]&&!i[3]&&!i[4]||i[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(i[1]||i[3]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let o=[...i[0]].length-1,s,l,u=o,c=0,p=i[0][0],d=n===p,g=p===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(g.lastIndex=0,t=t.slice(-1*e.length+o);(i=g.exec(t))!==null;){if(s=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!s)continue;if(l=[...s].length,i[3]||i[4]){u+=l;continue}else if(i[5]||i[6]){if(o%3&&!((o+l)%3)){c+=l;continue}if(d)break}if(u-=l,u>0)continue;l=Math.min(l,l+u+c);let k=[...i[0]][0].length,P=e.slice(0,o+i.index+k+l);if(Math.min(o,l)%2){let m=P.slice(1,-1);return{type:\"em\",raw:P,text:m,tokens:this.lexer.inlineTokens(m)}}let R=P.slice(2,-2);return{type:\"strong\",raw:P,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),i=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&r&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e,t,n=\"\"){let i=this.rules.inline.delLDelim.exec(e);if(!i)return;if(!(i[1]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let o=[...i[0]].length-1,s,l,u=o,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+o);(i=c.exec(t))!==null;){if(s=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!s||(l=[...s].length,l!==o))continue;if(i[3]||i[4]){u+=l;continue}if(u-=l,u>0)continue;l=Math.min(l,l+u);let p=[...i[0]][0].length,d=e.slice(0,o+i.index+p+l),g=d.slice(o,-o);return{type:\"del\",raw:d,text:g,tokens:this.lexer.inlineTokens(g)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,i;return t[2]===\"@\"?(n=t[1],i=\"mailto:\"+n):(n=t[1],i=n),{type:\"link\",raw:t[0],text:n,href:i,autolink:!0,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,i;if(t[2]===\"@\")n=t[0],i=\"mailto:\"+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(r!==t[0]);n=t[0],t[1]===\"www.\"?i=\"http://\"+t[0]:i=t[0]}return{type:\"link\",raw:t[0],text:n,href:i,autolink:!0,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:n?t[0]:ye(t[0]),escaped:n}}}};var T=class a{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||y,this.options.tokenizer=this.options.tokenizer||new _,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,linkParenPossible:!0,top:!0};let t={other:x,block:F.normal,inline:Z.normal};this.options.pedantic?(t.block=F.pedantic,t.inline=Z.pedantic):this.options.gfm&&(t.block=F.gfm,this.options.breaks?t.inline=Z.breaks:t.inline=Z.gfm),this.tokenizer.rules=t}static get rules(){return{block:F,inline:Z}}static lex(e,t){return new a(t).lex(e)}static lexInline(e,t){return new a(t).inlineTokens(e)}lex(e){e=e.replace(x.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(x.tabCharGlobal,\" \").replace(x.spaceLine,\"\"));let i=1/0;for(;e;){if(e.length<i)i=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+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));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let o=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(c=>{u=c.call({lexer:this},l),typeof u==\"number\"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(o=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(o))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=o.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}linkInText(e){if(!e.includes(\"[\"))return!1;let t=this.tokenizer.rules.inline.link;for(let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(t.test(n[0])&&e.charAt(n.index-1)!==\"!\")return!0;for(let n of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let i=n[0],r=i.lastIndexOf(\"[\");if(!(i.charAt(0)===\"!\"||!Object.hasOwn(this.tokens.links,v(i.slice(r+1,-1))))&&!(r>1&&this.linkInText(i.slice(1,r-1))))return!0}return!1}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=this.state.linkParenPossible;this.state.linkParenPossible=n&&e.includes(\")\");try{return this.#e(e,t)}finally{this.state.linkParenPossible=n}}#e(e,t){let n=e;if(this.tokens.links&&e.includes(\"[\")){let s=this.tokenizer.rules.inline.reflinkSearch,l=u=>{let c=u.lastIndexOf(\"[\");if(!Object.hasOwn(this.tokens.links,v(u.slice(c+1,-1))))return u;if(c>1&&u.charAt(0)!==\"!\"){let p=u.slice(1,c-1);if(this.linkInText(p))return\"[\"+p.replace(s,l)+\"][\"+\"a\".repeat(u.length-c-2)+\"]\"}return\"[\"+\"a\".repeat(u.length-2)+\"]\"};n=n.replace(s,l)}n=n.replace(this.tokenizer.rules.inline.anyPunctuationOutsideCode,(s,l,u)=>u?\"+\".repeat(s.length):l?l+s.slice(l.length,-l.length).replace(/`/g,\"+\")+l:s),n=n.replace(this.tokenizer.rules.inline.blockSkip,(s,l,u)=>{let c=u?u.length:0;return s.slice(0,c)+\"[\"+\"a\".repeat(s.length-c-2)+\"]\"}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,r=\"\",o=1/0;for(;e;){if(e.length<o)o=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}i||(r=\"\"),i=!1;let s;if(this.options.extensions?.inline?.some(u=>(s=u.call({lexer:this},e,t))?(e=e.substring(s.raw.length),t.push(s),!0):!1))continue;if(s=this.tokenizer.escape(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.tag(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.link(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(s.raw.length);let u=t.at(-1);s.type===\"text\"&&u?.type===\"text\"?(u.raw+=s.raw,u.text+=s.text):t.push(s);continue}if(s=this.tokenizer.emStrong(e,n,r)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.codespan(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.br(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.del(e,n,r)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.autolink(e)){e=e.substring(s.raw.length),t.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(e))){e=e.substring(s.raw.length),t.push(s);continue}let l=e;if(this.options.extensions?.startInline){let u=1/0,c=e.slice(1),p;this.options.extensions.startInline.forEach(d=>{p=d.call({lexer:this},c),typeof p==\"number\"&&p>=0&&(u=Math.min(u,p))}),u<1/0&&u>=0&&(l=e.substring(0,u+1))}if(s=this.tokenizer.inlineText(l)){e=e.substring(s.raw.length),s.raw.slice(-1)!==\"_\"&&(r=s.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=s.raw,u.text+=s.text):t.push(s);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=\"Infinite loop on byte: \"+e;if(this.options.silent)console.error(t);else throw new Error(t)}};var $=class{options;parser;constructor(e){this.options=e||y}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let i=(t||\"\").match(x.notSpaceStart)?.[0],r=e?e.replace(x.endingNewline,\"\")+`\n`:\"\";return i?'<pre><code class=\"language-'+w(i)+'\">'+(n?r:w(r,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?r:w(r,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,i=\"\";for(let s=0;s<e.items.length;s++){let l=e.items[s];i+=this.listitem(l)}let r=t?\"ol\":\"ul\",o=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+r+o+`>\n`+i+\"</\"+r+`>\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let r=0;r<e.header.length;r++)n+=this.tablecell(e.header[r]);t+=this.tablerow({text:n});let i=\"\";for(let r=0;r<e.rows.length;r++){let o=e.rows[r];n=\"\";for(let s=0;s<o.length;s++)n+=this.tablecell(o[s]);i+=this.tablerow({text:n})}return i&&(i=`<tbody>${i}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+i+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:i,autolink:r}){let o=r?w(n,!0):this.parser.parseInline(i),s=ie(e);if(s===null)return o;e=w(s,r);let l='<a href=\"'+e+'\"';return t&&(l+=' title=\"'+w(t)+'\"'),l+=\">\"+o+\"</a>\",l}image({href:e,title:t,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let r=ie(e);if(r===null)return w(n);e=r;let o=`<img src=\"${w(e)}\" alt=\"${w(n)}\"`;return t&&(o+=` title=\"${w(t)}\"`),o+=\">\",o}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var z=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}checkbox({raw:e}){return e}};var O=class a{options;renderer;textRenderer;constructor(e){this.options=e||y,this.options.renderer=this.options.renderer||new $,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new z}static parse(e,t){return new a(t).parse(e)}static parseInline(e,t){return new a(t).parseInline(e)}parse(e){this.renderer.parser=this;let t=\"\";for(let n=0;n<e.length;n++){let i=e[n];if(this.options.extensions?.renderers?.[i.type]){let o=i,s=this.options.extensions.renderers[o.type].call({parser:this},o);if(s!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"checkbox\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){t+=s||\"\";continue}}let r=i;switch(r.type){case\"space\":{t+=this.renderer.space(r);break}case\"hr\":{t+=this.renderer.hr(r);break}case\"heading\":{t+=this.renderer.heading(r);break}case\"code\":{t+=this.renderer.code(r);break}case\"table\":{t+=this.renderer.table(r);break}case\"blockquote\":{t+=this.renderer.blockquote(r);break}case\"list\":{t+=this.renderer.list(r);break}case\"checkbox\":{t+=this.renderer.checkbox(r);break}case\"html\":{t+=this.renderer.html(r);break}case\"def\":{t+=this.renderer.def(r);break}case\"paragraph\":{t+=this.renderer.paragraph(r);break}case\"text\":{t+=this.renderer.text(r);break}default:{let o='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=\"\";for(let i=0;i<e.length;i++){let r=e[i];if(this.options.extensions?.renderers?.[r.type]){let s=this.options.extensions.renderers[r.type].call({parser:this},r);if(s!==!1||![\"escape\",\"html\",\"link\",\"image\",\"checkbox\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(r.type)){n+=s||\"\";continue}}let o=r;switch(o.type){case\"escape\":{n+=t.text(o);break}case\"html\":{n+=t.html(o);break}case\"link\":{n+=t.link(o);break}case\"image\":{n+=t.image(o);break}case\"checkbox\":{n+=t.checkbox(o);break}case\"strong\":{n+=t.strong(o);break}case\"em\":{n+=t.em(o);break}case\"codespan\":{n+=t.codespan(o);break}case\"br\":{n+=t.br(o);break}case\"del\":{n+=t.del(o);break}case\"text\":{n+=t.text(o);break}default:{let s='Token with \"'+o.type+'\" type was not found.';if(this.options.silent)return console.error(s),\"\";throw new Error(s)}}}return n}};var L=class{options;block;constructor(e){this.options=e||y}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?T.lex:T.lexInline}provideParser(e=this.block){return e?O.parse:O.parseInline}};function C(a,e){if(Array.isArray(e))for(let t=0;t<e.length;t++)a.push(e[t]);else a.push(e)}var U=class{defaults=B();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=O;Renderer=$;TextRenderer=z;Lexer=T;Tokenizer=_;Hooks=L;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let i of e)switch(C(n,t.call(this,i)),i.type){case\"table\":{let r=i;for(let o of r.header)C(n,this.walkTokens(o.tokens,t));for(let o of r.rows)for(let s of o)C(n,this.walkTokens(s.tokens,t));break}case\"list\":{let r=i;C(n,this.walkTokens(r.items,t));break}default:{let r=i;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(o=>{let s=r[o].flat(1/0);C(n,this.walkTokens(s,t))}):r.tokens&&C(n,this.walkTokens(r.tokens,t))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error(\"extension name required\");if(\"renderer\"in r){let o=t.renderers[r.name];o?t.renderers[r.name]=function(...s){let l=r.renderer.apply(this,s);return l===!1&&(l=o.apply(this,s)),l}:t.renderers[r.name]=r.renderer}if(\"tokenizer\"in r){if(!r.level||r.level!==\"block\"&&r.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let o=t[r.level];o?o.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level===\"block\"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level===\"inline\"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}\"childTokens\"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),i.extensions=t),n.renderer){let r=this.defaults.renderer||new $(this.defaults);for(let o in n.renderer){if(!(o in r))throw new Error(`renderer '${o}' does not exist`);if([\"options\",\"parser\"].includes(o))continue;let s=o,l=n.renderer[s],u=r[s];r[s]=(...c)=>{let p=l.apply(r,c);return p===!1&&(p=u.apply(r,c)),p||\"\"}}i.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new _(this.defaults);for(let o in n.tokenizer){if(!(o in r))throw new Error(`tokenizer '${o}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(o))continue;let s=o,l=n.tokenizer[s],u=r[s];r[s]=(...c)=>{let p=l.apply(r,c);return p===!1&&(p=u.apply(r,c)),p}}i.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new L;for(let o in n.hooks){if(!(o in r))throw new Error(`hook '${o}' does not exist`);if([\"options\",\"block\"].includes(o))continue;let s=o,l=n.hooks[s],u=r[s];L.passThroughHooks.has(o)?r[s]=c=>{if(this.defaults.async&&L.passThroughHooksRespectAsync.has(o))return(async()=>{let d=await l.call(r,c);return u.call(r,d)})();let p=l.call(r,c);return u.call(r,p)}:r[s]=(...c)=>{if(this.defaults.async)return(async()=>{let d=await l.apply(r,c);return d===!1&&(d=await u.apply(r,c)),d})();let p=l.apply(r,c);return p===!1&&(p=u.apply(r,c)),p}}i.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,o=n.walkTokens;i.walkTokens=function(s){let l=[];return l.push(o.call(this,s)),r&&C(l,r.call(this,s)),l}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return T.lex(e,t??this.defaults)}parser(e,t){return O.parse(e,t??this.defaults)}parseMarkdown(e){return(n,i)=>{let r={...i},o={...this.defaults,...r},s=this.onError(!!o.silent,!!o.async);if(this.defaults.async===!0&&r.async===!1)return s(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return s(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return s(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(o.hooks&&(o.hooks.options=o,o.hooks.block=e),o.async)return(async()=>{let l=o.hooks?await o.hooks.preprocess(n):n,c=await(o.hooks?await o.hooks.provideLexer(e):e?T.lex:T.lexInline)(l,o),p=o.hooks?await o.hooks.processAllTokens(c):c;o.walkTokens&&await Promise.all(this.walkTokens(p,o.walkTokens));let g=await(o.hooks?await o.hooks.provideParser(e):e?O.parse:O.parseInline)(p,o);return o.hooks?await o.hooks.postprocess(g):g})().catch(s);try{o.hooks&&(n=o.hooks.preprocess(n));let u=(o.hooks?o.hooks.provideLexer(e):e?T.lex:T.lexInline)(n,o);o.hooks&&(u=o.hooks.processAllTokens(u)),o.walkTokens&&this.walkTokens(u,o.walkTokens);let p=(o.hooks?o.hooks.provideParser(e):e?O.parse:O.parseInline)(u,o);return o.hooks&&(p=o.hooks.postprocess(p)),p}catch(l){return s(l)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let i=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(i):i}if(t)return Promise.reject(n);throw n}}};var I=new U;function f(a,e){return I.parse(a,e)}f.options=f.setOptions=function(a){return I.setOptions(a),f.defaults=I.defaults,V(f.defaults),f};f.getDefaults=B;f.defaults=y;function At(...a){return I.use(...a),f.defaults=I.defaults,V(f.defaults),f}f.use=At;f.walkTokens=function(a,e){return I.walkTokens(a,e)};f.parseInline=I.parseInline;f.Parser=O;f.parser=O.parse;f.Renderer=$;f.TextRenderer=z;f.Lexer=T;f.lexer=T.lex;f.Tokenizer=_;f.Hooks=L;f.parse=f;var Rn=f.options,Tn=f.setOptions,On=f.walkTokens,wn=f.parseInline,Pn=f,yn=O.parse,Sn=T.lex;export{L as Hooks,T as Lexer,U as Marked,O as Parser,$ as Renderer,z as TextRenderer,_ as Tokenizer,y as defaults,B as getDefaults,Sn as lexer,f as marked,Rn as options,Pn as parse,wn as parseInline,yn as parser,Tn as setOptions,At as use,On as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","/*! @license DOMPurify 3.4.17 | (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.17/LICENSE */\nfunction _OverloadYield(e, d) {\n\tthis.v = e, this.k = d;\n}\nfunction _arrayLikeToArray(r, a) {\n\t(null == a || a > r.length) && (a = r.length);\n\tfor (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n\treturn n;\n}\nfunction _arrayWithHoles(r) {\n\tif (Array.isArray(r)) return r;\n}\nfunction _iterableToArrayLimit(r, l) {\n\tvar t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n\tif (null != t) {\n\t\tvar e, n, i, u, a = [], f = !0, o = !1;\n\t\ttry {\n\t\t\tif (i = (t = t.call(r)).next, 0 === l) {\n\t\t\t\tif (Object(t) !== t) return;\n\t\t\t\tf = !1;\n\t\t\t} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n\t\t} catch (r) {\n\t\t\to = !0, n = r;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n\t\t\t} finally {\n\t\t\t\tif (o) throw n;\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t}\n}\nfunction _nonIterableRest() {\n\tthrow new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\nfunction _slicedToArray(r, e) {\n\treturn _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n\tif (r) {\n\t\tif (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n\t\tvar t = {}.toString.call(r).slice(8, -1);\n\t\treturn \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n\t}\n}\nfunction AsyncGenerator(e) {\n\tvar t, n;\n\tfunction resume(t, n) {\n\t\ttry {\n\t\t\tvar r = e[t](n), o = r.value, u = o instanceof _OverloadYield;\n\t\t\tPromise.resolve(u ? o.v : o).then(function(n) {\n\t\t\t\tif (u) {\n\t\t\t\t\tvar i = \"return\" === t && o.k ? t : \"next\";\n\t\t\t\t\tif (!o.k || n.done) return resume(i, n);\n\t\t\t\t\tn = e[i](n).value;\n\t\t\t\t}\n\t\t\t\tsettle(!!r.done, n);\n\t\t\t}, function(e) {\n\t\t\t\tresume(\"throw\", e);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tsettle(2, e);\n\t\t}\n\t}\n\tfunction settle(e, r) {\n\t\t2 === e ? t.reject(r) : t.resolve({\n\t\t\tvalue: r,\n\t\t\tdone: e\n\t\t}), (t = t.next) ? resume(t.key, t.arg) : n = null;\n\t}\n\tthis._invoke = function(e, r) {\n\t\treturn new Promise(function(o, u) {\n\t\t\tvar i = {\n\t\t\t\tkey: e,\n\t\t\t\targ: r,\n\t\t\t\tresolve: o,\n\t\t\t\treject: u,\n\t\t\t\tnext: null\n\t\t\t};\n\t\t\tn ? n = n.next = i : (t = n = i, resume(e, r));\n\t\t});\n\t}, \"function\" != typeof e.return && (this.return = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function() {\n\treturn this;\n}, AsyncGenerator.prototype.next = function(e) {\n\treturn this._invoke(\"next\", e);\n}, AsyncGenerator.prototype.throw = function(e) {\n\treturn this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype.return = function(e) {\n\treturn this._invoke(\"return\", e);\n};\nconst entries = Object.entries;\nconst setPrototypeOf = Object.setPrototypeOf;\nconst isFrozen = Object.isFrozen;\nconst getPrototypeOf = Object.getPrototypeOf;\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nlet freeze = Object.freeze;\nlet seal = Object.seal;\nlet create = Object.create;\nlet _ref = typeof Reflect !== \"undefined\" && Reflect;\nlet apply = _ref.apply;\nlet construct = _ref.construct;\nif (!freeze) freeze = function freeze(x) {\n\treturn x;\n};\nif (!seal) seal = function seal(x) {\n\treturn x;\n};\nif (!apply) apply = function apply(func, thisArg) {\n\tfor (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];\n\treturn func.apply(thisArg, args);\n};\nif (!construct) construct = function construct(Func) {\n\tfor (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];\n\treturn new Func(...args);\n};\nconst arrayForEach = unapply(Array.prototype.forEach);\nArray.prototype.indexOf;\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\nconst setCreate = unconstruct(Set);\nconst setAdd = unapply(Set.prototype.add);\nconst setHas = unapply(Set.prototype.has);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === \"undefined\" ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === \"undefined\" ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n* Creates a new function that calls the given function with a specified thisArg and arguments.\n*\n* @param func - The function to be wrapped and called.\n* @returns A new function that calls the given function with a specified thisArg and arguments.\n*/\nfunction unapply(func) {\n\treturn function(thisArg) {\n\t\tif (thisArg instanceof RegExp) thisArg.lastIndex = 0;\n\t\tfor (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];\n\t\treturn apply(func, thisArg, args);\n\t};\n}\n/**\n* Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n*\n* @param func - The constructor function to be wrapped and called.\n* @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n*/\nfunction unconstruct(Func) {\n\treturn function() {\n\t\tfor (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];\n\t\treturn construct(Func, args);\n\t};\n}\n/**\n* Add properties to a lookup table\n*\n* @param set - The set to which elements will be added.\n* @param array - The array containing elements to be added to the set.\n* @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n* @returns The modified set with added elements.\n*/\nfunction addToSet(set, array) {\n\tlet transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;\n\tif (setPrototypeOf) setPrototypeOf(set, null);\n\tif (!arrayIsArray(array)) return set;\n\tlet l = array.length;\n\twhile (l--) {\n\t\tlet element = array[l];\n\t\tif (typeof element === \"string\") {\n\t\t\tconst lcElement = transformCaseFunc(element);\n\t\t\tif (lcElement !== element) {\n\t\t\t\tif (!isFrozen(array)) array[l] = lcElement;\n\t\t\t\telement = lcElement;\n\t\t\t}\n\t\t}\n\t\tset[element] = true;\n\t}\n\treturn set;\n}\n/**\n* Clean up an array to harden against CSPP\n*\n* @param array - The array to be cleaned.\n* @returns The cleaned version of the array\n*/\nfunction cleanArray(array) {\n\tfor (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;\n\treturn array;\n}\n/**\n* Shallow clone an object\n*\n* @param object - The object to be cloned.\n* @returns A new object that copies the original.\n*/\nfunction clone(object) {\n\tconst newObject = create(null);\n\tfor (const _ref2 of entries(object)) {\n\t\tvar _ref3 = _slicedToArray(_ref2, 2);\n\t\tconst property = _ref3[0];\n\t\tconst value = _ref3[1];\n\t\tif (objectHasOwnProperty(object, property)) {\n\t\t\tif (arrayIsArray(value)) newObject[property] = cleanArray(value);\n\t\t\telse if (value && typeof value === \"object\" && value.constructor === Object) newObject[property] = clone(value);\n\t\t\telse newObject[property] = value;\n\t\t}\n\t}\n\treturn newObject;\n}\n/**\n* Convert non-node values into strings without depending on direct property access.\n*\n* @param value - The value to stringify.\n* @returns A string representation of the provided value.\n*/\nfunction stringifyValue(value) {\n\tswitch (typeof value) {\n\t\tcase \"string\": return value;\n\t\tcase \"number\": return numberToString(value);\n\t\tcase \"boolean\": return booleanToString(value);\n\t\tcase \"bigint\": return bigintToString ? bigintToString(value) : \"0\";\n\t\tcase \"symbol\": return symbolToString ? symbolToString(value) : \"Symbol()\";\n\t\tcase \"undefined\": return objectToString(value);\n\t\tcase \"function\":\n\t\tcase \"object\": {\n\t\t\tif (value === null) return objectToString(value);\n\t\t\tconst valueAsRecord = value;\n\t\t\tconst valueToString = lookupGetter(valueAsRecord, \"toString\");\n\t\t\tif (typeof valueToString === \"function\") {\n\t\t\t\tconst stringified = valueToString(valueAsRecord);\n\t\t\t\treturn typeof stringified === \"string\" ? stringified : objectToString(stringified);\n\t\t\t}\n\t\t\treturn objectToString(value);\n\t\t}\n\t\tdefault: return objectToString(value);\n\t}\n}\n/**\n* This method automatically checks if the prop is function or getter and behaves accordingly.\n*\n* @param object - The object to look up the getter function in its prototype chain.\n* @param prop - The property name for which to find the getter function.\n* @returns The getter function found in the prototype chain or a fallback function.\n*/\nfunction lookupGetter(object, prop) {\n\twhile (object !== null) {\n\t\tconst desc = getOwnPropertyDescriptor(object, prop);\n\t\tif (desc) {\n\t\t\tif (desc.get) return unapply(desc.get);\n\t\t\tif (typeof desc.value === \"function\") return unapply(desc.value);\n\t\t}\n\t\tobject = getPrototypeOf(object);\n\t}\n\tfunction fallbackValue() {\n\t\treturn null;\n\t}\n\treturn fallbackValue;\n}\n/**\n* Like lookupGetter, but for accessor properties only, and returns null\n* instead of a null-returning fallback when no getter exists on the chain.\n* Lets a caller fall back to a direct property read in environments that\n* lack the getter, where a fallback returning null would be indistinguishable\n* from a legitimate null value (e.g. namespaceURI of a no-namespace element).\n*\n* @param object - The object (usually a prototype) to start the lookup at.\n* @param prop - The accessor property name.\n* @returns The unapplied getter, or null if none was found.\n*/\nfunction lookupAccessor(object, prop) {\n\twhile (object !== null) {\n\t\tconst desc = getOwnPropertyDescriptor(object, prop);\n\t\tif (desc) return desc.get ? unapply(desc.get) : null;\n\t\tobject = getPrototypeOf(object);\n\t}\n\treturn null;\n}\nfunction isRegex(value) {\n\ttry {\n\t\tregExpTest(value, \"\");\n\t\treturn true;\n\t} catch (_unused) {\n\t\treturn false;\n\t}\n}\nconst html$1 = freeze([\n\t\"a\",\n\t\"abbr\",\n\t\"acronym\",\n\t\"address\",\n\t\"area\",\n\t\"article\",\n\t\"aside\",\n\t\"audio\",\n\t\"b\",\n\t\"bdi\",\n\t\"bdo\",\n\t\"big\",\n\t\"blink\",\n\t\"blockquote\",\n\t\"body\",\n\t\"br\",\n\t\"button\",\n\t\"canvas\",\n\t\"caption\",\n\t\"center\",\n\t\"cite\",\n\t\"code\",\n\t\"col\",\n\t\"colgroup\",\n\t\"content\",\n\t\"data\",\n\t\"datalist\",\n\t\"dd\",\n\t\"decorator\",\n\t\"del\",\n\t\"details\",\n\t\"dfn\",\n\t\"dialog\",\n\t\"dir\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"element\",\n\t\"em\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"font\",\n\t\"footer\",\n\t\"form\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hgroup\",\n\t\"hr\",\n\t\"html\",\n\t\"i\",\n\t\"img\",\n\t\"input\",\n\t\"ins\",\n\t\"kbd\",\n\t\"label\",\n\t\"legend\",\n\t\"li\",\n\t\"main\",\n\t\"map\",\n\t\"mark\",\n\t\"marquee\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"meter\",\n\t\"nav\",\n\t\"nobr\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"output\",\n\t\"p\",\n\t\"picture\",\n\t\"pre\",\n\t\"progress\",\n\t\"q\",\n\t\"rp\",\n\t\"rt\",\n\t\"ruby\",\n\t\"s\",\n\t\"samp\",\n\t\"search\",\n\t\"section\",\n\t\"select\",\n\t\"shadow\",\n\t\"slot\",\n\t\"small\",\n\t\"source\",\n\t\"spacer\",\n\t\"span\",\n\t\"strike\",\n\t\"strong\",\n\t\"style\",\n\t\"sub\",\n\t\"summary\",\n\t\"sup\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"template\",\n\t\"textarea\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"time\",\n\t\"tr\",\n\t\"track\",\n\t\"tt\",\n\t\"u\",\n\t\"ul\",\n\t\"var\",\n\t\"video\",\n\t\"wbr\"\n]);\nconst svg$1 = freeze([\n\t\"svg\",\n\t\"a\",\n\t\"altglyph\",\n\t\"altglyphdef\",\n\t\"altglyphitem\",\n\t\"animatecolor\",\n\t\"animatemotion\",\n\t\"animatetransform\",\n\t\"circle\",\n\t\"clippath\",\n\t\"defs\",\n\t\"desc\",\n\t\"ellipse\",\n\t\"enterkeyhint\",\n\t\"exportparts\",\n\t\"filter\",\n\t\"font\",\n\t\"g\",\n\t\"glyph\",\n\t\"glyphref\",\n\t\"hkern\",\n\t\"image\",\n\t\"inputmode\",\n\t\"line\",\n\t\"lineargradient\",\n\t\"marker\",\n\t\"mask\",\n\t\"metadata\",\n\t\"mpath\",\n\t\"part\",\n\t\"path\",\n\t\"pattern\",\n\t\"polygon\",\n\t\"polyline\",\n\t\"radialgradient\",\n\t\"rect\",\n\t\"stop\",\n\t\"style\",\n\t\"switch\",\n\t\"symbol\",\n\t\"text\",\n\t\"textpath\",\n\t\"title\",\n\t\"tref\",\n\t\"tspan\",\n\t\"view\",\n\t\"vkern\"\n]);\nconst svgFilters = freeze([\n\t\"feBlend\",\n\t\"feColorMatrix\",\n\t\"feComponentTransfer\",\n\t\"feComposite\",\n\t\"feConvolveMatrix\",\n\t\"feDiffuseLighting\",\n\t\"feDisplacementMap\",\n\t\"feDistantLight\",\n\t\"feDropShadow\",\n\t\"feFlood\",\n\t\"feFuncA\",\n\t\"feFuncB\",\n\t\"feFuncG\",\n\t\"feFuncR\",\n\t\"feGaussianBlur\",\n\t\"feImage\",\n\t\"feMerge\",\n\t\"feMergeNode\",\n\t\"feMorphology\",\n\t\"feOffset\",\n\t\"fePointLight\",\n\t\"feSpecularLighting\",\n\t\"feSpotLight\",\n\t\"feTile\",\n\t\"feTurbulence\"\n]);\nconst svgDisallowed = freeze([\n\t\"animate\",\n\t\"color-profile\",\n\t\"cursor\",\n\t\"discard\",\n\t\"font-face\",\n\t\"font-face-format\",\n\t\"font-face-name\",\n\t\"font-face-src\",\n\t\"font-face-uri\",\n\t\"foreignobject\",\n\t\"hatch\",\n\t\"hatchpath\",\n\t\"mesh\",\n\t\"meshgradient\",\n\t\"meshpatch\",\n\t\"meshrow\",\n\t\"missing-glyph\",\n\t\"script\",\n\t\"set\",\n\t\"solidcolor\",\n\t\"unknown\",\n\t\"use\"\n]);\nconst mathMl$1 = freeze([\n\t\"math\",\n\t\"menclose\",\n\t\"merror\",\n\t\"mfenced\",\n\t\"mfrac\",\n\t\"mglyph\",\n\t\"mi\",\n\t\"mlabeledtr\",\n\t\"mmultiscripts\",\n\t\"mn\",\n\t\"mo\",\n\t\"mover\",\n\t\"mpadded\",\n\t\"mphantom\",\n\t\"mroot\",\n\t\"mrow\",\n\t\"ms\",\n\t\"mspace\",\n\t\"msqrt\",\n\t\"mstyle\",\n\t\"msub\",\n\t\"msup\",\n\t\"msubsup\",\n\t\"mtable\",\n\t\"mtd\",\n\t\"mtext\",\n\t\"mtr\",\n\t\"munder\",\n\t\"munderover\",\n\t\"mprescripts\"\n]);\nconst mathMlDisallowed = freeze([\n\t\"maction\",\n\t\"maligngroup\",\n\t\"malignmark\",\n\t\"mlongdiv\",\n\t\"mscarries\",\n\t\"mscarry\",\n\t\"msgroup\",\n\t\"mstack\",\n\t\"msline\",\n\t\"msrow\",\n\t\"semantics\",\n\t\"annotation\",\n\t\"annotation-xml\",\n\t\"mprescripts\",\n\t\"none\"\n]);\nconst text = freeze([\"#text\"]);\nconst html = freeze([\n\t\"accept\",\n\t\"action\",\n\t\"align\",\n\t\"alt\",\n\t\"autocapitalize\",\n\t\"autocomplete\",\n\t\"autopictureinpicture\",\n\t\"autoplay\",\n\t\"background\",\n\t\"bgcolor\",\n\t\"border\",\n\t\"capture\",\n\t\"cellpadding\",\n\t\"cellspacing\",\n\t\"checked\",\n\t\"cite\",\n\t\"class\",\n\t\"clear\",\n\t\"color\",\n\t\"cols\",\n\t\"colspan\",\n\t\"command\",\n\t\"commandfor\",\n\t\"controls\",\n\t\"controlslist\",\n\t\"coords\",\n\t\"crossorigin\",\n\t\"datetime\",\n\t\"decoding\",\n\t\"default\",\n\t\"dir\",\n\t\"disabled\",\n\t\"disablepictureinpicture\",\n\t\"disableremoteplayback\",\n\t\"download\",\n\t\"draggable\",\n\t\"enctype\",\n\t\"enterkeyhint\",\n\t\"exportparts\",\n\t\"face\",\n\t\"for\",\n\t\"headers\",\n\t\"height\",\n\t\"hidden\",\n\t\"high\",\n\t\"href\",\n\t\"hreflang\",\n\t\"id\",\n\t\"inert\",\n\t\"inputmode\",\n\t\"integrity\",\n\t\"ismap\",\n\t\"kind\",\n\t\"label\",\n\t\"lang\",\n\t\"list\",\n\t\"loading\",\n\t\"loop\",\n\t\"low\",\n\t\"max\",\n\t\"maxlength\",\n\t\"media\",\n\t\"method\",\n\t\"min\",\n\t\"minlength\",\n\t\"multiple\",\n\t\"muted\",\n\t\"name\",\n\t\"nonce\",\n\t\"noshade\",\n\t\"novalidate\",\n\t\"nowrap\",\n\t\"open\",\n\t\"optimum\",\n\t\"part\",\n\t\"pattern\",\n\t\"placeholder\",\n\t\"playsinline\",\n\t\"popover\",\n\t\"popovertarget\",\n\t\"popovertargetaction\",\n\t\"poster\",\n\t\"preload\",\n\t\"pubdate\",\n\t\"radiogroup\",\n\t\"readonly\",\n\t\"rel\",\n\t\"required\",\n\t\"rev\",\n\t\"reversed\",\n\t\"role\",\n\t\"rows\",\n\t\"rowspan\",\n\t\"spellcheck\",\n\t\"scope\",\n\t\"selected\",\n\t\"shape\",\n\t\"size\",\n\t\"sizes\",\n\t\"slot\",\n\t\"span\",\n\t\"srclang\",\n\t\"start\",\n\t\"src\",\n\t\"srcset\",\n\t\"step\",\n\t\"style\",\n\t\"summary\",\n\t\"tabindex\",\n\t\"title\",\n\t\"translate\",\n\t\"type\",\n\t\"usemap\",\n\t\"valign\",\n\t\"value\",\n\t\"width\",\n\t\"wrap\",\n\t\"xmlns\"\n]);\nconst svg = freeze([\n\t\"accent-height\",\n\t\"accumulate\",\n\t\"additive\",\n\t\"alignment-baseline\",\n\t\"amplitude\",\n\t\"ascent\",\n\t\"attributename\",\n\t\"attributetype\",\n\t\"azimuth\",\n\t\"basefrequency\",\n\t\"baseline-shift\",\n\t\"begin\",\n\t\"bias\",\n\t\"by\",\n\t\"class\",\n\t\"clip\",\n\t\"clippathunits\",\n\t\"clip-path\",\n\t\"clip-rule\",\n\t\"color\",\n\t\"color-interpolation\",\n\t\"color-interpolation-filters\",\n\t\"color-profile\",\n\t\"color-rendering\",\n\t\"cx\",\n\t\"cy\",\n\t\"d\",\n\t\"dx\",\n\t\"dy\",\n\t\"diffuseconstant\",\n\t\"direction\",\n\t\"display\",\n\t\"divisor\",\n\t\"dominant-baseline\",\n\t\"dur\",\n\t\"edgemode\",\n\t\"elevation\",\n\t\"end\",\n\t\"exponent\",\n\t\"fill\",\n\t\"fill-opacity\",\n\t\"fill-rule\",\n\t\"filter\",\n\t\"filterunits\",\n\t\"flood-color\",\n\t\"flood-opacity\",\n\t\"font-family\",\n\t\"font-size\",\n\t\"font-size-adjust\",\n\t\"font-stretch\",\n\t\"font-style\",\n\t\"font-variant\",\n\t\"font-weight\",\n\t\"fx\",\n\t\"fy\",\n\t\"g1\",\n\t\"g2\",\n\t\"glyph-name\",\n\t\"glyphref\",\n\t\"gradientunits\",\n\t\"gradienttransform\",\n\t\"height\",\n\t\"href\",\n\t\"id\",\n\t\"image-rendering\",\n\t\"in\",\n\t\"in2\",\n\t\"intercept\",\n\t\"k\",\n\t\"k1\",\n\t\"k2\",\n\t\"k3\",\n\t\"k4\",\n\t\"kerning\",\n\t\"keypoints\",\n\t\"keysplines\",\n\t\"keytimes\",\n\t\"lang\",\n\t\"lengthadjust\",\n\t\"letter-spacing\",\n\t\"kernelmatrix\",\n\t\"kernelunitlength\",\n\t\"lighting-color\",\n\t\"local\",\n\t\"marker-end\",\n\t\"marker-mid\",\n\t\"marker-start\",\n\t\"markerheight\",\n\t\"markerunits\",\n\t\"markerwidth\",\n\t\"maskcontentunits\",\n\t\"maskunits\",\n\t\"max\",\n\t\"mask\",\n\t\"mask-type\",\n\t\"media\",\n\t\"method\",\n\t\"mode\",\n\t\"min\",\n\t\"name\",\n\t\"numoctaves\",\n\t\"offset\",\n\t\"operator\",\n\t\"opacity\",\n\t\"order\",\n\t\"orient\",\n\t\"orientation\",\n\t\"origin\",\n\t\"overflow\",\n\t\"paint-order\",\n\t\"path\",\n\t\"pathlength\",\n\t\"patterncontentunits\",\n\t\"patterntransform\",\n\t\"patternunits\",\n\t\"pointer-events\",\n\t\"points\",\n\t\"preservealpha\",\n\t\"preserveaspectratio\",\n\t\"primitiveunits\",\n\t\"r\",\n\t\"rx\",\n\t\"ry\",\n\t\"radius\",\n\t\"refx\",\n\t\"refy\",\n\t\"repeatcount\",\n\t\"repeatdur\",\n\t\"restart\",\n\t\"result\",\n\t\"rotate\",\n\t\"scale\",\n\t\"seed\",\n\t\"shape-rendering\",\n\t\"slope\",\n\t\"specularconstant\",\n\t\"specularexponent\",\n\t\"spreadmethod\",\n\t\"startoffset\",\n\t\"stddeviation\",\n\t\"stitchtiles\",\n\t\"stop-color\",\n\t\"stop-opacity\",\n\t\"stroke-dasharray\",\n\t\"stroke-dashoffset\",\n\t\"stroke-linecap\",\n\t\"stroke-linejoin\",\n\t\"stroke-miterlimit\",\n\t\"stroke-opacity\",\n\t\"stroke\",\n\t\"stroke-width\",\n\t\"style\",\n\t\"surfacescale\",\n\t\"systemlanguage\",\n\t\"tabindex\",\n\t\"tablevalues\",\n\t\"targetx\",\n\t\"targety\",\n\t\"transform\",\n\t\"transform-origin\",\n\t\"text-anchor\",\n\t\"text-decoration\",\n\t\"text-orientation\",\n\t\"text-rendering\",\n\t\"textlength\",\n\t\"type\",\n\t\"u1\",\n\t\"u2\",\n\t\"unicode\",\n\t\"values\",\n\t\"vector-effect\",\n\t\"viewbox\",\n\t\"visibility\",\n\t\"version\",\n\t\"vert-adv-y\",\n\t\"vert-origin-x\",\n\t\"vert-origin-y\",\n\t\"width\",\n\t\"word-spacing\",\n\t\"wrap\",\n\t\"writing-mode\",\n\t\"xchannelselector\",\n\t\"ychannelselector\",\n\t\"x\",\n\t\"x1\",\n\t\"x2\",\n\t\"xmlns\",\n\t\"y\",\n\t\"y1\",\n\t\"y2\",\n\t\"z\",\n\t\"zoomandpan\"\n]);\nconst mathMl = freeze([\n\t\"accent\",\n\t\"accentunder\",\n\t\"align\",\n\t\"bevelled\",\n\t\"close\",\n\t\"columnalign\",\n\t\"columnlines\",\n\t\"columnspacing\",\n\t\"columnspan\",\n\t\"denomalign\",\n\t\"depth\",\n\t\"dir\",\n\t\"display\",\n\t\"displaystyle\",\n\t\"encoding\",\n\t\"fence\",\n\t\"frame\",\n\t\"height\",\n\t\"href\",\n\t\"id\",\n\t\"largeop\",\n\t\"length\",\n\t\"linethickness\",\n\t\"lquote\",\n\t\"lspace\",\n\t\"mathbackground\",\n\t\"mathcolor\",\n\t\"mathsize\",\n\t\"mathvariant\",\n\t\"maxsize\",\n\t\"minsize\",\n\t\"movablelimits\",\n\t\"notation\",\n\t\"numalign\",\n\t\"open\",\n\t\"rowalign\",\n\t\"rowlines\",\n\t\"rowspacing\",\n\t\"rowspan\",\n\t\"rspace\",\n\t\"rquote\",\n\t\"scriptlevel\",\n\t\"scriptminsize\",\n\t\"scriptsizemultiplier\",\n\t\"selection\",\n\t\"separator\",\n\t\"separators\",\n\t\"stretchy\",\n\t\"subscriptshift\",\n\t\"supscriptshift\",\n\t\"symmetric\",\n\t\"voffset\",\n\t\"width\",\n\t\"xmlns\"\n]);\nconst xml = freeze([\n\t\"xlink:href\",\n\t\"xml:id\",\n\t\"xlink:title\",\n\t\"xml:space\",\n\t\"xmlns:xlink\"\n]);\nconst MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nconst ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/);\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\nconst ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nconst COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nconst FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nconst SELF_CLOSING_TAG = seal(/\\/>/i);\nconst NODE_TYPE = {\n\telement: 1,\n\tattribute: 2,\n\ttext: 3,\n\tcdataSection: 4,\n\tentityReference: 5,\n\tentityNode: 6,\n\tprocessingInstruction: 7,\n\tcomment: 8,\n\tdocument: 9,\n\tdocumentType: 10,\n\tdocumentFragment: 11,\n\tnotation: 12\n};\nconst LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, [\n\t\"style\",\n\t\"script\",\n\t\"xmp\",\n\t\"iframe\",\n\t\"noembed\",\n\t\"noframes\",\n\t\"plaintext\",\n\t\"noscript\"\n]));\nconst getGlobal = function getGlobal() {\n\treturn typeof window === \"undefined\" ? null : window;\n};\n/**\n* Creates a no-op policy for internal use only.\n* Don't export this function outside this module!\n* @param trustedTypes The policy factory.\n* @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n* @return The policy created (or null, if Trusted Types\n* are not supported or creating the policy failed).\n*/\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n\tif (typeof trustedTypes !== \"object\" || typeof trustedTypes.createPolicy !== \"function\") return null;\n\tlet suffix = null;\n\tconst ATTR_NAME = \"data-tt-policy-suffix\";\n\tif (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);\n\tconst policyName = \"dompurify\" + (suffix ? \"#\" + suffix : \"\");\n\ttry {\n\t\treturn trustedTypes.createPolicy(policyName, {\n\t\t\tcreateHTML(html) {\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tcreateScriptURL(scriptUrl) {\n\t\t\t\treturn scriptUrl;\n\t\t\t}\n\t\t});\n\t} catch (_) {\n\t\tconsole.warn(\"TrustedTypes policy \" + policyName + \" could not be created.\");\n\t\treturn null;\n\t}\n};\nconst _createHooksMap = function _createHooksMap() {\n\treturn {\n\t\tafterSanitizeAttributes: [],\n\t\tafterSanitizeElements: [],\n\t\tafterSanitizeShadowDOM: [],\n\t\tbeforeSanitizeAttributes: [],\n\t\tbeforeSanitizeElements: [],\n\t\tbeforeSanitizeShadowDOM: [],\n\t\tuponSanitizeAttribute: [],\n\t\tuponSanitizeElement: [],\n\t\tuponSanitizeShadowNode: []\n\t};\n};\n/**\n* Resolve a set-valued configuration option: a fresh set built from\n* cfg[key] when it is an own array property (seeded with a clone of\n* options.base when given, case-normalized via options.transform),\n* the fallback set otherwise.\n*\n* @param cfg the cloned, prototype-free configuration object\n* @param key the configuration property to read\n* @param fallback the set to use when the option is absent or not an array\n* @param options transform and optional base set to merge into\n* @returns the resolved set\n*/\nconst _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {\n\treturn objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;\n};\n/**\n* Resolve an object-valued configuration option: a prototype-free clone\n* of cfg[key] when it is an own, truthy object property, else a fresh\n* fallback built by makeFallback (fresh on every parse, so a previous\n* parse can never leak state into the next one).\n*\n* @param cfg the cloned, prototype-free configuration object\n* @param key the configuration property to read\n* @param makeFallback builds the fallback value when the option is absent\n* @returns the resolved object\n*/\nconst _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback) {\n\tconst value = objectHasOwnProperty(cfg, key) ? cfg[key] : void 0;\n\treturn value && typeof value === \"object\" ? clone(value) : makeFallback();\n};\nfunction createDOMPurify() {\n\tlet window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();\n\tconst DOMPurify = (root) => createDOMPurify(root);\n\tDOMPurify.version = \"3.4.17\";\n\tDOMPurify.removed = [];\n\tif (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n\t\tDOMPurify.isSupported = false;\n\t\treturn DOMPurify;\n\t}\n\tlet document = window.document;\n\tconst originalDocument = document;\n\tconst currentScript = originalDocument.currentScript;\n\twindow.DocumentFragment;\n\tconst HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter;\n\twindow.NamedNodeMap === void 0 && (window.NamedNodeMap || window.MozNamedAttrMap);\n\twindow.HTMLFormElement;\n\tconst DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n\tconst ElementPrototype = Element.prototype;\n\tconst cloneNode = lookupGetter(ElementPrototype, \"cloneNode\");\n\tconst remove = lookupGetter(ElementPrototype, \"remove\");\n\tconst removeAttributeNode = lookupGetter(ElementPrototype, \"removeAttributeNode\");\n\tconst getNextSibling = lookupGetter(ElementPrototype, \"nextSibling\");\n\tconst getChildNodes = lookupGetter(ElementPrototype, \"childNodes\");\n\tconst getParentNode = lookupGetter(ElementPrototype, \"parentNode\");\n\tconst getShadowRoot = lookupGetter(ElementPrototype, \"shadowRoot\");\n\tconst getAttributes = lookupGetter(ElementPrototype, \"attributes\");\n\tconst getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, \"nodeType\") : null;\n\tconst getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, \"nodeName\") : null;\n\tconst getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, \"ownerDocument\") : null;\n\tconst _readNodeType = function _readNodeType(node) {\n\t\treturn getNodeType ? getNodeType(node) : node.nodeType;\n\t};\n\tconst _readNodeName = function _readNodeName(node) {\n\t\treturn getNodeName ? getNodeName(node) : node.nodeName;\n\t};\n\tconst getNamespaceURI = lookupAccessor(ElementPrototype, \"namespaceURI\");\n\tconst _readNamespaceURI = function _readNamespaceURI(element) {\n\t\treturn getNamespaceURI ? getNamespaceURI(element) : element.namespaceURI;\n\t};\n\tif (typeof HTMLTemplateElement === \"function\") {\n\t\tconst template = document.createElement(\"template\");\n\t\tif (template.content && template.content.ownerDocument) document = template.content.ownerDocument;\n\t}\n\tlet trustedTypesPolicy;\n\tlet emptyHTML = \"\";\n\tlet defaultTrustedTypesPolicy;\n\tlet defaultTrustedTypesPolicyResolved = false;\n\tlet IN_TRUSTED_TYPES_POLICY = 0;\n\tconst _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {\n\t\tif (IN_TRUSTED_TYPES_POLICY > 0) throw typeErrorCreate(\"A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the \\\"DOMPurify and Trusted Types\\\" section of the README.\");\n\t};\n\tconst _createTrustedHTML = function _createTrustedHTML(html) {\n\t\t_assertNotInTrustedTypesPolicy();\n\t\tIN_TRUSTED_TYPES_POLICY++;\n\t\ttry {\n\t\t\treturn trustedTypesPolicy.createHTML(html);\n\t\t} finally {\n\t\t\tIN_TRUSTED_TYPES_POLICY--;\n\t\t}\n\t};\n\tconst _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {\n\t\t_assertNotInTrustedTypesPolicy();\n\t\tIN_TRUSTED_TYPES_POLICY++;\n\t\ttry {\n\t\t\treturn trustedTypesPolicy.createScriptURL(scriptUrl);\n\t\t} finally {\n\t\t\tIN_TRUSTED_TYPES_POLICY--;\n\t\t}\n\t};\n\tconst _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {\n\t\tif (!defaultTrustedTypesPolicyResolved) {\n\t\t\tdefaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n\t\t\tdefaultTrustedTypesPolicyResolved = true;\n\t\t}\n\t\treturn defaultTrustedTypesPolicy;\n\t};\n\tconst _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n\tconst importNode = originalDocument.importNode;\n\tlet hooks = _createHooksMap();\n\t/**\n\t* Expose whether this browser supports running the full DOMPurify.\n\t*/\n\tDOMPurify.isSupported = typeof entries === \"function\" && typeof getParentNode === \"function\" && implementation && implementation.createHTMLDocument !== void 0;\n\tconst MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE, CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n\tlet IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n\t/**\n\t* We consider the elements and attributes below to be safe. Ideally\n\t* don't add any new ones but feel free to remove unwanted ones.\n\t*/\n\tlet ALLOWED_TAGS = null;\n\tconst DEFAULT_ALLOWED_TAGS = addToSet({}, [\n\t\t...html$1,\n\t\t...svg$1,\n\t\t...svgFilters,\n\t\t...mathMl$1,\n\t\t...text\n\t]);\n\tlet ALLOWED_ATTR = null;\n\tconst DEFAULT_ALLOWED_ATTR = addToSet({}, [\n\t\t...html,\n\t\t...svg,\n\t\t...mathMl,\n\t\t...xml\n\t]);\n\tlet CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n\t\ttagNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tallowCustomizedBuiltInElements: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: false\n\t\t}\n\t}));\n\tlet FORBID_TAGS = null;\n\tlet FORBID_ATTR = null;\n\tconst EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n\t\ttagCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t}\n\t}));\n\tlet ALLOW_ARIA_ATTR = true;\n\tlet ALLOW_DATA_ATTR = true;\n\tlet ALLOW_UNKNOWN_PROTOCOLS = false;\n\tlet ALLOW_SELF_CLOSE_IN_ATTR = true;\n\tlet SAFE_FOR_TEMPLATES = false;\n\tlet SAFE_FOR_XML = true;\n\tlet WHOLE_DOCUMENT = false;\n\tlet SET_CONFIG = false;\n\tlet SET_CONFIG_ALLOWED_TAGS = null;\n\tlet SET_CONFIG_ALLOWED_ATTR = null;\n\tlet FORCE_BODY = false;\n\tlet RETURN_DOM = false;\n\tlet RETURN_DOM_FRAGMENT = false;\n\tlet RETURN_TRUSTED_TYPE = false;\n\tlet SANITIZE_DOM = true;\n\tlet SANITIZE_NAMED_PROPS = false;\n\tconst SANITIZE_NAMED_PROPS_PREFIX = \"user-content-\";\n\tlet KEEP_CONTENT = true;\n\tlet IN_PLACE = false;\n\tlet IN_PLACE_VISITED = null;\n\tlet USE_PROFILES = {};\n\tlet FORBID_CONTENTS = null;\n\tconst DEFAULT_FORBID_CONTENTS = addToSet({}, [\n\t\t\"annotation-xml\",\n\t\t\"audio\",\n\t\t\"colgroup\",\n\t\t\"desc\",\n\t\t\"foreignobject\",\n\t\t\"head\",\n\t\t\"iframe\",\n\t\t\"math\",\n\t\t\"mi\",\n\t\t\"mn\",\n\t\t\"mo\",\n\t\t\"ms\",\n\t\t\"mtext\",\n\t\t\"noembed\",\n\t\t\"noframes\",\n\t\t\"noscript\",\n\t\t\"plaintext\",\n\t\t\"script\",\n\t\t\"selectedcontent\",\n\t\t\"style\",\n\t\t\"svg\",\n\t\t\"template\",\n\t\t\"thead\",\n\t\t\"title\",\n\t\t\"video\",\n\t\t\"xmp\"\n\t]);\n\tlet DATA_URI_TAGS = null;\n\tconst DEFAULT_DATA_URI_TAGS = addToSet({}, [\n\t\t\"audio\",\n\t\t\"video\",\n\t\t\"img\",\n\t\t\"source\",\n\t\t\"image\",\n\t\t\"track\"\n\t]);\n\tlet URI_SAFE_ATTRIBUTES = null;\n\tconst DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n\t\t\"alt\",\n\t\t\"class\",\n\t\t\"for\",\n\t\t\"id\",\n\t\t\"label\",\n\t\t\"name\",\n\t\t\"pattern\",\n\t\t\"placeholder\",\n\t\t\"role\",\n\t\t\"summary\",\n\t\t\"title\",\n\t\t\"value\",\n\t\t\"style\",\n\t\t\"xmlns\"\n\t]);\n\tconst MATHML_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\";\n\tconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\n\tconst HTML_NAMESPACE = \"http://www.w3.org/1999/xhtml\";\n\tlet NAMESPACE = HTML_NAMESPACE;\n\tlet IS_EMPTY_INPUT = false;\n\tlet ALLOWED_NAMESPACES = null;\n\tconst DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [\n\t\tMATHML_NAMESPACE,\n\t\tSVG_NAMESPACE,\n\t\tHTML_NAMESPACE\n\t], stringToString);\n\tconst DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze([\n\t\t\"mi\",\n\t\t\"mo\",\n\t\t\"mn\",\n\t\t\"ms\",\n\t\t\"mtext\"\n\t]);\n\tlet MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);\n\tconst DEFAULT_HTML_INTEGRATION_POINTS = freeze([\"annotation-xml\"]);\n\tlet HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);\n\tconst COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n\t\t\"title\",\n\t\t\"style\",\n\t\t\"font\",\n\t\t\"a\",\n\t\t\"script\"\n\t]);\n\tlet PARSER_MEDIA_TYPE = null;\n\tconst SUPPORTED_PARSER_MEDIA_TYPES = [\"application/xhtml+xml\", \"text/html\"];\n\tconst DEFAULT_PARSER_MEDIA_TYPE = \"text/html\";\n\tlet transformCaseFunc = null;\n\tlet CONFIG = null;\n\tconst formElement = document.createElement(\"form\");\n\tconst isRegexOrFunction = function isRegexOrFunction(testValue) {\n\t\treturn testValue instanceof RegExp || testValue instanceof Function;\n\t};\n\t/**\n\t* _parseConfig\n\t*\n\t* @param cfg optional config literal\n\t*/\n\tconst _parseConfig = function _parseConfig() {\n\t\tlet cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n\t\tif (CONFIG && CONFIG === cfg) return;\n\t\tif (!cfg || typeof cfg !== \"object\") cfg = {};\n\t\tcfg = clone(cfg);\n\t\tPARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\t\ttransformCaseFunc = PARSER_MEDIA_TYPE === \"application/xhtml+xml\" ? stringToString : stringToLowerCase;\n\t\tALLOWED_TAGS = _resolveSetOption(cfg, \"ALLOWED_TAGS\", DEFAULT_ALLOWED_TAGS, { transform: transformCaseFunc });\n\t\tALLOWED_ATTR = _resolveSetOption(cfg, \"ALLOWED_ATTR\", DEFAULT_ALLOWED_ATTR, { transform: transformCaseFunc });\n\t\tALLOWED_NAMESPACES = _resolveSetOption(cfg, \"ALLOWED_NAMESPACES\", DEFAULT_ALLOWED_NAMESPACES, { transform: stringToString });\n\t\tURI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, \"ADD_URI_SAFE_ATTR\", DEFAULT_URI_SAFE_ATTRIBUTES, {\n\t\t\ttransform: transformCaseFunc,\n\t\t\tbase: DEFAULT_URI_SAFE_ATTRIBUTES\n\t\t});\n\t\tDATA_URI_TAGS = _resolveSetOption(cfg, \"ADD_DATA_URI_TAGS\", DEFAULT_DATA_URI_TAGS, {\n\t\t\ttransform: transformCaseFunc,\n\t\t\tbase: DEFAULT_DATA_URI_TAGS\n\t\t});\n\t\tFORBID_CONTENTS = _resolveSetOption(cfg, \"FORBID_CONTENTS\", DEFAULT_FORBID_CONTENTS, { transform: transformCaseFunc });\n\t\tFORBID_TAGS = _resolveSetOption(cfg, \"FORBID_TAGS\", clone({}), { transform: transformCaseFunc });\n\t\tFORBID_ATTR = _resolveSetOption(cfg, \"FORBID_ATTR\", clone({}), { transform: transformCaseFunc });\n\t\tUSE_PROFILES = objectHasOwnProperty(cfg, \"USE_PROFILES\") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === \"object\" ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;\n\t\tALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n\t\tALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n\t\tALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n\t\tALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;\n\t\tSAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n\t\tSAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;\n\t\tWHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n\t\tRETURN_DOM = cfg.RETURN_DOM || false;\n\t\tRETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n\t\tRETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n\t\tFORCE_BODY = cfg.FORCE_BODY || false;\n\t\tSANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n\t\tSANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;\n\t\tKEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n\t\tIN_PLACE = cfg.IN_PLACE || false;\n\t\tIS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI;\n\t\tNAMESPACE = typeof cfg.NAMESPACE === \"string\" ? cfg.NAMESPACE : HTML_NAMESPACE;\n\t\tMATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, \"MATHML_TEXT_INTEGRATION_POINTS\", () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));\n\t\tHTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, \"HTML_INTEGRATION_POINTS\", () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS));\n\t\tconst customElementHandling = _resolveObjectOption(cfg, \"CUSTOM_ELEMENT_HANDLING\", () => create(null));\n\t\tCUSTOM_ELEMENT_HANDLING = create(null);\n\t\tif (objectHasOwnProperty(customElementHandling, \"tagNameCheck\") && isRegexOrFunction(customElementHandling.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;\n\t\tif (objectHasOwnProperty(customElementHandling, \"attributeNameCheck\") && isRegexOrFunction(customElementHandling.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;\n\t\tif (objectHasOwnProperty(customElementHandling, \"allowCustomizedBuiltInElements\") && typeof customElementHandling.allowCustomizedBuiltInElements === \"boolean\") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;\n\t\tseal(CUSTOM_ELEMENT_HANDLING);\n\t\tif (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;\n\t\tif (RETURN_DOM_FRAGMENT) RETURN_DOM = true;\n\t\tif (USE_PROFILES) {\n\t\t\tALLOWED_TAGS = addToSet({}, text);\n\t\t\tALLOWED_ATTR = create(null);\n\t\t\tif (USE_PROFILES.html === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, html$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, html);\n\t\t\t}\n\t\t\tif (USE_PROFILES.svg === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svg$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t\tif (USE_PROFILES.svgFilters === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svgFilters);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t\tif (USE_PROFILES.mathMl === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, mathMl$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, mathMl);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t}\n\t\tEXTRA_ELEMENT_HANDLING.tagCheck = null;\n\t\tEXTRA_ELEMENT_HANDLING.attributeCheck = null;\n\t\tif (objectHasOwnProperty(cfg, \"ADD_TAGS\")) {\n\t\t\tif (typeof cfg.ADD_TAGS === \"function\") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n\t\t\telse if (arrayIsArray(cfg.ADD_TAGS)) {\n\t\t\t\tif (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);\n\t\t\t\taddToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n\t\t\t}\n\t\t}\n\t\tif (objectHasOwnProperty(cfg, \"ADD_ATTR\")) {\n\t\t\tif (typeof cfg.ADD_ATTR === \"function\") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n\t\t\telse if (arrayIsArray(cfg.ADD_ATTR)) {\n\t\t\t\tif (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);\n\t\t\t\taddToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n\t\t\t}\n\t\t}\n\t\tif (objectHasOwnProperty(cfg, \"ADD_FORBID_CONTENTS\") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n\t\t\tif (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);\n\t\t\taddToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n\t\t}\n\t\tif (KEEP_CONTENT) ALLOWED_TAGS[\"#text\"] = true;\n\t\tif (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [\n\t\t\t\"html\",\n\t\t\t\"head\",\n\t\t\t\"body\"\n\t\t]);\n\t\tif (ALLOWED_TAGS.table) {\n\t\t\taddToSet(ALLOWED_TAGS, [\"tbody\"]);\n\t\t\tdelete FORBID_TAGS.tbody;\n\t\t}\n\t\tif (cfg.TRUSTED_TYPES_POLICY) {\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== \"function\") throw typeErrorCreate(\"TRUSTED_TYPES_POLICY configuration option must provide a \\\"createHTML\\\" hook.\");\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== \"function\") throw typeErrorCreate(\"TRUSTED_TYPES_POLICY configuration option must provide a \\\"createScriptURL\\\" hook.\");\n\t\t\tconst previousTrustedTypesPolicy = trustedTypesPolicy;\n\t\t\ttrustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\t\t\ttry {\n\t\t\t\temptyHTML = _createTrustedHTML(\"\");\n\t\t\t} catch (error) {\n\t\t\t\ttrustedTypesPolicy = previousTrustedTypesPolicy;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else if (cfg.TRUSTED_TYPES_POLICY === null) {\n\t\t\ttrustedTypesPolicy = void 0;\n\t\t\temptyHTML = \"\";\n\t\t} else {\n\t\t\tif (trustedTypesPolicy === void 0) trustedTypesPolicy = _getDefaultTrustedTypesPolicy();\n\t\t\tif (trustedTypesPolicy && typeof emptyHTML === \"string\") emptyHTML = _createTrustedHTML(\"\");\n\t\t}\n\t\tif (freeze) freeze(cfg);\n\t\tCONFIG = cfg;\n\t};\n\tconst ALL_SVG_TAGS = addToSet({}, [\n\t\t...svg$1,\n\t\t...svgFilters,\n\t\t...svgDisallowed\n\t]);\n\tconst ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\t/**\n\t* Namespace rules for an element in the SVG namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === HTML_NAMESPACE) return tagName === \"svg\";\n\t\tif (parent.namespaceURI === MATHML_NAMESPACE) return tagName === \"svg\" && (parentTagName === \"annotation-xml\" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n\t\treturn Boolean(ALL_SVG_TAGS[tagName]);\n\t};\n\t/**\n\t* Namespace rules for an element in the MathML namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === HTML_NAMESPACE) return tagName === \"math\";\n\t\tif (parent.namespaceURI === SVG_NAMESPACE) return tagName === \"math\" && HTML_INTEGRATION_POINTS[parentTagName];\n\t\treturn Boolean(ALL_MATHML_TAGS[tagName]);\n\t};\n\t/**\n\t* Namespace rules for an element in the HTML namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;\n\t\tif (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;\n\t\treturn !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n\t};\n\t/**\n\t* @param element a DOM element whose namespace is being checked\n\t* @returns Return false if the element has a\n\t* namespace that a spec-compliant parser would never\n\t* return. Return true otherwise.\n\t*/\n\tconst _checkValidNamespace = function _checkValidNamespace(element) {\n\t\tconst elementNamespace = _readNamespaceURI(element);\n\t\tconst tagName = stringToLowerCase(_readNodeName(element));\n\t\tconst parentNode = getParentNode(element);\n\t\tlet parent;\n\t\tlet parentTagName;\n\t\tif (parentNode && _readNodeType(parentNode) === NODE_TYPE.element) {\n\t\t\tparent = { namespaceURI: _readNamespaceURI(parentNode) };\n\t\t\tparentTagName = stringToLowerCase(_readNodeName(parentNode));\n\t\t} else {\n\t\t\tparent = { namespaceURI: NAMESPACE };\n\t\t\tparentTagName = \"template\";\n\t\t}\n\t\tif (!ALLOWED_NAMESPACES[elementNamespace]) return false;\n\t\tif (elementNamespace === SVG_NAMESPACE) return _checkSvgNamespace(tagName, parent, parentTagName);\n\t\tif (elementNamespace === MATHML_NAMESPACE) return _checkMathMlNamespace(tagName, parent, parentTagName);\n\t\tif (elementNamespace === HTML_NAMESPACE) return _checkHtmlNamespace(tagName, parent, parentTagName);\n\t\tif (PARSER_MEDIA_TYPE === \"application/xhtml+xml\" && ALLOWED_NAMESPACES[elementNamespace]) return true;\n\t\treturn false;\n\t};\n\t/**\n\t* _forceRemove\n\t*\n\t* @param node a DOM node\n\t*/\n\tconst _forceRemove = function _forceRemove(node) {\n\t\tarrayPush(DOMPurify.removed, { element: node });\n\t\ttry {\n\t\t\tgetParentNode(node).removeChild(node);\n\t\t} catch (_) {\n\t\t\tremove(node);\n\t\t\tif (!getParentNode(node)) throw typeErrorCreate(\"a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place\");\n\t\t}\n\t};\n\t/**\n\t* _stripAttributeNode\n\t*\n\t* Remove a single Attr node case/namespace-exactly on an attribute-teardown\n\t* path. Name-based removeAttribute() ASCII-lowercases its lookup key for an\n\t* HTML element in an HTML document and so silently misses a case-preserved\n\t* handler (e.g. `ONERROR` off an XML/XHTML import) - the same defect\n\t* _removeAttribute() was fixed for, which a name-based call would reintroduce\n\t* on these IN_PLACE teardown paths. Unlike _removeAttribute this does not\n\t* record into DOMPurify.removed: the neutralize passes intentionally do not\n\t* book-keep. A clobbered/detached node falls back to best-effort name-based\n\t* removal.\n\t*\n\t* @param element the element to strip the attribute from\n\t* @param attribute the Attr node to remove\n\t* @param name the attribute's name, for the fallback path\n\t*/\n\tconst _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {\n\t\ttry {\n\t\t\tremoveAttributeNode(element, attribute);\n\t\t} catch (_) {\n\t\t\ttry {\n\t\t\t\telement.removeAttribute(name);\n\t\t\t} catch (_) {}\n\t\t}\n\t};\n\t/**\n\t* Fail-closed teardown of an in-place root: strip every disallowed attribute\n\t* in the subtree first, so nothing armed is left behind, then remove all\n\t* children and the root's own attributes.\n\t*\n\t* @param root the in-place root to empty\n\t*/\n\tconst _neutralizeRoot = function _neutralizeRoot(root) {\n\t\t_neutralizeSubtree(root);\n\t\tconst childNodes = getChildNodes(root);\n\t\tif (childNodes) arrayForEach(arraySlice(childNodes), (child) => {\n\t\t\ttry {\n\t\t\t\tremove(child);\n\t\t\t} catch (_) {}\n\t\t});\n\t\tconst attributes = _readNodeType(root) === NODE_TYPE.element ? getAttributes(root) : null;\n\t\tif (attributes) for (let i = attributes.length - 1; i >= 0; --i) {\n\t\t\tconst attribute = attributes[i];\n\t\t\tconst name = attribute && attribute.name;\n\t\t\tif (typeof name === \"string\") _stripAttributeNode(root, attribute, name);\n\t\t}\n\t};\n\t/**\n\t* Removes an attribute, preferably as its exact Attr node: name-based\n\t* removal lowercases the name in HTML documents and misses case-preserved\n\t* names, e.g. from imported XHTML.\n\t*\n\t* @param name an Attribute name\n\t* @param element a DOM node\n\t* @param attr the exact Attr node to remove, when the caller has it\n\t*/\n\tconst _removeAttribute = function _removeAttribute(name, element, attr) {\n\t\tif (!attr) try {\n\t\t\tattr = element.getAttributeNode(name);\n\t\t} catch (_) {\n\t\t\tattr = null;\n\t\t}\n\t\tarrayPush(DOMPurify.removed, {\n\t\t\tattribute: attr || null,\n\t\t\tfrom: element\n\t\t});\n\t\ttry {\n\t\t\tif (attr) removeAttributeNode(element, attr);\n\t\t\telse element.removeAttribute(name);\n\t\t} catch (_) {\n\t\t\ttry {\n\t\t\t\telement.removeAttribute(name);\n\t\t\t} catch (_) {}\n\t\t}\n\t\tif (name === \"is\") {\n\t\t\tif (RETURN_DOM || RETURN_DOM_FRAGMENT) try {\n\t\t\t\t_forceRemove(element);\n\t\t\t} catch (_) {}\n\t\t\telse try {\n\t\t\t\telement.setAttribute(name, \"\");\n\t\t\t} catch (_) {}\n\t\t}\n\t};\n\t/**\n\t* Removes every attribute the configuration does not allow. Used to\n\t* neutralize nodes discarded from an in-place tree.\n\t*\n\t* @param element the element to strip\n\t*/\n\tconst _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {\n\t\tconst attributes = getAttributes(element);\n\t\tif (!attributes) return;\n\t\tfor (let i = attributes.length - 1; i >= 0; --i) {\n\t\t\tconst attribute = attributes[i];\n\t\t\tconst name = attribute && attribute.name;\n\t\t\tif (typeof name !== \"string\" || ALLOWED_ATTR[transformCaseFunc(name)]) continue;\n\t\t\t_stripAttributeNode(element, attribute, name);\n\t\t}\n\t};\n\t/**\n\t* Iterative depth-first walk, so deep trees cannot overflow the call stack,\n\t* reading through the cached getters, so clobbering cannot hide children.\n\t* When `visit` returns false, the node's children are skipped. With\n\t* `intoShadow`, open shadow roots are walked after their host's children.\n\t*\n\t* @param root where to start\n\t* @param visit called for every node\n\t* @param intoShadow whether to enter open shadow roots\n\t*/\n\tconst _walkTree = function _walkTree(root, visit) {\n\t\tlet intoShadow = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n\t\tconst stack = [root];\n\t\twhile (stack.length > 0) {\n\t\t\tconst node = stack.pop();\n\t\t\tif (visit(node) === false) continue;\n\t\t\tif (intoShadow && _readNodeType(node) === NODE_TYPE.element) {\n\t\t\t\tconst shadowRoot = getShadowRoot(node);\n\t\t\t\tif (_isDocumentFragment(shadowRoot)) stack.push(shadowRoot);\n\t\t\t}\n\t\t\tconst childNodes = getChildNodes(node);\n\t\t\tif (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push(childNodes[i]);\n\t\t}\n\t};\n\t/**\n\t* Strips disallowed attributes from every element of a discarded subtree,\n\t* so a handler that is already queued (a loading image) cannot fire.\n\t*\n\t* @param root the root of a removed subtree\n\t*/\n\tconst _neutralizeSubtree = function _neutralizeSubtree(root) {\n\t\t_walkTree(root, (node) => {\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element) _stripDisallowedAttributes(node);\n\t\t});\n\t};\n\t/**\n\t* All nodes under `root`, root first, including open shadow roots. Template\n\t* content is not entered, it is inert.\n\t*\n\t* @param root the in-place root\n\t* @return the nodes\n\t*/\n\tconst _collectLiveNodes = function _collectLiveNodes(root) {\n\t\tconst nodes = [];\n\t\t_walkTree(root, (node) => {\n\t\t\tnodes.push(node);\n\t\t}, true);\n\t\treturn nodes;\n\t};\n\t/**\n\t* Strips disallowed attributes from every element that was under the\n\t* in-place root when the call started and no longer is, whatever removed\n\t* or moved it.\n\t*\n\t* @param root the in-place root\n\t* @param before the root's nodes, collected before the walk\n\t*/\n\tconst _neutralizeEscapedElements = function _neutralizeEscapedElements(root, before) {\n\t\tconst reachable = setCreate();\n\t\tarrayForEach(_collectLiveNodes(root), (node) => {\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element) setAdd(reachable, node);\n\t\t});\n\t\tarrayForEach(before, (node) => {\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element && !setHas(reachable, node)) _stripDisallowedAttributes(node);\n\t\t});\n\t};\n\t/**\n\t* Neutralizes everything that left the in-place tree during the call: what\n\t* DOMPurify removed, and what hooks or custom elements removed or moved out.\n\t*\n\t* @param root the in-place root\n\t* @param before the root's nodes, collected before the walk\n\t* @return true if the root itself was removed\n\t*/\n\tconst _neutralizeDiscarded = function _neutralizeDiscarded(root, before) {\n\t\tlet rootRemoved = false;\n\t\tarrayForEach(DOMPurify.removed, (entry) => {\n\t\t\tif (entry.element) {\n\t\t\t\trootRemoved = rootRemoved || entry.element === root;\n\t\t\t\t_neutralizeSubtree(entry.element);\n\t\t\t}\n\t\t});\n\t\t_neutralizeEscapedElements(root, before);\n\t\treturn rootRemoved;\n\t};\n\tconst MAX_UNVISITED_ROUNDS = 8;\n\t/**\n\t* The walk only moves forward, so a node moved to a position it already\n\t* passed is never visited. Give every original node that is still in the\n\t* tree but unvisited the normal treatment, hooks included. Nodes created\n\t* during the call are left alone. Fails closed if the tree keeps changing.\n\t*\n\t* @param root the in-place root\n\t* @param before the root's nodes, collected before the walk\n\t*/\n\tconst _sanitizeUnvisitedNodes = function _sanitizeUnvisitedNodes(root, before) {\n\t\tconst visited = IN_PLACE_VISITED;\n\t\tlet original = null;\n\t\tconst getOriginal = () => {\n\t\t\tif (!original) {\n\t\t\t\toriginal = setCreate();\n\t\t\t\tarrayForEach(before, (beforeNode) => {\n\t\t\t\t\tsetAdd(original, beforeNode);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn original;\n\t\t};\n\t\tfor (let round = 0;; round++) {\n\t\t\tconst live = _collectLiveNodes(root);\n\t\t\tconst containers = [root];\n\t\t\tlet pending = false;\n\t\t\tarrayForEach(live, (node) => {\n\t\t\t\tif (_readNodeType(node) === NODE_TYPE.documentFragment) arrayPush(containers, node);\n\t\t\t\telse if (!pending && !setHas(visited, node)) pending = setHas(getOriginal(), node);\n\t\t\t});\n\t\t\tif (!pending) return;\n\t\t\tif (round >= MAX_UNVISITED_ROUNDS) throw typeErrorCreate(\"the tree kept changing during in-place sanitization; refusing to return it\");\n\t\t\tarrayForEach(containers, (container, index) => {\n\t\t\t\t_sanitizeUnvisitedIn(container, index > 0, root, getOriginal());\n\t\t\t});\n\t\t}\n\t};\n\t/**\n\t* One _sanitizeUnvisitedNodes pass over the root or an open shadow root.\n\t*\n\t* @param container the root or an open shadow root\n\t* @param inShadow whether container is a shadow root\n\t* @param root the in-place root\n\t* @param original the root's nodes collected before the walk, as a set\n\t*/\n\tconst _sanitizeUnvisitedIn = function _sanitizeUnvisitedIn(container, inShadow, root, original) {\n\t\tconst iterator = _createNodeIterator(container);\n\t\tlet node;\n\t\twhile (node = iterator.nextNode()) {\n\t\t\tif (!setHas(original, node) || setHas(IN_PLACE_VISITED, node)) continue;\n\t\t\tif (inShadow) _executeHooks(hooks.uponSanitizeShadowNode, node, null);\n\t\t\t_sanitizeElements(node, root);\n\t\t\t_sanitizeAttributes(node, root);\n\t\t\tif (_isDocumentFragment(node.content)) _sanitizeShadowDOM2(node.content);\n\t\t}\n\t};\n\t/**\n\t* Records that _sanitizeElements processed `node`. No-op outside IN_PLACE.\n\t*\n\t* @param node the node being processed\n\t*/\n\tconst _markVisited = function _markVisited(node) {\n\t\tif (IN_PLACE_VISITED) setAdd(IN_PLACE_VISITED, node);\n\t};\n\t/**\n\t* Patch-linkage attributes (declarative partial updates): `patchsrc`\n\t* always, `for` everywhere except on <label> and <output>. Gated on\n\t* SAFE_FOR_XML. Shared by the IN_PLACE pre-pass and _isValidAttribute.\n\t*\n\t* @param lcName the transformCaseFunc'd attribute name\n\t* @param lcTag the transformCaseFunc'd tag name of the carrying element\n\t* @return true if the attribute is patch linkage and must be dropped\n\t*/\n\tconst _isPatchLinkageAttribute = function _isPatchLinkageAttribute(lcName, lcTag) {\n\t\tif (!SAFE_FOR_XML) return false;\n\t\tif (lcName === \"patchsrc\") return true;\n\t\treturn lcName === \"for\" && lcTag !== \"label\" && lcTag !== \"output\";\n\t};\n\t/**\n\t* IN_PLACE pre-pass: sever all patch linkage before the walk, so no patch\n\t* can fire mid-walk into a part of the tree the walker already passed.\n\t* Removes range markers (processing instructions, comments with markup)\n\t* and strips linkage attributes. It cannot undo a patch that already fired.\n\t*\n\t* TODO: if the shipped feature can patch through `for` on <label>/<output>,\n\t* drop that pair here too (see test/declarative-patch-probe.html).\n\t*\n\t* @param root the in-place root to sweep\n\t*/\n\tconst _neutralizePatchLinkage = function _neutralizePatchLinkage(root) {\n\t\tif (!SAFE_FOR_XML) return;\n\t\t_walkTree(root, (node) => {\n\t\t\tconst nodeType = _readNodeType(node);\n\t\t\tif (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {\n\t\t\t\ttry {\n\t\t\t\t\tremove(node);\n\t\t\t\t} catch (_) {}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (nodeType === NODE_TYPE.element) {\n\t\t\t\tconst element = node;\n\t\t\t\tconst lcTag = transformCaseFunc(_readNodeName(node));\n\t\t\t\ttry {\n\t\t\t\t\tif (element.hasAttribute && element.hasAttribute(\"patchsrc\")) element.removeAttribute(\"patchsrc\");\n\t\t\t\t\tif (element.hasAttribute && element.hasAttribute(\"for\") && _isPatchLinkageAttribute(\"for\", lcTag)) element.removeAttribute(\"for\");\n\t\t\t\t} catch (_) {}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t};\n\t/**\n\t* _initDocument\n\t*\n\t* @param dirty - a string of dirty markup\n\t* @return a DOM, filled with the dirty markup\n\t*/\n\tconst _initDocument = function _initDocument(dirty) {\n\t\tlet doc = null;\n\t\tlet leadingWhitespace = null;\n\t\tif (FORCE_BODY) dirty = \"<remove></remove>\" + dirty;\n\t\telse {\n\t\t\tconst matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n\t\t\tleadingWhitespace = matches && matches[0];\n\t\t}\n\t\tif (PARSER_MEDIA_TYPE === \"application/xhtml+xml\" && NAMESPACE === HTML_NAMESPACE) dirty = \"<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\"><head></head><body>\" + dirty + \"</body></html>\";\n\t\tconst dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;\n\t\tif (NAMESPACE === HTML_NAMESPACE) try {\n\t\t\tdoc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n\t\t} catch (_) {}\n\t\tif (!doc || !doc.documentElement) {\n\t\t\tdoc = implementation.createDocument(NAMESPACE, \"template\", null);\n\t\t\ttry {\n\t\t\t\tdoc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n\t\t\t} catch (_) {}\n\t\t}\n\t\tconst body = doc.body || doc.documentElement;\n\t\tif (dirty && leadingWhitespace) body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n\t\tif (NAMESPACE === HTML_NAMESPACE) return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? \"html\" : \"body\")[0];\n\t\treturn WHOLE_DOCUMENT ? doc.documentElement : body;\n\t};\n\t/**\n\t* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n\t*\n\t* @param root The root element or node to start traversing on.\n\t* @return The created NodeIterator\n\t*/\n\tconst _createNodeIterator = function _createNodeIterator(root) {\n\t\tconst doc = getOwnerDocument ? getOwnerDocument(root) : root.ownerDocument;\n\t\treturn createNodeIterator.call(doc || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n\t};\n\t/**\n\t* Replace template expression syntax (mustache, ERB, template\n\t* literal) with a space; shared by all SAFE_FOR_TEMPLATES scrub\n\t* sites. Order matters: mustache, then ERB, then template literal.\n\t*\n\t* @param value the string to scrub\n\t* @returns the scrubbed string\n\t*/\n\tconst _stripTemplateExpressions = function _stripTemplateExpressions(value) {\n\t\tvalue = stringReplace(value, MUSTACHE_EXPR$1, \" \");\n\t\tvalue = stringReplace(value, ERB_EXPR$1, \" \");\n\t\tvalue = stringReplace(value, TMPLIT_EXPR$1, \" \");\n\t\treturn value;\n\t};\n\t/**\n\t* Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n\t* character data of an element subtree. Used as the final safety net for\n\t* SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n\t* which only form after text-node normalization (e.g. fragments split across\n\t* stripped elements) cannot survive into a template-evaluating framework.\n\t*\n\t* Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n\t* in place rather than round-tripping through innerHTML. This preserves\n\t* descendant node references (important for IN_PLACE callers), avoids a\n\t* serialize/reparse cycle, and reads literal character data — which means\n\t* `<%...%>` in text content matches the ERB regex against its real bytes\n\t* instead of the HTML-entity-escaped form innerHTML would produce.\n\t*\n\t* Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n\t* attributes is performed during the per-node `_sanitizeAttributes` pass.\n\t*\n\t* @param node The root element whose character data should be scrubbed.\n\t*/\n\tconst _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {\n\t\tvar _node$querySelectorAl;\n\t\t_scrubOwnCharacterData(node);\n\t\tconst templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, \"template\");\n\t\tif (templates) arrayForEach(templates, (tmpl) => {\n\t\t\tif (_isDocumentFragment(tmpl.content)) _scrubTemplateExpressions2(tmpl.content);\n\t\t});\n\t};\n\t/**\n\t* _scrubOwnCharacterData\n\t*\n\t* Non-recursive core of _scrubTemplateExpressions: normalize `node` and\n\t* strip template expressions from its own character data only. Does not\n\t* enter <template>.content or attached shadow roots (NodeIterator never\n\t* does). Used by _sanitizeShadowDOM, where every nested template content\n\t* and shadow root is already walked - and therefore scrubbed - by its own\n\t* recursive _sanitizeShadowDOM call; recursing here as well would rescrub\n\t* each nested fragment once per ancestor, which is quadratic in nesting\n\t* depth.\n\t*\n\t* @param node The root whose own character data should be scrubbed.\n\t*/\n\tconst _scrubOwnCharacterData = function _scrubOwnCharacterData(node) {\n\t\tnode.normalize();\n\t\tconst doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;\n\t\tconst walker = createNodeIterator.call(doc || node, node, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);\n\t\tlet currentNode = walker.nextNode();\n\t\twhile (currentNode) {\n\t\t\tcurrentNode.data = _stripTemplateExpressions(currentNode.data);\n\t\t\tcurrentNode = walker.nextNode();\n\t\t}\n\t};\n\t/**\n\t* _isClobbered\n\t*\n\t* Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n\t* interface with [LegacyOverrideBuiltIns]; a descendant element with a\n\t* `name` attribute matching a prototype property shadows that property\n\t* on direct reads. We use this check at the IN_PLACE entry-point and\n\t* during attribute sanitization to refuse clobbered forms.\n\t*\n\t* @param element element to check for clobbering attacks\n\t* @return true if clobbered, false if safe\n\t*/\n\tconst _isClobbered = function _isClobbered(element) {\n\t\tconst realTagName = getNodeName ? getNodeName(element) : null;\n\t\tif (typeof realTagName !== \"string\") return false;\n\t\tif (transformCaseFunc(realTagName) !== \"form\") return false;\n\t\treturn typeof element.nodeName !== \"string\" || typeof element.textContent !== \"string\" || typeof element.removeChild !== \"function\" || element.attributes !== getAttributes(element) || typeof element.removeAttribute !== \"function\" || typeof element.removeAttributeNode !== \"function\" || typeof element.getAttributeNode !== \"function\" || typeof element.setAttribute !== \"function\" || typeof element.namespaceURI !== \"string\" || typeof element.insertBefore !== \"function\" || typeof element.hasChildNodes !== \"function\" || element.nodeType !== getNodeType(element) || element.childNodes !== getChildNodes(element);\n\t};\n\t/**\n\t* Checks whether the given value is a DocumentFragment from any realm.\n\t*\n\t* The realm-independent replacement reads `nodeType` through the cached\n\t* Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n\t* constant (11). nodeType is a numeric value resolved from the node's\n\t* internal slot, identical across realms for the same kind of node.\n\t*\n\t* @param value object to check\n\t* @return true if value is a DocumentFragment-shaped node from any realm\n\t*/\n\tconst _isDocumentFragment = function _isDocumentFragment(value) {\n\t\tif (!getNodeType || typeof value !== \"object\" || value === null) return false;\n\t\ttry {\n\t\t\treturn getNodeType(value) === NODE_TYPE.documentFragment;\n\t\t} catch (_) {\n\t\t\treturn false;\n\t\t}\n\t};\n\t/**\n\t* Checks whether the given object is a DOM node, including nodes that\n\t* originate from a different window/realm (e.g. an iframe's\n\t* contentDocument). The previous `value instanceof Node` check was\n\t* realm-bound: nodes from a different window failed it, causing\n\t* sanitize() to silently stringify them and reset IN_PLACE to false,\n\t* returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n\t*\n\t* @param value object to check whether it's a DOM node\n\t* @return true if value is a DOM node from any realm\n\t*/\n\tconst _isNode = function _isNode(value) {\n\t\tif (!getNodeType || typeof value !== \"object\" || value === null) return false;\n\t\ttry {\n\t\t\treturn typeof getNodeType(value) === \"number\";\n\t\t} catch (_) {\n\t\t\treturn false;\n\t\t}\n\t};\n\tfunction _executeHooks(hooks, currentNode, data) {\n\t\tif (hooks.length === 0) return;\n\t\tarrayForEach(hooks, (hook) => {\n\t\t\thook.call(DOMPurify, currentNode, data, CONFIG);\n\t\t});\n\t}\n\t/**\n\t* Structural-threat checks that condemn a node regardless of the\n\t* allowlists: mXSS via namespace confusion, risky CSS construction,\n\t* processing instructions, markup-bearing comments. Pure predicate;\n\t* the caller removes. Check order is load-bearing.\n\t*\n\t* @param currentNode the node to inspect\n\t* @param tagName the node's transformCaseFunc'd tag name\n\t* @return true if the node must be removed\n\t*/\n\tconst _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {\n\t\tif (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) return true;\n\t\tif (SAFE_FOR_XML && LITERAL_TEXT_ELEMENTS[tagName] && _readNodeType(currentNode) === NODE_TYPE.element && _readNamespaceURI(currentNode) === HTML_NAMESPACE && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === \"string\" && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent))) return true;\n\t\tif (currentNode.nodeType === NODE_TYPE.processingInstruction) return true;\n\t\tif (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) return true;\n\t\treturn false;\n\t};\n\t/**\n\t* Evaluate a CUSTOM_ELEMENT_HANDLING check (a RegExp or a predicate\n\t* function, per the validation in _parseConfig) against a name.\n\t* Additional arguments are forwarded to predicate functions - the\n\t* attributeNameCheck predicate receives the tag name as its second\n\t* argument. A null/absent check never matches.\n\t*\n\t* @param check the configured tagNameCheck / attributeNameCheck value\n\t* @param name the name to test\n\t* @param args extra arguments forwarded to a predicate function\n\t* @return true if the check matches the name\n\t*/\n\tconst _matchesNameCheck = function _matchesNameCheck(check, name) {\n\t\tif (check instanceof RegExp) return regExpTest(check, name);\n\t\tif (check instanceof Function) {\n\t\t\tfor (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];\n\t\t\treturn Boolean(check(name, ...args));\n\t\t}\n\t\treturn false;\n\t};\n\t/**\n\t* Handle a node whose tag is forbidden or not allowlisted: keep\n\t* allowed custom elements (false return exits _sanitizeElements\n\t* early - the namespace and fallback-tag removal checks are\n\t* intentionally skipped for kept custom elements), else hoist\n\t* content per KEEP_CONTENT and remove.\n\t*\n\t* A kept custom element is the ONLY case in which this function\n\t* returns false, so the caller uses that return value to run the\n\t* afterSanitizeElements hook on the kept element and keep the\n\t* element-hook lifecycle consistent with normal allowlisted\n\t* elements (GHSA-c2j3-45gr-mqc4).\n\t*\n\t* @param currentNode the disallowed node\n\t* @param tagName the node's transformCaseFunc'd tag name\n\t* @return true if the node was removed, false if kept\n\t*/\n\tconst _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, tagName, root) {\n\t\tif (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n\t\tif (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && !FORBID_CONTENTS[stringToLowerCase(tagName)]) {\n\t\t\tconst parentNode = getParentNode(currentNode);\n\t\t\tconst childNodes = getChildNodes(currentNode);\n\t\t\tif (childNodes && parentNode) {\n\t\t\t\tconst childCount = childNodes.length;\n\t\t\t\tfor (let i = childCount - 1; i >= 0; --i) {\n\t\t\t\t\tconst hoisted = currentNode === root ? cloneNode(childNodes[i], true) : childNodes[i];\n\t\t\t\t\tparentNode.insertBefore(hoisted, getNextSibling(currentNode));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_forceRemove(currentNode);\n\t\treturn true;\n\t};\n\t/**\n\t* Fork a hook-mutable allowlist off its shared binding the first time a\n\t* (possibly lazily-installed) uponSanitize* hook is about to see it, so the\n\t* hook cannot widen the per-instance default or the setConfig binding by\n\t* reference and leak past the call. Returns the set unchanged once it is\n\t* already call-local, so repeated calls across elements are idempotent.\n\t*\n\t* @param hookList the uponSanitize* hook array for this event\n\t* @param set the current ALLOWED_TAGS / ALLOWED_ATTR binding\n\t* @param defaultSet the per-instance DEFAULT_ALLOWED_* constant\n\t* @param setConfigSet the captured setConfig() binding, or null\n\t* @return a call-local clone if a hook is present and set is still shared,\n\t* else set unchanged\n\t*/\n\tconst _forkSharedAllowlist = function _forkSharedAllowlist(hookList, set, defaultSet, setConfigSet) {\n\t\tif (hookList.length === 0) return set;\n\t\treturn set === defaultSet || set === setConfigSet ? clone(set) : set;\n\t};\n\t/**\n\t* A hook may have detached the node it was called for. If so, treat it as\n\t* removed and stop processing it; the walk root is exempt. On the IN_PLACE\n\t* path the detached subtree is neutralized right away.\n\t*\n\t* @param currentNode the node a hook may have detached\n\t* @param root the current walk root\n\t* @return true if the node was detached\n\t*/\n\tconst _handleHookDetachedNode = function _handleHookDetachedNode(currentNode, root) {\n\t\tif (currentNode === root || getParentNode(currentNode) !== null) return false;\n\t\tif (IN_PLACE) _neutralizeSubtree(currentNode);\n\t\treturn true;\n\t};\n\t/**\n\t* _sanitizeElements\n\t*\n\t* @protect nodeName\n\t* @protect textContent\n\t* @protect removeChild\n\t* @param currentNode to check for permission to exist\n\t* @return true if node was killed, false if left alive\n\t*/\n\tconst _sanitizeElements = function _sanitizeElements(currentNode, root) {\n\t\t_markVisited(currentNode);\n\t\t_executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\t\tif (_handleHookDetachedNode(currentNode, root)) return true;\n\t\tif (_isClobbered(currentNode)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tconst tagName = transformCaseFunc(_readNodeName(currentNode));\n\t\tALLOWED_TAGS = _forkSharedAllowlist(hooks.uponSanitizeElement, ALLOWED_TAGS, DEFAULT_ALLOWED_TAGS, SET_CONFIG_ALLOWED_TAGS);\n\t\t_executeHooks(hooks.uponSanitizeElement, currentNode, {\n\t\t\ttagName,\n\t\t\tallowedTags: ALLOWED_TAGS\n\t\t});\n\t\tif (_handleHookDetachedNode(currentNode, root)) return true;\n\t\tif (_isUnsafeNode(currentNode, tagName)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tif (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {\n\t\t\tconst removed = _sanitizeDisallowedNode(currentNode, tagName, root);\n\t\t\tif (removed === false) {\n\t\t\t\t_executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\t\t\t\tif (_handleHookDetachedNode(currentNode, root)) return true;\n\t\t\t}\n\t\t\treturn removed;\n\t\t}\n\t\tif (_readNodeType(currentNode) === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tif ((tagName === \"noscript\" || tagName === \"noembed\" || tagName === \"noframes\") && regExpTest(FALLBACK_TAG_CLOSE, currentNode.innerHTML)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tif (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n\t\t\tconst content = _stripTemplateExpressions(currentNode.textContent);\n\t\t\tif (currentNode.textContent !== content) {\n\t\t\t\tarrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n\t\t\t\tcurrentNode.textContent = content;\n\t\t\t}\n\t\t}\n\t\t_executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\t\treturn _handleHookDetachedNode(currentNode, root);\n\t};\n\t/**\n\t* _isValidAttribute\n\t*\n\t* @param lcTag Lowercase tag name of containing element.\n\t* @param lcName Lowercase attribute name.\n\t* @param value Attribute value.\n\t* @return Returns true if `value` is valid, otherwise false.\n\t*/\n\tconst _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n\t\tif (FORBID_ATTR[lcName]) return false;\n\t\tif (_isPatchLinkageAttribute(lcName, lcTag)) return false;\n\t\tif (SANITIZE_DOM && (lcName === \"id\" || lcName === \"name\") && (value in document || value in formElement)) return false;\n\t\tconst nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);\n\t\tif (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) return true;\n\t\tif (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) return true;\n\t\tif (!nameIsPermitted) return _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) || lcName === \"is\" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value);\n\t\tif (URI_SAFE_ATTRIBUTES[lcName]) return true;\n\t\tif (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, \"\"))) return true;\n\t\tif ((lcName === \"src\" || lcName === \"xlink:href\" || lcName === \"href\") && lcTag !== \"script\" && stringIndexOf(value, \"data:\") === 0 && DATA_URI_TAGS[lcTag]) return true;\n\t\tif (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, \"\"))) return true;\n\t\treturn !value;\n\t};\n\tconst RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [\n\t\t\"annotation-xml\",\n\t\t\"color-profile\",\n\t\t\"font-face\",\n\t\t\"font-face-format\",\n\t\t\"font-face-name\",\n\t\t\"font-face-src\",\n\t\t\"font-face-uri\",\n\t\t\"missing-glyph\"\n\t]);\n\t/**\n\t* _isBasicCustomElement\n\t* checks if at least one dash is included in tagName, and it's not the first char\n\t* for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n\t*\n\t* @param tagName name of the tag of the node to sanitize\n\t* @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n\t*/\n\tconst _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n\t\treturn !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);\n\t};\n\t/**\n\t* Wrap an attribute value in the matching Trusted Types object when\n\t* the active policy requires it. Namespaced attributes pass through\n\t* unchanged (no TT support yet, see\n\t* https://bugs.chromium.org/p/chromium/issues/detail?id=1305293).\n\t*\n\t* @param lcTag lowercase tag name of the containing element\n\t* @param lcName lowercase attribute name\n\t* @param namespaceURI the attribute's namespace, if any\n\t* @param value the attribute value to wrap\n\t* @return the value, wrapped when Trusted Types demand it\n\t*/\n\tconst _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {\n\t\tif (trustedTypesPolicy && typeof trustedTypes === \"object\" && typeof trustedTypes.getAttributeType === \"function\" && !namespaceURI) switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n\t\t\tcase \"TrustedHTML\": return _createTrustedHTML(value);\n\t\t\tcase \"TrustedScriptURL\": return _createTrustedScriptURL(value);\n\t\t}\n\t\treturn value;\n\t};\n\t/**\n\t* Write a modified attribute value back onto the element. On\n\t* success, re-probe for clobbering introduced by the new value and\n\t* remove the element when found; otherwise, when this writeback is the\n\t* recreate half of the SANITIZE_NAMED_PROPS remove-and-recreate, pop the\n\t* removal entry that path recorded so it does not show as removed. On\n\t* failure, remove the attribute instead.\n\t*\n\t* Returns true only on a clean write (the value was set and the new value\n\t* introduced no clobbering). The caller uses that, together with its own\n\t* knowledge of whether this attribute pushed a DOMPurify.removed record, to\n\t* decide whether to pop that record. The pop must happen ONLY for the\n\t* named-prop remove-and-recreate; popping on any other value change (trim,\n\t* template scrubbing, Trusted Types) would consume an unrelated _forceRemove\n\t* subtree-cleanup record and let that detached subtree keep a live event\n\t* handler through the IN_PLACE neutralization pass (SO-001).\n\t*\n\t* @param currentNode the element carrying the attribute\n\t* @param name the attribute name as present on the element\n\t* @param namespaceURI the attribute's namespace, if any\n\t* @param value the new attribute value\n\t* @return true if the value was written without introducing clobbering\n\t*/\n\tconst _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {\n\t\ttry {\n\t\t\tif (namespaceURI) currentNode.setAttributeNS(namespaceURI, name, value);\n\t\t\telse currentNode.setAttribute(name, value);\n\t\t\tif (_isClobbered(currentNode)) {\n\t\t\t\t_forceRemove(currentNode);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (_) {\n\t\t\t_removeAttribute(name, currentNode);\n\t\t\treturn false;\n\t\t}\n\t};\n\t/**\n\t* _isUnsafeAttributeValue\n\t*\n\t* Value-based attribute checks that the attribute walk applies before any\n\t* hook can force-keep an attribute, shared with the public\n\t* isValidAttribute() so that it never approves a value sanitize() would\n\t* strip.\n\t*\n\t* @param name the attribute name as found on the node (case preserved)\n\t* @param value the attribute value\n\t* @returns true if the attribute must be removed because of its value\n\t*/\n\tconst _isUnsafeAttributeValue = function _isUnsafeAttributeValue(name, value) {\n\t\tif (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) return true;\n\t\treturn stringToLowerCase(name) === \"attributename\" && stringMatch(value, \"href\") !== null;\n\t};\n\t/**\n\t* _sanitizeAttributes\n\t*\n\t* @protect attributes\n\t* @protect nodeName\n\t* @protect removeAttribute\n\t* @protect setAttribute\n\t*\n\t* @param currentNode to sanitize\n\t* @param root the current walk root\n\t*/\n\tconst _sanitizeAttributes = function _sanitizeAttributes(currentNode, root) {\n\t\t_executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\t\tif (_handleHookDetachedNode(currentNode, root)) return;\n\t\tconst attributes = currentNode.attributes;\n\t\tif (!attributes || _isClobbered(currentNode)) return;\n\t\tALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);\n\t\tconst hookEvent = {\n\t\t\tattrName: \"\",\n\t\t\tattrValue: \"\",\n\t\t\tkeepAttr: true,\n\t\t\tallowedAttributes: ALLOWED_ATTR,\n\t\t\tforceKeepAttr: void 0\n\t\t};\n\t\tlet l = attributes.length;\n\t\tconst lcTag = transformCaseFunc(currentNode.nodeName);\n\t\twhile (l--) {\n\t\t\tconst attr = attributes[l];\n\t\t\tconst name = attr.name, namespaceURI = attr.namespaceURI, attrValue = attr.value;\n\t\t\tconst lcName = transformCaseFunc(name);\n\t\t\tconst initValue = attrValue;\n\t\t\tlet value = name === \"value\" ? initValue : stringTrim(initValue);\n\t\t\tlet recreatedNamedProp = false;\n\t\t\thookEvent.attrName = lcName;\n\t\t\thookEvent.attrValue = value;\n\t\t\thookEvent.keepAttr = true;\n\t\t\thookEvent.forceKeepAttr = void 0;\n\t\t\t_executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n\t\t\tvalue = hookEvent.attrValue;\n\t\t\tif (SANITIZE_NAMED_PROPS && (lcName === \"id\" || lcName === \"name\") && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tvalue = SANITIZE_NAMED_PROPS_PREFIX + value;\n\t\t\t\trecreatedNamedProp = true;\n\t\t\t}\n\t\t\tif (_isUnsafeAttributeValue(name, value)) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (hookEvent.forceKeepAttr) continue;\n\t\t\tif (!hookEvent.keepAttr) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (SAFE_FOR_TEMPLATES) value = _stripTemplateExpressions(value);\n\t\t\tif (!_isValidAttribute(lcTag, lcName, value)) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalue = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);\n\t\t\tif (value !== initValue) {\n\t\t\t\tif (_setAttributeValue(currentNode, name, namespaceURI, value) && recreatedNamedProp) arrayPop(DOMPurify.removed);\n\t\t\t}\n\t\t}\n\t\t_executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n\t\t_handleHookDetachedNode(currentNode, root);\n\t};\n\t/**\n\t* _sanitizeShadowDOM\n\t*\n\t* @param fragment to iterate over recursively\n\t*/\n\tconst _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {\n\t\tlet shadowNode = null;\n\t\tconst shadowIterator = _createNodeIterator(fragment);\n\t\t_executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\t\twhile (shadowNode = shadowIterator.nextNode()) {\n\t\t\t_executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\t\t\t_sanitizeElements(shadowNode, fragment);\n\t\t\t_sanitizeAttributes(shadowNode, fragment);\n\t\t\tif (_isDocumentFragment(shadowNode.content)) _sanitizeShadowDOM2(shadowNode.content);\n\t\t\tif (_readNodeType(shadowNode) === NODE_TYPE.element) {\n\t\t\t\tconst innerSr = getShadowRoot(shadowNode);\n\t\t\t\tif (_isDocumentFragment(innerSr)) {\n\t\t\t\t\t_sanitizeAttachedShadowRoots(innerSr);\n\t\t\t\t\t_sanitizeShadowDOM2(innerSr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (SAFE_FOR_TEMPLATES) _scrubOwnCharacterData(fragment);\n\t\t_executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n\t};\n\t/**\n\t* Sanitizes every attached shadow root under `root`, since the node\n\t* iterator does not enter shadow trees. Needed for IN_PLACE input and for\n\t* DOM input whose clonable shadow roots were copied by importNode().\n\t*\n\t* @param root the subtree root to walk for attached shadow roots\n\t*/\n\tconst _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {\n\t\tconst stack = [{\n\t\t\tnode: root,\n\t\t\tshadow: null\n\t\t}];\n\t\twhile (stack.length > 0) {\n\t\t\tconst item = stack.pop();\n\t\t\tif (item.shadow) {\n\t\t\t\t_sanitizeShadowDOM2(item.shadow);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst node = item.node;\n\t\t\tconst isElement = _readNodeType(node) === NODE_TYPE.element;\n\t\t\tconst childNodes = getChildNodes(node);\n\t\t\tif (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push({\n\t\t\t\tnode: childNodes[i],\n\t\t\t\tshadow: null\n\t\t\t});\n\t\t\tif (isElement) {\n\t\t\t\tconst rootName = getNodeName ? getNodeName(node) : null;\n\t\t\t\tif (typeof rootName === \"string\" && transformCaseFunc(rootName) === \"template\") {\n\t\t\t\t\tconst content = node.content;\n\t\t\t\t\tif (_isDocumentFragment(content)) stack.push({\n\t\t\t\t\t\tnode: content,\n\t\t\t\t\t\tshadow: null\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isElement) {\n\t\t\t\tconst sr = getShadowRoot(node);\n\t\t\t\tif (_isDocumentFragment(sr)) stack.push({\n\t\t\t\t\tnode: null,\n\t\t\t\t\tshadow: sr\n\t\t\t\t}, {\n\t\t\t\t\tnode: sr,\n\t\t\t\t\tshadow: null\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tDOMPurify.sanitize = function(dirty) {\n\t\tlet cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n\t\tlet body = null;\n\t\tlet importedNode = null;\n\t\tlet currentNode = null;\n\t\tlet returnNode = null;\n\t\tIS_EMPTY_INPUT = !dirty;\n\t\tif (IS_EMPTY_INPUT) dirty = \"<!-->\";\n\t\tif (typeof dirty !== \"string\" && !_isNode(dirty)) {\n\t\t\tdirty = stringifyValue(dirty);\n\t\t\tif (typeof dirty !== \"string\") throw typeErrorCreate(\"dirty is not a string, aborting\");\n\t\t}\n\t\tif (!DOMPurify.isSupported) return dirty;\n\t\tif (SET_CONFIG) {\n\t\t\tALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;\n\t\t\tALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;\n\t\t} else _parseConfig(cfg);\n\t\tif (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) ALLOWED_TAGS = clone(ALLOWED_TAGS);\n\t\tif (hooks.uponSanitizeAttribute.length > 0) ALLOWED_ATTR = clone(ALLOWED_ATTR);\n\t\tDOMPurify.removed = [];\n\t\tconst inPlace = IN_PLACE && typeof dirty !== \"string\" && _isNode(dirty);\n\t\tlet inPlaceNodes = [];\n\t\tconst outerVisited = IN_PLACE_VISITED;\n\t\tif (inPlace) {\n\t\t\t_neutralizePatchLinkage(dirty);\n\t\t\tconst nn = _readNodeName(dirty);\n\t\t\tif (typeof nn === \"string\") {\n\t\t\t\tconst tagName = transformCaseFunc(nn);\n\t\t\t\tif (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n\t\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\t\tthrow typeErrorCreate(\"root node is forbidden and cannot be sanitized in-place\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_isClobbered(dirty)) {\n\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\tthrow typeErrorCreate(\"root node is clobbered and cannot be sanitized in-place\");\n\t\t\t}\n\t\t\tinPlaceNodes = _collectLiveNodes(dirty);\n\t\t\tIN_PLACE_VISITED = setCreate();\n\t\t} else if (_isNode(dirty)) {\n\t\t\tbody = _initDocument(\"<!---->\");\n\t\t\timportedNode = body.ownerDocument.importNode(dirty, true);\n\t\t\tif (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === \"BODY\") body = importedNode;\n\t\t\telse if (importedNode.nodeName === \"HTML\") body = importedNode;\n\t\t\telse body.appendChild(importedNode);\n\t\t\t_sanitizeAttachedShadowRoots(body);\n\t\t} else {\n\t\t\tif (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf(\"<\") === -1) return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;\n\t\t\tbody = _initDocument(dirty);\n\t\t\tif (!body) return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : \"\";\n\t\t}\n\t\tif (body && FORCE_BODY) _forceRemove(body.firstChild);\n\t\tconst walkRoot = inPlace ? dirty : body;\n\t\ttry {\n\t\t\tif (inPlace) _sanitizeAttachedShadowRoots(dirty);\n\t\t\tconst nodeIterator = _createNodeIterator(walkRoot);\n\t\t\twhile (currentNode = nodeIterator.nextNode()) {\n\t\t\t\t_sanitizeElements(currentNode, walkRoot);\n\t\t\t\t_sanitizeAttributes(currentNode, walkRoot);\n\t\t\t\tif (_isDocumentFragment(currentNode.content)) _sanitizeShadowDOM2(currentNode.content);\n\t\t\t}\n\t\t\tif (inPlace) _sanitizeUnvisitedNodes(dirty, inPlaceNodes);\n\t\t} catch (error) {\n\t\t\tif (inPlace) {\n\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\t_neutralizeDiscarded(dirty, inPlaceNodes);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tIN_PLACE_VISITED = outerVisited;\n\t\t}\n\t\tif (inPlace) {\n\t\t\tif (_neutralizeDiscarded(dirty, inPlaceNodes)) throw typeErrorCreate(\"a node selected for removal could not be safely returned; refusing to sanitize in place\");\n\t\t\tif (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(dirty);\n\t\t\treturn dirty;\n\t\t}\n\t\tif (RETURN_DOM) {\n\t\t\tif (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(body);\n\t\t\tif (RETURN_DOM_FRAGMENT) {\n\t\t\t\treturnNode = createDocumentFragment.call(body.ownerDocument);\n\t\t\t\twhile (body.firstChild) returnNode.appendChild(body.firstChild);\n\t\t\t} else returnNode = body;\n\t\t\tif (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) returnNode = importNode.call(originalDocument, returnNode, true);\n\t\t\treturn returnNode;\n\t\t}\n\t\tlet serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\t\tif (WHOLE_DOCUMENT && ALLOWED_TAGS[\"!doctype\"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) serializedHTML = \"<!DOCTYPE \" + body.ownerDocument.doctype.name + \">\\n\" + serializedHTML;\n\t\tif (SAFE_FOR_TEMPLATES) serializedHTML = _stripTemplateExpressions(serializedHTML);\n\t\treturn trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;\n\t};\n\tDOMPurify.setConfig = function() {\n\t\tlet cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n\t\t_parseConfig(cfg);\n\t\tSET_CONFIG = true;\n\t\tSET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;\n\t\tSET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;\n\t};\n\tDOMPurify.clearConfig = function() {\n\t\tCONFIG = null;\n\t\tSET_CONFIG = false;\n\t\tSET_CONFIG_ALLOWED_TAGS = null;\n\t\tSET_CONFIG_ALLOWED_ATTR = null;\n\t\ttrustedTypesPolicy = defaultTrustedTypesPolicy;\n\t\temptyHTML = \"\";\n\t};\n\tDOMPurify.isValidAttribute = function(tag, attr, value) {\n\t\tif (!CONFIG) _parseConfig({});\n\t\tconst lcTag = transformCaseFunc(tag);\n\t\tconst lcName = transformCaseFunc(attr);\n\t\tif (typeof value === \"string\" && (_isUnsafeAttributeValue(attr, value) || !ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value))) return false;\n\t\treturn _isValidAttribute(lcTag, lcName, value);\n\t};\n\tDOMPurify.addHook = function(entryPoint, hookFunction) {\n\t\tif (typeof hookFunction !== \"function\") return;\n\t\tif (!objectHasOwnProperty(hooks, entryPoint)) return;\n\t\tarrayPush(hooks[entryPoint], hookFunction);\n\t};\n\tDOMPurify.removeHook = function(entryPoint, hookFunction) {\n\t\tif (!objectHasOwnProperty(hooks, entryPoint)) return;\n\t\tif (hookFunction !== void 0) {\n\t\t\tconst index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\t\t\treturn index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];\n\t\t}\n\t\treturn arrayPop(hooks[entryPoint]);\n\t};\n\tDOMPurify.removeHooks = function(entryPoint) {\n\t\tif (!objectHasOwnProperty(hooks, entryPoint)) return;\n\t\thooks[entryPoint] = [];\n\t};\n\tDOMPurify.removeAllHooks = function() {\n\t\thooks = _createHooksMap();\n\t};\n\treturn DOMPurify;\n}\nvar purify_default = createDOMPurify();\nexport { purify_default as default };\n\n//# sourceMappingURL=purify.es.mjs.map","import DOMPurify, { type Config } from 'dompurify'\n\n/**\n * Escapes text for the inside of an HTML element.\n */\nexport function escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n}\n\n/**\n * The placeholder a formula waits in until KaTeX renders it. The formula is\n * percent-encoded, not entity-encoded: the sanitizer drops an attribute whose\n * value holds `]>` or `-->`, and a formula can (`[a,b]>0`). The encoding has\n * no quote either, so the formula cannot close the attribute.\n */\nexport function renderKatexPlaceholder(\n text: string,\n displayMode: boolean,\n): string {\n const encoded = encodeURIComponent(text)\n return `<span class=\"katex-pending\" data-katex=\"${encoded}\" data-display=\"${displayMode}\"></span>`\n}\n\n// `target` is not among DOMPurify's defaults, and the link renderer sets it on\n// every external link. Without the unknown protocols an app link\n// (`msteams:`, `whatsapp:`) lost its href; the schemes that run code (`*script:`,\n// `data:` outside images) stay refused. A `<style>` element or a `style`\n// attribute can lay a fake page over the real one, and a form can post what the\n// reader types anywhere: the markdown never produces any of the three. Nor\n// does it produce the other ways of fetching a url by rendering it (media\n// elements, `srcset`, a poster, the `background` of a table, an SVG image or\n// filter image), which would carry an answer past the image hosts of the agent.\nconst SANITIZE_CONFIG: Config = {\n ADD_ATTR: ['target'],\n ALLOW_UNKNOWN_PROTOCOLS: true,\n FORBID_TAGS: [\n 'style',\n 'form',\n 'audio',\n 'video',\n 'source',\n 'picture',\n 'track',\n 'image',\n 'feImage',\n ],\n FORBID_ATTR: ['style', 'srcset', 'poster', 'background'],\n}\n\n// DOMPurify keeps `src` on any element, and an image input or a MathML glyph\n// fetches it as soon as it renders. Only an `<img>` keeps it, where the held\n// images below judge it; the inputs marked writes, the checkboxes of a task\n// list, have none.\nDOMPurify.addHook('uponSanitizeAttribute', (node, data) => {\n if (data.attrName === 'src' && node.nodeName !== 'IMG') {\n data.keepAttr = false\n }\n})\n\n/**\n * What the sanitizer does with an image the chat may not load by itself\n * (see `chatImagePolicy.ts`).\n */\nexport interface HeldImages {\n canLoad: (src: string) => boolean\n hostOf: (src: string) => string | undefined\n /** The words on the placeholder, for the host the image points to. */\n label: (host: string) => string\n}\n\n/** The attribute a held image keeps its url in, read back on a click. */\nexport const HELD_IMAGE_ATTRIBUTE = 'data-held-src'\n\n/**\n * Cleans the HTML rendered from a markdown before it reaches `v-html`. The\n * markdown is written by a model, and through the knowledge base, the tools and\n * the pages it reads, by whoever wrote those; marked passes the HTML it finds\n * through untouched, so a handler written in a document ran in the browser of\n * whoever read the answer. Scripts, handlers, `javascript:` urls, styles and\n * forms go, the formatting stays.\n *\n * With `held`, an image the chat may not load by itself becomes a button that\n * names its host: the url waits in an attribute, which fetches nothing, until\n * the reader asks for it.\n */\nexport function sanitizeMarkdownHtml(html: string, held?: HeldImages): string {\n if (!held) {\n return DOMPurify.sanitize(html, SANITIZE_CONFIG)\n }\n const fragment = DOMPurify.sanitize(html, {\n ...SANITIZE_CONFIG,\n RETURN_DOM_FRAGMENT: true,\n })\n for (const image of Array.from(fragment.querySelectorAll('img'))) {\n const src = image.getAttribute('src') ?? ''\n if (held.canLoad(src)) {\n continue\n }\n const button = image.ownerDocument.createElement('button')\n button.type = 'button'\n button.className = 'markdown-held-image'\n button.setAttribute(HELD_IMAGE_ATTRIBUTE, src)\n button.textContent = held.label(held.hostOf(src) ?? src)\n image.replaceWith(button)\n }\n // Serialized in the inert document DOMPurify parsed into: moved into the\n // page's document, an image would start loading before `v-html` runs.\n const container = fragment.ownerDocument.createElement('div')\n container.append(fragment)\n return container.innerHTML\n}\n","<script setup lang=\"ts\">\n import remend from 'remend'\n import { marked, type Token, type Tokens } from 'marked'\n import {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n toRef,\n useTemplateRef,\n watch,\n } from 'vue'\n import { refThrottled } from '@vueuse/core'\n import { useI18n } from 'vue-i18n'\n import {\n loadCdnCss,\n getShadowRoot,\n isSameSite,\n stripProviderCitationMarkers,\n } from 'utils'\n import { useShortUrlResolver } from 'composables'\n import { getMarkdownTail } from './utils'\n import {\n escapeHtml,\n HELD_IMAGE_ATTRIBUTE,\n renderKatexPlaceholder,\n sanitizeMarkdownHtml,\n } from './markdownHtml'\n import { useChatImageGate } from './chatImagePolicy'\n\n export type StreamingAnimation =\n 'fadeIn' | 'blurIn' | 'dropIn' | 'slideUp' | 'fadeAndScale' | null\n\n const props = withDefaults(\n defineProps<{\n markdown?: string\n loading?: boolean\n animation?: StreamingAnimation\n animationDuration?: string\n isDark?: boolean\n /**\n * Renders only the last `tailLength` characters, for a live box\n * that follows the bottom of a text too long to parse whole.\n */\n tailLength?: number\n }>(),\n {\n markdown: '',\n loading: false,\n animation: 'fadeIn',\n animationDuration: '0.3s',\n isDark: false,\n tailLength: undefined,\n },\n )\n\n const { t: $t } = useI18n({ useScope: 'global' })\n\n // --- Lazy-loaded heavy dependencies ---\n\n let beautifulMermaidPromise: Promise<\n typeof import('beautiful-mermaid')\n > | null = null\n function loadBeautifulMermaid() {\n if (!beautifulMermaidPromise) {\n beautifulMermaidPromise = import('beautiful-mermaid')\n }\n return beautifulMermaidPromise\n }\n\n let katexPromise: Promise<(typeof import('katex'))['default']> | null = null\n function loadKatex() {\n if (!katexPromise) {\n katexPromise = import('katex').then((mod) => mod.default)\n }\n return katexPromise\n }\n\n // --- Marked extensions ---\n\n const inlineKatexRule =\n /^(\\${1,2})(?!\\$)((?:\\\\.|[^\\\\\\n])*?(?:\\\\.|[^\\\\\\n$]))\\1(?=[\\s?!.,:\\uFF1F\\uFF01\\u3002\\uFF0C\\uFF1A]|$)/\n const blockKatexRule = /^(\\${1,2})\\n((?:\\\\[^]|[^\\\\])+?)\\n\\1(?:\\n|$)/\n\n marked.use({\n extensions: [\n {\n name: 'inlineKatex',\n level: 'inline',\n start: (src) => {\n const idx = src.indexOf('$')\n if (idx === -1) {\n return undefined\n }\n if (idx === 0 || src.charAt(idx - 1) === ' ') {\n return idx\n }\n return undefined\n },\n tokenizer(src) {\n const match = src.match(inlineKatexRule)\n if (!match) {\n return\n }\n return {\n type: 'inlineKatex',\n raw: match[0],\n text: match[2].trim(),\n displayMode: match[1].length === 2,\n }\n },\n renderer(token) {\n return renderKatexPlaceholder(token.text, token.displayMode)\n },\n },\n {\n name: 'blockKatex',\n level: 'block',\n tokenizer(src) {\n const match = src.match(blockKatexRule)\n if (!match) {\n return\n }\n return {\n type: 'blockKatex',\n raw: match[0],\n text: match[2].trim(),\n displayMode: match[1].length === 2,\n }\n },\n renderer(token) {\n return (\n renderKatexPlaceholder(token.text, token.displayMode) +\n '\\n'\n )\n },\n },\n ],\n })\n\n marked.use({\n extensions: [\n {\n name: 'thinking',\n level: 'block',\n start: (src) => src.indexOf('<thinking>'),\n tokenizer(src) {\n const match = /^<thinking>([\\s\\S]*?)<\\/thinking>/.exec(src)\n if (!match) {\n return\n }\n const token = {\n type: 'thinking',\n raw: match[0],\n text: match[1].trim(),\n tokens: [] as Token[],\n }\n this.lexer.blockTokens(token.text, token.tokens)\n return token\n },\n renderer(token) {\n return `<div class=\"thinking-block\">${this.parser.parse(token.tokens ?? [])}</div>`\n },\n },\n ],\n })\n\n // --- Custom renderer ---\n\n const renderer = new marked.Renderer()\n\n // marked escapes href and title inside its own link renderer. This\n // override replaces that renderer, so until now both went into `v-html`\n // verbatim: a quote in the URL closed the attribute and everything after\n // it became markup, in a document written by a model and, through the\n // knowledge base, by whoever fed it.\n const escapeAttribute = (value: string) =>\n value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n // Schemes that execute rather than navigate. The link becomes plain text,\n // so the reader still sees what it said.\n const UNSAFE_LINK_SCHEME = /^(?:javascript|data|vbscript|file):/i\n\n // A bare address written in a cell is most of its row: the cell shows it\n // without the scheme and `www.`, with a break after each slash, while the\n // href and the tooltip keep it whole. Set while `renderer.table` renders\n // its cells, which marked does synchronously.\n let isRenderingTable = false\n const shortenAddress = (address: string) =>\n escapeAttribute(\n address.replace(/^https?:\\/\\/(?:www\\.)?/i, '').replace(/\\/$/, ''),\n ).replace(/\\//g, '/<wbr>')\n\n renderer.link = function ({ href, title, text: label, tokens }) {\n const text = this.parser.parseInline(tokens)\n // Control characters go first: the browser strips them before reading\n // the scheme, so they are how `java\\tscript:` gets past a check.\n // eslint-disable-next-line no-control-regex -- they are the point here\n const target = (href ?? '').trim().replace(/[\\x00-\\x1f]/g, '')\n if (!target || UNSAFE_LINK_SCHEME.test(target)) {\n return text\n }\n const isBareAddressInTable = isRenderingTable && label === target\n const tooltip = title || (isBareAddressInTable ? target : '')\n const titleAttr = tooltip ? ` title=\"${escapeAttribute(tooltip)}\"` : ''\n const targetAttrs = isSameSite(target)\n ? ''\n : ' target=\"_blank\" rel=\"noopener noreferrer\"'\n return `<a href=\"${escapeAttribute(target)}\"${titleAttr}${targetAttrs}>${isBareAddressInTable ? shortenAddress(target) : text}</a>`\n }\n\n // A data table (`.u-table`). From three columns up it stacks its rows into\n // blocks when the message is too narrow for them, with the heading of\n // each column, copied into `data-label`, as the label of its value; two\n // columns still fit side by side. The roles keep it a table for screen\n // readers once the style changes its display. Stacked, a cell is a grid\n // of label and value, and every child of a grid is an item of its own:\n // the value goes in one span, or a bold word, a link or the words the\n // stream animates one by one would scatter across both columns.\n renderer.table = function (token) {\n isRenderingTable = true\n try {\n const labels = token.header.map((cell) =>\n escapeAttribute(\n this.parser.parseInline(\n cell.tokens,\n this.parser.textRenderer,\n ),\n ),\n )\n const renderRow = (cells: Tokens.TableCell[]) =>\n `<tr role=\"row\">${cells\n .map((cell, index) => {\n const content = this.parser.parseInline(cell.tokens)\n const align = cell.align ? ` align=\"${cell.align}\"` : ''\n return cell.header\n ? `<th role=\"columnheader\"${align}>${content}</th>`\n : `<td role=\"cell\" data-label=\"${labels[index] ?? ''}\"${align}><span>${content}</span></td>`\n })\n .join('')}</tr>`\n const body = token.rows.length\n ? `<tbody role=\"rowgroup\">${token.rows.map(renderRow).join('')}</tbody>`\n : ''\n // Stacked, the head is out of sight and every row carries the\n // labels: a table with no rows yet (a header-only one, or the\n // stream before its first row) would show nothing at all.\n const tableClass =\n token.header.length >= 3 && token.rows.length\n ? 'u-table u-table--stack'\n : 'u-table'\n return `<div class=\"table-wrapper u-table-scroll\"><table class=\"${tableClass}\" role=\"table\"><thead role=\"rowgroup\">${renderRow(token.header)}</thead>${body}</table></div>\\n`\n } finally {\n isRenderingTable = false\n }\n }\n\n const MERMAID_PREFIXES =\n /^(sequenceDiagram|graph|classDiagram|stateDiagram|erDiagram|flowchart|xychart-beta)/\n\n // A fence holds code to show, not markup. Unescaped, an HTML sample became\n // elements and lost its tags before the highlighter read what was left.\n // Both the highlighter and the diagram renderer read `textContent`, which\n // gives the text back as written.\n renderer.code = ({ text }) => {\n if (MERMAID_PREFIXES.test(text)) {\n return `<pre class=\"mermaid\">${escapeHtml(text)}</pre>`\n }\n return `<pre><code>${escapeHtml(text)}</code></pre>`\n }\n\n // --- Preprocessing pipeline ---\n\n function normalizeLatexDelimiters(md: string): string {\n return md\n .replace(/\\\\\\[([\\s\\S]*?)\\\\\\]/g, (_, content) => `$$${content}$$`)\n .replace(/\\\\\\(([\\s\\S]*?)\\\\\\)/g, (_, content) => `$${content}$`)\n .replace(/^(\\d+)\\.(?!\\s)/gm, '$1\\\\.')\n }\n\n /**\n * Strips JSON objects/arrays that appear outside fenced code blocks.\n * Some models dump tool-call JSON directly into the text response.\n */\n function stripLeakedJson(md: string): string {\n const fenced = new Set<number>()\n const fenceRe = /^(`{3,}|~{3,})[^\\n]*\\n([\\s\\S]*?)\\n\\1/gm\n let fenceMatch: RegExpExecArray | null\n while ((fenceMatch = fenceRe.exec(md)) !== null) {\n for (\n let i = fenceMatch.index;\n i < fenceMatch.index + fenceMatch[0].length;\n i++\n ) {\n fenced.add(i)\n }\n }\n\n return md\n .replace(\n /[{[]([\\s\\S]*?)[}\\]]/g,\n (match, _inner, offset: number) => {\n if (fenced.has(offset)) {\n return match\n }\n try {\n JSON.parse(match)\n return ''\n } catch {\n return match\n }\n },\n )\n .replace(/\\n{3,}/g, '\\n\\n')\n }\n\n // Runs on the accumulated text, not on deltas, so a marker split across two\n // stream chunks still gets caught once both have landed.\n const preprocessors: Array<(md: string) => string> = [\n stripProviderCitationMarkers,\n stripLeakedJson,\n remend,\n normalizeLatexDelimiters,\n ]\n\n // --- Computed HTML ---\n\n const containerRef = useTemplateRef<HTMLDivElement>('container')\n\n // Every render parses the whole text again, and a stream changes it at every\n // delta: the cost of a turn grows with the square of its length. On chat\n // `st0Eg8iG0zUX0HQN` one parse took 24ms at 92KB, thousands of deltas\n // arrived, and the tab froze. The first text renders at once, the changes\n // after it at most once per interval, the last one always included.\n const RENDER_INTERVAL_MS = 100\n const renderedMarkdown = refThrottled(\n toRef(props, 'markdown'),\n RENDER_INTERVAL_MS,\n )\n const visibleMarkdown = computed(() =>\n props.tailLength\n ? getMarkdownTail(renderedMarkdown.value, props.tailLength)\n : renderedMarkdown.value,\n )\n\n // Expand backend short urls (`/api/r/<hash>`) back to their real target so\n // prose (e.g. a bulleted list of links) shows/opens real urls, not the\n // token-cheap short ones the model sees. No-op when no resolver is provided.\n const { resolveText } = useShortUrlResolver()\n const expandedMarkdown = resolveText(visibleMarkdown)\n\n // Inside a chat, an image from a host the agent does not list waits for a\n // click (see chatImagePolicy.ts); elsewhere images load as they always did.\n const imageGate = useChatImageGate()\n\n const html = computed(() => {\n const md = preprocessors.reduce(\n (text, fn) => fn(text),\n expandedMarkdown.value,\n )\n return sanitizeMarkdownHtml(\n marked.parse(md, {\n async: false,\n breaks: true,\n renderer,\n }) as string,\n imageGate.isGated.value\n ? {\n canLoad: imageGate.canLoad,\n hostOf: imageGate.hostOf,\n label: (host) => $t('label.imageHeld', { host }),\n }\n : undefined,\n )\n })\n\n /**\n * A held image is a button carrying its url: a click (or Enter, which a\n * button turns into one) releases that url, and the next render shows\n * the image. It may sit inside a link, which must not open.\n */\n function onContentClick(event: MouseEvent) {\n const held = (event.target as Element | null)?.closest?.(\n `[${HELD_IMAGE_ATTRIBUTE}]`,\n )\n const src = held?.getAttribute(HELD_IMAGE_ATTRIBUTE)\n if (!src) {\n return\n }\n event.preventDefault()\n event.stopPropagation()\n imageGate.release(src)\n }\n\n // --- Post-render processors ---\n\n async function renderMermaid() {\n if (props.loading) {\n return\n }\n\n await nextTick()\n const nodes = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre.mermaid:not([data-rendered])',\n )\n if (!nodes?.length) {\n return\n }\n\n const { renderMermaidSVG, THEMES } = await loadBeautifulMermaid()\n const theme = props.isDark\n ? THEMES['github-dark']\n : THEMES['github-light']\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const code = node.textContent?.trim()\n if (!code) {\n continue\n }\n\n try {\n const svg = renderMermaidSVG(code, theme)\n if (node.isConnected) {\n node.dataset.code = code\n node.innerHTML = svg\n node.setAttribute('data-rendered', 'true')\n }\n } catch {\n // Invalid syntax — node left untouched\n }\n }\n }\n\n async function highlightCode() {\n await nextTick()\n const blocks = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre:not(.mermaid) > code:not([data-highlighted])',\n )\n if (!blocks?.length) {\n return\n }\n\n const hljs = (await import('highlight.js/lib/common')).default\n for (const block of blocks) {\n hljs.highlightElement(block)\n block.setAttribute('data-highlighted', 'true')\n }\n }\n\n async function renderKatex() {\n await nextTick()\n const nodes =\n containerRef.value?.querySelectorAll<HTMLElement>('.katex-pending')\n if (!nodes?.length) {\n return\n }\n\n const katex = await loadKatex()\n // Keep this major in step with the installed katex: 0.18 prefixed the\n // internal class names (.sizing became .katex-sizing), so a stylesheet\n // from another major styles nothing. The widget pins the same major\n // again in its vite config, where katex is aliased to the CDN.\n loadCdnCss(\n 'https://cdn.jsdelivr.net/npm/katex@0.18/dist/katex.min.css',\n getShadowRoot(containerRef.value),\n )\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const tex = node.dataset.katex\n if (!tex) {\n continue\n }\n const displayMode = node.dataset.display === 'true'\n try {\n node.innerHTML = katex.renderToString(decodeURIComponent(tex), {\n throwOnError: false,\n displayMode,\n })\n node.classList.remove('katex-pending')\n } catch {\n // Invalid LaTeX — leave placeholder\n }\n }\n }\n\n async function rerenderMermaidOnThemeChange() {\n await nextTick()\n const nodes = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre.mermaid[data-rendered]',\n )\n if (!nodes?.length) {\n return\n }\n\n const { renderMermaidSVG, THEMES } = await loadBeautifulMermaid()\n const theme = props.isDark\n ? THEMES['github-dark']\n : THEMES['github-light']\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const code = node.dataset.code\n if (!code) {\n continue\n }\n try {\n node.innerHTML = renderMermaidSVG(code, theme)\n } catch {\n // Invalid syntax — leave as-is\n }\n }\n }\n\n /**\n * Markdown images come from model output (or from a scraped page), so their\n * urls die often. The markup is injected with `v-html`, so there is no place\n * to bind `@error`: `error` doesn't bubble but it does propagate in the\n * capture phase, so one container listener covers every image, including the\n * ones added by later stream chunks.\n */\n function handleImageError(event: Event) {\n const img = event.target\n if (!(img instanceof HTMLImageElement) || img.dataset.broken) {\n return\n }\n img.dataset.broken = 'true'\n const placeholder = document.createElement('span')\n placeholder.className = 'markdown-broken-image'\n placeholder.textContent = img.alt || $t('label.imageLoadError')\n placeholder.title = img.src\n img.replaceWith(placeholder)\n }\n\n onMounted(() => {\n containerRef.value?.addEventListener('error', handleImageError, true)\n })\n onBeforeUnmount(() => {\n containerRef.value?.removeEventListener('error', handleImageError, true)\n })\n\n watch([html, () => props.loading], renderMermaid, { immediate: true })\n watch(() => props.isDark, rerenderMermaidOnThemeChange)\n watch(html, highlightCode, { immediate: true })\n watch(html, renderKatex, { immediate: true })\n\n // --- Streaming animation (FlowToken-style) ---\n\n let prevCharCount = 0\n\n function createAnimatedSpan(text: string, delay: number): HTMLSpanElement {\n const span = document.createElement('span')\n span.style.cssText = `animation:ft-${props.animation} ${props.animationDuration} ease-out ${delay}ms both;display:inline-block`\n span.textContent = text\n span.addEventListener(\n 'animationend',\n () => {\n const parent = span.parentNode\n if (!parent) {\n return\n }\n parent.replaceChild(document.createTextNode(text), span)\n parent.normalize()\n },\n { once: true },\n )\n return span\n }\n\n function insertAnimatedWords(\n text: string,\n parent: Node,\n refNode: Node | null,\n startIndex: number,\n ): number {\n let idx = startIndex\n const parts = text.split(/(\\s+)/)\n for (const part of parts) {\n if (!part) {\n continue\n }\n if (/^\\s+$/.test(part)) {\n parent.insertBefore(document.createTextNode(part), refNode)\n continue\n }\n parent.insertBefore(createAnimatedSpan(part, idx * 30), refNode)\n idx++\n }\n return idx\n }\n\n function collectTextNodes(root: HTMLElement): Text[] {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n acceptNode(node) {\n if (\n node.parentElement?.closest(\n 'pre, code, .katex-pending, .markdown-broken-image',\n )\n ) {\n return NodeFilter.FILTER_REJECT\n }\n return NodeFilter.FILTER_ACCEPT\n },\n })\n const nodes: Text[] = []\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as Text)\n }\n return nodes\n }\n\n function annotateNewContent() {\n if (!containerRef.value || !props.loading || !props.animation) {\n return\n }\n\n const textNodes = collectTextNodes(containerRef.value)\n let charsSeen = 0\n let wordIdx = 0\n\n for (const textNode of textNodes) {\n const text = textNode.textContent || ''\n const nodeStart = charsSeen\n const nodeEnd = charsSeen + text.length\n charsSeen = nodeEnd\n\n if (nodeEnd <= prevCharCount) {\n continue\n }\n\n const parent = textNode.parentNode\n if (!parent) {\n continue\n }\n\n // Entirely new node — animate all words\n if (nodeStart >= prevCharCount) {\n const ref = textNode.nextSibling\n parent.removeChild(textNode)\n wordIdx = insertAnimatedWords(text, parent, ref, wordIdx)\n continue\n }\n\n // Partially new — split and animate only the new portion\n const splitAt = prevCharCount - nodeStart\n const newTextNode = textNode.splitText(splitAt)\n const newText = newTextNode.textContent || ''\n const ref = newTextNode.nextSibling\n parent.removeChild(newTextNode)\n wordIdx = insertAnimatedWords(newText, parent, ref, wordIdx)\n }\n\n prevCharCount = charsSeen\n }\n\n watch(\n html,\n async () => {\n await nextTick()\n annotateNewContent()\n },\n { immediate: true },\n )\n\n watch(\n () => props.markdown,\n (newVal, oldVal) => {\n if (!newVal || (oldVal && newVal.length < oldVal.length)) {\n prevCharCount = 0\n }\n },\n )\n</script>\n\n<template>\n <div ref=\"container\" @click=\"onContentClick\" v-html=\"html\"></div>\n</template>\n\n<style>\n .markdown-held-image {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n padding: var(--spacing-4) var(--spacing-8);\n border: var(--border) dashed var(--color-surface-4);\n border-radius: var(--rounded-md);\n background-color: var(--color-surface-1);\n color: var(--color-word-3);\n font: inherit;\n font-size: var(--text-12);\n vertical-align: middle;\n cursor: pointer;\n }\n\n .markdown-held-image:hover,\n .markdown-held-image:focus-visible {\n background-color: var(--color-surface-2);\n color: var(--color-word-2);\n }\n\n .markdown-broken-image {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 100%;\n padding: var(--spacing-4) var(--spacing-8);\n border: var(--border) dashed var(--color-surface-4);\n border-radius: var(--rounded-md);\n background-color: var(--color-surface-1);\n color: var(--color-word-4);\n font-size: var(--text-12);\n vertical-align: middle;\n }\n\n @keyframes ft-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes ft-blurIn {\n from {\n opacity: 0;\n filter: blur(4px);\n }\n to {\n opacity: 1;\n filter: blur(0px);\n }\n }\n\n @keyframes ft-dropIn {\n from {\n transform: translateY(-8px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes ft-slideUp {\n from {\n transform: translateY(8px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes ft-fadeAndScale {\n from {\n transform: scale(0.85);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>\n","<script setup lang=\"ts\">\n import remend from 'remend'\n import { marked, type Token, type Tokens } from 'marked'\n import {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n toRef,\n useTemplateRef,\n watch,\n } from 'vue'\n import { refThrottled } from '@vueuse/core'\n import { useI18n } from 'vue-i18n'\n import {\n loadCdnCss,\n getShadowRoot,\n isSameSite,\n stripProviderCitationMarkers,\n } from 'utils'\n import { useShortUrlResolver } from 'composables'\n import { getMarkdownTail } from './utils'\n import {\n escapeHtml,\n HELD_IMAGE_ATTRIBUTE,\n renderKatexPlaceholder,\n sanitizeMarkdownHtml,\n } from './markdownHtml'\n import { useChatImageGate } from './chatImagePolicy'\n\n export type StreamingAnimation =\n 'fadeIn' | 'blurIn' | 'dropIn' | 'slideUp' | 'fadeAndScale' | null\n\n const props = withDefaults(\n defineProps<{\n markdown?: string\n loading?: boolean\n animation?: StreamingAnimation\n animationDuration?: string\n isDark?: boolean\n /**\n * Renders only the last `tailLength` characters, for a live box\n * that follows the bottom of a text too long to parse whole.\n */\n tailLength?: number\n }>(),\n {\n markdown: '',\n loading: false,\n animation: 'fadeIn',\n animationDuration: '0.3s',\n isDark: false,\n tailLength: undefined,\n },\n )\n\n const { t: $t } = useI18n({ useScope: 'global' })\n\n // --- Lazy-loaded heavy dependencies ---\n\n let beautifulMermaidPromise: Promise<\n typeof import('beautiful-mermaid')\n > | null = null\n function loadBeautifulMermaid() {\n if (!beautifulMermaidPromise) {\n beautifulMermaidPromise = import('beautiful-mermaid')\n }\n return beautifulMermaidPromise\n }\n\n let katexPromise: Promise<(typeof import('katex'))['default']> | null = null\n function loadKatex() {\n if (!katexPromise) {\n katexPromise = import('katex').then((mod) => mod.default)\n }\n return katexPromise\n }\n\n // --- Marked extensions ---\n\n const inlineKatexRule =\n /^(\\${1,2})(?!\\$)((?:\\\\.|[^\\\\\\n])*?(?:\\\\.|[^\\\\\\n$]))\\1(?=[\\s?!.,:\\uFF1F\\uFF01\\u3002\\uFF0C\\uFF1A]|$)/\n const blockKatexRule = /^(\\${1,2})\\n((?:\\\\[^]|[^\\\\])+?)\\n\\1(?:\\n|$)/\n\n marked.use({\n extensions: [\n {\n name: 'inlineKatex',\n level: 'inline',\n start: (src) => {\n const idx = src.indexOf('$')\n if (idx === -1) {\n return undefined\n }\n if (idx === 0 || src.charAt(idx - 1) === ' ') {\n return idx\n }\n return undefined\n },\n tokenizer(src) {\n const match = src.match(inlineKatexRule)\n if (!match) {\n return\n }\n return {\n type: 'inlineKatex',\n raw: match[0],\n text: match[2].trim(),\n displayMode: match[1].length === 2,\n }\n },\n renderer(token) {\n return renderKatexPlaceholder(token.text, token.displayMode)\n },\n },\n {\n name: 'blockKatex',\n level: 'block',\n tokenizer(src) {\n const match = src.match(blockKatexRule)\n if (!match) {\n return\n }\n return {\n type: 'blockKatex',\n raw: match[0],\n text: match[2].trim(),\n displayMode: match[1].length === 2,\n }\n },\n renderer(token) {\n return (\n renderKatexPlaceholder(token.text, token.displayMode) +\n '\\n'\n )\n },\n },\n ],\n })\n\n marked.use({\n extensions: [\n {\n name: 'thinking',\n level: 'block',\n start: (src) => src.indexOf('<thinking>'),\n tokenizer(src) {\n const match = /^<thinking>([\\s\\S]*?)<\\/thinking>/.exec(src)\n if (!match) {\n return\n }\n const token = {\n type: 'thinking',\n raw: match[0],\n text: match[1].trim(),\n tokens: [] as Token[],\n }\n this.lexer.blockTokens(token.text, token.tokens)\n return token\n },\n renderer(token) {\n return `<div class=\"thinking-block\">${this.parser.parse(token.tokens ?? [])}</div>`\n },\n },\n ],\n })\n\n // --- Custom renderer ---\n\n const renderer = new marked.Renderer()\n\n // marked escapes href and title inside its own link renderer. This\n // override replaces that renderer, so until now both went into `v-html`\n // verbatim: a quote in the URL closed the attribute and everything after\n // it became markup, in a document written by a model and, through the\n // knowledge base, by whoever fed it.\n const escapeAttribute = (value: string) =>\n value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n // Schemes that execute rather than navigate. The link becomes plain text,\n // so the reader still sees what it said.\n const UNSAFE_LINK_SCHEME = /^(?:javascript|data|vbscript|file):/i\n\n // A bare address written in a cell is most of its row: the cell shows it\n // without the scheme and `www.`, with a break after each slash, while the\n // href and the tooltip keep it whole. Set while `renderer.table` renders\n // its cells, which marked does synchronously.\n let isRenderingTable = false\n const shortenAddress = (address: string) =>\n escapeAttribute(\n address.replace(/^https?:\\/\\/(?:www\\.)?/i, '').replace(/\\/$/, ''),\n ).replace(/\\//g, '/<wbr>')\n\n renderer.link = function ({ href, title, text: label, tokens }) {\n const text = this.parser.parseInline(tokens)\n // Control characters go first: the browser strips them before reading\n // the scheme, so they are how `java\\tscript:` gets past a check.\n // eslint-disable-next-line no-control-regex -- they are the point here\n const target = (href ?? '').trim().replace(/[\\x00-\\x1f]/g, '')\n if (!target || UNSAFE_LINK_SCHEME.test(target)) {\n return text\n }\n const isBareAddressInTable = isRenderingTable && label === target\n const tooltip = title || (isBareAddressInTable ? target : '')\n const titleAttr = tooltip ? ` title=\"${escapeAttribute(tooltip)}\"` : ''\n const targetAttrs = isSameSite(target)\n ? ''\n : ' target=\"_blank\" rel=\"noopener noreferrer\"'\n return `<a href=\"${escapeAttribute(target)}\"${titleAttr}${targetAttrs}>${isBareAddressInTable ? shortenAddress(target) : text}</a>`\n }\n\n // A data table (`.u-table`). From three columns up it stacks its rows into\n // blocks when the message is too narrow for them, with the heading of\n // each column, copied into `data-label`, as the label of its value; two\n // columns still fit side by side. The roles keep it a table for screen\n // readers once the style changes its display. Stacked, a cell is a grid\n // of label and value, and every child of a grid is an item of its own:\n // the value goes in one span, or a bold word, a link or the words the\n // stream animates one by one would scatter across both columns.\n renderer.table = function (token) {\n isRenderingTable = true\n try {\n const labels = token.header.map((cell) =>\n escapeAttribute(\n this.parser.parseInline(\n cell.tokens,\n this.parser.textRenderer,\n ),\n ),\n )\n const renderRow = (cells: Tokens.TableCell[]) =>\n `<tr role=\"row\">${cells\n .map((cell, index) => {\n const content = this.parser.parseInline(cell.tokens)\n const align = cell.align ? ` align=\"${cell.align}\"` : ''\n return cell.header\n ? `<th role=\"columnheader\"${align}>${content}</th>`\n : `<td role=\"cell\" data-label=\"${labels[index] ?? ''}\"${align}><span>${content}</span></td>`\n })\n .join('')}</tr>`\n const body = token.rows.length\n ? `<tbody role=\"rowgroup\">${token.rows.map(renderRow).join('')}</tbody>`\n : ''\n // Stacked, the head is out of sight and every row carries the\n // labels: a table with no rows yet (a header-only one, or the\n // stream before its first row) would show nothing at all.\n const tableClass =\n token.header.length >= 3 && token.rows.length\n ? 'u-table u-table--stack'\n : 'u-table'\n return `<div class=\"table-wrapper u-table-scroll\"><table class=\"${tableClass}\" role=\"table\"><thead role=\"rowgroup\">${renderRow(token.header)}</thead>${body}</table></div>\\n`\n } finally {\n isRenderingTable = false\n }\n }\n\n const MERMAID_PREFIXES =\n /^(sequenceDiagram|graph|classDiagram|stateDiagram|erDiagram|flowchart|xychart-beta)/\n\n // A fence holds code to show, not markup. Unescaped, an HTML sample became\n // elements and lost its tags before the highlighter read what was left.\n // Both the highlighter and the diagram renderer read `textContent`, which\n // gives the text back as written.\n renderer.code = ({ text }) => {\n if (MERMAID_PREFIXES.test(text)) {\n return `<pre class=\"mermaid\">${escapeHtml(text)}</pre>`\n }\n return `<pre><code>${escapeHtml(text)}</code></pre>`\n }\n\n // --- Preprocessing pipeline ---\n\n function normalizeLatexDelimiters(md: string): string {\n return md\n .replace(/\\\\\\[([\\s\\S]*?)\\\\\\]/g, (_, content) => `$$${content}$$`)\n .replace(/\\\\\\(([\\s\\S]*?)\\\\\\)/g, (_, content) => `$${content}$`)\n .replace(/^(\\d+)\\.(?!\\s)/gm, '$1\\\\.')\n }\n\n /**\n * Strips JSON objects/arrays that appear outside fenced code blocks.\n * Some models dump tool-call JSON directly into the text response.\n */\n function stripLeakedJson(md: string): string {\n const fenced = new Set<number>()\n const fenceRe = /^(`{3,}|~{3,})[^\\n]*\\n([\\s\\S]*?)\\n\\1/gm\n let fenceMatch: RegExpExecArray | null\n while ((fenceMatch = fenceRe.exec(md)) !== null) {\n for (\n let i = fenceMatch.index;\n i < fenceMatch.index + fenceMatch[0].length;\n i++\n ) {\n fenced.add(i)\n }\n }\n\n return md\n .replace(\n /[{[]([\\s\\S]*?)[}\\]]/g,\n (match, _inner, offset: number) => {\n if (fenced.has(offset)) {\n return match\n }\n try {\n JSON.parse(match)\n return ''\n } catch {\n return match\n }\n },\n )\n .replace(/\\n{3,}/g, '\\n\\n')\n }\n\n // Runs on the accumulated text, not on deltas, so a marker split across two\n // stream chunks still gets caught once both have landed.\n const preprocessors: Array<(md: string) => string> = [\n stripProviderCitationMarkers,\n stripLeakedJson,\n remend,\n normalizeLatexDelimiters,\n ]\n\n // --- Computed HTML ---\n\n const containerRef = useTemplateRef<HTMLDivElement>('container')\n\n // Every render parses the whole text again, and a stream changes it at every\n // delta: the cost of a turn grows with the square of its length. On chat\n // `st0Eg8iG0zUX0HQN` one parse took 24ms at 92KB, thousands of deltas\n // arrived, and the tab froze. The first text renders at once, the changes\n // after it at most once per interval, the last one always included.\n const RENDER_INTERVAL_MS = 100\n const renderedMarkdown = refThrottled(\n toRef(props, 'markdown'),\n RENDER_INTERVAL_MS,\n )\n const visibleMarkdown = computed(() =>\n props.tailLength\n ? getMarkdownTail(renderedMarkdown.value, props.tailLength)\n : renderedMarkdown.value,\n )\n\n // Expand backend short urls (`/api/r/<hash>`) back to their real target so\n // prose (e.g. a bulleted list of links) shows/opens real urls, not the\n // token-cheap short ones the model sees. No-op when no resolver is provided.\n const { resolveText } = useShortUrlResolver()\n const expandedMarkdown = resolveText(visibleMarkdown)\n\n // Inside a chat, an image from a host the agent does not list waits for a\n // click (see chatImagePolicy.ts); elsewhere images load as they always did.\n const imageGate = useChatImageGate()\n\n const html = computed(() => {\n const md = preprocessors.reduce(\n (text, fn) => fn(text),\n expandedMarkdown.value,\n )\n return sanitizeMarkdownHtml(\n marked.parse(md, {\n async: false,\n breaks: true,\n renderer,\n }) as string,\n imageGate.isGated.value\n ? {\n canLoad: imageGate.canLoad,\n hostOf: imageGate.hostOf,\n label: (host) => $t('label.imageHeld', { host }),\n }\n : undefined,\n )\n })\n\n /**\n * A held image is a button carrying its url: a click (or Enter, which a\n * button turns into one) releases that url, and the next render shows\n * the image. It may sit inside a link, which must not open.\n */\n function onContentClick(event: MouseEvent) {\n const held = (event.target as Element | null)?.closest?.(\n `[${HELD_IMAGE_ATTRIBUTE}]`,\n )\n const src = held?.getAttribute(HELD_IMAGE_ATTRIBUTE)\n if (!src) {\n return\n }\n event.preventDefault()\n event.stopPropagation()\n imageGate.release(src)\n }\n\n // --- Post-render processors ---\n\n async function renderMermaid() {\n if (props.loading) {\n return\n }\n\n await nextTick()\n const nodes = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre.mermaid:not([data-rendered])',\n )\n if (!nodes?.length) {\n return\n }\n\n const { renderMermaidSVG, THEMES } = await loadBeautifulMermaid()\n const theme = props.isDark\n ? THEMES['github-dark']\n : THEMES['github-light']\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const code = node.textContent?.trim()\n if (!code) {\n continue\n }\n\n try {\n const svg = renderMermaidSVG(code, theme)\n if (node.isConnected) {\n node.dataset.code = code\n node.innerHTML = svg\n node.setAttribute('data-rendered', 'true')\n }\n } catch {\n // Invalid syntax — node left untouched\n }\n }\n }\n\n async function highlightCode() {\n await nextTick()\n const blocks = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre:not(.mermaid) > code:not([data-highlighted])',\n )\n if (!blocks?.length) {\n return\n }\n\n const hljs = (await import('highlight.js/lib/common')).default\n for (const block of blocks) {\n hljs.highlightElement(block)\n block.setAttribute('data-highlighted', 'true')\n }\n }\n\n async function renderKatex() {\n await nextTick()\n const nodes =\n containerRef.value?.querySelectorAll<HTMLElement>('.katex-pending')\n if (!nodes?.length) {\n return\n }\n\n const katex = await loadKatex()\n // Keep this major in step with the installed katex: 0.18 prefixed the\n // internal class names (.sizing became .katex-sizing), so a stylesheet\n // from another major styles nothing. The widget pins the same major\n // again in its vite config, where katex is aliased to the CDN.\n loadCdnCss(\n 'https://cdn.jsdelivr.net/npm/katex@0.18/dist/katex.min.css',\n getShadowRoot(containerRef.value),\n )\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const tex = node.dataset.katex\n if (!tex) {\n continue\n }\n const displayMode = node.dataset.display === 'true'\n try {\n node.innerHTML = katex.renderToString(decodeURIComponent(tex), {\n throwOnError: false,\n displayMode,\n })\n node.classList.remove('katex-pending')\n } catch {\n // Invalid LaTeX — leave placeholder\n }\n }\n }\n\n async function rerenderMermaidOnThemeChange() {\n await nextTick()\n const nodes = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre.mermaid[data-rendered]',\n )\n if (!nodes?.length) {\n return\n }\n\n const { renderMermaidSVG, THEMES } = await loadBeautifulMermaid()\n const theme = props.isDark\n ? THEMES['github-dark']\n : THEMES['github-light']\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const code = node.dataset.code\n if (!code) {\n continue\n }\n try {\n node.innerHTML = renderMermaidSVG(code, theme)\n } catch {\n // Invalid syntax — leave as-is\n }\n }\n }\n\n /**\n * Markdown images come from model output (or from a scraped page), so their\n * urls die often. The markup is injected with `v-html`, so there is no place\n * to bind `@error`: `error` doesn't bubble but it does propagate in the\n * capture phase, so one container listener covers every image, including the\n * ones added by later stream chunks.\n */\n function handleImageError(event: Event) {\n const img = event.target\n if (!(img instanceof HTMLImageElement) || img.dataset.broken) {\n return\n }\n img.dataset.broken = 'true'\n const placeholder = document.createElement('span')\n placeholder.className = 'markdown-broken-image'\n placeholder.textContent = img.alt || $t('label.imageLoadError')\n placeholder.title = img.src\n img.replaceWith(placeholder)\n }\n\n onMounted(() => {\n containerRef.value?.addEventListener('error', handleImageError, true)\n })\n onBeforeUnmount(() => {\n containerRef.value?.removeEventListener('error', handleImageError, true)\n })\n\n watch([html, () => props.loading], renderMermaid, { immediate: true })\n watch(() => props.isDark, rerenderMermaidOnThemeChange)\n watch(html, highlightCode, { immediate: true })\n watch(html, renderKatex, { immediate: true })\n\n // --- Streaming animation (FlowToken-style) ---\n\n let prevCharCount = 0\n\n function createAnimatedSpan(text: string, delay: number): HTMLSpanElement {\n const span = document.createElement('span')\n span.style.cssText = `animation:ft-${props.animation} ${props.animationDuration} ease-out ${delay}ms both;display:inline-block`\n span.textContent = text\n span.addEventListener(\n 'animationend',\n () => {\n const parent = span.parentNode\n if (!parent) {\n return\n }\n parent.replaceChild(document.createTextNode(text), span)\n parent.normalize()\n },\n { once: true },\n )\n return span\n }\n\n function insertAnimatedWords(\n text: string,\n parent: Node,\n refNode: Node | null,\n startIndex: number,\n ): number {\n let idx = startIndex\n const parts = text.split(/(\\s+)/)\n for (const part of parts) {\n if (!part) {\n continue\n }\n if (/^\\s+$/.test(part)) {\n parent.insertBefore(document.createTextNode(part), refNode)\n continue\n }\n parent.insertBefore(createAnimatedSpan(part, idx * 30), refNode)\n idx++\n }\n return idx\n }\n\n function collectTextNodes(root: HTMLElement): Text[] {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n acceptNode(node) {\n if (\n node.parentElement?.closest(\n 'pre, code, .katex-pending, .markdown-broken-image',\n )\n ) {\n return NodeFilter.FILTER_REJECT\n }\n return NodeFilter.FILTER_ACCEPT\n },\n })\n const nodes: Text[] = []\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as Text)\n }\n return nodes\n }\n\n function annotateNewContent() {\n if (!containerRef.value || !props.loading || !props.animation) {\n return\n }\n\n const textNodes = collectTextNodes(containerRef.value)\n let charsSeen = 0\n let wordIdx = 0\n\n for (const textNode of textNodes) {\n const text = textNode.textContent || ''\n const nodeStart = charsSeen\n const nodeEnd = charsSeen + text.length\n charsSeen = nodeEnd\n\n if (nodeEnd <= prevCharCount) {\n continue\n }\n\n const parent = textNode.parentNode\n if (!parent) {\n continue\n }\n\n // Entirely new node — animate all words\n if (nodeStart >= prevCharCount) {\n const ref = textNode.nextSibling\n parent.removeChild(textNode)\n wordIdx = insertAnimatedWords(text, parent, ref, wordIdx)\n continue\n }\n\n // Partially new — split and animate only the new portion\n const splitAt = prevCharCount - nodeStart\n const newTextNode = textNode.splitText(splitAt)\n const newText = newTextNode.textContent || ''\n const ref = newTextNode.nextSibling\n parent.removeChild(newTextNode)\n wordIdx = insertAnimatedWords(newText, parent, ref, wordIdx)\n }\n\n prevCharCount = charsSeen\n }\n\n watch(\n html,\n async () => {\n await nextTick()\n annotateNewContent()\n },\n { immediate: true },\n )\n\n watch(\n () => props.markdown,\n (newVal, oldVal) => {\n if (!newVal || (oldVal && newVal.length < oldVal.length)) {\n prevCharCount = 0\n }\n },\n )\n</script>\n\n<template>\n <div ref=\"container\" @click=\"onContentClick\" v-html=\"html\"></div>\n</template>\n\n<style>\n .markdown-held-image {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n padding: var(--spacing-4) var(--spacing-8);\n border: var(--border) dashed var(--color-surface-4);\n border-radius: var(--rounded-md);\n background-color: var(--color-surface-1);\n color: var(--color-word-3);\n font: inherit;\n font-size: var(--text-12);\n vertical-align: middle;\n cursor: pointer;\n }\n\n .markdown-held-image:hover,\n .markdown-held-image:focus-visible {\n background-color: var(--color-surface-2);\n color: var(--color-word-2);\n }\n\n .markdown-broken-image {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 100%;\n padding: var(--spacing-4) var(--spacing-8);\n border: var(--border) dashed var(--color-surface-4);\n border-radius: var(--rounded-md);\n background-color: var(--color-surface-1);\n color: var(--color-word-4);\n font-size: var(--text-12);\n vertical-align: middle;\n }\n\n @keyframes ft-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes ft-blurIn {\n from {\n opacity: 0;\n filter: blur(4px);\n }\n to {\n opacity: 1;\n filter: blur(0px);\n }\n }\n\n @keyframes ft-dropIn {\n from {\n transform: translateY(-8px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes ft-slideUp {\n from {\n transform: translateY(8px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes ft-fadeAndScale {\n from {\n transform: scale(0.85);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>\n","<script setup lang=\"ts\">\n import remend from 'remend'\n import { marked, type Token, type Tokens } from 'marked'\n import {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n toRef,\n useTemplateRef,\n watch,\n } from 'vue'\n import { refThrottled } from '@vueuse/core'\n import { useI18n } from 'vue-i18n'\n import {\n loadCdnCss,\n getShadowRoot,\n isSameSite,\n stripProviderCitationMarkers,\n } from 'utils'\n import { useShortUrlResolver } from 'composables'\n import { getMarkdownTail } from './utils'\n import {\n escapeHtml,\n HELD_IMAGE_ATTRIBUTE,\n renderKatexPlaceholder,\n sanitizeMarkdownHtml,\n } from './markdownHtml'\n import { useChatImageGate } from './chatImagePolicy'\n\n export type StreamingAnimation =\n 'fadeIn' | 'blurIn' | 'dropIn' | 'slideUp' | 'fadeAndScale' | null\n\n const props = withDefaults(\n defineProps<{\n markdown?: string\n loading?: boolean\n animation?: StreamingAnimation\n animationDuration?: string\n isDark?: boolean\n /**\n * Renders only the last `tailLength` characters, for a live box\n * that follows the bottom of a text too long to parse whole.\n */\n tailLength?: number\n }>(),\n {\n markdown: '',\n loading: false,\n animation: 'fadeIn',\n animationDuration: '0.3s',\n isDark: false,\n tailLength: undefined,\n },\n )\n\n const { t: $t } = useI18n({ useScope: 'global' })\n\n // --- Lazy-loaded heavy dependencies ---\n\n let beautifulMermaidPromise: Promise<\n typeof import('beautiful-mermaid')\n > | null = null\n function loadBeautifulMermaid() {\n if (!beautifulMermaidPromise) {\n beautifulMermaidPromise = import('beautiful-mermaid')\n }\n return beautifulMermaidPromise\n }\n\n let katexPromise: Promise<(typeof import('katex'))['default']> | null = null\n function loadKatex() {\n if (!katexPromise) {\n katexPromise = import('katex').then((mod) => mod.default)\n }\n return katexPromise\n }\n\n // --- Marked extensions ---\n\n const inlineKatexRule =\n /^(\\${1,2})(?!\\$)((?:\\\\.|[^\\\\\\n])*?(?:\\\\.|[^\\\\\\n$]))\\1(?=[\\s?!.,:\\uFF1F\\uFF01\\u3002\\uFF0C\\uFF1A]|$)/\n const blockKatexRule = /^(\\${1,2})\\n((?:\\\\[^]|[^\\\\])+?)\\n\\1(?:\\n|$)/\n\n marked.use({\n extensions: [\n {\n name: 'inlineKatex',\n level: 'inline',\n start: (src) => {\n const idx = src.indexOf('$')\n if (idx === -1) {\n return undefined\n }\n if (idx === 0 || src.charAt(idx - 1) === ' ') {\n return idx\n }\n return undefined\n },\n tokenizer(src) {\n const match = src.match(inlineKatexRule)\n if (!match) {\n return\n }\n return {\n type: 'inlineKatex',\n raw: match[0],\n text: match[2].trim(),\n displayMode: match[1].length === 2,\n }\n },\n renderer(token) {\n return renderKatexPlaceholder(token.text, token.displayMode)\n },\n },\n {\n name: 'blockKatex',\n level: 'block',\n tokenizer(src) {\n const match = src.match(blockKatexRule)\n if (!match) {\n return\n }\n return {\n type: 'blockKatex',\n raw: match[0],\n text: match[2].trim(),\n displayMode: match[1].length === 2,\n }\n },\n renderer(token) {\n return (\n renderKatexPlaceholder(token.text, token.displayMode) +\n '\\n'\n )\n },\n },\n ],\n })\n\n marked.use({\n extensions: [\n {\n name: 'thinking',\n level: 'block',\n start: (src) => src.indexOf('<thinking>'),\n tokenizer(src) {\n const match = /^<thinking>([\\s\\S]*?)<\\/thinking>/.exec(src)\n if (!match) {\n return\n }\n const token = {\n type: 'thinking',\n raw: match[0],\n text: match[1].trim(),\n tokens: [] as Token[],\n }\n this.lexer.blockTokens(token.text, token.tokens)\n return token\n },\n renderer(token) {\n return `<div class=\"thinking-block\">${this.parser.parse(token.tokens ?? [])}</div>`\n },\n },\n ],\n })\n\n // --- Custom renderer ---\n\n const renderer = new marked.Renderer()\n\n // marked escapes href and title inside its own link renderer. This\n // override replaces that renderer, so until now both went into `v-html`\n // verbatim: a quote in the URL closed the attribute and everything after\n // it became markup, in a document written by a model and, through the\n // knowledge base, by whoever fed it.\n const escapeAttribute = (value: string) =>\n value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n // Schemes that execute rather than navigate. The link becomes plain text,\n // so the reader still sees what it said.\n const UNSAFE_LINK_SCHEME = /^(?:javascript|data|vbscript|file):/i\n\n // A bare address written in a cell is most of its row: the cell shows it\n // without the scheme and `www.`, with a break after each slash, while the\n // href and the tooltip keep it whole. Set while `renderer.table` renders\n // its cells, which marked does synchronously.\n let isRenderingTable = false\n const shortenAddress = (address: string) =>\n escapeAttribute(\n address.replace(/^https?:\\/\\/(?:www\\.)?/i, '').replace(/\\/$/, ''),\n ).replace(/\\//g, '/<wbr>')\n\n renderer.link = function ({ href, title, text: label, tokens }) {\n const text = this.parser.parseInline(tokens)\n // Control characters go first: the browser strips them before reading\n // the scheme, so they are how `java\\tscript:` gets past a check.\n // eslint-disable-next-line no-control-regex -- they are the point here\n const target = (href ?? '').trim().replace(/[\\x00-\\x1f]/g, '')\n if (!target || UNSAFE_LINK_SCHEME.test(target)) {\n return text\n }\n const isBareAddressInTable = isRenderingTable && label === target\n const tooltip = title || (isBareAddressInTable ? target : '')\n const titleAttr = tooltip ? ` title=\"${escapeAttribute(tooltip)}\"` : ''\n const targetAttrs = isSameSite(target)\n ? ''\n : ' target=\"_blank\" rel=\"noopener noreferrer\"'\n return `<a href=\"${escapeAttribute(target)}\"${titleAttr}${targetAttrs}>${isBareAddressInTable ? shortenAddress(target) : text}</a>`\n }\n\n // A data table (`.u-table`). From three columns up it stacks its rows into\n // blocks when the message is too narrow for them, with the heading of\n // each column, copied into `data-label`, as the label of its value; two\n // columns still fit side by side. The roles keep it a table for screen\n // readers once the style changes its display. Stacked, a cell is a grid\n // of label and value, and every child of a grid is an item of its own:\n // the value goes in one span, or a bold word, a link or the words the\n // stream animates one by one would scatter across both columns.\n renderer.table = function (token) {\n isRenderingTable = true\n try {\n const labels = token.header.map((cell) =>\n escapeAttribute(\n this.parser.parseInline(\n cell.tokens,\n this.parser.textRenderer,\n ),\n ),\n )\n const renderRow = (cells: Tokens.TableCell[]) =>\n `<tr role=\"row\">${cells\n .map((cell, index) => {\n const content = this.parser.parseInline(cell.tokens)\n const align = cell.align ? ` align=\"${cell.align}\"` : ''\n return cell.header\n ? `<th role=\"columnheader\"${align}>${content}</th>`\n : `<td role=\"cell\" data-label=\"${labels[index] ?? ''}\"${align}><span>${content}</span></td>`\n })\n .join('')}</tr>`\n const body = token.rows.length\n ? `<tbody role=\"rowgroup\">${token.rows.map(renderRow).join('')}</tbody>`\n : ''\n // Stacked, the head is out of sight and every row carries the\n // labels: a table with no rows yet (a header-only one, or the\n // stream before its first row) would show nothing at all.\n const tableClass =\n token.header.length >= 3 && token.rows.length\n ? 'u-table u-table--stack'\n : 'u-table'\n return `<div class=\"table-wrapper u-table-scroll\"><table class=\"${tableClass}\" role=\"table\"><thead role=\"rowgroup\">${renderRow(token.header)}</thead>${body}</table></div>\\n`\n } finally {\n isRenderingTable = false\n }\n }\n\n const MERMAID_PREFIXES =\n /^(sequenceDiagram|graph|classDiagram|stateDiagram|erDiagram|flowchart|xychart-beta)/\n\n // A fence holds code to show, not markup. Unescaped, an HTML sample became\n // elements and lost its tags before the highlighter read what was left.\n // Both the highlighter and the diagram renderer read `textContent`, which\n // gives the text back as written.\n renderer.code = ({ text }) => {\n if (MERMAID_PREFIXES.test(text)) {\n return `<pre class=\"mermaid\">${escapeHtml(text)}</pre>`\n }\n return `<pre><code>${escapeHtml(text)}</code></pre>`\n }\n\n // --- Preprocessing pipeline ---\n\n function normalizeLatexDelimiters(md: string): string {\n return md\n .replace(/\\\\\\[([\\s\\S]*?)\\\\\\]/g, (_, content) => `$$${content}$$`)\n .replace(/\\\\\\(([\\s\\S]*?)\\\\\\)/g, (_, content) => `$${content}$`)\n .replace(/^(\\d+)\\.(?!\\s)/gm, '$1\\\\.')\n }\n\n /**\n * Strips JSON objects/arrays that appear outside fenced code blocks.\n * Some models dump tool-call JSON directly into the text response.\n */\n function stripLeakedJson(md: string): string {\n const fenced = new Set<number>()\n const fenceRe = /^(`{3,}|~{3,})[^\\n]*\\n([\\s\\S]*?)\\n\\1/gm\n let fenceMatch: RegExpExecArray | null\n while ((fenceMatch = fenceRe.exec(md)) !== null) {\n for (\n let i = fenceMatch.index;\n i < fenceMatch.index + fenceMatch[0].length;\n i++\n ) {\n fenced.add(i)\n }\n }\n\n return md\n .replace(\n /[{[]([\\s\\S]*?)[}\\]]/g,\n (match, _inner, offset: number) => {\n if (fenced.has(offset)) {\n return match\n }\n try {\n JSON.parse(match)\n return ''\n } catch {\n return match\n }\n },\n )\n .replace(/\\n{3,}/g, '\\n\\n')\n }\n\n // Runs on the accumulated text, not on deltas, so a marker split across two\n // stream chunks still gets caught once both have landed.\n const preprocessors: Array<(md: string) => string> = [\n stripProviderCitationMarkers,\n stripLeakedJson,\n remend,\n normalizeLatexDelimiters,\n ]\n\n // --- Computed HTML ---\n\n const containerRef = useTemplateRef<HTMLDivElement>('container')\n\n // Every render parses the whole text again, and a stream changes it at every\n // delta: the cost of a turn grows with the square of its length. On chat\n // `st0Eg8iG0zUX0HQN` one parse took 24ms at 92KB, thousands of deltas\n // arrived, and the tab froze. The first text renders at once, the changes\n // after it at most once per interval, the last one always included.\n const RENDER_INTERVAL_MS = 100\n const renderedMarkdown = refThrottled(\n toRef(props, 'markdown'),\n RENDER_INTERVAL_MS,\n )\n const visibleMarkdown = computed(() =>\n props.tailLength\n ? getMarkdownTail(renderedMarkdown.value, props.tailLength)\n : renderedMarkdown.value,\n )\n\n // Expand backend short urls (`/api/r/<hash>`) back to their real target so\n // prose (e.g. a bulleted list of links) shows/opens real urls, not the\n // token-cheap short ones the model sees. No-op when no resolver is provided.\n const { resolveText } = useShortUrlResolver()\n const expandedMarkdown = resolveText(visibleMarkdown)\n\n // Inside a chat, an image from a host the agent does not list waits for a\n // click (see chatImagePolicy.ts); elsewhere images load as they always did.\n const imageGate = useChatImageGate()\n\n const html = computed(() => {\n const md = preprocessors.reduce(\n (text, fn) => fn(text),\n expandedMarkdown.value,\n )\n return sanitizeMarkdownHtml(\n marked.parse(md, {\n async: false,\n breaks: true,\n renderer,\n }) as string,\n imageGate.isGated.value\n ? {\n canLoad: imageGate.canLoad,\n hostOf: imageGate.hostOf,\n label: (host) => $t('label.imageHeld', { host }),\n }\n : undefined,\n )\n })\n\n /**\n * A held image is a button carrying its url: a click (or Enter, which a\n * button turns into one) releases that url, and the next render shows\n * the image. It may sit inside a link, which must not open.\n */\n function onContentClick(event: MouseEvent) {\n const held = (event.target as Element | null)?.closest?.(\n `[${HELD_IMAGE_ATTRIBUTE}]`,\n )\n const src = held?.getAttribute(HELD_IMAGE_ATTRIBUTE)\n if (!src) {\n return\n }\n event.preventDefault()\n event.stopPropagation()\n imageGate.release(src)\n }\n\n // --- Post-render processors ---\n\n async function renderMermaid() {\n if (props.loading) {\n return\n }\n\n await nextTick()\n const nodes = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre.mermaid:not([data-rendered])',\n )\n if (!nodes?.length) {\n return\n }\n\n const { renderMermaidSVG, THEMES } = await loadBeautifulMermaid()\n const theme = props.isDark\n ? THEMES['github-dark']\n : THEMES['github-light']\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const code = node.textContent?.trim()\n if (!code) {\n continue\n }\n\n try {\n const svg = renderMermaidSVG(code, theme)\n if (node.isConnected) {\n node.dataset.code = code\n node.innerHTML = svg\n node.setAttribute('data-rendered', 'true')\n }\n } catch {\n // Invalid syntax — node left untouched\n }\n }\n }\n\n async function highlightCode() {\n await nextTick()\n const blocks = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre:not(.mermaid) > code:not([data-highlighted])',\n )\n if (!blocks?.length) {\n return\n }\n\n const hljs = (await import('highlight.js/lib/common')).default\n for (const block of blocks) {\n hljs.highlightElement(block)\n block.setAttribute('data-highlighted', 'true')\n }\n }\n\n async function renderKatex() {\n await nextTick()\n const nodes =\n containerRef.value?.querySelectorAll<HTMLElement>('.katex-pending')\n if (!nodes?.length) {\n return\n }\n\n const katex = await loadKatex()\n // Keep this major in step with the installed katex: 0.18 prefixed the\n // internal class names (.sizing became .katex-sizing), so a stylesheet\n // from another major styles nothing. The widget pins the same major\n // again in its vite config, where katex is aliased to the CDN.\n loadCdnCss(\n 'https://cdn.jsdelivr.net/npm/katex@0.18/dist/katex.min.css',\n getShadowRoot(containerRef.value),\n )\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const tex = node.dataset.katex\n if (!tex) {\n continue\n }\n const displayMode = node.dataset.display === 'true'\n try {\n node.innerHTML = katex.renderToString(decodeURIComponent(tex), {\n throwOnError: false,\n displayMode,\n })\n node.classList.remove('katex-pending')\n } catch {\n // Invalid LaTeX — leave placeholder\n }\n }\n }\n\n async function rerenderMermaidOnThemeChange() {\n await nextTick()\n const nodes = containerRef.value?.querySelectorAll<HTMLElement>(\n 'pre.mermaid[data-rendered]',\n )\n if (!nodes?.length) {\n return\n }\n\n const { renderMermaidSVG, THEMES } = await loadBeautifulMermaid()\n const theme = props.isDark\n ? THEMES['github-dark']\n : THEMES['github-light']\n\n for (const node of Array.from(nodes)) {\n if (!node.isConnected) {\n continue\n }\n const code = node.dataset.code\n if (!code) {\n continue\n }\n try {\n node.innerHTML = renderMermaidSVG(code, theme)\n } catch {\n // Invalid syntax — leave as-is\n }\n }\n }\n\n /**\n * Markdown images come from model output (or from a scraped page), so their\n * urls die often. The markup is injected with `v-html`, so there is no place\n * to bind `@error`: `error` doesn't bubble but it does propagate in the\n * capture phase, so one container listener covers every image, including the\n * ones added by later stream chunks.\n */\n function handleImageError(event: Event) {\n const img = event.target\n if (!(img instanceof HTMLImageElement) || img.dataset.broken) {\n return\n }\n img.dataset.broken = 'true'\n const placeholder = document.createElement('span')\n placeholder.className = 'markdown-broken-image'\n placeholder.textContent = img.alt || $t('label.imageLoadError')\n placeholder.title = img.src\n img.replaceWith(placeholder)\n }\n\n onMounted(() => {\n containerRef.value?.addEventListener('error', handleImageError, true)\n })\n onBeforeUnmount(() => {\n containerRef.value?.removeEventListener('error', handleImageError, true)\n })\n\n watch([html, () => props.loading], renderMermaid, { immediate: true })\n watch(() => props.isDark, rerenderMermaidOnThemeChange)\n watch(html, highlightCode, { immediate: true })\n watch(html, renderKatex, { immediate: true })\n\n // --- Streaming animation (FlowToken-style) ---\n\n let prevCharCount = 0\n\n function createAnimatedSpan(text: string, delay: number): HTMLSpanElement {\n const span = document.createElement('span')\n span.style.cssText = `animation:ft-${props.animation} ${props.animationDuration} ease-out ${delay}ms both;display:inline-block`\n span.textContent = text\n span.addEventListener(\n 'animationend',\n () => {\n const parent = span.parentNode\n if (!parent) {\n return\n }\n parent.replaceChild(document.createTextNode(text), span)\n parent.normalize()\n },\n { once: true },\n )\n return span\n }\n\n function insertAnimatedWords(\n text: string,\n parent: Node,\n refNode: Node | null,\n startIndex: number,\n ): number {\n let idx = startIndex\n const parts = text.split(/(\\s+)/)\n for (const part of parts) {\n if (!part) {\n continue\n }\n if (/^\\s+$/.test(part)) {\n parent.insertBefore(document.createTextNode(part), refNode)\n continue\n }\n parent.insertBefore(createAnimatedSpan(part, idx * 30), refNode)\n idx++\n }\n return idx\n }\n\n function collectTextNodes(root: HTMLElement): Text[] {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n acceptNode(node) {\n if (\n node.parentElement?.closest(\n 'pre, code, .katex-pending, .markdown-broken-image',\n )\n ) {\n return NodeFilter.FILTER_REJECT\n }\n return NodeFilter.FILTER_ACCEPT\n },\n })\n const nodes: Text[] = []\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as Text)\n }\n return nodes\n }\n\n function annotateNewContent() {\n if (!containerRef.value || !props.loading || !props.animation) {\n return\n }\n\n const textNodes = collectTextNodes(containerRef.value)\n let charsSeen = 0\n let wordIdx = 0\n\n for (const textNode of textNodes) {\n const text = textNode.textContent || ''\n const nodeStart = charsSeen\n const nodeEnd = charsSeen + text.length\n charsSeen = nodeEnd\n\n if (nodeEnd <= prevCharCount) {\n continue\n }\n\n const parent = textNode.parentNode\n if (!parent) {\n continue\n }\n\n // Entirely new node — animate all words\n if (nodeStart >= prevCharCount) {\n const ref = textNode.nextSibling\n parent.removeChild(textNode)\n wordIdx = insertAnimatedWords(text, parent, ref, wordIdx)\n continue\n }\n\n // Partially new — split and animate only the new portion\n const splitAt = prevCharCount - nodeStart\n const newTextNode = textNode.splitText(splitAt)\n const newText = newTextNode.textContent || ''\n const ref = newTextNode.nextSibling\n parent.removeChild(newTextNode)\n wordIdx = insertAnimatedWords(newText, parent, ref, wordIdx)\n }\n\n prevCharCount = charsSeen\n }\n\n watch(\n html,\n async () => {\n await nextTick()\n annotateNewContent()\n },\n { immediate: true },\n )\n\n watch(\n () => props.markdown,\n (newVal, oldVal) => {\n if (!newVal || (oldVal && newVal.length < oldVal.length)) {\n prevCharCount = 0\n }\n },\n )\n</script>\n\n<template>\n <div ref=\"container\" @click=\"onContentClick\" v-html=\"html\"></div>\n</template>\n\n<style>\n .markdown-held-image {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n padding: var(--spacing-4) var(--spacing-8);\n border: var(--border) dashed var(--color-surface-4);\n border-radius: var(--rounded-md);\n background-color: var(--color-surface-1);\n color: var(--color-word-3);\n font: inherit;\n font-size: var(--text-12);\n vertical-align: middle;\n cursor: pointer;\n }\n\n .markdown-held-image:hover,\n .markdown-held-image:focus-visible {\n background-color: var(--color-surface-2);\n color: var(--color-word-2);\n }\n\n .markdown-broken-image {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 100%;\n padding: var(--spacing-4) var(--spacing-8);\n border: var(--border) dashed var(--color-surface-4);\n border-radius: var(--rounded-md);\n background-color: var(--color-surface-1);\n color: var(--color-word-4);\n font-size: var(--text-12);\n vertical-align: middle;\n }\n\n @keyframes ft-fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes ft-blurIn {\n from {\n opacity: 0;\n filter: blur(4px);\n }\n to {\n opacity: 1;\n filter: blur(0px);\n }\n }\n\n @keyframes ft-dropIn {\n from {\n transform: translateY(-8px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes ft-slideUp {\n from {\n transform: translateY(8px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes ft-fadeAndScale {\n from {\n transform: scale(0.85);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>\n"],"ignoreList":[3,4,5],"mappings":"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"}
|