@crestapps/ai-chat-ui 2.0.0-preview.193 → 2.0.0-preview.197
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/ai-chat.js +77 -20
- package/dist/ai-chat.js.map +1 -1
- package/dist/ai-chat.min.js +1 -1
- package/dist/ai-chat.min.js.map +1 -1
- package/dist/chat-interaction.js +109 -17
- package/dist/chat-interaction.js.map +1 -1
- package/dist/chat-interaction.min.js +1 -1
- package/dist/chat-interaction.min.js.map +1 -1
- package/dist/realtime-audio.js +16 -2
- package/dist/realtime-audio.js.map +1 -1
- package/dist/realtime-audio.min.js +1 -1
- package/dist/realtime-audio.min.js.map +1 -1
- package/package.json +1 -1
package/dist/ai-chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","coreAIChatManager","_window$CoreAIChatMar","_window$CoreAIChatMar2","_window$CoreAIChatMar3","_window$CoreAIChatMar4","_window$CoreAIChatMar5","_window$CoreAIChatMar6","_window$CoreAIChatMar7","_window$CoreAIChatMar8","_window$CoreAIChatMar9","_window$CoreAIChatMar0","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","copiedTitle","codeCopiedText","copyResetDelayMs","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","_normalized$isGenerat","_normalized$isImage","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isGenerated","IsGenerated","isImage","IsImage","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","readJsonResponse","_x","_x2","_readJsonResponse","_callee0","response","fallbackMessage","contentType","message","_t6","_t7","_context0","headers","get","redirected","ok","data","json","expandImageMarkers","CoreAIChatMarkers","getCitationLabel","unmergedCitationCount","citationIdentity","concat","splitCombinedCitations","content","collapseRepeatedCitations","html","separateAdjacentCitations","citationMarkerHtml","displayIndex","buildCitationDisplay","processedContent","messageReferences","referenceEntries","citations","citedRefs","filter","_ref6","_ref7","includes","generatedRefs","_ref8","_ref9","sort","_ref0","_ref1","_ref10","_ref11","b","_ref12","_ref13","_ref14","_ref15","citationsByIdentity","Map","placeholders","_iterator","_step","_step$value","label","identity","citation","referenceKey","referenceKeys","isDownload","set","placeholder","replaceAll","err","_i2","_placeholders","entry","_iterator2","_step2","_step2$value","map","_ref16","_excluded","buildCopyContent","copyContent","_iterator3","_step3","_citation$referenceKe","_iterator5","_step5","_iterator4","_step4","trimEnd","updateMessagePresentation","rawContent","displayContent","citationDisplay","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","findChartMarker","use","extensions","level","start","idx","undefined","tokenizer","extracted","startIndex","type","raw","substring","endIndex","token","config","markBrokenImagesInMessage","requestAnimationFrame","wireBrokenImageHandlers","images","querySelectorAll","_iterator6","_step6","_loop","setAttribute","addEventListener","container","closest","dataset","brokenHandled","hidden","note","className","insertAdjacentElement","once","renderMessageMedia","charts","_iterator7","_step7","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","keys","styleMarkdownTables","replace","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","resolveIndicatorTemplate","template","encodedAssistantLabel","initialize","instanceConfig","normalizedInstanceConfig","normalizedWidgetConfig","hasWidgetConfig","widgetBehavior","coreAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","realtimeEnabled","realtimeWebRtcEnabled","RTCPeerConnection","realtimeWebRtcIceServers","realtimeVoiceName","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","queueDocumentOperation","operation","self","previousOperation","nextOperation","_callee","_context","_this","_callee3","filesToUpload","_context3","uploadDocumentUrl","_callee2","sessionId","profileId","formData","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","extractReadableErrorMessage","status","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","secondParsed","removeError","_t3","_context4","stringify","itemId","documentId","splice","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","j","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","div","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forceStopActiveVoice","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","stopRecording","rejectPendingSessionRequest","hideTypingIndicator","handleReceiveError","getErrorMessage","reason","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","turnId","_realtimePendingTurns","pending","stopAudio","fillRealtimePendingTurn","_conversationAssistantMessage","at","userMsg","responseId","_conversationAssistantResponseId","prev","msgIndex","newMessage","base64Audio","binaryString","atob","Uint8Array","charCodeAt","realtimeController","receivePcm","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","stopRealtimeConversation","onreconnected","info","onclose","ensureConnectionStarted","_this4","_callee7","states","_t5","_context7","HubConnectionState","state","Connected","Disconnected","settle","clearTimeout","timeoutId","clearInterval","intervalId","setTimeout","setInterval","addMessageInternal","_this5","fireEvent","CustomEvent","_this6","_message$rawContent","addMessages","_this7","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","sendMessage","trimmedPrompt","streamMessage","startRecording","_this8","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","subject","Subject","_sttCapture","_createPcmCapture","base64","_sttSubject","rate","sampleRate","documentElement","send","updateMicButton","_stopPcmCapture","complete","onChunk","AudioCtx","AudioContext","webkitAudioContext","audioContext","srcRate","createMediaStreamSource","processor","createScriptProcessor","onaudioprocess","input","inputBuffer","getChannelData","pcm16","_downsampleToInt16","sum","rms","sqrt","buffer","binary","String","fromCharCode","btoa","connect","destination","capture","disconnect","getTracks","stop","close","dstRate","same","Int16Array","ratio","newLen","floor","out","i0","i1","frac","toggleRecording","sessionProfileId","_this9","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this9$stream","processReferences","streamingFinished","synthesizeSpeech","_this9$stream2","getServiceDownMessage","_this0","_ref22","_message$rawContent2","stopIcon","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this1","buttons","button","buttonIndex","isPlaying","toggle","updateCopyButtons","_this10","isCopied","iconHtml","setCopyButtonState","cacheIndex","_this11","_ttsCacheIndex","invoke","toggleMessageTts","_this12","playAudioBlob","_this13","totalLength","reduce","combined","offset","_iterator8","_step8","blob","Blob","_this14","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this15","nextBlob","shift","conversationModeOnAudioEnded","_this16","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","startRealtimeConversation","setupRealtimeController","CoreAIRealtime","attach","ensureConnected","connected","Error","sendStart","voice","silenceMs","vadThreshold","allowInterruption","webRtcEnabled","sendStartWebRtc","offerSdp","webRtcIceServers","voiceName","getVoiceName","selectors","realtimeButton","conversationButtonElementSelector","sendButton","micButtonElementSelector","onActivate","onDeactivate","finishRealtimeConversationCleanup","onUserTurnPending","addRealtimePendingTurn","onUserTurnDropped","dropRealtimePendingTurn","dismissible","autoDismissMs","emptyAt","dropped","_this17","updateConversationButton","_conversationSubject","_conversationStream","interruptRmsThreshold","_conversationCapture","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","location","origin","searchParams","originalLength","removedCount","_this18","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this19","timerId","dismissNotification","handleNotificationAction","actionName","_this20","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","sessionRating","onSessionReset","startNewSession","requestNewSession","_this21","_callee8","_context8","_this22","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this23","placeholderElementSelector","loadSession","documentBarSelector","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","force","onSessionInitialized","sessionUrlTemplate","history","replaceState","sessionUrl","encodeURIComponent","resolveSessionId","clearCopiedMessageState","copyResponse","_ref23","_message$copyContent","_event$target","_event$target$closest","_this24","currentTarget","updateFeedbackIcons","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","_this25","active","mounted","_this26","_callee9","isInitialized","_context9","onMounted","fontAwesomeObserver","beforeUnmount","onBeforeUnmount","app","Vue","createApp","mount","autoInitializeSelector","getAttributeValue","attributeName","parseBooleanAttributeValue","parseJsonAttribute","description","rawValue","buildConfigFromDataAttributes","_parseJsonAttribute","_parseJsonAttribute2","settings","hasAttribute","allowWidgetHost","booleanAttributes","buildConfigFromElement","jsonConfig","attributeConfig","initializeFromElement","coreAiChatInitialized","__coreAIChatApp","scanForAutoInitialization","startAutoInitialization","readyState","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["/*\n * Figure markers: the short labels the model writes, turned into pictures by the host.\n *\n * Retrieval hands the model a label -- [fig:1] -- and keeps the picture's real link in the message's reference\n * map, the same way a text citation keeps its source behind \"[doc:1]\". A model asked to reproduce a long opaque\n * identifier does not reproduce it: it copies the shape and substitutes ordinals, so links to figures that were\n * never in the results came back as 404s. A label short enough to be written exactly, with the link put back\n * here where the model cannot reach it, is what stops that.\n *\n * It sits on window rather than inside the manager below so the host can reach it, and so its rules can be\n * exercised in a bare sandbox with no browser and no DOM -- see tests/realtime-client/figure-markers.test.js --\n * exactly as window.CoreAIRealtime exposes the microphone gate's rules.\n *\n * The same block sits at the top of chat-interaction.js: the two chat clients are separate bundles that share no\n * module of their own, and both render the same markdown. Change one, change the other.\n */\n// CoreAIChatMarkers lives in chat-markers.js, which every chat surface loads before this file.\n\nwindow.coreAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n codeCopiedText: 'Copied!',\n copyResetDelayMs: 2000,\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-message-heading ai-chat-message-heading-user\">\n <span class=\"ai-chat-msg-role ai-chat-msg-role-user\">{{ userLabel }}</span>\n </div>\n <div v-else-if=\"message.role !== 'indicator'\" class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n <span class=\"ai-chat-message-role-label\">{{ getAssistantLabel(message) }}</span>\n </div>\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button type=\"button\" class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <i class=\"fa-regular fa-thumbs-up\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <i class=\"fa-regular fa-thumbs-down\"></i>\n </button>\n </span>\n </template>\n <button type=\"button\" v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link p-0 button-message-toolbox ai-response-copy-btn\" :class=\"copiedMessageIndex === index ? 'text-success' : 'text-secondary'\" :data-copy-message-index=\"index\" @click=\"copyResponse(message, index, $event)\" :title=\"copiedMessageIndex === index ? copiedTitle : copyTitle\">\n <i :class=\"copiedMessageIndex === index ? 'fa-solid fa-check' : 'fa-solid fa-copy'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button type=\"button\" v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button type=\"button\" v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n <span class=\"ai-chat-message-role-label\">Assistant</span>\n </div>\n </div>\n `\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n normalized.isGenerated = (normalized.isGenerated ?? normalized.IsGenerated) === true;\n normalized.isImage = (normalized.isImage ?? normalized.IsImage) === true;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n // Installed at the top of this file so it can be unit tested without a browser; see the comment there.\n\n /*\n * Reads a JSON response body, or explains why it is not JSON.\n *\n * fetch follows a redirect silently and reports the page it landed on as a success, so an endpoint that\n * answers \"forbidden\" with a redirect to a sign-in page arrives here as response.ok with HTML in it.\n * Calling response.json() on that throws \"unexpected character at line 1 column 1\", which is what the\n * reader was shown instead of being told they are not allowed to upload.\n *\n * Returns { ok, data, message }. A caller shows message when ok is false; it is never a parser error.\n */\n async function readJsonResponse(response, fallbackMessage) {\n const contentType = (response.headers && response.headers.get('content-type')) || '';\n\n if (contentType.toLowerCase().indexOf('json') < 0) {\n // A redirect that landed somewhere else is the common case and worth naming, because the endpoint\n // did not refuse -- something in front of it did.\n const message = response.redirected\n ? 'You may not be signed in, or you do not have permission for this. Please reload and try again.'\n : fallbackMessage;\n\n return { ok: false, data: null, message: message };\n }\n\n try {\n return { ok: true, data: await response.json(), message: null };\n } catch (error) {\n return { ok: false, data: null, message: fallbackMessage };\n }\n }\n\n const expandImageMarkers = window.CoreAIChatMarkers.expandImageMarkers;\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n // Which references are one citation, and how a repeated marker reads, are statements about strings and\n // live in chat-markers.js so every chat surface numbers them the same way. Without the module each\n // reference keeps an identity of its own and nothing merges, which is the numbering this script had\n // before it.\n let unmergedCitationCount = 0;\n const citationIdentity = window.CoreAIChatMarkers?.citationIdentity\n ?? (() => `unmerged-${++unmergedCitationCount}`);\n const splitCombinedCitations = window.CoreAIChatMarkers?.splitCombinedCitations\n ?? (content => content);\n const collapseRepeatedCitations = window.CoreAIChatMarkers?.collapseRepeatedCitations\n ?? (html => html);\n const separateAdjacentCitations = window.CoreAIChatMarkers?.separateAdjacentCitations\n ?? (html => html);\n const citationMarkerHtml = window.CoreAIChatMarkers?.citationMarkerHtml\n ?? (displayIndex => `<sup>${displayIndex}</sup>`);\n\n function buildCitationDisplay(content, references) {\n // Before anything looks for a reference key, the combined form the model tends to write is split into\n // the keys it means. A key that is not found is not replaced, and an unreplaced key reaches the reader\n // as a raw marker mid-sentence.\n let processedContent = splitCombinedCitations((content || '').trim());\n const messageReferences = normalizeReferences(references);\n const referenceEntries = Object.entries(messageReferences);\n\n if (!referenceEntries.length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = referenceEntries.filter(([key]) => processedContent.includes(key));\n const generatedRefs = referenceEntries.filter(([key, value]) => value.isGenerated && !processedContent.includes(key));\n\n if (!citedRefs.length && !generatedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n generatedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n const citationsByIdentity = new Map();\n const placeholders = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const label = getCitationLabel(value, key);\n const link = value.link || null;\n const identity = citationIdentity(label, link);\n let citation = citationsByIdentity.get(identity);\n\n // Every reference still has its key replaced, so the text never keeps a raw key; what the merge\n // changes is only how many numbers the reader is given for them.\n if (!citation) {\n citation = {\n referenceKey: key,\n referenceKeys: [],\n displayIndex: displayIndex++,\n label: label,\n link: link,\n isDownload: isDownloadCitationReference(value),\n };\n\n citationsByIdentity.set(identity, citation);\n citations.push(citation);\n }\n\n citation.referenceKeys.push(key);\n\n const placeholder = `__CITE_${citation.displayIndex}_${value.index || citation.displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n placeholders.push({ placeholder, displayIndex: citation.displayIndex, label: citation.label });\n }\n\n for (const entry of placeholders) {\n processedContent = processedContent.replaceAll(entry.placeholder, citationMarkerHtml(entry.displayIndex, entry.label));\n }\n\n // Merged citations can leave the same number twice over a sentence; that is collapsed before the\n // commas go in, or the reader is given \"1,1\".\n processedContent = collapseRepeatedCitations(processedContent);\n processedContent = separateAdjacentCitations(processedContent);\n\n // Generated files (such as exported tabular data) are always offered as a download even when\n // the model does not cite them inline, so the user never loses access to the produced file.\n for (const [key, value] of generatedRefs) {\n citations.push({\n referenceKey: key,\n referenceKeys: [key],\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: true,\n placeholder: null,\n });\n\n displayIndex++;\n }\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n // Every key the citation absorbed is replaced, not just the first: a merged key left behind would\n // reach the clipboard as the raw reference token the reader never saw on the page.\n for (const citation of citations) {\n for (const key of (citation.referenceKeys?.length ? citation.referenceKeys : [citation.referenceKey])) {\n copyContent = copyContent.replaceAll(key, `[${citation.displayIndex}]`);\n }\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n // Figure markers become images before anything else reads the content: the citation pass looks for its\n // own keys in what is left, and the markdown parser then sees an ordinary image.\n const displayContent = expandImageMarkers(rawContent, messageReferences);\n const citationDisplay = buildCitationDisplay(displayContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n // Copied from the expanded content, so a copied answer carries the picture's link rather than a label\n // that means nothing outside this page.\n // Split here too: the copy is built from the expanded content rather than the display path's output,\n // so a combined marker would otherwise survive into the clipboard as a raw key.\n message.copyContent = buildCopyContent(splitCombinedCitations(displayContent), citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n // Spans, not divs. A figure marker is often written mid-sentence -- \"Figures [fig:1], [fig:2] and\n // [fig:3] show...\" -- and a block element cannot sit inside a paragraph: the browser closes the <p>\n // at the first one, so the sentence is torn into fragments and the commas between the markers are\n // left stranded on their own lines. Inline-block keeps the figure looking exactly the same while\n // remaining something a paragraph can legally contain.\n return `<span class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <span class=\"mt-2 d-block\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </span>\n </span>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map: any page (e.g., Chat Interactions) that uses\n // the shared marked instance can call window.renderPendingCharts() after\n // its DOM update to render charts it didn't create itself.\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // The marker itself is read by chat-markers.js, shared with every other chat surface, so the three of them\n // cannot disagree about what a marker is. Everything below -- the container, the id scheme, the Chart.js\n // call -- is this surface's own and legitimately differs from the others.\n const findChartMarker = window.CoreAIChatMarkers.findChartMarker;\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = findChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // An image the assistant named but the server will not serve. The address is written by a language\n // model from what retrieval handed it, so a mistyped or invented one is possible, and the browser's\n // default for that is a broken-image icon captioned with the alt text -- which reads as a real picture\n // that failed to arrive. Saying plainly that it could not be loaded is both truer and quieter.\n //\n // Wired here rather than as an inline onerror attribute because message bodies go through DOMPurify,\n // which strips event-handler attributes.\n function markBrokenImagesInMessage() {\n // Scanning the document rather than one message, because the value threaded through the render\n // path is the message DATA object -- the thing carrying content, references and pending charts --\n // and not the element it was rendered into. Wiring is idempotent via the data-broken-wired mark,\n // so re-scanning after each render costs a query over the handful of images already handled.\n if (typeof document === 'undefined' || typeof requestAnimationFrame !== 'function') {\n return;\n }\n\n // Deferred for the same reason the charts below are: the render that produced these elements has\n // not necessarily been flushed to the DOM when this runs.\n requestAnimationFrame(wireBrokenImageHandlers);\n }\n\n function wireBrokenImageHandlers() {\n const images = document.querySelectorAll('.generated-image-container img:not([data-broken-wired])');\n\n for (const image of images) {\n image.setAttribute('data-broken-wired', 'true');\n image.addEventListener('error', function () {\n const container = image.closest('.generated-image-container');\n\n if (!container || container.dataset.brokenHandled) {\n return;\n }\n\n container.dataset.brokenHandled = 'true';\n container.hidden = true;\n\n const note = document.createElement('p');\n note.className = 'text-muted small fst-italic mb-2';\n note.textContent = image.alt\n ? `(the picture \"${image.alt}\" could not be loaded)`\n : '(that picture could not be loaded)';\n container.insertAdjacentElement('afterend', note);\n }, { once: true });\n }\n }\n\n function renderMessageMedia(message) {\n markBrokenImagesInMessage();\n\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n renderChartOnCanvas(c.chartId, c.config);\n }\n });\n }\n\n function renderChartOnCanvas(chartId, config) {\n const canvas = document.getElementById(chartId);\n if (!canvas) {\n return false;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n return false;\n }\n\n // When the canvas is inside a hidden container (e.g., a widget panel with\n // display:none), it has zero dimensions and Chart.js cannot render correctly.\n // Keep the config in __chartConfigs so renderPendingCharts() can retry later\n // once the container becomes visible.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[chartId] = config;\n return false;\n }\n\n try {\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof config === 'string' ? JSON.parse(config) : config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n delete window.__chartConfigs[chartId];\n return true;\n } catch (e) {\n console.error('Error creating chart:', e);\n return false;\n }\n }\n\n // Global function: renders any chart canvases whose configs are in the\n // global __chartConfigs map. Called by pages (e.g., Chat Interactions)\n // that share the marked instance but have their own rendering pipeline.\n window.renderPendingCharts = function () {\n if (typeof Chart === 'undefined') {\n return;\n }\n\n const configs = window.__chartConfigs;\n if (!configs) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const chartId of Object.keys(configs)) {\n renderChartOnCanvas(chartId, configs[chartId]);\n }\n });\n };\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n // A markdown table becomes a bare <table>, which Bootstrap leaves completely unstyled: it renders\n // as cramped, borderless text that reads as plain output rather than a table. Adding the framework's\n // own classes styles it wherever Bootstrap is loaded, and the wrapper lets a wide table scroll on\n // its own instead of stretching the conversation. Markdown tables cannot nest, so the plain\n // replacement is safe.\n function styleMarkdownTables(html) {\n return html\n .replace(/<table>/g, '<div class=\"table-responsive\"><table class=\"table table-sm table-bordered table-striped align-middle\">')\n .replace(/<\\/table>/g, '</table></div>');\n }\n\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = styleMarkdownTables(marked.parse(content, { renderer }));\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n function compactObject(source) {\n if (!source || typeof source !== 'object') {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(source).filter(([, value]) => value !== undefined)\n );\n }\n\n function resolveIndicatorTemplate(template, assistantLabel) {\n if (!template) {\n return template;\n }\n\n const encodedAssistantLabel = escapeHtmlEntities(assistantLabel || 'Assistant');\n return template.replace(/\\{\\{\\s*assistantLabel\\s*\\}\\}/g, encodedAssistantLabel);\n }\n\n const initialize = (instanceConfig) => {\n const normalizedInstanceConfig = compactObject(instanceConfig);\n const normalizedWidgetConfig = compactObject(normalizedInstanceConfig.widget);\n const config = Object.assign({}, defaultConfig, normalizedInstanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, normalizedWidgetConfig);\n config.indicatorTemplate = resolveIndicatorTemplate(config.indicatorTemplate, config.assistantLabel);\n const hasWidgetConfig = !!(normalizedWidgetConfig.chatWidgetContainer && normalizedWidgetConfig.chatWidgetStateName);\n const widgetBehavior = window.coreAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n realtimeEnabled: !!config.realtimeEnabled,\n // Server-relay WebRTC transport: primary when advertised and supported; the client falls back\n // to the WebSocket path below if the peer cannot connect.\n realtimeWebRtcEnabled: config.realtimeWebRtcEnabled === true && typeof window.RTCPeerConnection === 'function',\n // A host-supplied override. Normally the servers are fetched from the hub right before the\n // peer is created (resolveRealtimeIceServers) so configured TURN relays — and their\n // short-lived credentials — are actually used instead of a public STUN server.\n realtimeWebRtcIceServers: (Array.isArray(config.realtimeWebRtcIceServers) && config.realtimeWebRtcIceServers.length)\n ? config.realtimeWebRtcIceServers\n : null,\n realtimeVoiceName: config.realtimeVoiceName || null,\n conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n copiedMessageIndex: -1,\n copyResetTimeoutId: null,\n activeCopyButton: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var parsed = await readJsonResponse(response, 'Upload failed. Please try again.');\n\n if (!parsed.ok) {\n console.error('Upload failed: response was not JSON.', { status: response.status, redirected: response.redirected });\n this.uploadErrors = [{ fileName: '', error: parsed.message }];\n\n return;\n }\n\n var result = parsed.data;\n\n if (result.sessionId && result.sessionId !== this.getSessionId()) {\n this.initializeSession(result.sessionId);\n }\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else if (result.uploaded && result.uploaded.length > 0) {\n this.documents = this.documents.concat(result.uploaded);\n }\n\n if (result.failed && result.failed.length > 0) {\n this.uploadErrors = result.failed;\n }\n } catch (err) {\n console.error('Upload error:', err);\n this.uploadErrors = [{ fileName: '', error: 'Upload failed. Please try again.' }];\n\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n });\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\n return this.queueDocumentOperation(async () => {\n try {\n var sessionId = this.getSessionId();\n var response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ itemId: sessionId, documentId: doc.documentId })\n });\n\n if (response.ok) {\n var secondParsed = await readJsonResponse(response, 'The request could not be completed.');\n\n if (!secondParsed.ok) {\n console.error('Response was not JSON.', { status: response.status, redirected: response.redirected });\n\n return;\n }\n\n var result = secondParsed.data;\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else {\n var idx = this.documents.indexOf(doc);\n if (idx > -1) {\n this.documents.splice(idx, 1);\n }\n }\n } else {\n var errorText = await response.text();\n var removeError = this.extractReadableErrorMessage(errorText, 'Failed to remove document. Please try again.');\n console.error('Failed to remove document:', response.status, errorText);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: removeError }];\n if (sessionId) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n } catch (err) {\n console.error('Remove document error:', err);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: 'Failed to remove document. Please try again.' }];\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n });\n },\n formatFileSize(bytes) {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n },\n renderDocumentBar() {\n if (!this.documentBar) return;\n\n if (!config.sessionDocumentsEnabled) {\n this.documentBar.classList.add('d-none');\n return;\n }\n\n this.documentBar.classList.remove('d-none');\n\n var html = '<div class=\"ai-chat-doc-bar p-2\">';\n html += '<div class=\"d-flex flex-wrap align-items-center gap-1\">';\n\n for (var i = 0; i < this.documents.length; i++) {\n var doc = this.documents[i];\n var name = doc.fileName || 'Document';\n if (name.length > 20) name = name.substring(0, 17) + '...';\n html += '<span class=\"badge bg-secondary bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml(doc.fileName || '') + '\">';\n html += '<i class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n // The reason is shown, not hidden behind a tooltip. A pill reading \"quarterly-report-2...\"\n // tells a reader their upload failed and nothing about why, and a title attribute is\n // unreachable on a touch device -- so the one sentence that tells them what to do next\n // was the one thing the widget would not display.\n html += '<span class=\"alert alert-danger d-flex align-items-start gap-2 w-100 mb-1 py-1 px-2\" role=\"alert\" style=\"font-size: 0.8rem;\">';\n html += '<i class=\"fa-solid fa-circle-exclamation mt-1\" style=\"font-size: 0.7rem;\"></i>';\n html += '<span class=\"flex-grow-1\">';\n\n if (failedItem.fileName) {\n html += '<strong>' + this.escapeHtml(failedItem.fileName) + '</strong>: ';\n }\n\n html += this.escapeHtml(errorMsg);\n html += '</span>';\n html += '<button type=\"button\" class=\"btn-close btn-close-sm\" style=\"font-size: 0.5rem;\" data-error-index=\"' + m + '\" aria-label=\"Dismiss\"></button>';\n html += '</span>';\n }\n\n if (this.isUploading) {\n html += '<span class=\"badge bg-info bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\">';\n html += '<span class=\"spinner-border spinner-border-sm\" style=\"width: 0.7rem; height: 0.7rem;\"></span> Uploading...';\n html += '</span>';\n }\n\n html += '<button type=\"button\" class=\"btn btn-sm btn-outline-secondary rounded-pill ai-chat-doc-add-btn d-inline-flex align-items-center gap-1\" style=\"font-size: 0.75rem; padding: 0.15rem 0.5rem;\" title=\"Attach documents\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '>';\n html += '<i class=\"fa-solid fa-paperclip\"></i>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n // Switching to another session must not leave a prior realtime/voice session running.\n this.forceStopActiveVoice();\n this.initializeSession(data.sessionId, true);\n this.messages = [];\n this.documents = data.documents || [];\n this.uploadErrors = [];\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderMessageMedia(msg);\n });\n });\n\n // Update feedback icons in the DOM after all messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // When the session is new (no messages) and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n });\n\n // Realtime lifecycle events (ReceiveRealtimeEvent, and ReceiveError while a voice session is\n // live) are handled by the shared CoreAIRealtime module — see setupRealtimeController.\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // A server-side error (for example a session-start rate-limit rejection) ends the\n // in-flight request. Reject any pending new-session promise so the UI stops waiting\n // until it times out, and clear the typing indicator that a send may have shown.\n this.rejectPendingSessionRequest(error);\n this.hideTypingIndicator();\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\n } else if (!this.isNavigatingAway) {\n // Surface the message to the user instead of failing silently.\n this.addMessage(this.getErrorMessage(error));\n }\n });\n\n this.connection.on(\"ReceiveSessionStartRejected\", (reason) => {\n // A rate-limit rejection is a definitive \"wait and retry\", not a recoverable\n // session/connection error. Unblock any pending new-session request, clear the\n // typing indicator, and show the message for every host (main app and widget)\n // without triggering the widget's clear-and-retry recovery, which would wipe the\n // visitor's state and fire another throttled StartSession.\n this.rejectPendingSessionRequest(reason);\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getErrorMessage(reason));\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, turnId, text) => {\n // Realtime creates the chat session server-side; adopt its id (and update the page URL)\n // on the first turn so a refresh reloads the conversation instead of starting fresh.\n if (sessionId && this.getSessionId() !== sessionId) {\n this.initializeSession(sessionId);\n }\n\n // Realtime: a placeholder for this turn was already inserted in the right position when\n // the utterance was captured (see user_turn_pending), so just fill in its text.\n if (turnId && this._realtimePendingTurns && this._realtimePendingTurns[turnId]) {\n var pending = this._realtimePendingTurns[turnId];\n delete this._realtimePendingTurns[turnId];\n this.stopAudio();\n this.fillRealtimePendingTurn(pending, text);\n\n return;\n }\n\n if (text) {\n this.stopAudio();\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else if (this._conversationAssistantMessage) {\n // Realtime: the user's transcript lags the assistant's reply for the SAME turn (the\n // model answers the audio before speech-to-text finishes). Insert the user message\n // just before the streaming assistant message so the order stays You -> Assistant,\n // and keep that message streaming — ending it here split one reply into two bubbles\n // above the prompt.\n var at = this._conversationAssistantMessage.index;\n var userMsg = { role: 'user', content: text, rawContent: text, userRating: null, references: {} };\n updateMessagePresentation(userMsg, userMsg.references);\n this.messages.splice(at, 0, userMsg);\n this._conversationAssistantMessage.index = at + 1;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n // A new response id means a new turn — finalize the previous assistant message so two replies\n // never merge into one bubble (also covers barge-in, which starts a fresh response).\n if (this._conversationAssistantMessage && this._conversationAssistantResponseId && responseId && this._conversationAssistantResponseId !== responseId) {\n var prev = this.messages[this._conversationAssistantMessage.index];\n if (prev) { prev.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n this._conversationAssistantResponseId = responseId;\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderMessageMedia(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n this._conversationAssistantResponseId = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (!base64Audio) {\n return;\n }\n\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Realtime audio arrives as raw PCM16 (WebSocket transport) and is scheduled for immediate\n // playback by the shared module; conversation/TTS audio (mp3/wav) is collected and played on\n // complete.\n if (contentType === 'audio/pcm') {\n if (this.realtimeController) { this.realtimeController.receivePcm(bytes); }\n } else {\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (sessionId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n\n // The realtime session lived inside the dropped connection; it cannot survive a reconnect.\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n async ensureConnectionStarted() {\n if (!this.connection) {\n return false;\n }\n\n var states = signalR.HubConnectionState;\n if (this.connection.state === states.Connected) {\n return true;\n }\n\n // If the initial start failed or has not begun, start it now.\n if (this.connection.state === states.Disconnected) {\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n\n return this.connection.state === states.Connected;\n }\n\n // The connection is still Connecting or Reconnecting: wait for it to settle so callers\n // (e.g. starting a realtime session) do not send before the socket is ready.\n return await new Promise((resolve) => {\n var settle = (value) => {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(value);\n };\n var timeoutId = setTimeout(() => settle(this.connection.state === states.Connected), 10000);\n var intervalId = setInterval(() => {\n if (this.connection.state === states.Connected) {\n settle(true);\n } else if (this.connection.state === states.Disconnected) {\n settle(false);\n }\n }, 100);\n });\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingCoreAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedCoreAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n },\n addMessages(messages) {\n\n for (let i = 0; i < messages.length; i++) {\n this.addMessageInternal(messages[i]);\n }\n\n this.hidePlaceholder();\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n isOrchestratorAvailable() {\n return config.isOrchestratorAvailable !== false;\n },\n applyOrchestratorAvailability() {\n if (this.isOrchestratorAvailable()) {\n return true;\n }\n\n const unavailableMessage = config.orchestratorUnavailableMessage || \"This orchestrator is not currently available.\";\n\n if (this.inputElement) {\n this.inputElement.disabled = true;\n this.inputElement.value = '';\n this.inputElement.placeholder = unavailableMessage;\n }\n\n if (this.buttonElement) {\n this.buttonElement.disabled = true;\n }\n\n if (this.micButtonElement) {\n this.micButtonElement.disabled = true;\n this.micButtonElement.style.display = 'none';\n }\n\n if (this.conversationButtonElement) {\n this.conversationButtonElement.disabled = true;\n this.conversationButtonElement.style.display = 'none';\n }\n\n return false;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n sendMessage() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // In single-response mode, clear all previous messages.\n if (this.singleResponseMode) {\n this.messages.splice(0, this.messages.length);\n }\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n this.streamMessage(this.getProfileId(), trimmedPrompt, null);\n this.inputElement.value = '';\n this.prompt = '';\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder.\n // Browsers only agree on WebM/Opus for MediaRecorder, and Azure's speech SDK cannot\n // demux that container from a streaming push (it fails inside GStreamer). Raw PCM is\n // decoded natively with no GStreamer and is produced identically by every browser.\n this._sttCapture = this._createPcmCapture(stream, (base64) => {\n try { subject.next(base64); } catch (err) { /* completed */ }\n });\n this._sttSubject = subject;\n\n var rate = (this._sttCapture && this._sttCapture.sampleRate) || 16000;\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording) {\n return;\n }\n\n this._stopPcmCapture(this._sttCapture);\n this._sttCapture = null;\n if (this._sttSubject) {\n try { this._sttSubject.complete(); } catch (err) { /* already completed */ }\n this._sttSubject = null;\n }\n this.isRecording = false;\n this.updateMicButton();\n },\n // Captures microphone audio as raw 16 kHz, 16-bit mono PCM using Web Audio and invokes\n // onChunk(base64Pcm, rms) for each block. Returns a handle for _stopPcmCapture. This replaces\n // MediaRecorder so every browser streams a format Azure decodes without GStreamer.\n _createPcmCapture(stream, onChunk) {\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n // Ask the browser to resample the mic to 16 kHz; fall back to manual resampling if it will not.\n var audioContext;\n try {\n audioContext = new AudioCtx({ sampleRate: 16000 });\n } catch (e) {\n audioContext = new AudioCtx();\n }\n var srcRate = audioContext.sampleRate;\n var source = audioContext.createMediaStreamSource(stream);\n var processor = audioContext.createScriptProcessor(4096, 1, 1);\n var self = this;\n processor.onaudioprocess = function (e) {\n var input = e.inputBuffer.getChannelData(0);\n var pcm16 = self._downsampleToInt16(input, srcRate, 16000);\n if (!pcm16 || pcm16.length === 0) {\n return;\n }\n var sum = 0;\n for (var i = 0; i < pcm16.length; i++) {\n var v = pcm16[i] / 32768;\n sum += v * v;\n }\n var rms = Math.sqrt(sum / pcm16.length);\n var bytes = new Uint8Array(pcm16.buffer);\n var binary = '';\n for (var j = 0; j < bytes.length; j++) {\n binary += String.fromCharCode(bytes[j]);\n }\n onChunk(btoa(binary), rms);\n };\n source.connect(processor);\n // Some browsers only fire onaudioprocess while the node is connected to a destination.\n processor.connect(audioContext.destination);\n return { audioContext: audioContext, source: source, processor: processor, stream: stream, sampleRate: 16000 };\n },\n _stopPcmCapture(capture) {\n if (!capture) {\n return;\n }\n try { if (capture.processor) { capture.processor.onaudioprocess = null; capture.processor.disconnect(); } } catch (e) { }\n try { if (capture.source) { capture.source.disconnect(); } } catch (e) { }\n try { if (capture.stream) { capture.stream.getTracks().forEach(function (t) { t.stop(); }); } } catch (e) { }\n try { if (capture.audioContext) { capture.audioContext.close(); } } catch (e) { }\n },\n // Converts a Float32 sample block to 16-bit PCM, resampling from srcRate to dstRate when needed.\n _downsampleToInt16(input, srcRate, dstRate) {\n var s, i;\n if (!(dstRate < srcRate)) {\n var same = new Int16Array(input.length);\n for (i = 0; i < input.length; i++) {\n s = Math.max(-1, Math.min(1, input[i]));\n same[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return same;\n }\n var ratio = srcRate / dstRate;\n var newLen = Math.floor(input.length / ratio);\n var out = new Int16Array(newLen);\n for (var j = 0; j < newLen; j++) {\n var idx = j * ratio;\n var i0 = Math.floor(idx);\n var i1 = (i0 + 1 < input.length) ? i0 + 1 : input.length - 1;\n var frac = idx - i0;\n s = input[i0] * (1 - frac) + input[i1] * frac;\n s = Math.max(-1, Math.min(1, s));\n out[j] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return out;\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n let newMessage = {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n\n return newMessage;\n },\n getErrorMessage(error) {\n var content = (typeof error === 'string' && error.trim())\n ? error\n : \"Something went wrong. Please try again.\";\n\n return {\n role: \"assistant\",\n content: content,\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.setAttribute('disabled', 'disabled');\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.removeAttribute('disabled');\n this.inputElement.focus();\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n });\n },\n updateCopyButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-copy-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-copy-message-index'));\n var isCopied = buttonIndex === this.copiedMessageIndex;\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n setCopyButtonState(button, isCopied) {\n if (!button) {\n return;\n }\n\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.realtimeEnabled) {\n // Realtime is driven by the shared module, which owns the button; this only exists for\n // callers that toggle programmatically.\n if (this.realtimeController) { this.realtimeController.toggle(); }\n\n return;\n }\n\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n // Force-stop any in-progress voice/realtime session (mic, playback, and the streamed audio),\n // e.g. before starting a new chat or switching sessions, so it never keeps running in the background.\n forceStopActiveVoice() {\n if (!this.isConversationMode) {\n return;\n }\n if (this.realtimeEnabled) {\n this.stopRealtimeConversation();\n } else {\n this.stopConversationMode();\n }\n },\n startRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.start(); }\n },\n stopRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.stop(); }\n },\n // Realtime (speech-to-speech) is the shared CoreAIRealtime module (realtime-audio.js): microphone\n // capture and gating, the WebRTC transport with its WebSocket fallback, playback, the settings\n // popover, push-to-talk, and the server-driven session lifecycle all live there, so this app and the\n // chat-interaction client cannot drift apart. What is wired here is only how the module reaches this\n // app's hub and transcript.\n setupRealtimeController(config) {\n if (this.realtimeController || !this.conversationButton) { return; }\n if (!window.CoreAIRealtime || typeof window.CoreAIRealtime.attach !== 'function') {\n console.error('realtime-audio.js is not loaded; realtime voice is unavailable on this page.');\n\n return;\n }\n\n var self = this;\n this.realtimeController = window.CoreAIRealtime.attach({\n connection: this.connection,\n ensureConnected: function () {\n return self.ensureConnectionStarted().then(function (connected) {\n if (!connected) { throw new Error('The chat connection is not available.'); }\n\n return connected;\n });\n },\n sendStart: function (subject, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeConversation', self.getProfileId(), self.getSessionId() || '', subject, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcEnabled: this.realtimeWebRtcEnabled,\n sendStartWebRtc: function (offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeWebRtc', self.getProfileId(), self.getSessionId() || '', offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcIceServers: this.realtimeWebRtcIceServers || undefined,\n voiceName: this.realtimeVoiceName || '',\n getVoiceName: function () { return self.realtimeVoiceName || ''; },\n realtimeEnabled: true,\n // The conversation button doubles as the realtime button on this host; the module owns its\n // click, label and state from here on. The text controls are handed over too so the module\n // hides them: realtime is audio-only, and a message box that plays no part in a spoken\n // conversation only invites the user to type into it.\n //\n // conversationButton is deliberately not passed. It is the same element as the realtime\n // button here, and the module hides the conversation button before showing the realtime\n // one -- naming it twice would ask it to hide the control it then has to show.\n selectors: {\n realtimeButton: config.conversationButtonElementSelector,\n input: config.inputElementSelector,\n sendButton: config.sendButtonElementSelector,\n micButton: config.micButtonElementSelector\n },\n onActivate: function () {\n self.isConversationMode = true;\n self._conversationAssistantMessage = null;\n self._conversationPartialMessage = null;\n self.removeNotification('conversation-ended');\n },\n onDeactivate: function () {\n self.isConversationMode = false;\n self.finishRealtimeConversationCleanup();\n },\n onUserTurnPending: function (turnId) { self.addRealtimePendingTurn(turnId); },\n onUserTurnDropped: function (turnId) { self.dropRealtimePendingTurn(turnId); }\n });\n },\n // Shared teardown tail: clears any in-flight streaming state and shows the conversation-ended\n // notification.\n finishRealtimeConversationCleanup() {\n if (this._conversationAssistantMessage) {\n var m = this.messages[this._conversationAssistantMessage.index];\n if (m) { m.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) { this.messages[i].isStreaming = false; }\n }\n\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n // The utterance has been captured but not transcribed yet. Showing a placeholder now puts the\n // prompt above the reply it produces: transcription lags the spoken answer, so a bubble added only\n // when the text arrives lands underneath its own reply.\n addRealtimePendingTurn(turnId) {\n if (!turnId) { return; }\n this._realtimePendingTurns = this._realtimePendingTurns || {};\n var index = this.messages.length;\n this.addMessage({ role: 'user', content: '', isPartial: true });\n this._realtimePendingTurns[turnId] = this.messages[index];\n },\n fillRealtimePendingTurn(pending, text) {\n if (!pending) { return; }\n if (!text) {\n var emptyAt = this.messages.indexOf(pending);\n if (emptyAt >= 0) { this.messages.splice(emptyAt, 1); }\n\n return;\n }\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n pending.content = text;\n pending.htmlContent = '<p>' + escaped + '</p>';\n pending.isPartial = false;\n },\n dropRealtimePendingTurn(turnId) {\n if (!turnId || !this._realtimePendingTurns) { return; }\n var dropped = this._realtimePendingTurns[turnId];\n if (!dropped) { return; }\n delete this._realtimePendingTurns[turnId];\n var at = this.messages.indexOf(dropped);\n if (at >= 0) { this.messages.splice(at, 1); }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // RMS (0..1) above which speech during TTS playback counts as an interrupt.\n var interruptRmsThreshold = 0.12;\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder — see\n // startRecording for why WebM/Opus is avoided. The per-block RMS drives interrupt\n // detection during TTS playback, replacing the previous AnalyserNode.\n this._conversationCapture = this._createPcmCapture(stream, (base64, rms) => {\n if (this.isPlayingAudio && rms >= interruptRmsThreshold) {\n // User is speaking over TTS — interrupt playback.\n this.stopAudio();\n }\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n var rate = (this._conversationCapture && this._conversationCapture.sampleRate) || 16000;\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording) {\n this._stopPcmCapture(this._conversationCapture);\n this._conversationCapture = null;\n if (this._conversationSubject) {\n try { this._conversationSubject.complete(); } catch (err) { /* already completed */ }\n }\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, audio playback continuation\n // is handled by the persistent stream. This method is only\n // called from playCollectedAudio for non-conversation TTS.\n },\n generatePrompt(element) {\n if (!element) {\n console.error('The element paramter is required.');\n\n return;\n }\n\n let templateProfileId = element.getAttribute('data-profile-id');\n let sessionId = this.getSessionId();\n let sessionProfileId = this.getProfileId();\n\n if (!templateProfileId || !sessionId) {\n\n console.error('The given element is missing data-profile-id or the session has not yet started.');\n return;\n }\n\n // streamMessage() already shows the typing indicator.\n this.streamMessage(templateProfileId, null, sessionProfileId);\n },\n createSessionUrl(baseUrl, param, value) {\n\n const fullUrl = baseUrl.toLowerCase().startsWith('http') ? baseUrl : window.location.origin + baseUrl;\n const url = new URL(fullUrl);\n\n url.searchParams.set(param, value);\n\n return url.toString();\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n this.scheduleNotificationDismiss(notification);\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var sessionId = this.getSessionId();\n this.connection.invoke(\"HandleNotificationAction\", sessionId, notificationType, actionName).catch(function (err) {\n console.error(\"Error handling notification action:\", err);\n });\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getProfileId() {\n return this.inputElement\n ? this.inputElement.getAttribute('data-profile-id')\n : null;\n },\n setSessionId(sessionId) {\n if (!this.inputElement) {\n return;\n }\n\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n // Force-stop an in-progress voice/realtime conversation so it doesn't keep running under the new session.\n this.forceStopActiveVoice();\n this.stopRecording();\n this.rejectPendingSessionRequest('Session was reset.');\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n\n // When an initial prompt is configured, show it as the first\n // assistant message instead of the generic placeholder.\n if (config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n } else {\n this.showPlaceholder();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onSessionReset === 'function') {\n widgetBehavior.onSessionReset(this, config);\n }\n },\n startNewSession() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n const profileId = this.getProfileId();\n if (!profileId || !this.connection) {\n return;\n }\n\n // Force-stop any live voice/realtime session before starting a new chat.\n this.forceStopActiveVoice();\n this.requestNewSession(profileId).catch(err => console.error(err));\n },\n async ensureSessionForDocuments(profileId) {\n var sessionId = this.getSessionId();\n if (sessionId) {\n return sessionId;\n }\n\n if (!profileId || !this.connection) {\n return null;\n }\n\n return await this.requestNewSession(profileId);\n },\n requestNewSession(profileId) {\n if (this.pendingSessionPromise) {\n return this.pendingSessionPromise;\n }\n\n if (!profileId || !this.connection) {\n return Promise.resolve(null);\n }\n\n this.pendingSessionPromise = new Promise((resolve, reject) => {\n this.pendingSessionResolver = resolve;\n this.pendingSessionRejector = reject;\n this.pendingSessionTimeoutId = window.setTimeout(() => {\n this.rejectPendingSessionRequest('Timed out while creating a chat session.');\n }, 15000);\n });\n\n this.connection.invoke(\"StartSession\", profileId, null).catch(err => {\n this.rejectPendingSessionRequest(err);\n });\n\n return this.pendingSessionPromise;\n },\n resolvePendingSessionRequest(sessionId) {\n if (this.pendingSessionResolver) {\n this.pendingSessionResolver(sessionId);\n }\n\n this.clearPendingSessionRequest();\n },\n rejectPendingSessionRequest(error) {\n if (this.pendingSessionRejector) {\n this.pendingSessionRejector(error);\n }\n\n this.clearPendingSessionRequest();\n },\n clearPendingSessionRequest() {\n if (this.pendingSessionTimeoutId) {\n window.clearTimeout(this.pendingSessionTimeoutId);\n }\n\n this.pendingSessionPromise = null;\n this.pendingSessionResolver = null;\n this.pendingSessionRejector = null;\n this.pendingSessionTimeoutId = null;\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n if (!this.inputElement || !this.buttonElement || !this.chatContainer || !this.placeholder) {\n console.error('AI chat app could not initialize because one or more required elements were not found.', {\n inputElementSelector: config.inputElementSelector,\n sendButtonElementSelector: config.sendButtonElementSelector,\n chatContainerElementSelector: config.chatContainerElementSelector,\n placeholderElementSelector: config.placeholderElementSelector\n });\n\n return false;\n }\n\n this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n }\n\n // Initialize document bar if enabled.\n if (config.sessionDocumentsEnabled && config.documentBarSelector) {\n this.documentBar = document.querySelector(config.documentBarSelector);\n if (this.documentBar) {\n this.renderDocumentBar();\n\n // Create hidden file input for document uploads.\n var fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.id = 'ai-chat-doc-input';\n fileInput.className = 'd-none';\n fileInput.multiple = true;\n if (config.allowedExtensions) {\n fileInput.accept = config.allowedExtensions;\n }\n fileInput.addEventListener('change', (e) => this.handleFileInputChange(e));\n this.documentBar.parentElement.appendChild(fileInput);\n\n // Set up drag-and-drop on the input area.\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) {\n inputArea.addEventListener('dragover', (e) => this.handleDragOver(e));\n inputArea.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n inputArea.addEventListener('drop', (e) => this.handleDrop(e));\n }\n }\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keydown', event => {\n\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.buttonElement.addEventListener('click', () => {\n\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const promptGenerators = document.getElementsByClassName('profile-generated-prompt');\n\n for (var i = 0; i < promptGenerators.length; i++) {\n promptGenerators[i].addEventListener('click', (e) => {\n e.preventDefault();\n this.generatePrompt(e.target);\n });\n }\n\n const chatSessions = document.getElementsByClassName('chat-session-history-item');\n\n for (var i = 0; i < chatSessions.length; i++) {\n chatSessions[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var sessionId = e.target.getAttribute('data-session-id');\n\n if (!sessionId) {\n console.error('an element with the class chat-session-history-item with no data-session-id set.');\n\n return;\n }\n\n this.loadSession(sessionId);\n this.showChatScreen();\n });\n }\n\n const initialMessages = Array.isArray(config.messages) ? config.messages : [];\n\n for (let i = 0; i < initialMessages.length; i++) {\n this.addMessage(initialMessages[i]);\n }\n\n // When no messages were loaded and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button (used for both STT/TTS conversation and realtime).\n if ((this.conversationModeEnabled || this.realtimeEnabled) && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n if (this.realtimeEnabled) {\n // The shared realtime module owns the button (click, label, state) and adds the\n // voice settings popover next to it.\n this.setupRealtimeController(config);\n } else {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n }\n\n return true;\n },\n loadSession(sessionId) {\n this.connection.invoke(\"LoadSession\", sessionId).catch(err => console.error(err));\n },\n reloadCurrentSession() {\n\n var sessionId = this.getSessionId();\n if (sessionId) {\n this.loadSession(sessionId);\n }\n },\n initializeSession(sessionId, force) {\n if (this.isSessionStarted && !force) {\n if (sessionId && this.getSessionId() === sessionId) {\n this.resolvePendingSessionRequest(sessionId);\n }\n\n return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionCoreAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n\n // For non-widget pages, update the browser URL so that a page\n // refresh reloads the correct session instead of starting fresh.\n if (!hasWidgetConfig && sessionId && config.sessionUrlTemplate && typeof history !== 'undefined' && history.replaceState) {\n var sessionUrl = config.sessionUrlTemplate.replace('{sessionId}', encodeURIComponent(sessionId));\n history.replaceState(null, '', sessionUrl);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n clearCopiedMessageState() {\n if (this.copyResetTimeoutId) {\n window.clearTimeout(this.copyResetTimeoutId);\n this.copyResetTimeoutId = null;\n }\n\n if (this.activeCopyButton) {\n this.setCopyButtonState(this.activeCopyButton, false);\n this.activeCopyButton = null;\n }\n\n this.copiedMessageIndex = -1;\n },\n copyResponse(message, index, event) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n const button = event?.currentTarget || event?.target?.closest?.('[data-copy-message-index]') || null;\n\n navigator.clipboard.writeText(text)\n .then(() => {\n this.clearCopiedMessageState();\n this.copiedMessageIndex = typeof index === 'number' ? index : -1;\n this.activeCopyButton = button;\n\n if (button) {\n this.setCopyButtonState(button, true);\n } else {\n this.$nextTick(() => this.updateCopyButtons());\n }\n\n this.copyResetTimeoutId = window.setTimeout(() => {\n this.clearCopiedMessageState();\n this.$nextTick(() => this.updateCopyButtons());\n }, Number(config.copyResetDelayMs) || 2000);\n })\n .catch(err => console.error('Failed to copy response:', err));\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n },\n isConversationMode(active) {\n // Hide/show mic button.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // Hide/show send button.\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n // Disable/enable textarea.\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n\n this.$nextTick(() => {\n this.updateCopyButtons();\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.clearCopiedMessageState();\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n const autoInitializeSelector = '[data-coreai-chat-config],[data-coreai-chat-app-element-selector]';\n\n function getAttributeValue(element, attributeName) {\n const value = element.getAttribute(attributeName);\n return value === null || value === '' ? null : value;\n }\n\n function parseBooleanAttributeValue(value) {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n\n return null;\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = getAttributeValue(element, attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n console.error('Failed to parse ' + description + ' JSON.', error);\n return null;\n }\n }\n\n function buildConfigFromDataAttributes(element, options) {\n const settings = options || {};\n\n if (element.hasAttribute('data-coreai-chat-widget-container-selector') && settings.allowWidgetHost !== true) {\n return null;\n }\n\n const appElementSelector = getAttributeValue(element, 'data-coreai-chat-app-element-selector');\n if (!appElementSelector) {\n return null;\n }\n\n const config = {\n signalRHubUrl: getAttributeValue(element, 'data-coreai-chat-signalr-hub-url'),\n appElementSelector: appElementSelector,\n chatContainerElementSelector: getAttributeValue(element, 'data-coreai-chat-container-element-selector'),\n inputElementSelector: getAttributeValue(element, 'data-coreai-chat-input-element-selector'),\n sendButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-send-button-element-selector'),\n placeholderElementSelector: getAttributeValue(element, 'data-coreai-chat-placeholder-element-selector'),\n messages: parseJsonAttribute(element, 'data-coreai-chat-messages', 'CoreAI chat messages') ?? undefined,\n chatMode: getAttributeValue(element, 'data-coreai-chat-mode'),\n micButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-mic-button-element-selector'),\n conversationButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-conversation-button-element-selector'),\n ttsVoiceName: getAttributeValue(element, 'data-coreai-chat-tts-voice-name'),\n realtimeVoiceName: getAttributeValue(element, 'data-coreai-chat-realtime-voice-name'),\n documentBarSelector: getAttributeValue(element, 'data-coreai-chat-document-bar-selector'),\n uploadDocumentUrl: getAttributeValue(element, 'data-coreai-chat-upload-document-url'),\n removeDocumentUrl: getAttributeValue(element, 'data-coreai-chat-remove-document-url'),\n allowedExtensions: getAttributeValue(element, 'data-coreai-chat-allowed-extensions'),\n supportedExtensionsText: getAttributeValue(element, 'data-coreai-chat-supported-extensions-text'),\n existingDocuments: parseJsonAttribute(element, 'data-coreai-chat-existing-documents', 'CoreAI chat existing documents') ?? undefined,\n initialPrompt: getAttributeValue(element, 'data-coreai-chat-initial-prompt'),\n sessionUrlTemplate: getAttributeValue(element, 'data-coreai-chat-session-url-template'),\n userLabel: getAttributeValue(element, 'data-coreai-chat-user-label'),\n assistantLabel: getAttributeValue(element, 'data-coreai-chat-assistant-label'),\n copyTitle: getAttributeValue(element, 'data-coreai-chat-copy-title'),\n copiedTitle: getAttributeValue(element, 'data-coreai-chat-copied-title'),\n };\n\n const booleanAttributes = {\n metricsEnabled: 'data-coreai-chat-metrics-enabled',\n textToSpeechEnabled: 'data-coreai-chat-text-to-speech-enabled',\n sessionDocumentsEnabled: 'data-coreai-chat-session-documents-enabled',\n singleResponseMode: 'data-coreai-chat-single-response-mode',\n realtimeEnabled: 'data-coreai-chat-realtime-enabled',\n realtimeWebRtcEnabled: 'data-coreai-chat-realtime-webrtc-enabled',\n };\n\n Object.keys(booleanAttributes).forEach(key => {\n const parsed = parseBooleanAttributeValue(getAttributeValue(element, booleanAttributes[key]));\n if (parsed !== null) {\n config[key] = parsed;\n }\n });\n\n return compactObject(config);\n }\n\n function buildConfigFromElement(element, options) {\n const jsonConfig = parseJsonAttribute(element, 'data-coreai-chat-config', 'CoreAI chat config');\n const attributeConfig = buildConfigFromDataAttributes(element, options);\n\n if (!jsonConfig && !attributeConfig) {\n return null;\n }\n\n return Object.assign({}, jsonConfig || {}, attributeConfig || {});\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.coreAiChatInitialized === 'true') {\n return element ? element.__coreAIChatApp || null : null;\n }\n\n const config = buildConfigFromElement(element);\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.coreAiChatInitialized = 'true';\n element.__coreAIChatApp = app;\n\n return app;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches(autoInitializeSelector)) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll(autoInitializeSelector).forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n\n return {\n initialize: initialize,\n initializeFromElement: initializeFromElement,\n buildConfigFromElement: buildConfigFromElement,\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","coreAIChatManager","_window$CoreAIChatMar","_window$CoreAIChatMar2","_window$CoreAIChatMar3","_window$CoreAIChatMar4","_window$CoreAIChatMar5","_window$CoreAIChatMar6","_window$CoreAIChatMar7","_window$CoreAIChatMar8","_window$CoreAIChatMar9","_window$CoreAIChatMar0","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","copiedTitle","codeCopiedText","copyResetDelayMs","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","_normalized$isGenerat","_normalized$isImage","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isGenerated","IsGenerated","isImage","IsImage","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","readJsonResponse","_x","_x2","_readJsonResponse","_callee0","response","fallbackMessage","contentType","message","_t6","_t7","_context0","headers","get","redirected","ok","data","json","expandImageMarkers","CoreAIChatMarkers","getCitationLabel","unmergedCitationCount","citationIdentity","concat","splitCombinedCitations","content","collapseRepeatedCitations","html","separateAdjacentCitations","citationMarkerHtml","displayIndex","buildCitationDisplay","processedContent","messageReferences","referenceEntries","citations","citedRefs","filter","_ref6","_ref7","includes","generatedRefs","_ref8","_ref9","sort","_ref0","_ref1","_ref10","_ref11","b","_ref12","_ref13","_ref14","_ref15","citationsByIdentity","Map","placeholders","_iterator","_step","_step$value","label","identity","citation","referenceKey","referenceKeys","isDownload","set","placeholder","replaceAll","err","_i2","_placeholders","entry","_iterator2","_step2","_step2$value","map","_ref16","_excluded","buildCopyContent","copyContent","_iterator3","_step3","_citation$referenceKe","_iterator5","_step5","_iterator4","_step4","trimEnd","updateMessagePresentation","rawContent","displayContent","citationDisplay","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","findChartMarker","use","extensions","level","start","idx","undefined","tokenizer","extracted","startIndex","type","raw","substring","endIndex","token","config","markBrokenImagesInMessage","requestAnimationFrame","wireBrokenImageHandlers","images","querySelectorAll","_iterator6","_step6","_loop","setAttribute","addEventListener","container","closest","dataset","brokenHandled","hidden","note","className","insertAdjacentElement","once","renderMessageMedia","charts","_iterator7","_step7","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","keys","styleMarkdownTables","replace","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","resolveIndicatorTemplate","template","encodedAssistantLabel","initialize","instanceConfig","normalizedInstanceConfig","normalizedWidgetConfig","hasWidgetConfig","widgetBehavior","coreAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","realtimeEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","realtimeWebRtcEnabled","RTCPeerConnection","realtimeWebRtcIceServers","realtimeVoiceName","conversationButton","realtimeHintElement","realtimeHintElementSelector","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","queueDocumentOperation","operation","self","previousOperation","nextOperation","_callee","_context","_this","_callee3","filesToUpload","_context3","uploadDocumentUrl","_callee2","sessionId","profileId","formData","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","extractReadableErrorMessage","status","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","secondParsed","removeError","_t3","_context4","stringify","itemId","documentId","splice","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","j","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","div","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forceStopActiveVoice","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","stopRecording","rejectPendingSessionRequest","hideTypingIndicator","handleReceiveError","getErrorMessage","reason","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","turnId","_realtimePendingTurns","pending","stopAudio","fillRealtimePendingTurn","_conversationAssistantMessage","at","userMsg","responseId","_conversationAssistantResponseId","prev","msgIndex","newMessage","base64Audio","binaryString","atob","Uint8Array","charCodeAt","realtimeController","receivePcm","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","stopRealtimeConversation","onreconnected","info","onclose","ensureConnectionStarted","_this4","_callee7","states","_t5","_context7","HubConnectionState","state","Connected","Disconnected","settle","clearTimeout","timeoutId","clearInterval","intervalId","setTimeout","setInterval","addMessageInternal","_this5","fireEvent","CustomEvent","_this6","_message$rawContent","addMessages","_this7","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","sendMessage","trimmedPrompt","streamMessage","startRecording","_this8","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","subject","Subject","_sttCapture","_createPcmCapture","base64","_sttSubject","rate","sampleRate","documentElement","send","updateMicButton","_stopPcmCapture","complete","onChunk","AudioCtx","AudioContext","webkitAudioContext","audioContext","srcRate","createMediaStreamSource","processor","createScriptProcessor","onaudioprocess","input","inputBuffer","getChannelData","pcm16","_downsampleToInt16","sum","rms","sqrt","buffer","binary","String","fromCharCode","btoa","connect","destination","capture","disconnect","getTracks","stop","close","dstRate","same","Int16Array","ratio","newLen","floor","out","i0","i1","frac","toggleRecording","sessionProfileId","_this9","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this9$stream","processReferences","streamingFinished","synthesizeSpeech","_this9$stream2","getServiceDownMessage","_this0","_ref22","_message$rawContent2","stopIcon","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this1","buttons","button","buttonIndex","isPlaying","toggle","updateCopyButtons","_this10","isCopied","iconHtml","setCopyButtonState","cacheIndex","_this11","_ttsCacheIndex","invoke","toggleMessageTts","_this12","playAudioBlob","_this13","totalLength","reduce","combined","offset","_iterator8","_step8","blob","Blob","_this14","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this15","nextBlob","shift","conversationModeOnAudioEnded","_this16","pause","currentTime","voiceSettingsElement","nextElementSibling","setVoiceSessionLive","live","audioSettings","hint","toggleConversationMode","stopConversationMode","startConversationMode","startRealtimeConversation","setupRealtimeController","CoreAIRealtime","attach","ensureConnected","connected","Error","sendStart","voice","silenceMs","vadThreshold","allowInterruption","webRtcEnabled","sendStartWebRtc","offerSdp","webRtcIceServers","voiceName","getVoiceName","selectors","realtimeButton","conversationButtonElementSelector","micButtonElementSelector","onSessionStateChanged","active","onActivate","onDeactivate","finishRealtimeConversationCleanup","onUserTurnPending","addRealtimePendingTurn","onUserTurnDropped","dropRealtimePendingTurn","dismissible","autoDismissMs","emptyAt","dropped","_this17","updateConversationButton","_conversationSubject","_conversationStream","interruptRmsThreshold","_conversationCapture","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","location","origin","searchParams","originalLength","removedCount","_this18","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this19","timerId","dismissNotification","handleNotificationAction","actionName","_this20","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","sessionRating","onSessionReset","startNewSession","requestNewSession","_this21","_callee8","_context8","_this22","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this23","placeholderElementSelector","loadSession","documentBarSelector","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","force","onSessionInitialized","sessionUrlTemplate","history","replaceState","sessionUrl","encodeURIComponent","resolveSessionId","clearCopiedMessageState","copyResponse","_ref23","_message$copyContent","_event$target","_event$target$closest","_this24","currentTarget","updateFeedbackIcons","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","_this25","mounted","_this26","_callee9","isInitialized","_context9","onMounted","fontAwesomeObserver","beforeUnmount","onBeforeUnmount","app","Vue","createApp","mount","autoInitializeSelector","getAttributeValue","attributeName","parseBooleanAttributeValue","parseJsonAttribute","description","rawValue","buildConfigFromDataAttributes","_parseJsonAttribute","_parseJsonAttribute2","settings","hasAttribute","allowWidgetHost","booleanAttributes","buildConfigFromElement","jsonConfig","attributeConfig","initializeFromElement","coreAiChatInitialized","__coreAIChatApp","scanForAutoInitialization","startAutoInitialization","readyState","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["/*\n * Figure markers: the short labels the model writes, turned into pictures by the host.\n *\n * Retrieval hands the model a label -- [fig:1] -- and keeps the picture's real link in the message's reference\n * map, the same way a text citation keeps its source behind \"[doc:1]\". A model asked to reproduce a long opaque\n * identifier does not reproduce it: it copies the shape and substitutes ordinals, so links to figures that were\n * never in the results came back as 404s. A label short enough to be written exactly, with the link put back\n * here where the model cannot reach it, is what stops that.\n *\n * It sits on window rather than inside the manager below so the host can reach it, and so its rules can be\n * exercised in a bare sandbox with no browser and no DOM -- see tests/realtime-client/figure-markers.test.js --\n * exactly as window.CoreAIRealtime exposes the microphone gate's rules.\n *\n * The same block sits at the top of chat-interaction.js: the two chat clients are separate bundles that share no\n * module of their own, and both render the same markdown. Change one, change the other.\n */\n// CoreAIChatMarkers lives in chat-markers.js, which every chat surface loads before this file.\n\nwindow.coreAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n codeCopiedText: 'Copied!',\n copyResetDelayMs: 2000,\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-message-heading ai-chat-message-heading-user\">\n <span class=\"ai-chat-msg-role ai-chat-msg-role-user\">{{ userLabel }}</span>\n </div>\n <div v-else-if=\"message.role !== 'indicator'\" class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n <span class=\"ai-chat-message-role-label\">{{ getAssistantLabel(message) }}</span>\n </div>\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button type=\"button\" class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <i class=\"fa-regular fa-thumbs-up\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <i class=\"fa-regular fa-thumbs-down\"></i>\n </button>\n </span>\n </template>\n <button type=\"button\" v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link p-0 button-message-toolbox ai-response-copy-btn\" :class=\"copiedMessageIndex === index ? 'text-success' : 'text-secondary'\" :data-copy-message-index=\"index\" @click=\"copyResponse(message, index, $event)\" :title=\"copiedMessageIndex === index ? copiedTitle : copyTitle\">\n <i :class=\"copiedMessageIndex === index ? 'fa-solid fa-check' : 'fa-solid fa-copy'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button type=\"button\" v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button type=\"button\" v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-message-heading ai-chat-message-heading-assistant\">\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n <span class=\"ai-chat-message-role-label\">Assistant</span>\n </div>\n </div>\n `\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n normalized.isGenerated = (normalized.isGenerated ?? normalized.IsGenerated) === true;\n normalized.isImage = (normalized.isImage ?? normalized.IsImage) === true;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n // Installed at the top of this file so it can be unit tested without a browser; see the comment there.\n\n /*\n * Reads a JSON response body, or explains why it is not JSON.\n *\n * fetch follows a redirect silently and reports the page it landed on as a success, so an endpoint that\n * answers \"forbidden\" with a redirect to a sign-in page arrives here as response.ok with HTML in it.\n * Calling response.json() on that throws \"unexpected character at line 1 column 1\", which is what the\n * reader was shown instead of being told they are not allowed to upload.\n *\n * Returns { ok, data, message }. A caller shows message when ok is false; it is never a parser error.\n */\n async function readJsonResponse(response, fallbackMessage) {\n const contentType = (response.headers && response.headers.get('content-type')) || '';\n\n if (contentType.toLowerCase().indexOf('json') < 0) {\n // A redirect that landed somewhere else is the common case and worth naming, because the endpoint\n // did not refuse -- something in front of it did.\n const message = response.redirected\n ? 'You may not be signed in, or you do not have permission for this. Please reload and try again.'\n : fallbackMessage;\n\n return { ok: false, data: null, message: message };\n }\n\n try {\n return { ok: true, data: await response.json(), message: null };\n } catch (error) {\n return { ok: false, data: null, message: fallbackMessage };\n }\n }\n\n const expandImageMarkers = window.CoreAIChatMarkers.expandImageMarkers;\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n // Which references are one citation, and how a repeated marker reads, are statements about strings and\n // live in chat-markers.js so every chat surface numbers them the same way. Without the module each\n // reference keeps an identity of its own and nothing merges, which is the numbering this script had\n // before it.\n let unmergedCitationCount = 0;\n const citationIdentity = window.CoreAIChatMarkers?.citationIdentity\n ?? (() => `unmerged-${++unmergedCitationCount}`);\n const splitCombinedCitations = window.CoreAIChatMarkers?.splitCombinedCitations\n ?? (content => content);\n const collapseRepeatedCitations = window.CoreAIChatMarkers?.collapseRepeatedCitations\n ?? (html => html);\n const separateAdjacentCitations = window.CoreAIChatMarkers?.separateAdjacentCitations\n ?? (html => html);\n const citationMarkerHtml = window.CoreAIChatMarkers?.citationMarkerHtml\n ?? (displayIndex => `<sup>${displayIndex}</sup>`);\n\n function buildCitationDisplay(content, references) {\n // Before anything looks for a reference key, the combined form the model tends to write is split into\n // the keys it means. A key that is not found is not replaced, and an unreplaced key reaches the reader\n // as a raw marker mid-sentence.\n let processedContent = splitCombinedCitations((content || '').trim());\n const messageReferences = normalizeReferences(references);\n const referenceEntries = Object.entries(messageReferences);\n\n if (!referenceEntries.length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = referenceEntries.filter(([key]) => processedContent.includes(key));\n const generatedRefs = referenceEntries.filter(([key, value]) => value.isGenerated && !processedContent.includes(key));\n\n if (!citedRefs.length && !generatedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n generatedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n const citationsByIdentity = new Map();\n const placeholders = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const label = getCitationLabel(value, key);\n const link = value.link || null;\n const identity = citationIdentity(label, link);\n let citation = citationsByIdentity.get(identity);\n\n // Every reference still has its key replaced, so the text never keeps a raw key; what the merge\n // changes is only how many numbers the reader is given for them.\n if (!citation) {\n citation = {\n referenceKey: key,\n referenceKeys: [],\n displayIndex: displayIndex++,\n label: label,\n link: link,\n isDownload: isDownloadCitationReference(value),\n };\n\n citationsByIdentity.set(identity, citation);\n citations.push(citation);\n }\n\n citation.referenceKeys.push(key);\n\n const placeholder = `__CITE_${citation.displayIndex}_${value.index || citation.displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n placeholders.push({ placeholder, displayIndex: citation.displayIndex, label: citation.label });\n }\n\n for (const entry of placeholders) {\n processedContent = processedContent.replaceAll(entry.placeholder, citationMarkerHtml(entry.displayIndex, entry.label));\n }\n\n // Merged citations can leave the same number twice over a sentence; that is collapsed before the\n // commas go in, or the reader is given \"1,1\".\n processedContent = collapseRepeatedCitations(processedContent);\n processedContent = separateAdjacentCitations(processedContent);\n\n // Generated files (such as exported tabular data) are always offered as a download even when\n // the model does not cite them inline, so the user never loses access to the produced file.\n for (const [key, value] of generatedRefs) {\n citations.push({\n referenceKey: key,\n referenceKeys: [key],\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: true,\n placeholder: null,\n });\n\n displayIndex++;\n }\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n // Every key the citation absorbed is replaced, not just the first: a merged key left behind would\n // reach the clipboard as the raw reference token the reader never saw on the page.\n for (const citation of citations) {\n for (const key of (citation.referenceKeys?.length ? citation.referenceKeys : [citation.referenceKey])) {\n copyContent = copyContent.replaceAll(key, `[${citation.displayIndex}]`);\n }\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n // Figure markers become images before anything else reads the content: the citation pass looks for its\n // own keys in what is left, and the markdown parser then sees an ordinary image.\n const displayContent = expandImageMarkers(rawContent, messageReferences);\n const citationDisplay = buildCitationDisplay(displayContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n // Copied from the expanded content, so a copied answer carries the picture's link rather than a label\n // that means nothing outside this page.\n // Split here too: the copy is built from the expanded content rather than the display path's output,\n // so a combined marker would otherwise survive into the clipboard as a raw key.\n message.copyContent = buildCopyContent(splitCombinedCitations(displayContent), citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n // Spans, not divs. A figure marker is often written mid-sentence -- \"Figures [fig:1], [fig:2] and\n // [fig:3] show...\" -- and a block element cannot sit inside a paragraph: the browser closes the <p>\n // at the first one, so the sentence is torn into fragments and the commas between the markers are\n // left stranded on their own lines. Inline-block keeps the figure looking exactly the same while\n // remaining something a paragraph can legally contain.\n return `<span class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <span class=\"mt-2 d-block\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </span>\n </span>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map: any page (e.g., Chat Interactions) that uses\n // the shared marked instance can call window.renderPendingCharts() after\n // its DOM update to render charts it didn't create itself.\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // The marker itself is read by chat-markers.js, shared with every other chat surface, so the three of them\n // cannot disagree about what a marker is. Everything below -- the container, the id scheme, the Chart.js\n // call -- is this surface's own and legitimately differs from the others.\n const findChartMarker = window.CoreAIChatMarkers.findChartMarker;\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = findChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // An image the assistant named but the server will not serve. The address is written by a language\n // model from what retrieval handed it, so a mistyped or invented one is possible, and the browser's\n // default for that is a broken-image icon captioned with the alt text -- which reads as a real picture\n // that failed to arrive. Saying plainly that it could not be loaded is both truer and quieter.\n //\n // Wired here rather than as an inline onerror attribute because message bodies go through DOMPurify,\n // which strips event-handler attributes.\n function markBrokenImagesInMessage() {\n // Scanning the document rather than one message, because the value threaded through the render\n // path is the message DATA object -- the thing carrying content, references and pending charts --\n // and not the element it was rendered into. Wiring is idempotent via the data-broken-wired mark,\n // so re-scanning after each render costs a query over the handful of images already handled.\n if (typeof document === 'undefined' || typeof requestAnimationFrame !== 'function') {\n return;\n }\n\n // Deferred for the same reason the charts below are: the render that produced these elements has\n // not necessarily been flushed to the DOM when this runs.\n requestAnimationFrame(wireBrokenImageHandlers);\n }\n\n function wireBrokenImageHandlers() {\n const images = document.querySelectorAll('.generated-image-container img:not([data-broken-wired])');\n\n for (const image of images) {\n image.setAttribute('data-broken-wired', 'true');\n image.addEventListener('error', function () {\n const container = image.closest('.generated-image-container');\n\n if (!container || container.dataset.brokenHandled) {\n return;\n }\n\n container.dataset.brokenHandled = 'true';\n container.hidden = true;\n\n const note = document.createElement('p');\n note.className = 'text-muted small fst-italic mb-2';\n note.textContent = image.alt\n ? `(the picture \"${image.alt}\" could not be loaded)`\n : '(that picture could not be loaded)';\n container.insertAdjacentElement('afterend', note);\n }, { once: true });\n }\n }\n\n function renderMessageMedia(message) {\n markBrokenImagesInMessage();\n\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n renderChartOnCanvas(c.chartId, c.config);\n }\n });\n }\n\n function renderChartOnCanvas(chartId, config) {\n const canvas = document.getElementById(chartId);\n if (!canvas) {\n return false;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n return false;\n }\n\n // When the canvas is inside a hidden container (e.g., a widget panel with\n // display:none), it has zero dimensions and Chart.js cannot render correctly.\n // Keep the config in __chartConfigs so renderPendingCharts() can retry later\n // once the container becomes visible.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[chartId] = config;\n return false;\n }\n\n try {\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof config === 'string' ? JSON.parse(config) : config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n delete window.__chartConfigs[chartId];\n return true;\n } catch (e) {\n console.error('Error creating chart:', e);\n return false;\n }\n }\n\n // Global function: renders any chart canvases whose configs are in the\n // global __chartConfigs map. Called by pages (e.g., Chat Interactions)\n // that share the marked instance but have their own rendering pipeline.\n window.renderPendingCharts = function () {\n if (typeof Chart === 'undefined') {\n return;\n }\n\n const configs = window.__chartConfigs;\n if (!configs) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const chartId of Object.keys(configs)) {\n renderChartOnCanvas(chartId, configs[chartId]);\n }\n });\n };\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n // A markdown table becomes a bare <table>, which Bootstrap leaves completely unstyled: it renders\n // as cramped, borderless text that reads as plain output rather than a table. Adding the framework's\n // own classes styles it wherever Bootstrap is loaded, and the wrapper lets a wide table scroll on\n // its own instead of stretching the conversation. Markdown tables cannot nest, so the plain\n // replacement is safe.\n function styleMarkdownTables(html) {\n return html\n .replace(/<table>/g, '<div class=\"table-responsive\"><table class=\"table table-sm table-bordered table-striped align-middle\">')\n .replace(/<\\/table>/g, '</table></div>');\n }\n\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = styleMarkdownTables(marked.parse(content, { renderer }));\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n function compactObject(source) {\n if (!source || typeof source !== 'object') {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(source).filter(([, value]) => value !== undefined)\n );\n }\n\n function resolveIndicatorTemplate(template, assistantLabel) {\n if (!template) {\n return template;\n }\n\n const encodedAssistantLabel = escapeHtmlEntities(assistantLabel || 'Assistant');\n return template.replace(/\\{\\{\\s*assistantLabel\\s*\\}\\}/g, encodedAssistantLabel);\n }\n\n const initialize = (instanceConfig) => {\n const normalizedInstanceConfig = compactObject(instanceConfig);\n const normalizedWidgetConfig = compactObject(normalizedInstanceConfig.widget);\n const config = Object.assign({}, defaultConfig, normalizedInstanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, normalizedWidgetConfig);\n config.indicatorTemplate = resolveIndicatorTemplate(config.indicatorTemplate, config.assistantLabel);\n const hasWidgetConfig = !!(normalizedWidgetConfig.chatWidgetContainer && normalizedWidgetConfig.chatWidgetStateName);\n const widgetBehavior = window.coreAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n // Conversation mode is carried either by a realtime session or by the speech-to-text plus\n // text-to-speech cascade, never both. Dictation and spoken playback belong to the cascade.\n speechToTextEnabled: !config.realtimeEnabled && (config.chatMode === 'AudioInput' || config.chatMode === 'Conversation'),\n textToSpeechEnabled: (!config.realtimeEnabled && config.chatMode === 'Conversation') || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n realtimeEnabled: !!config.realtimeEnabled,\n // Server-relay WebRTC transport: primary when advertised and supported; the client falls back\n // to the WebSocket path below if the peer cannot connect.\n realtimeWebRtcEnabled: config.realtimeWebRtcEnabled === true && typeof window.RTCPeerConnection === 'function',\n // A host-supplied override. Normally the servers are fetched from the hub right before the\n // peer is created (resolveRealtimeIceServers) so configured TURN relays — and their\n // short-lived credentials — are actually used instead of a public STUN server.\n realtimeWebRtcIceServers: (Array.isArray(config.realtimeWebRtcIceServers) && config.realtimeWebRtcIceServers.length)\n ? config.realtimeWebRtcIceServers\n : null,\n realtimeVoiceName: config.realtimeVoiceName || null,\n conversationButton: null,\n realtimeHintElement: config.realtimeHintElementSelector\n ? document.querySelector(config.realtimeHintElementSelector)\n : null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n copiedMessageIndex: -1,\n copyResetTimeoutId: null,\n activeCopyButton: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var parsed = await readJsonResponse(response, 'Upload failed. Please try again.');\n\n if (!parsed.ok) {\n console.error('Upload failed: response was not JSON.', { status: response.status, redirected: response.redirected });\n this.uploadErrors = [{ fileName: '', error: parsed.message }];\n\n return;\n }\n\n var result = parsed.data;\n\n if (result.sessionId && result.sessionId !== this.getSessionId()) {\n this.initializeSession(result.sessionId);\n }\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else if (result.uploaded && result.uploaded.length > 0) {\n this.documents = this.documents.concat(result.uploaded);\n }\n\n if (result.failed && result.failed.length > 0) {\n this.uploadErrors = result.failed;\n }\n } catch (err) {\n console.error('Upload error:', err);\n this.uploadErrors = [{ fileName: '', error: 'Upload failed. Please try again.' }];\n\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n });\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\n return this.queueDocumentOperation(async () => {\n try {\n var sessionId = this.getSessionId();\n var response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ itemId: sessionId, documentId: doc.documentId })\n });\n\n if (response.ok) {\n var secondParsed = await readJsonResponse(response, 'The request could not be completed.');\n\n if (!secondParsed.ok) {\n console.error('Response was not JSON.', { status: response.status, redirected: response.redirected });\n\n return;\n }\n\n var result = secondParsed.data;\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else {\n var idx = this.documents.indexOf(doc);\n if (idx > -1) {\n this.documents.splice(idx, 1);\n }\n }\n } else {\n var errorText = await response.text();\n var removeError = this.extractReadableErrorMessage(errorText, 'Failed to remove document. Please try again.');\n console.error('Failed to remove document:', response.status, errorText);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: removeError }];\n if (sessionId) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n } catch (err) {\n console.error('Remove document error:', err);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: 'Failed to remove document. Please try again.' }];\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n });\n },\n formatFileSize(bytes) {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n },\n renderDocumentBar() {\n if (!this.documentBar) return;\n\n if (!config.sessionDocumentsEnabled) {\n this.documentBar.classList.add('d-none');\n return;\n }\n\n this.documentBar.classList.remove('d-none');\n\n var html = '<div class=\"ai-chat-doc-bar p-2\">';\n html += '<div class=\"d-flex flex-wrap align-items-center gap-1\">';\n\n for (var i = 0; i < this.documents.length; i++) {\n var doc = this.documents[i];\n var name = doc.fileName || 'Document';\n if (name.length > 20) name = name.substring(0, 17) + '...';\n html += '<span class=\"badge bg-secondary bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml(doc.fileName || '') + '\">';\n html += '<i class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n // The reason is shown, not hidden behind a tooltip. A pill reading \"quarterly-report-2...\"\n // tells a reader their upload failed and nothing about why, and a title attribute is\n // unreachable on a touch device -- so the one sentence that tells them what to do next\n // was the one thing the widget would not display.\n html += '<span class=\"alert alert-danger d-flex align-items-start gap-2 w-100 mb-1 py-1 px-2\" role=\"alert\" style=\"font-size: 0.8rem;\">';\n html += '<i class=\"fa-solid fa-circle-exclamation mt-1\" style=\"font-size: 0.7rem;\"></i>';\n html += '<span class=\"flex-grow-1\">';\n\n if (failedItem.fileName) {\n html += '<strong>' + this.escapeHtml(failedItem.fileName) + '</strong>: ';\n }\n\n html += this.escapeHtml(errorMsg);\n html += '</span>';\n html += '<button type=\"button\" class=\"btn-close btn-close-sm\" style=\"font-size: 0.5rem;\" data-error-index=\"' + m + '\" aria-label=\"Dismiss\"></button>';\n html += '</span>';\n }\n\n if (this.isUploading) {\n html += '<span class=\"badge bg-info bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\">';\n html += '<span class=\"spinner-border spinner-border-sm\" style=\"width: 0.7rem; height: 0.7rem;\"></span> Uploading...';\n html += '</span>';\n }\n\n html += '<button type=\"button\" class=\"btn btn-sm btn-outline-secondary rounded-pill ai-chat-doc-add-btn d-inline-flex align-items-center gap-1\" style=\"font-size: 0.75rem; padding: 0.15rem 0.5rem;\" title=\"Attach documents\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '>';\n html += '<i class=\"fa-solid fa-paperclip\"></i>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n // Switching to another session must not leave a prior realtime/voice session running.\n this.forceStopActiveVoice();\n this.initializeSession(data.sessionId, true);\n this.messages = [];\n this.documents = data.documents || [];\n this.uploadErrors = [];\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderMessageMedia(msg);\n });\n });\n\n // Update feedback icons in the DOM after all messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // When the session is new (no messages) and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n });\n\n // Realtime lifecycle events (ReceiveRealtimeEvent, and ReceiveError while a voice session is\n // live) are handled by the shared CoreAIRealtime module — see setupRealtimeController.\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // A server-side error (for example a session-start rate-limit rejection) ends the\n // in-flight request. Reject any pending new-session promise so the UI stops waiting\n // until it times out, and clear the typing indicator that a send may have shown.\n this.rejectPendingSessionRequest(error);\n this.hideTypingIndicator();\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\n } else if (!this.isNavigatingAway) {\n // Surface the message to the user instead of failing silently.\n this.addMessage(this.getErrorMessage(error));\n }\n });\n\n this.connection.on(\"ReceiveSessionStartRejected\", (reason) => {\n // A rate-limit rejection is a definitive \"wait and retry\", not a recoverable\n // session/connection error. Unblock any pending new-session request, clear the\n // typing indicator, and show the message for every host (main app and widget)\n // without triggering the widget's clear-and-retry recovery, which would wipe the\n // visitor's state and fire another throttled StartSession.\n this.rejectPendingSessionRequest(reason);\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getErrorMessage(reason));\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, turnId, text) => {\n // Realtime creates the chat session server-side; adopt its id (and update the page URL)\n // on the first turn so a refresh reloads the conversation instead of starting fresh.\n if (sessionId && this.getSessionId() !== sessionId) {\n this.initializeSession(sessionId);\n }\n\n // Realtime: a placeholder for this turn was already inserted in the right position when\n // the utterance was captured (see user_turn_pending), so just fill in its text.\n if (turnId && this._realtimePendingTurns && this._realtimePendingTurns[turnId]) {\n var pending = this._realtimePendingTurns[turnId];\n delete this._realtimePendingTurns[turnId];\n this.stopAudio();\n this.fillRealtimePendingTurn(pending, text);\n\n return;\n }\n\n if (text) {\n this.stopAudio();\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else if (this._conversationAssistantMessage) {\n // Realtime: the user's transcript lags the assistant's reply for the SAME turn (the\n // model answers the audio before speech-to-text finishes). Insert the user message\n // just before the streaming assistant message so the order stays You -> Assistant,\n // and keep that message streaming — ending it here split one reply into two bubbles\n // above the prompt.\n var at = this._conversationAssistantMessage.index;\n var userMsg = { role: 'user', content: text, rawContent: text, userRating: null, references: {} };\n updateMessagePresentation(userMsg, userMsg.references);\n this.messages.splice(at, 0, userMsg);\n this._conversationAssistantMessage.index = at + 1;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n // A new response id means a new turn — finalize the previous assistant message so two replies\n // never merge into one bubble (also covers barge-in, which starts a fresh response).\n if (this._conversationAssistantMessage && this._conversationAssistantResponseId && responseId && this._conversationAssistantResponseId !== responseId) {\n var prev = this.messages[this._conversationAssistantMessage.index];\n if (prev) { prev.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n this._conversationAssistantResponseId = responseId;\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderMessageMedia(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n this._conversationAssistantResponseId = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (!base64Audio) {\n return;\n }\n\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Realtime audio arrives as raw PCM16 (WebSocket transport) and is scheduled for immediate\n // playback by the shared module; conversation/TTS audio (mp3/wav) is collected and played on\n // complete.\n if (contentType === 'audio/pcm') {\n if (this.realtimeController) { this.realtimeController.receivePcm(bytes); }\n } else {\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (sessionId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n\n // The realtime session lived inside the dropped connection; it cannot survive a reconnect.\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (this.realtimeEnabled && this.isConversationMode) {\n this.stopRealtimeConversation();\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n async ensureConnectionStarted() {\n if (!this.connection) {\n return false;\n }\n\n var states = signalR.HubConnectionState;\n if (this.connection.state === states.Connected) {\n return true;\n }\n\n // If the initial start failed or has not begun, start it now.\n if (this.connection.state === states.Disconnected) {\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n\n return this.connection.state === states.Connected;\n }\n\n // The connection is still Connecting or Reconnecting: wait for it to settle so callers\n // (e.g. starting a realtime session) do not send before the socket is ready.\n return await new Promise((resolve) => {\n var settle = (value) => {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(value);\n };\n var timeoutId = setTimeout(() => settle(this.connection.state === states.Connected), 10000);\n var intervalId = setInterval(() => {\n if (this.connection.state === states.Connected) {\n settle(true);\n } else if (this.connection.state === states.Disconnected) {\n settle(false);\n }\n }, 100);\n });\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingCoreAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedCoreAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n },\n addMessages(messages) {\n\n for (let i = 0; i < messages.length; i++) {\n this.addMessageInternal(messages[i]);\n }\n\n this.hidePlaceholder();\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n isOrchestratorAvailable() {\n return config.isOrchestratorAvailable !== false;\n },\n applyOrchestratorAvailability() {\n if (this.isOrchestratorAvailable()) {\n return true;\n }\n\n const unavailableMessage = config.orchestratorUnavailableMessage || \"This orchestrator is not currently available.\";\n\n if (this.inputElement) {\n this.inputElement.disabled = true;\n this.inputElement.value = '';\n this.inputElement.placeholder = unavailableMessage;\n }\n\n if (this.buttonElement) {\n this.buttonElement.disabled = true;\n }\n\n if (this.micButtonElement) {\n this.micButtonElement.disabled = true;\n this.micButtonElement.style.display = 'none';\n }\n\n if (this.conversationButtonElement) {\n this.conversationButtonElement.disabled = true;\n this.conversationButtonElement.style.display = 'none';\n }\n\n return false;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n sendMessage() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // A live voice session and a typed turn are two writers into one chat session, and they\n // would interleave. End the session first; the turns it already produced are persisted, so\n // the typed message simply continues the same thread.\n this.forceStopActiveVoice();\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // In single-response mode, clear all previous messages.\n if (this.singleResponseMode) {\n this.messages.splice(0, this.messages.length);\n }\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n this.streamMessage(this.getProfileId(), trimmedPrompt, null);\n this.inputElement.value = '';\n this.prompt = '';\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder.\n // Browsers only agree on WebM/Opus for MediaRecorder, and Azure's speech SDK cannot\n // demux that container from a streaming push (it fails inside GStreamer). Raw PCM is\n // decoded natively with no GStreamer and is produced identically by every browser.\n this._sttCapture = this._createPcmCapture(stream, (base64) => {\n try { subject.next(base64); } catch (err) { /* completed */ }\n });\n this._sttSubject = subject;\n\n var rate = (this._sttCapture && this._sttCapture.sampleRate) || 16000;\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording) {\n return;\n }\n\n this._stopPcmCapture(this._sttCapture);\n this._sttCapture = null;\n if (this._sttSubject) {\n try { this._sttSubject.complete(); } catch (err) { /* already completed */ }\n this._sttSubject = null;\n }\n this.isRecording = false;\n this.updateMicButton();\n },\n // Captures microphone audio as raw 16 kHz, 16-bit mono PCM using Web Audio and invokes\n // onChunk(base64Pcm, rms) for each block. Returns a handle for _stopPcmCapture. This replaces\n // MediaRecorder so every browser streams a format Azure decodes without GStreamer.\n _createPcmCapture(stream, onChunk) {\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n // Ask the browser to resample the mic to 16 kHz; fall back to manual resampling if it will not.\n var audioContext;\n try {\n audioContext = new AudioCtx({ sampleRate: 16000 });\n } catch (e) {\n audioContext = new AudioCtx();\n }\n var srcRate = audioContext.sampleRate;\n var source = audioContext.createMediaStreamSource(stream);\n var processor = audioContext.createScriptProcessor(4096, 1, 1);\n var self = this;\n processor.onaudioprocess = function (e) {\n var input = e.inputBuffer.getChannelData(0);\n var pcm16 = self._downsampleToInt16(input, srcRate, 16000);\n if (!pcm16 || pcm16.length === 0) {\n return;\n }\n var sum = 0;\n for (var i = 0; i < pcm16.length; i++) {\n var v = pcm16[i] / 32768;\n sum += v * v;\n }\n var rms = Math.sqrt(sum / pcm16.length);\n var bytes = new Uint8Array(pcm16.buffer);\n var binary = '';\n for (var j = 0; j < bytes.length; j++) {\n binary += String.fromCharCode(bytes[j]);\n }\n onChunk(btoa(binary), rms);\n };\n source.connect(processor);\n // Some browsers only fire onaudioprocess while the node is connected to a destination.\n processor.connect(audioContext.destination);\n return { audioContext: audioContext, source: source, processor: processor, stream: stream, sampleRate: 16000 };\n },\n _stopPcmCapture(capture) {\n if (!capture) {\n return;\n }\n try { if (capture.processor) { capture.processor.onaudioprocess = null; capture.processor.disconnect(); } } catch (e) { }\n try { if (capture.source) { capture.source.disconnect(); } } catch (e) { }\n try { if (capture.stream) { capture.stream.getTracks().forEach(function (t) { t.stop(); }); } } catch (e) { }\n try { if (capture.audioContext) { capture.audioContext.close(); } } catch (e) { }\n },\n // Converts a Float32 sample block to 16-bit PCM, resampling from srcRate to dstRate when needed.\n _downsampleToInt16(input, srcRate, dstRate) {\n var s, i;\n if (!(dstRate < srcRate)) {\n var same = new Int16Array(input.length);\n for (i = 0; i < input.length; i++) {\n s = Math.max(-1, Math.min(1, input[i]));\n same[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return same;\n }\n var ratio = srcRate / dstRate;\n var newLen = Math.floor(input.length / ratio);\n var out = new Int16Array(newLen);\n for (var j = 0; j < newLen; j++) {\n var idx = j * ratio;\n var i0 = Math.floor(idx);\n var i1 = (i0 + 1 < input.length) ? i0 + 1 : input.length - 1;\n var frac = idx - i0;\n s = input[i0] * (1 - frac) + input[i1] * frac;\n s = Math.max(-1, Math.min(1, s));\n out[j] = s < 0 ? s * 0x8000 : s * 0x7FFF;\n }\n return out;\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n let newMessage = {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n\n return newMessage;\n },\n getErrorMessage(error) {\n var content = (typeof error === 'string' && error.trim())\n ? error\n : \"Something went wrong. Please try again.\";\n\n return {\n role: \"assistant\",\n content: content,\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderMessageMedia(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.setAttribute('disabled', 'disabled');\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.removeAttribute('disabled');\n this.inputElement.focus();\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n });\n },\n updateCopyButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-copy-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-copy-message-index'));\n var isCopied = buttonIndex === this.copiedMessageIndex;\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n setCopyButtonState(button, isCopied) {\n if (!button) {\n return;\n }\n\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n // A live voice session takes the message box away and puts the audio settings in its place; ending\n // the session gives it back. Sending a typed message already force-stopped the session, so the box\n // was never a way to say something *during* one -- hiding it only makes that honest, and frees the\n // row for the gear. Both transports land here: realtime through the module's onActivate, the\n // speech-to-text cascade through startConversationMode.\n // The realtime module inserts its settings popover directly after the button it was handed, and\n // hard-codes the element id. A page can host two chat clients at once -- this one and the admin\n // widget -- so that id is not unique and getElementById would hand the widget the page's gear.\n // Each client finds its own next to its own button.\n voiceSettingsElement() {\n var next = this.conversationButton && this.conversationButton.nextElementSibling;\n\n return next && next.id === 'realtime-audio-settings' ? next : null;\n },\n setVoiceSessionLive(live) {\n if (this.inputElement) {\n this.inputElement.hidden = live;\n }\n\n if (this.buttonElement) {\n this.buttonElement.hidden = live;\n }\n\n // With the message box gone the button would otherwise sit at its natural width in an empty\n // row, so it takes the space the box left behind and reads as the thing now in charge. The\n // settings popover does not grow, so it stays at the right-hand end.\n if (this.conversationButton) {\n this.conversationButton.classList.toggle('flex-grow-1', live);\n }\n\n // The gear is built by the realtime module next to its button, and only in realtime mode, so\n // it is absent on the cascade. It belongs to a live session rather than to the surface.\n var audioSettings = this.voiceSettingsElement();\n if (audioSettings) {\n audioSettings.hidden = !live;\n }\n\n var hint = this.realtimeHintElement;\n if (hint) {\n hint.classList.toggle('d-none', !live);\n }\n },\n toggleConversationMode() {\n if (this.realtimeEnabled) {\n // Realtime is driven by the shared module, which owns the button; this only exists for\n // callers that toggle programmatically.\n if (this.realtimeController) { this.realtimeController.toggle(); }\n\n return;\n }\n\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n // Force-stop any in-progress voice/realtime session (mic, playback, and the streamed audio),\n // e.g. before starting a new chat or switching sessions, so it never keeps running in the background.\n forceStopActiveVoice() {\n if (!this.isConversationMode) {\n return;\n }\n if (this.realtimeEnabled) {\n this.stopRealtimeConversation();\n } else {\n this.stopConversationMode();\n }\n },\n startRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.start(); }\n },\n stopRealtimeConversation() {\n if (this.realtimeController) { this.realtimeController.stop(); }\n },\n // Realtime (speech-to-speech) is the shared CoreAIRealtime module (realtime-audio.js): microphone\n // capture and gating, the WebRTC transport with its WebSocket fallback, playback, the settings\n // popover, push-to-talk, and the server-driven session lifecycle all live there, so this app and the\n // chat-interaction client cannot drift apart. What is wired here is only how the module reaches this\n // app's hub and transcript.\n setupRealtimeController(config) {\n if (this.realtimeController || !this.conversationButton) { return; }\n if (!window.CoreAIRealtime || typeof window.CoreAIRealtime.attach !== 'function') {\n console.error('realtime-audio.js is not loaded; realtime voice is unavailable on this page.');\n\n return;\n }\n\n var self = this;\n this.realtimeController = window.CoreAIRealtime.attach({\n connection: this.connection,\n ensureConnected: function () {\n return self.ensureConnectionStarted().then(function (connected) {\n if (!connected) { throw new Error('The chat connection is not available.'); }\n\n return connected;\n });\n },\n sendStart: function (subject, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeConversation', self.getProfileId(), self.getSessionId() || '', subject, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcEnabled: this.realtimeWebRtcEnabled,\n sendStartWebRtc: function (offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption) {\n self.connection.send('StartRealtimeWebRtc', self.getProfileId(), self.getSessionId() || '', offerSdp, voice, language, silenceMs, vadThreshold, allowInterruption);\n },\n webRtcIceServers: this.realtimeWebRtcIceServers || undefined,\n voiceName: this.realtimeVoiceName || '',\n getVoiceName: function () { return self.realtimeVoiceName || ''; },\n realtimeEnabled: true,\n // The conversation button doubles as the realtime button on this host; the module owns its\n // click, label and state from here on.\n //\n // input and sendButton are deliberately not handed over. The module hides every control it\n // is given when realtime takes over, and typing has to stay available during a voice\n // conversation -- that is the whole feature.\n //\n // conversationButton is not handed over either. It is the same element as the realtime\n // button here, and the module hides the conversation button before showing the realtime\n // one -- naming it twice would ask it to hide the control it then has to show.\n selectors: {\n realtimeButton: config.conversationButtonElementSelector,\n micButton: config.micButtonElementSelector\n },\n // The module owns whether a session is live, so the message box follows its flag rather\n // than this app's copy of it. Losing one of these events used to leave the box hidden\n // under a button that had already gone back to \"Start speaking\".\n onSessionStateChanged: function (active) {\n self.setVoiceSessionLive(active);\n },\n onActivate: function () {\n self.isConversationMode = true;\n self._conversationAssistantMessage = null;\n self._conversationPartialMessage = null;\n self.removeNotification('conversation-ended');\n },\n onDeactivate: function () {\n self.isConversationMode = false;\n self.finishRealtimeConversationCleanup();\n },\n onUserTurnPending: function (turnId) { self.addRealtimePendingTurn(turnId); },\n onUserTurnDropped: function (turnId) { self.dropRealtimePendingTurn(turnId); }\n });\n },\n // Shared teardown tail: clears any in-flight streaming state and shows the conversation-ended\n // notification.\n finishRealtimeConversationCleanup() {\n if (this._conversationAssistantMessage) {\n var m = this.messages[this._conversationAssistantMessage.index];\n if (m) { m.isStreaming = false; }\n this._conversationAssistantMessage = null;\n }\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) { this.messages[i].isStreaming = false; }\n }\n\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n // The utterance has been captured but not transcribed yet. Showing a placeholder now puts the\n // prompt above the reply it produces: transcription lags the spoken answer, so a bubble added only\n // when the text arrives lands underneath its own reply.\n addRealtimePendingTurn(turnId) {\n if (!turnId) { return; }\n this._realtimePendingTurns = this._realtimePendingTurns || {};\n var index = this.messages.length;\n this.addMessage({ role: 'user', content: '', isPartial: true });\n this._realtimePendingTurns[turnId] = this.messages[index];\n },\n fillRealtimePendingTurn(pending, text) {\n if (!pending) { return; }\n if (!text) {\n var emptyAt = this.messages.indexOf(pending);\n if (emptyAt >= 0) { this.messages.splice(emptyAt, 1); }\n\n return;\n }\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n pending.content = text;\n pending.htmlContent = '<p>' + escaped + '</p>';\n pending.isPartial = false;\n },\n dropRealtimePendingTurn(turnId) {\n if (!turnId || !this._realtimePendingTurns) { return; }\n var dropped = this._realtimePendingTurns[turnId];\n if (!dropped) { return; }\n delete this._realtimePendingTurns[turnId];\n var at = this.messages.indexOf(dropped);\n if (at >= 0) { this.messages.splice(at, 1); }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // RMS (0..1) above which speech during TTS playback counts as an interrupt.\n var interruptRmsThreshold = 0.12;\n\n // Capture raw 16 kHz PCM (16-bit mono) via Web Audio instead of MediaRecorder — see\n // startRecording for why WebM/Opus is avoided. The per-block RMS drives interrupt\n // detection during TTS playback, replacing the previous AnalyserNode.\n this._conversationCapture = this._createPcmCapture(stream, (base64, rms) => {\n if (this.isPlayingAudio && rms >= interruptRmsThreshold) {\n // User is speaking over TTS — interrupt playback.\n this.stopAudio();\n }\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n var rate = (this._conversationCapture && this._conversationCapture.sampleRate) || 16000;\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, \"audio/pcm;rate=\" + rate, language);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording) {\n this._stopPcmCapture(this._conversationCapture);\n this._conversationCapture = null;\n if (this._conversationSubject) {\n try { this._conversationSubject.complete(); } catch (err) { /* already completed */ }\n }\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, audio playback continuation\n // is handled by the persistent stream. This method is only\n // called from playCollectedAudio for non-conversation TTS.\n },\n generatePrompt(element) {\n if (!element) {\n console.error('The element paramter is required.');\n\n return;\n }\n\n let templateProfileId = element.getAttribute('data-profile-id');\n let sessionId = this.getSessionId();\n let sessionProfileId = this.getProfileId();\n\n if (!templateProfileId || !sessionId) {\n\n console.error('The given element is missing data-profile-id or the session has not yet started.');\n return;\n }\n\n // streamMessage() already shows the typing indicator.\n this.streamMessage(templateProfileId, null, sessionProfileId);\n },\n createSessionUrl(baseUrl, param, value) {\n\n const fullUrl = baseUrl.toLowerCase().startsWith('http') ? baseUrl : window.location.origin + baseUrl;\n const url = new URL(fullUrl);\n\n url.searchParams.set(param, value);\n\n return url.toString();\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n this.scheduleNotificationDismiss(notification);\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var sessionId = this.getSessionId();\n this.connection.invoke(\"HandleNotificationAction\", sessionId, notificationType, actionName).catch(function (err) {\n console.error(\"Error handling notification action:\", err);\n });\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getProfileId() {\n return this.inputElement\n ? this.inputElement.getAttribute('data-profile-id')\n : null;\n },\n setSessionId(sessionId) {\n if (!this.inputElement) {\n return;\n }\n\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n // Force-stop an in-progress voice/realtime conversation so it doesn't keep running under the new session.\n this.forceStopActiveVoice();\n this.stopRecording();\n this.rejectPendingSessionRequest('Session was reset.');\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n\n // When an initial prompt is configured, show it as the first\n // assistant message instead of the generic placeholder.\n if (config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n } else {\n this.showPlaceholder();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onSessionReset === 'function') {\n widgetBehavior.onSessionReset(this, config);\n }\n },\n startNewSession() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n const profileId = this.getProfileId();\n if (!profileId || !this.connection) {\n return;\n }\n\n // Force-stop any live voice/realtime session before starting a new chat.\n this.forceStopActiveVoice();\n this.requestNewSession(profileId).catch(err => console.error(err));\n },\n async ensureSessionForDocuments(profileId) {\n var sessionId = this.getSessionId();\n if (sessionId) {\n return sessionId;\n }\n\n if (!profileId || !this.connection) {\n return null;\n }\n\n return await this.requestNewSession(profileId);\n },\n requestNewSession(profileId) {\n if (this.pendingSessionPromise) {\n return this.pendingSessionPromise;\n }\n\n if (!profileId || !this.connection) {\n return Promise.resolve(null);\n }\n\n this.pendingSessionPromise = new Promise((resolve, reject) => {\n this.pendingSessionResolver = resolve;\n this.pendingSessionRejector = reject;\n this.pendingSessionTimeoutId = window.setTimeout(() => {\n this.rejectPendingSessionRequest('Timed out while creating a chat session.');\n }, 15000);\n });\n\n this.connection.invoke(\"StartSession\", profileId, null).catch(err => {\n this.rejectPendingSessionRequest(err);\n });\n\n return this.pendingSessionPromise;\n },\n resolvePendingSessionRequest(sessionId) {\n if (this.pendingSessionResolver) {\n this.pendingSessionResolver(sessionId);\n }\n\n this.clearPendingSessionRequest();\n },\n rejectPendingSessionRequest(error) {\n if (this.pendingSessionRejector) {\n this.pendingSessionRejector(error);\n }\n\n this.clearPendingSessionRequest();\n },\n clearPendingSessionRequest() {\n if (this.pendingSessionTimeoutId) {\n window.clearTimeout(this.pendingSessionTimeoutId);\n }\n\n this.pendingSessionPromise = null;\n this.pendingSessionResolver = null;\n this.pendingSessionRejector = null;\n this.pendingSessionTimeoutId = null;\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n if (!this.inputElement || !this.buttonElement || !this.chatContainer || !this.placeholder) {\n console.error('AI chat app could not initialize because one or more required elements were not found.', {\n inputElementSelector: config.inputElementSelector,\n sendButtonElementSelector: config.sendButtonElementSelector,\n chatContainerElementSelector: config.chatContainerElementSelector,\n placeholderElementSelector: config.placeholderElementSelector\n });\n\n return false;\n }\n\n this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n }\n\n // Initialize document bar if enabled.\n if (config.sessionDocumentsEnabled && config.documentBarSelector) {\n this.documentBar = document.querySelector(config.documentBarSelector);\n if (this.documentBar) {\n this.renderDocumentBar();\n\n // Create hidden file input for document uploads.\n var fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.id = 'ai-chat-doc-input';\n fileInput.className = 'd-none';\n fileInput.multiple = true;\n if (config.allowedExtensions) {\n fileInput.accept = config.allowedExtensions;\n }\n fileInput.addEventListener('change', (e) => this.handleFileInputChange(e));\n this.documentBar.parentElement.appendChild(fileInput);\n\n // Set up drag-and-drop on the input area.\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) {\n inputArea.addEventListener('dragover', (e) => this.handleDragOver(e));\n inputArea.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n inputArea.addEventListener('drop', (e) => this.handleDrop(e));\n }\n }\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keydown', event => {\n\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.buttonElement.addEventListener('click', () => {\n\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const promptGenerators = document.getElementsByClassName('profile-generated-prompt');\n\n for (var i = 0; i < promptGenerators.length; i++) {\n promptGenerators[i].addEventListener('click', (e) => {\n e.preventDefault();\n this.generatePrompt(e.target);\n });\n }\n\n const chatSessions = document.getElementsByClassName('chat-session-history-item');\n\n for (var i = 0; i < chatSessions.length; i++) {\n chatSessions[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var sessionId = e.target.getAttribute('data-session-id');\n\n if (!sessionId) {\n console.error('an element with the class chat-session-history-item with no data-session-id set.');\n\n return;\n }\n\n this.loadSession(sessionId);\n this.showChatScreen();\n });\n }\n\n const initialMessages = Array.isArray(config.messages) ? config.messages : [];\n\n for (let i = 0; i < initialMessages.length; i++) {\n this.addMessage(initialMessages[i]);\n }\n\n // When no messages were loaded and an initial prompt is configured,\n // display it as the first assistant message without invoking the AI.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.addMessage({\n role: 'assistant',\n content: config.initialPrompt\n });\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button (used for both STT/TTS conversation and realtime).\n if ((this.conversationModeEnabled || this.realtimeEnabled) && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n if (this.realtimeEnabled) {\n // The shared realtime module owns the button (click, label, state) and adds the\n // voice settings popover next to it.\n this.setupRealtimeController(config);\n\n // The module reveals the gear as soon as the surface enters realtime mode, but it\n // belongs to a live session. The watcher that would hide it only runs on a change,\n // so the idle state has to be stated once here.\n this.setVoiceSessionLive(false);\n } else {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n }\n\n return true;\n },\n loadSession(sessionId) {\n this.connection.invoke(\"LoadSession\", sessionId).catch(err => console.error(err));\n },\n reloadCurrentSession() {\n\n var sessionId = this.getSessionId();\n if (sessionId) {\n this.loadSession(sessionId);\n }\n },\n initializeSession(sessionId, force) {\n if (this.isSessionStarted && !force) {\n if (sessionId && this.getSessionId() === sessionId) {\n this.resolvePendingSessionRequest(sessionId);\n }\n\n return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionCoreAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n\n // For non-widget pages, update the browser URL so that a page\n // refresh reloads the correct session instead of starting fresh.\n if (!hasWidgetConfig && sessionId && config.sessionUrlTemplate && typeof history !== 'undefined' && history.replaceState) {\n var sessionUrl = config.sessionUrlTemplate.replace('{sessionId}', encodeURIComponent(sessionId));\n history.replaceState(null, '', sessionUrl);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n clearCopiedMessageState() {\n if (this.copyResetTimeoutId) {\n window.clearTimeout(this.copyResetTimeoutId);\n this.copyResetTimeoutId = null;\n }\n\n if (this.activeCopyButton) {\n this.setCopyButtonState(this.activeCopyButton, false);\n this.activeCopyButton = null;\n }\n\n this.copiedMessageIndex = -1;\n },\n copyResponse(message, index, event) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n const button = event?.currentTarget || event?.target?.closest?.('[data-copy-message-index]') || null;\n\n navigator.clipboard.writeText(text)\n .then(() => {\n this.clearCopiedMessageState();\n this.copiedMessageIndex = typeof index === 'number' ? index : -1;\n this.activeCopyButton = button;\n\n if (button) {\n this.setCopyButtonState(button, true);\n } else {\n this.$nextTick(() => this.updateCopyButtons());\n }\n\n this.copyResetTimeoutId = window.setTimeout(() => {\n this.clearCopiedMessageState();\n this.$nextTick(() => this.updateCopyButtons());\n }, Number(config.copyResetDelayMs) || 2000);\n })\n .catch(err => console.error('Failed to copy response:', err));\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n },\n isConversationMode(active) {\n // The dictation microphone is hidden while a voice conversation runs: the conversation\n // already owns the microphone, and a second one would mean something different.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // The message box and the send button give way to the voice settings while the conversation\n // runs, and come back when it ends. Both kinds of turn still land in the same thread; what\n // they cannot do is overlap.\n //\n // Only the cascade is driven from here. Realtime follows the module's own session flag\n // (onSessionStateChanged), so the two never disagree about whether a session is live.\n if (!this.realtimeEnabled) {\n this.setVoiceSessionLive(active);\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n\n this.$nextTick(() => {\n this.updateCopyButtons();\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.clearCopiedMessageState();\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n const autoInitializeSelector = '[data-coreai-chat-config],[data-coreai-chat-app-element-selector]';\n\n function getAttributeValue(element, attributeName) {\n const value = element.getAttribute(attributeName);\n return value === null || value === '' ? null : value;\n }\n\n function parseBooleanAttributeValue(value) {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n\n return null;\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = getAttributeValue(element, attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n console.error('Failed to parse ' + description + ' JSON.', error);\n return null;\n }\n }\n\n function buildConfigFromDataAttributes(element, options) {\n const settings = options || {};\n\n if (element.hasAttribute('data-coreai-chat-widget-container-selector') && settings.allowWidgetHost !== true) {\n return null;\n }\n\n const appElementSelector = getAttributeValue(element, 'data-coreai-chat-app-element-selector');\n if (!appElementSelector) {\n return null;\n }\n\n const config = {\n signalRHubUrl: getAttributeValue(element, 'data-coreai-chat-signalr-hub-url'),\n appElementSelector: appElementSelector,\n chatContainerElementSelector: getAttributeValue(element, 'data-coreai-chat-container-element-selector'),\n inputElementSelector: getAttributeValue(element, 'data-coreai-chat-input-element-selector'),\n sendButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-send-button-element-selector'),\n placeholderElementSelector: getAttributeValue(element, 'data-coreai-chat-placeholder-element-selector'),\n messages: parseJsonAttribute(element, 'data-coreai-chat-messages', 'CoreAI chat messages') ?? undefined,\n chatMode: getAttributeValue(element, 'data-coreai-chat-mode'),\n micButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-mic-button-element-selector'),\n conversationButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-conversation-button-element-selector'),\n realtimeHintElementSelector: getAttributeValue(element, 'data-coreai-chat-realtime-hint-element-selector'),\n ttsVoiceName: getAttributeValue(element, 'data-coreai-chat-tts-voice-name'),\n realtimeVoiceName: getAttributeValue(element, 'data-coreai-chat-realtime-voice-name'),\n documentBarSelector: getAttributeValue(element, 'data-coreai-chat-document-bar-selector'),\n uploadDocumentUrl: getAttributeValue(element, 'data-coreai-chat-upload-document-url'),\n removeDocumentUrl: getAttributeValue(element, 'data-coreai-chat-remove-document-url'),\n allowedExtensions: getAttributeValue(element, 'data-coreai-chat-allowed-extensions'),\n supportedExtensionsText: getAttributeValue(element, 'data-coreai-chat-supported-extensions-text'),\n existingDocuments: parseJsonAttribute(element, 'data-coreai-chat-existing-documents', 'CoreAI chat existing documents') ?? undefined,\n initialPrompt: getAttributeValue(element, 'data-coreai-chat-initial-prompt'),\n sessionUrlTemplate: getAttributeValue(element, 'data-coreai-chat-session-url-template'),\n userLabel: getAttributeValue(element, 'data-coreai-chat-user-label'),\n assistantLabel: getAttributeValue(element, 'data-coreai-chat-assistant-label'),\n copyTitle: getAttributeValue(element, 'data-coreai-chat-copy-title'),\n copiedTitle: getAttributeValue(element, 'data-coreai-chat-copied-title'),\n };\n\n const booleanAttributes = {\n metricsEnabled: 'data-coreai-chat-metrics-enabled',\n textToSpeechEnabled: 'data-coreai-chat-text-to-speech-enabled',\n sessionDocumentsEnabled: 'data-coreai-chat-session-documents-enabled',\n singleResponseMode: 'data-coreai-chat-single-response-mode',\n realtimeEnabled: 'data-coreai-chat-realtime-enabled',\n realtimeWebRtcEnabled: 'data-coreai-chat-realtime-webrtc-enabled',\n };\n\n Object.keys(booleanAttributes).forEach(key => {\n const parsed = parseBooleanAttributeValue(getAttributeValue(element, booleanAttributes[key]));\n if (parsed !== null) {\n config[key] = parsed;\n }\n });\n\n return compactObject(config);\n }\n\n function buildConfigFromElement(element, options) {\n const jsonConfig = parseJsonAttribute(element, 'data-coreai-chat-config', 'CoreAI chat config');\n const attributeConfig = buildConfigFromDataAttributes(element, options);\n\n if (!jsonConfig && !attributeConfig) {\n return null;\n }\n\n return Object.assign({}, jsonConfig || {}, attributeConfig || {});\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.coreAiChatInitialized === 'true') {\n return element ? element.__coreAIChatApp || null : null;\n }\n\n const config = buildConfigFromElement(element);\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.coreAiChatInitialized = 'true';\n element.__coreAIChatApp = app;\n\n return app;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches(autoInitializeSelector)) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll(autoInitializeSelector).forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n\n return {\n initialize: initialize,\n initializeFromElement: initializeFromElement,\n buildConfigFromElement: buildConfigFromElement,\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
|