@crestapps/ai-chat-ui 1.0.0-preview.11 → 1.0.0-preview.13

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.
@@ -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","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","openAIChatManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","codeCopiedText","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","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$link","normalized","assign","index","Index","Text","link","Link","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","renderer","marked","Renderer","data","href","concat","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","indexOf","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","message","charts","requestAnimationFrame","_iterator","_step","renderChartOnCanvas","err","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","_i2","_Object$keys","keys","parseMarkdownContent","content","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","hasWidgetConfig","widgetBehavior","openAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","placeholder","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","conversationButton","isConversationMode","notificationDismissTimers","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","closest","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","_this","_callee","sessionId","profileId","formData","response","errorText","uploadError","result","j","_t","_context","uploadDocumentUrl","getSessionId","getProfileId","renderDocumentBar","FormData","append","fetch","method","body","ok","extractReadableErrorMessage","fileName","initializeSession","uploaded","failed","removeDocument","doc","_this2","_callee2","removeError","_t2","_context2","removeDocumentUrl","headers","stringify","itemId","documentId","splice","status","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","self","closeButtons","querySelectorAll","addEventListener","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","querySelector","div","fallbackMessage","startsWith","title","detail","normalizeAssistantAppearance","appearance","label","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee3","_t3","_context3","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forEach","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","sendMessage","stopRecording","handleReceiveError","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","htmlContent","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","responseId","hideTypingIndicator","msgIndex","newMessage","base64Audio","contentType","binaryString","atob","Uint8Array","charCodeAt","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentSession","autoCreateSession","startNewSession","onclose","addMessageInternal","_this4","fireEvent","CustomEvent","_this5","processedContent","citedRefs","filter","_ref4","_ref5","includes","sort","_ref6","_ref7","_ref8","_ref9","b","displayIndex","_iterator2","_step2","_step2$value","replaceAll","_displayIndex","_placeholder","_iterator3","_step3","_step3$value","_iterator4","_step4","_step4$value","addMessages","_this6","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","trimmedPrompt","streamMessage","startRecording","_this7","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","subject","Subject","pendingChunk","size","_callee4","uint8Array","base64","_context4","arrayBuffer","reduce","str","byte","String","fromCharCode","btoa","getTracks","track","stop","complete","documentElement","send","updateMicButton","toggleRecording","sessionProfileId","_this8","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_i4","_Object$entries3","_Object$entries3$_i","_this8$stream","processReferences","streamingFinished","synthesizeSpeech","_this8$stream2","getServiceDownMessage","_this9","_ref1","_ref10","_ref11","_ref12","_ref13","_ref14","processed","_iterator5","_step5","_step5$value","_iterator6","_step6","_step6$value","_iterator7","_step7","_step7$value","stopIcon","setAttribute","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this0","buttons","button","buttonIndex","isPlaying","iconHtml","toggle","cacheIndex","_this1","_ttsCacheIndex","invoke","toggleMessageTts","_this10","playAudioBlob","_this11","totalLength","sum","combined","offset","_iterator8","_step8","set","blob","Blob","_this12","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this13","nextBlob","shift","conversationModeOnAudioEnded","_this14","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this15","updateConversationButton","_conversationSubject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","analyser","interruptVolumeThreshold","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee5","_context5","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","toLowerCase","location","origin","searchParams","originalLength","removedCount","_this16","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this17","setTimeout","timerId","clearTimeout","dismissNotification","handleNotificationAction","actionName","_this18","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","sessionRating","onSessionReset","initializeApp","_this19","placeholderElementSelector","loadSession","documentBarSelector","className","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","btn","block","codeEl","clipboard","writeText","copiedText","micButtonElementSelector","conversationButtonElementSelector","force","onSessionInitialized","resolveSessionId","copyResponse","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","active","mounted","_this20","_callee6","_context6","onMounted","beforeUnmount","onBeforeUnmount","template","app","Vue","createApp","mount","attach","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["window.openAIChatManager = 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 codeCopiedText: 'Copied!',\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-msg-role ai-chat-msg-role-user\">{{ userLabel }}</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><span :class=\"getAssistantIcon(message)\"></span></span>\n {{ getAssistantLabel(message) }}\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 <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 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 <span class=\"fa-regular fa-thumbs-up\"></span>\n </button>\n <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 <span class=\"fa-regular fa-thumbs-down\"></span>\n </button>\n </span>\n </template>\n <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 class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message.content)\" :title=\"copyTitle\">\n <span class=\"fa-solid fa-copy\"></span>\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 <span v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></span>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <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 <span class=\"fa-solid fa-xmark\"></span>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <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 <span v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></span>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><span class=\"fa fa-robot\" style=\"display: inline-block;\"></span></span>\n Assistant\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 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.link = normalized.link ?? normalized.Link ?? null;\n\n return normalized;\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 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\"><span class=\"fa-solid fa-code\"></span> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><span class=\"fa-regular fa-copy\"></span></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 return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <span class=\"fa-solid fa-download\"></span>\n </a>\n </div>\n </div>`;\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 + `<span class=\"fa-solid fa-download\"></span> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\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 = tryExtractChartMarker(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 // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\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 function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = 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 const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, instanceConfig && instanceConfig.widget ? instanceConfig.widget : {});\n const hasWidgetConfig = !!(instanceConfig && instanceConfig.widget && instanceConfig.widget.chatWidgetContainer && instanceConfig.widget.chatWidgetStateName);\n const widgetBehavior = window.openAIChatWidgetBehavior || 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 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 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 conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\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(e.dataTransfer.files);\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled) 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;\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId && !profileId) {\n console.warn('Cannot upload documents without a session or profile.');\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n if (sessionId) {\n formData.append('sessionId', sessionId);\n } else {\n formData.append('profileId', profileId);\n }\n for (var i = 0; i < files.length; i++) {\n formData.append('files', files[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 result = await response.json();\n\n // If the server created a new session, initialize it.\n if (result.sessionId && !sessionId) {\n this.initializeSession(result.sessionId);\n }\n\n if (result.uploaded && result.uploaded.length > 0) {\n for (var j = 0; j < result.uploaded.length; j++) {\n this.documents.push(result.uploaded[j]);\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 } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\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 idx = this.documents.indexOf(doc);\n if (idx > -1) this.documents.splice(idx, 1);\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 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 this.renderDocumentBar();\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 += '<span class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></span> ';\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\"></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 if (failedName.length > 15) failedName = failedName.substring(0, 12) + '...';\n html += '<span class=\"badge bg-danger bg-opacity-25 text-danger d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml((failedItem.fileName || '') + ': ' + errorMsg) + '\">';\n html += '<span class=\"fa-solid fa-circle-exclamation\" style=\"font-size: 0.7rem;\"></span> ';\n html += this.escapeHtml(failedName);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" 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\">';\n html += '<span class=\"fa-solid fa-paperclip\"></span>';\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 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 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 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 renderChartsInMessage(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 // automatically send it as the first user message to trigger an AI response.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.prompt = config.initialPrompt;\n this.sendMessage();\n }\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\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, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\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, appearance) => {\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 };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\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.content = this._conversationAssistantMessage.content;\n msg.htmlContent = parseMarkdownContent(msg.content, msg);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId) => {\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\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (base64Audio) {\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 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\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n } else if (config.autoCreateSession) {\n this.startNewSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\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 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(\"addingOpenAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedOpenAIPromotMessage\", { 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 let processedContent = message.content.trim();\n message.references = normalizeReferences(message.references);\n\n if (message.references && typeof message.references === \"object\" && Object.keys(message.references).length) {\n\n // Only include references that were actually cited in the response.\n const citedRefs = Object.entries(message.references).filter(([key]) => processedContent.includes(key));\n\n if (citedRefs.length) {\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders.\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processedContent = processedContent.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n // if we have multiple references, add a comma to ensure we don't concatenate numbers.\n processedContent = processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processedContent += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || key;\n processedContent += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n }\n }\n\n message.content = processedContent;\n message.htmlContent = parseMarkdownContent(processedContent, message);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(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 var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\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 var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, mimeType, language);\n this.mediaRecorder.start(250);\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 || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\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 = '<span class=\"fa-solid fa-stop\"></span>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-microphone\"></span>';\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 let processedContent = chunk.content;\n\n for (const [key, value] of Object.entries(references)) {\n processedContent = processedContent.replaceAll(key, `<sup><strong>${value.index}</strong></sup>`);\n }\n\n // Append processed content to the message.\n // if we have multiple references, add a comma to ensure we don't concatenate numbers.\n content += processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n }\n\n // Update the existing message\n message.content = content;\n\n message.htmlContent = parseMarkdownContent(content, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(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 processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n const content = message.content || '';\n\n // Only include references that were actually cited in the response.\n // Check both raw [doc:N] markers and already-rendered <sup> tags from streaming.\n const citedRefs = Object.entries(references).filter(([key, value]) =>\n content.includes(key) || content.includes(`<sup><strong>${value.index}</strong></sup>`)\n );\n\n if (!citedRefs.length) {\n return;\n }\n\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders to avoid collisions during remapping.\n let processed = content.trim();\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processed = processed.replaceAll(key, placeholder);\n processed = processed.replaceAll(`<sup><strong>${value.index}</strong></sup>`, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processed = processed.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n processed = processed.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processed += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || key;\n processed += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n\n message.content = processed;\n message.htmlContent = parseMarkdownContent(processed, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(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 var iconHtml = isPlaying\n ? '<span class=\"fa-solid fa-circle-pause\"></span>'\n : '<span class=\"fa-solid fa-circle-play\"></span>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\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.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\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 var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n // During TTS playback, detect when the user speaks above\n // the threshold to stop TTS (interrupt). Audio chunks are\n // always forwarded — browser echo cancellation handles\n // speaker echo so the STT stream has no gaps.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\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 && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\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.getAttribute('data-profile-id');\n },\n setSessionId(sessionId) {\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n this.stopRecording();\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n if (!config.autoCreateSession) {\n this.showPlaceholder();\n }\n\n if (config.autoCreateSession) {\n this.startNewSession();\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 this.connection.invoke(\"StartSession\", profileId, null).catch(err => console.error(err));\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 this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n } else if (this.isOrchestratorAvailable() && config.autoCreateSession && !hasWidgetConfig && !sessionId) {\n this.startNewSession();\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 for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\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 = '<span class=\"fa-solid fa-check\"></span> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<span class=\"fa-regular fa-copy\"></span>';\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.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\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 return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionOpenAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement.getAttribute('data-session-id');\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n copyResponse(message) {\n navigator.clipboard.writeText(message);\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 isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\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 this.initializeApp();\n if (hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\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 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 return {\n initialize: initialize\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","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_createForOfIteratorHelper","Array","isArray","_unsupportedIterableToArray","_n","F","s","next","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","from","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","openAIChatManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","codeCopiedText","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","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$link","normalized","assign","index","Index","Text","link","Link","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","renderer","marked","Renderer","data","href","concat","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","indexOf","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","message","charts","requestAnimationFrame","_iterator","_step","renderChartOnCanvas","err","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","_i2","_Object$keys","keys","parseMarkdownContent","content","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","hasWidgetConfig","widgetBehavior","openAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","placeholder","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","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","closest","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","response","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","ok","extractReadableErrorMessage","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","removeError","_t3","_context4","headers","stringify","itemId","documentId","splice","status","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","querySelectorAll","j","addEventListener","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","querySelector","div","fallbackMessage","startsWith","title","detail","normalizeAssistantAppearance","appearance","label","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","forEach","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","sendMessage","stopRecording","handleReceiveError","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","htmlContent","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","responseId","hideTypingIndicator","msgIndex","newMessage","base64Audio","contentType","binaryString","atob","Uint8Array","charCodeAt","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","autoCreateSession","startNewSession","onclose","addMessageInternal","_this4","fireEvent","CustomEvent","_this5","processedContent","citedRefs","filter","_ref7","_ref8","includes","sort","_ref9","_ref0","_ref1","_ref10","b","displayIndex","_iterator2","_step2","_step2$value","replaceAll","_displayIndex","_placeholder","_iterator3","_step3","_step3$value","_iterator4","_step4","_step4$value","addMessages","_this6","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","trimmedPrompt","streamMessage","startRecording","_this7","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","subject","Subject","pendingChunk","size","_callee7","uint8Array","base64","_context7","arrayBuffer","reduce","str","byte","String","fromCharCode","btoa","getTracks","track","stop","complete","documentElement","send","updateMicButton","toggleRecording","sessionProfileId","_this8","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_i4","_Object$entries3","_Object$entries3$_i","_this8$stream","processReferences","streamingFinished","synthesizeSpeech","_this8$stream2","getServiceDownMessage","_this9","_ref12","_ref13","_ref14","_ref15","_ref16","_ref17","processed","_iterator5","_step5","_step5$value","_iterator6","_step6","_step6$value","_iterator7","_step7","_step7$value","stopIcon","setAttribute","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this0","buttons","button","buttonIndex","isPlaying","iconHtml","toggle","cacheIndex","_this1","_ttsCacheIndex","invoke","toggleMessageTts","_this10","playAudioBlob","_this11","totalLength","sum","combined","offset","_iterator8","_step8","set","blob","Blob","_this12","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this13","nextBlob","shift","conversationModeOnAudioEnded","_this14","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this15","updateConversationButton","_conversationSubject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","analyser","interruptVolumeThreshold","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee8","_context8","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","toLowerCase","location","origin","searchParams","originalLength","removedCount","_this16","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this17","setTimeout","timerId","clearTimeout","dismissNotification","handleNotificationAction","actionName","_this18","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","rejectPendingSessionRequest","sessionRating","onSessionReset","requestNewSession","_this19","_callee9","_context9","_this20","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this21","placeholderElementSelector","loadSession","documentBarSelector","className","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","btn","block","codeEl","clipboard","writeText","copiedText","micButtonElementSelector","conversationButtonElementSelector","force","onSessionInitialized","resolveSessionId","copyResponse","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","active","mounted","_this22","_callee0","isInitialized","_context0","onMounted","beforeUnmount","onBeforeUnmount","template","app","Vue","createApp","mount","attach","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["window.openAIChatManager = 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 codeCopiedText: 'Copied!',\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-msg-role ai-chat-msg-role-user\">{{ userLabel }}</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><span :class=\"getAssistantIcon(message)\"></span></span>\n {{ getAssistantLabel(message) }}\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 <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 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 <span class=\"fa-regular fa-thumbs-up\"></span>\n </button>\n <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 <span class=\"fa-regular fa-thumbs-down\"></span>\n </button>\n </span>\n </template>\n <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 class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message.content)\" :title=\"copyTitle\">\n <span class=\"fa-solid fa-copy\"></span>\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 <span v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></span>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <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 <span class=\"fa-solid fa-xmark\"></span>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <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 <span v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></span>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><span class=\"fa fa-robot\" style=\"display: inline-block;\"></span></span>\n Assistant\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 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.link = normalized.link ?? normalized.Link ?? null;\n\n return normalized;\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 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\"><span class=\"fa-solid fa-code\"></span> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><span class=\"fa-regular fa-copy\"></span></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 return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <span class=\"fa-solid fa-download\"></span>\n </a>\n </div>\n </div>`;\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 + `<span class=\"fa-solid fa-download\"></span> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\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 = tryExtractChartMarker(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 // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\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 function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = 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 const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, instanceConfig && instanceConfig.widget ? instanceConfig.widget : {});\n const hasWidgetConfig = !!(instanceConfig && instanceConfig.widget && instanceConfig.widget.chatWidgetContainer && instanceConfig.widget.chatWidgetStateName);\n const widgetBehavior = window.openAIChatWidgetBehavior || 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 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 conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: 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 result = await response.json();\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 result = await response.json();\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 += '<span class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></span> ';\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 if (failedName.length > 15) failedName = failedName.substring(0, 12) + '...';\n html += '<span class=\"badge bg-danger bg-opacity-25 text-danger d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml((failedItem.fileName || '') + ': ' + errorMsg) + '\">';\n html += '<span class=\"fa-solid fa-circle-exclamation\" style=\"font-size: 0.7rem;\"></span> ';\n html += this.escapeHtml(failedName);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" 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 += '<span class=\"fa-solid fa-paperclip\"></span>';\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 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 renderChartsInMessage(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 // automatically send it as the first user message to trigger an AI response.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.prompt = config.initialPrompt;\n this.sendMessage();\n }\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\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, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\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, appearance) => {\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 };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\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.content = this._conversationAssistantMessage.content;\n msg.htmlContent = parseMarkdownContent(msg.content, msg);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId) => {\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\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (base64Audio) {\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 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\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n } else if (config.autoCreateSession) {\n this.startNewSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\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 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(\"addingOpenAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedOpenAIPromotMessage\", { 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 let processedContent = message.content.trim();\n message.references = normalizeReferences(message.references);\n\n if (message.references && typeof message.references === \"object\" && Object.keys(message.references).length) {\n\n // Only include references that were actually cited in the response.\n const citedRefs = Object.entries(message.references).filter(([key]) => processedContent.includes(key));\n\n if (citedRefs.length) {\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders.\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processedContent = processedContent.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n // if we have multiple references, add a comma to ensure we don't concatenate numbers.\n processedContent = processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processedContent += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || key;\n processedContent += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n }\n }\n\n message.content = processedContent;\n message.htmlContent = parseMarkdownContent(processedContent, message);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(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 var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\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 var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, mimeType, language);\n this.mediaRecorder.start(250);\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 || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\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 = '<span class=\"fa-solid fa-stop\"></span>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-microphone\"></span>';\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 let processedContent = chunk.content;\n\n for (const [key, value] of Object.entries(references)) {\n processedContent = processedContent.replaceAll(key, `<sup><strong>${value.index}</strong></sup>`);\n }\n\n // Append processed content to the message.\n // if we have multiple references, add a comma to ensure we don't concatenate numbers.\n content += processedContent.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n }\n\n // Update the existing message\n message.content = content;\n\n message.htmlContent = parseMarkdownContent(content, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(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 processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n const content = message.content || '';\n\n // Only include references that were actually cited in the response.\n // Check both raw [doc:N] markers and already-rendered <sup> tags from streaming.\n const citedRefs = Object.entries(references).filter(([key, value]) =>\n content.includes(key) || content.includes(`<sup><strong>${value.index}</strong></sup>`)\n );\n\n if (!citedRefs.length) {\n return;\n }\n\n // Sort by original index so display indices follow a natural order.\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n // Phase 1: Replace all markers with unique placeholders to avoid collisions during remapping.\n let processed = content.trim();\n let displayIndex = 1;\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${value.index}__`;\n processed = processed.replaceAll(key, placeholder);\n processed = processed.replaceAll(`<sup><strong>${value.index}</strong></sup>`, placeholder);\n value._displayIndex = displayIndex++;\n value._placeholder = placeholder;\n }\n\n // Phase 2: Replace placeholders with sequential display indices.\n for (const [, value] of citedRefs) {\n processed = processed.replaceAll(value._placeholder, `<sup><strong>${value._displayIndex}</strong></sup>`);\n }\n\n processed = processed.replaceAll('</strong></sup><sup>', '</strong></sup><sup>,</sup><sup>');\n\n processed += '<br><br>';\n\n for (const [key, value] of citedRefs) {\n const label = value.text || key;\n processed += value.link\n ? `**${value._displayIndex}**. [${label}](${value.link})<br>`\n : `**${value._displayIndex}**. ${label}<br>`;\n }\n\n message.content = processed;\n message.htmlContent = parseMarkdownContent(processed, message);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(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 var iconHtml = isPlaying\n ? '<span class=\"fa-solid fa-circle-pause\"></span>'\n : '<span class=\"fa-solid fa-circle-play\"></span>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\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.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\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 var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n // During TTS playback, detect when the user speaks above\n // the threshold to stop TTS (interrupt). Audio chunks are\n // always forwarded — browser echo cancellation handles\n // speaker echo so the STT stream has no gaps.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\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 && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\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 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 if (!config.autoCreateSession) {\n this.showPlaceholder();\n }\n\n if (config.autoCreateSession) {\n this.startNewSession();\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 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 } else if (this.isOrchestratorAvailable() && config.autoCreateSession && !hasWidgetConfig && !sessionId) {\n this.startNewSession();\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 for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\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 = '<span class=\"fa-solid fa-check\"></span> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<span class=\"fa-regular fa-copy\"></span>';\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.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\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(\"initializingSessionOpenAIChat\", { 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 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 copyResponse(message) {\n navigator.clipboard.writeText(message);\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 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\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 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 return {\n initialize: initialize\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"]}