@crestapps/ai-chat-ui 1.0.0-preview.9 → 1.0.0-preview.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-chat-widget.js +962 -0
- package/dist/ai-chat-widget.js.map +1 -0
- package/dist/ai-chat-widget.min.js +2 -0
- package/dist/ai-chat-widget.min.js.map +1 -0
- package/dist/ai-chat.css +45 -14
- package/dist/ai-chat.css.map +1 -1
- package/dist/ai-chat.js +1076 -1019
- package/dist/ai-chat.js.map +1 -1
- package/dist/ai-chat.min.css +1 -1
- package/dist/ai-chat.min.js +1 -1
- package/dist/ai-chat.min.js.map +1 -1
- package/dist/chat-interaction-settings.js +297 -0
- package/dist/chat-interaction-settings.js.map +1 -0
- package/dist/chat-interaction-settings.min.js +2 -0
- package/dist/chat-interaction-settings.min.js.map +1 -0
- package/dist/chat-interaction.js +1224 -325
- package/dist/chat-interaction.js.map +1 -1
- package/dist/chat-interaction.min.js +1 -1
- package/dist/chat-interaction.min.js.map +1 -1
- package/dist/chat-widget.css +48 -26
- package/dist/chat-widget.css.map +1 -1
- package/dist/chat-widget.min.css +1 -1
- package/dist/document-drop-zone.css +10 -10
- package/dist/document-drop-zone.css.map +1 -1
- package/dist/document-drop-zone.js +92 -14
- package/dist/document-drop-zone.js.map +1 -1
- package/dist/document-drop-zone.min.css +1 -1
- package/dist/document-drop-zone.min.js +1 -1
- package/dist/document-drop-zone.min.js.map +1 -1
- package/dist/technical-name-generator.js +36 -8
- package/dist/technical-name-generator.js.map +1 -1
- package/dist/technical-name-generator.min.js +1 -1
- package/dist/technical-name-generator.min.js.map +1 -1
- package/package.json +9 -1
- package/README.md +0 -145
package/dist/ai-chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","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","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","placeholder","isSessionStarted","isPlaceholderVisible","chatWidgetStateSession","chatWidgetLayoutKey","widgetContainerElement","widgetToggleButtonElement","widgetResetSizeButtonElement","widgetResizeObserver","widgetViewportResizeHandler","widgetDefaultWidth","widgetDefaultHeight","widgetIsInitialized","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","getStoredWidgetLayout","storedLayout","localStorage","getItem","saveStoredWidgetLayout","partialLayout","currentLayout","nextLayout","panel","position","setItem","stringify","getElementSize","element","fallbackWidth","fallbackHeight","width","height","rect","getBoundingClientRect","getComputedStyle","round","getElementPosition","left","top","inlineLeft","style","inlineTop","computedLeft","computedTop","isHidden","display","clampWidgetPosition","viewportPadding","maxLeft","innerWidth","maxTop","innerHeight","applyAbsolutePosition","right","bottom","getWidgetDefaultSize","getWidgetToggleGap","isWidgetPanelVisible","classList","contains","persistWidgetPanelPosition","panelDefaultSize","panelPosition","panelSize","toggleSize","linkedPosition","persistWidgetTogglePosition","toggleRect","persistWidgetPanelSize","defaultSize","currentSize","abs","syncTogglePositionToPanel","syncPanelPositionToToggle","togglePosition","updateWidgetResetSizeButtonVisibility","add","isResized","toggle","resetWidgetSize","removeProperty","constrainWidgetElementsToViewport","restoreWidgetLayout","attachDraggableWidgetElement","handle","layoutKey","suppressClickOnDrag","_this","activePointerId","startX","startY","startLeft","startTop","dragged","dragThreshold","interactiveSelector","stopDragging","event","pointerId","removeEventListener","onPointerMove","remove","dataset","dragSuppressClick","setTimeout","deltaX","clientX","deltaY","clientY","hypot","nextPosition","addEventListener","button","target","closest","setPointerCapture","preventDefault","clampedPanel","clampedToggle","handleDragOver","sessionDocumentsEnabled","stopPropagation","inputArea","handleDragLeave","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","_this2","_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","_this3","_callee2","removeError","_t2","_context2","removeDocumentUrl","headers","itemId","documentId","splice","status","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","self","closeButtons","querySelectorAll","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","querySelector","div","fallbackMessage","startsWith","title","detail","normalizeAssistantAppearance","appearance","label","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this4","_callee3","_t3","_context3","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forEach","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","sendMessage","stopRecording","_attemptedSessionRecovery","removeItem","startNewSession","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","onclose","addMessageInternal","_this5","fireEvent","CustomEvent","_this6","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","_this7","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","conversationButtonElement","isIndicator","trimmedPrompt","streamMessage","startRecording","_this8","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","_this9","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_i4","_Object$entries3","_Object$entries3$_i","_this9$stream","processReferences","streamingFinished","synthesizeSpeech","_this9$stream2","getServiceDownMessage","_this0","_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","_this1","buttons","buttonIndex","isPlaying","iconHtml","cacheIndex","_this10","_ttsCacheIndex","invoke","toggleMessageTts","_this11","playAudioBlob","_this12","totalLength","sum","combined","offset","_iterator8","_step8","set","blob","Blob","_this13","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this14","nextBlob","shift","conversationModeOnAudioEnded","_this15","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this16","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","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","toLowerCase","location","origin","searchParams","originalLength","removedCount","_this17","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this18","timerId","clearTimeout","dismissNotification","handleNotificationAction","actionName","_this19","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","sessionRating","initializeApp","_this20","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","initializeWidget","_this21","ResizeObserver","observe","dragHandle","copyResponse","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","watch","handler","deep","active","mounted","_this22","_callee6","_context6","beforeUnmount","template","mount","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 // 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 app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n chatWidgetStateName: null,\n chatWidgetStateSession: null,\n chatWidgetLayoutKey: null,\n chatHistorySection: null,\n widgetContainerElement: null,\n widgetToggleButtonElement: null,\n widgetResetSizeButtonElement: null,\n widgetResizeObserver: null,\n widgetViewportResizeHandler: null,\n widgetDefaultWidth: null,\n widgetDefaultHeight: null,\n widgetIsInitialized: false,\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 getStoredWidgetLayout() {\n if (!this.chatWidgetLayoutKey || !config.widget.persistLayout) {\n return {};\n }\n\n try {\n var storedLayout = localStorage.getItem(this.chatWidgetLayoutKey);\n return storedLayout ? JSON.parse(storedLayout) || {} : {};\n } catch (error) {\n console.warn('Failed to read widget layout state.', error);\n return {};\n }\n },\n saveStoredWidgetLayout(partialLayout) {\n if (!this.chatWidgetLayoutKey || !config.widget.persistLayout) {\n return;\n }\n\n var currentLayout = this.getStoredWidgetLayout();\n var nextLayout = Object.assign({}, currentLayout);\n\n if (partialLayout.panel !== undefined) {\n nextLayout.panel = Object.assign({}, currentLayout.panel || {}, partialLayout.panel || {});\n }\n\n if (partialLayout.position !== undefined) {\n nextLayout.position = Object.assign({}, currentLayout.position || {}, partialLayout.position || {});\n }\n\n localStorage.setItem(this.chatWidgetLayoutKey, JSON.stringify(nextLayout));\n },\n getElementSize(element, fallbackWidth, fallbackHeight) {\n if (!element) {\n return {\n width: fallbackWidth || 0,\n height: fallbackHeight || 0\n };\n }\n\n var rect = element.getBoundingClientRect();\n var computed = window.getComputedStyle(element);\n\n return {\n width: Math.round(rect.width || parsePixelValue(computed.width) || fallbackWidth || 0),\n height: Math.round(rect.height || parsePixelValue(computed.height) || fallbackHeight || 0)\n };\n },\n getElementPosition(element) {\n if (!element) {\n return {\n left: 0,\n top: 0\n };\n }\n\n var rect = element.getBoundingClientRect();\n var computed = window.getComputedStyle(element);\n var inlineLeft = parsePixelValue(element.style.left);\n var inlineTop = parsePixelValue(element.style.top);\n var computedLeft = parsePixelValue(computed.left);\n var computedTop = parsePixelValue(computed.top);\n var isHidden = computed.display === 'none';\n\n return {\n left: Math.round(\n isHidden && Number.isFinite(inlineLeft)\n ? inlineLeft\n : rect.left || inlineLeft || computedLeft || 0),\n top: Math.round(\n isHidden && Number.isFinite(inlineTop)\n ? inlineTop\n : rect.top || inlineTop || computedTop || 0)\n };\n },\n clampWidgetPosition(left, top, width, height) {\n var viewportPadding = 8;\n var maxLeft = Math.max(viewportPadding, window.innerWidth - width - viewportPadding);\n var maxTop = Math.max(viewportPadding, window.innerHeight - height - viewportPadding);\n\n return {\n left: Math.round(clamp(left, viewportPadding, maxLeft)),\n top: Math.round(clamp(top, viewportPadding, maxTop))\n };\n },\n applyAbsolutePosition(element, left, top) {\n if (!element) {\n return;\n }\n\n element.style.left = left + 'px';\n element.style.top = top + 'px';\n element.style.right = 'auto';\n element.style.bottom = 'auto';\n },\n getWidgetDefaultSize() {\n return {\n width: this.widgetDefaultWidth || parsePixelValue(config.widget.defaultWidth) || 380,\n height: this.widgetDefaultHeight || parsePixelValue(config.widget.defaultHeight) || 520\n };\n },\n getWidgetToggleGap() {\n return 8;\n },\n isWidgetPanelVisible() {\n if (!this.widgetContainerElement) {\n return false;\n }\n\n var computed = window.getComputedStyle(this.widgetContainerElement);\n return this.widgetContainerElement.classList.contains('open') && computed.display !== 'none';\n },\n persistWidgetPanelPosition() {\n if (!this.widgetContainerElement || !config.widget.persistLayout) {\n return;\n }\n\n var panelDefaultSize = this.getWidgetDefaultSize();\n var panelPosition = this.getElementPosition(this.widgetContainerElement);\n var panelSize = this.getElementSize(this.widgetContainerElement, panelDefaultSize.width, panelDefaultSize.height);\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n var linkedPosition = this.clampWidgetPosition(\n panelPosition.left + panelSize.width - toggleSize.width,\n panelPosition.top + panelSize.height + this.getWidgetToggleGap(),\n toggleSize.width,\n toggleSize.height);\n\n this.saveStoredWidgetLayout({\n position: {\n left: linkedPosition.left,\n top: linkedPosition.top\n }\n });\n },\n persistWidgetTogglePosition() {\n if (!this.widgetToggleButtonElement || !config.widget.persistLayout) {\n return;\n }\n\n var toggleRect = this.widgetToggleButtonElement.getBoundingClientRect();\n this.saveStoredWidgetLayout({\n position: {\n left: this.getElementPosition(this.widgetToggleButtonElement).left,\n top: this.getElementPosition(this.widgetToggleButtonElement).top\n }\n });\n },\n persistWidgetPanelSize() {\n if (!this.widgetContainerElement || !config.widget.enableResizing || !config.widget.persistLayout) {\n return;\n }\n\n var defaultSize = this.getWidgetDefaultSize();\n var currentSize = this.getElementSize(this.widgetContainerElement, defaultSize.width, defaultSize.height);\n\n this.saveStoredWidgetLayout({\n panel: {\n width: Math.abs(currentSize.width - defaultSize.width) <= 1 ? null : currentSize.width,\n height: Math.abs(currentSize.height - defaultSize.height) <= 1 ? null : currentSize.height\n }\n });\n },\n syncTogglePositionToPanel(persistLayout = true) {\n if (!this.widgetContainerElement || !this.widgetToggleButtonElement) {\n return;\n }\n\n var panelDefaultSize = this.getWidgetDefaultSize();\n var panelSize = this.getElementSize(this.widgetContainerElement, panelDefaultSize.width, panelDefaultSize.height);\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n var panelPosition = this.getElementPosition(this.widgetContainerElement);\n var linkedPosition = this.clampWidgetPosition(\n panelPosition.left + panelSize.width - toggleSize.width,\n panelPosition.top + panelSize.height + this.getWidgetToggleGap(),\n toggleSize.width,\n toggleSize.height);\n\n this.applyAbsolutePosition(this.widgetToggleButtonElement, linkedPosition.left, linkedPosition.top);\n\n if (persistLayout && config.widget.persistLayout) {\n this.persistWidgetTogglePosition();\n }\n },\n syncPanelPositionToToggle(persistLayout = true) {\n if (!this.widgetContainerElement || !this.widgetToggleButtonElement) {\n return;\n }\n\n var panelDefaultSize = this.getWidgetDefaultSize();\n var panelSize = this.getElementSize(this.widgetContainerElement, panelDefaultSize.width, panelDefaultSize.height);\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n var togglePosition = this.getElementPosition(this.widgetToggleButtonElement);\n var linkedPosition = this.clampWidgetPosition(\n togglePosition.left + toggleSize.width - panelSize.width,\n togglePosition.top - panelSize.height - this.getWidgetToggleGap(),\n panelSize.width,\n panelSize.height);\n\n this.applyAbsolutePosition(this.widgetContainerElement, linkedPosition.left, linkedPosition.top);\n\n if (persistLayout && config.widget.persistLayout) {\n this.persistWidgetPanelPosition();\n }\n },\n updateWidgetResetSizeButtonVisibility() {\n if (!this.widgetResetSizeButtonElement) {\n return;\n }\n\n if (!config.widget.enableResizing || !this.widgetContainerElement) {\n this.widgetResetSizeButtonElement.classList.add('d-none');\n return;\n }\n\n var defaultSize = this.getWidgetDefaultSize();\n var currentSize = this.getElementSize(this.widgetContainerElement, defaultSize.width, defaultSize.height);\n var isResized =\n Math.abs(currentSize.width - defaultSize.width) > 1 ||\n Math.abs(currentSize.height - defaultSize.height) > 1 ||\n !!this.widgetContainerElement.style.width ||\n !!this.widgetContainerElement.style.height;\n\n this.widgetResetSizeButtonElement.classList.toggle('d-none', !isResized);\n },\n resetWidgetSize() {\n if (!this.widgetContainerElement || !config.widget.enableResizing) {\n return;\n }\n\n this.widgetContainerElement.style.removeProperty('width');\n this.widgetContainerElement.style.removeProperty('height');\n this.persistWidgetPanelSize();\n this.constrainWidgetElementsToViewport();\n this.updateWidgetResetSizeButtonVisibility();\n },\n restoreWidgetLayout() {\n var storedLayout = this.getStoredWidgetLayout();\n\n if (this.widgetContainerElement && config.widget.enableResizing) {\n if (Number.isFinite(storedLayout.panel && storedLayout.panel.width)) {\n this.widgetContainerElement.style.width = storedLayout.panel.width + 'px';\n } else {\n this.widgetContainerElement.style.removeProperty('width');\n }\n\n if (Number.isFinite(storedLayout.panel && storedLayout.panel.height)) {\n this.widgetContainerElement.style.height = storedLayout.panel.height + 'px';\n } else {\n this.widgetContainerElement.style.removeProperty('height');\n }\n }\n\n if (this.widgetToggleButtonElement && config.widget.enableDragging &&\n Number.isFinite(storedLayout.position && storedLayout.position.left) &&\n Number.isFinite(storedLayout.position && storedLayout.position.top)) {\n this.applyAbsolutePosition(this.widgetToggleButtonElement, storedLayout.position.left, storedLayout.position.top);\n this.syncPanelPositionToToggle(false);\n } else if (this.widgetToggleButtonElement && config.widget.enableDragging &&\n Number.isFinite(storedLayout.toggle && storedLayout.toggle.left) &&\n Number.isFinite(storedLayout.toggle && storedLayout.toggle.top)) {\n this.applyAbsolutePosition(this.widgetToggleButtonElement, storedLayout.toggle.left, storedLayout.toggle.top);\n this.syncPanelPositionToToggle(false);\n } else if (this.widgetContainerElement && config.widget.enableDragging &&\n Number.isFinite(storedLayout.panel && storedLayout.panel.left) &&\n Number.isFinite(storedLayout.panel && storedLayout.panel.top)) {\n this.applyAbsolutePosition(this.widgetContainerElement, storedLayout.panel.left, storedLayout.panel.top);\n this.syncTogglePositionToPanel(false);\n }\n\n this.constrainWidgetElementsToViewport();\n this.updateWidgetResetSizeButtonVisibility();\n },\n attachDraggableWidgetElement(element, handle, layoutKey, suppressClickOnDrag) {\n if (!element || !handle || !config.widget.enableDragging) {\n return;\n }\n\n var activePointerId = null;\n var startX = 0;\n var startY = 0;\n var startLeft = 0;\n var startTop = 0;\n var dragged = false;\n var dragThreshold = 4;\n var interactiveSelector = 'button, a, input, textarea, select, option, label';\n\n var stopDragging = (event) => {\n if (activePointerId === null) {\n return;\n }\n\n if (event && event.pointerId !== undefined && event.pointerId !== activePointerId) {\n return;\n }\n\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', stopDragging);\n document.removeEventListener('pointercancel', stopDragging);\n element.classList.remove('ai-chat-widget-dragging');\n activePointerId = null;\n\n if (!dragged) {\n return;\n }\n\n if (layoutKey === 'panel') {\n this.syncTogglePositionToPanel(false);\n this.persistWidgetPanelPosition();\n } else if (layoutKey === 'toggle') {\n this.syncPanelPositionToToggle(false);\n this.persistWidgetTogglePosition();\n }\n\n if (config.widget.persistLayout) {\n this.persistWidgetPanelPosition();\n this.persistWidgetTogglePosition();\n }\n\n if (suppressClickOnDrag) {\n element.dataset.dragSuppressClick = 'true';\n window.setTimeout(() => {\n if (element.dataset.dragSuppressClick === 'true') {\n element.dataset.dragSuppressClick = 'false';\n }\n }, 0);\n }\n };\n\n var onPointerMove = (event) => {\n if (activePointerId === null || event.pointerId !== activePointerId) {\n return;\n }\n\n var deltaX = event.clientX - startX;\n var deltaY = event.clientY - startY;\n\n if (!dragged && Math.hypot(deltaX, deltaY) < dragThreshold) {\n return;\n }\n\n dragged = true;\n\n var defaultSize = this.getWidgetDefaultSize();\n var currentSize = this.getElementSize(\n element,\n layoutKey === 'panel' ? defaultSize.width : 52,\n layoutKey === 'panel' ? defaultSize.height : 52);\n var nextPosition = this.clampWidgetPosition(\n startLeft + deltaX,\n startTop + deltaY,\n currentSize.width,\n currentSize.height);\n\n this.applyAbsolutePosition(element, nextPosition.left, nextPosition.top);\n\n if (layoutKey === 'panel') {\n this.syncTogglePositionToPanel(false);\n } else if (layoutKey === 'toggle') {\n this.syncPanelPositionToToggle(false);\n }\n };\n\n handle.addEventListener('pointerdown', (event) => {\n if (event.button !== 0) {\n return;\n }\n\n if (layoutKey === 'panel' && event.target.closest(interactiveSelector)) {\n return;\n }\n\n var rect = element.getBoundingClientRect();\n startX = event.clientX;\n startY = event.clientY;\n startLeft = rect.left;\n startTop = rect.top;\n dragged = false;\n activePointerId = event.pointerId;\n element.classList.add('ai-chat-widget-dragging');\n\n if (handle.setPointerCapture) {\n handle.setPointerCapture(event.pointerId);\n }\n\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', stopDragging);\n document.addEventListener('pointercancel', stopDragging);\n event.preventDefault();\n });\n },\n constrainWidgetElementsToViewport() {\n if (this.widgetContainerElement && this.widgetContainerElement.style.left && this.isWidgetPanelVisible()) {\n var panelDefaultSize = this.getWidgetDefaultSize();\n var panelSize = this.getElementSize(this.widgetContainerElement, panelDefaultSize.width, panelDefaultSize.height);\n var panelPosition = this.getElementPosition(this.widgetContainerElement);\n var clampedPanel = this.clampWidgetPosition(panelPosition.left, panelPosition.top, panelSize.width, panelSize.height);\n\n this.applyAbsolutePosition(this.widgetContainerElement, clampedPanel.left, clampedPanel.top);\n this.syncTogglePositionToPanel(false);\n\n if (config.widget.persistLayout) {\n this.persistWidgetPanelPosition();\n this.persistWidgetTogglePosition();\n }\n } else if (this.widgetToggleButtonElement && this.widgetToggleButtonElement.style.left) {\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n var togglePosition = this.getElementPosition(this.widgetToggleButtonElement);\n var clampedToggle = this.clampWidgetPosition(togglePosition.left, togglePosition.top, toggleSize.width, toggleSize.height);\n\n this.applyAbsolutePosition(this.widgetToggleButtonElement, clampedToggle.left, clampedToggle.top);\n this.syncPanelPositionToToggle(false);\n\n if (config.widget.persistLayout) {\n this.persistWidgetTogglePosition();\n this.persistWidgetPanelPosition();\n }\n }\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\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 this is a widget with a stale cached session (e.g., profile was deleted),\n // clear the cached session and start fresh with the current profile.\n if (this.widgetIsInitialized && !this.isSessionStarted && !this._attemptedSessionRecovery) {\n this._attemptedSessionRecovery = true;\n localStorage.removeItem(this.chatWidgetStateSession);\n this.startNewSession();\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, 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, '&').replace(/</g, '<').replace(/>/g, '>');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\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 if (this.widgetIsInitialized) {\n localStorage.removeItem(this.chatWidgetStateSession);\n }\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 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 (this.widgetIsInitialized) {\n localStorage.setItem(this.chatWidgetStateSession, sessionId);\n }\n },\n initializeWidget() {\n\n if (!config.widget.chatWidgetContainer) {\n console.error('The widget chatWidgetContainer is required.');\n return;\n }\n\n if (!config.widget.chatWidgetStateName) {\n console.error('The widget chatWidgetStateName is required.');\n return;\n }\n\n const chatWidgetContainer = document.querySelector(config.widget.chatWidgetContainer);\n\n if (!chatWidgetContainer) {\n return;\n }\n\n if (config.widget.chatHistorySection) {\n this.chatHistorySection = document.querySelector(config.widget.chatHistorySection);\n }\n\n this.chatWidgetStateName = config.widget.chatWidgetStateName;\n this.chatWidgetStateSession = config.widget.chatWidgetStateName + 'Session';\n this.chatWidgetLayoutKey = config.widget.chatWidgetStateName + 'Layout';\n this.widgetContainerElement = chatWidgetContainer;\n this.widgetToggleButtonElement = config.widget.toggleButtonSelector\n ? document.querySelector(config.widget.toggleButtonSelector)\n : null;\n this.widgetResetSizeButtonElement = config.widget.resetSizeButtonSelector\n ? document.querySelector(config.widget.resetSizeButtonSelector)\n : null;\n this.widgetDefaultWidth = parsePixelValue(config.widget.defaultWidth) ||\n parsePixelValue(window.getComputedStyle(chatWidgetContainer).width) ||\n 380;\n this.widgetDefaultHeight = parsePixelValue(config.widget.defaultHeight) ||\n parsePixelValue(window.getComputedStyle(chatWidgetContainer).height) ||\n 520;\n this.widgetIsInitialized = true;\n\n if (config.widget.enableResizing) {\n chatWidgetContainer.classList.add('ai-chat-widget-resizable');\n chatWidgetContainer.style.minWidth = (parsePixelValue(config.widget.minWidth) || 320) + 'px';\n chatWidgetContainer.style.minHeight = (parsePixelValue(config.widget.minHeight) || 420) + 'px';\n\n if (typeof ResizeObserver !== 'undefined') {\n this.widgetResizeObserver = new ResizeObserver(() => {\n this.persistWidgetPanelSize();\n this.constrainWidgetElementsToViewport();\n this.updateWidgetResetSizeButtonVisibility();\n });\n\n this.widgetResizeObserver.observe(chatWidgetContainer);\n }\n }\n\n var dragHandleSelector = config.widget.dragHandleSelector || '.ai-chat-widget-header';\n var dragHandle = chatWidgetContainer.querySelector(dragHandleSelector);\n\n if (config.widget.enableDragging && dragHandle) {\n dragHandle.classList.add('ai-chat-widget-drag-handle');\n chatWidgetContainer.classList.add('ai-chat-widget-draggable');\n this.attachDraggableWidgetElement(chatWidgetContainer, dragHandle, 'panel', false);\n }\n\n if (config.widget.enableDragging && this.widgetToggleButtonElement) {\n this.widgetToggleButtonElement.classList.add('ai-chat-widget-draggable');\n this.attachDraggableWidgetElement(this.widgetToggleButtonElement, this.widgetToggleButtonElement, 'toggle', true);\n }\n\n if (this.widgetResetSizeButtonElement) {\n this.widgetResetSizeButtonElement.addEventListener('click', (event) => {\n event.preventDefault();\n this.resetWidgetSize();\n });\n }\n\n this.restoreWidgetLayout();\n\n if (!this.widgetViewportResizeHandler) {\n this.widgetViewportResizeHandler = () => {\n this.constrainWidgetElementsToViewport();\n this.updateWidgetResetSizeButtonVisibility();\n };\n\n window.addEventListener('resize', this.widgetViewportResizeHandler);\n }\n\n // Auto-load the last session so the user always sees previous chat history.\n this.reloadCurrentSession();\n\n if (config.autoCreateSession && !this.getSessionId()) {\n this.startNewSession();\n }\n\n if (config.widget.showHistoryButton && this.chatHistorySection) {\n\n const showHistoryButton = document.querySelector(config.widget.showHistoryButton);\n\n if (showHistoryButton) {\n showHistoryButton.addEventListener('click', () => {\n this.chatHistorySection.classList.toggle('show');\n });\n }\n\n if (config.widget.closeHistoryButton) {\n var closeHistoryButton = document.querySelector(config.widget.closeHistoryButton);\n\n if (closeHistoryButton) {\n closeHistoryButton.addEventListener('click', () => {\n this.showChatScreen();\n });\n }\n }\n }\n\n if (config.widget.newChatButton) {\n const newChatButton = document.querySelector(config.widget.newChatButton);\n\n if (newChatButton) {\n newChatButton.addEventListener('click', () => {\n this.resetSession();\n this.showChatScreen();\n });\n }\n }\n },\n showChatScreen() {\n\n if (!this.chatHistorySection) {\n return;\n }\n\n this.chatHistorySection.classList.remove('show');\n },\n getSessionId() {\n let sessionId = this.inputElement.getAttribute('data-session-id');\n\n if (!sessionId && this.widgetIsInitialized) {\n sessionId = localStorage.getItem(this.chatWidgetStateSession);\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() { this.renderDocumentBar(); },\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) {\n this.initializeWidget();\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 template: config.messageTemplate\n }).mount(config.appElementSelector);\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","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","coreAIChatManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","copiedTitle","codeCopiedText","copyResetDelayMs","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","_normalized$isGenerat","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isGenerated","IsGenerated","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","getCitationLabel","buildCitationDisplay","content","processedContent","messageReferences","referenceEntries","citations","citedRefs","filter","_ref6","_ref7","includes","generatedRefs","_ref8","_ref9","sort","_ref0","_ref1","_ref10","_ref11","b","_ref12","_ref13","_ref14","_ref15","displayIndex","_iterator","_step","_step$value","placeholder","concat","replaceAll","referenceKey","label","isDownload","err","_i2","_citations","citation","_iterator2","_step2","_step2$value","map","_ref16","_excluded","buildCopyContent","copyContent","_iterator3","_step3","_iterator4","_step4","trimEnd","updateMessagePresentation","message","rawContent","citationDisplay","displayContent","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","data","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","charts","requestAnimationFrame","_iterator5","_step5","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","keys","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","compactObject","source","fromEntries","_ref17","_ref18","initialize","instanceConfig","normalizedInstanceConfig","normalizedWidgetConfig","hasWidgetConfig","widgetBehavior","coreAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","copiedMessageIndex","copyResetTimeoutId","activeCopyButton","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","div","fallbackMessage","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","sendMessage","stopRecording","handleReceiveError","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","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","_message$rawContent","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","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this8$stream","processReferences","streamingFinished","synthesizeSpeech","_this8$stream2","getServiceDownMessage","_this9","_ref23","_message$rawContent2","stopIcon","setAttribute","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this0","buttons","button","buttonIndex","isPlaying","toggle","updateCopyButtons","_this1","isCopied","iconHtml","setCopyButtonState","cacheIndex","_this10","_ttsCacheIndex","invoke","toggleMessageTts","_this11","playAudioBlob","_this12","totalLength","sum","combined","offset","_iterator6","_step6","set","blob","Blob","_this13","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this14","nextBlob","shift","conversationModeOnAudioEnded","_this15","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this16","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","location","origin","searchParams","originalLength","removedCount","_this17","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this18","setTimeout","timerId","clearTimeout","dismissNotification","handleNotificationAction","actionName","_this19","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","rejectPendingSessionRequest","sessionRating","onSessionReset","requestNewSession","_this20","_callee9","_context9","_this21","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this22","placeholderElementSelector","loadSession","documentBarSelector","className","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","initialMessages","btn","block","codeEl","clipboard","writeText","copiedText","micButtonElementSelector","conversationButtonElementSelector","force","onSessionInitialized","resolveSessionId","clearCopiedMessageState","copyResponse","_ref25","_message$copyContent","_event$target","_event$target$closest","_this23","currentTarget","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","_this24","active","mounted","_this25","_callee0","isInitialized","_context0","onMounted","fontAwesomeObserver","beforeUnmount","disconnect","onBeforeUnmount","template","app","Vue","createApp","mount","attach","autoInitializeSelector","getAttributeValue","attributeName","parseBooleanAttributeValue","parseJsonAttribute","description","rawValue","buildConfigFromDataAttributes","_parseJsonAttribute","_parseJsonAttribute2","settings","hasAttribute","allowWidgetHost","booleanAttributes","buildConfigFromElement","jsonConfig","attributeConfig","initializeFromElement","dataset","coreAiChatInitialized","__coreAIChatApp","scanForAutoInitialization","startAutoInitialization","readyState","once","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["window.coreAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n copiedTitle: 'Response copied to clipboard.',\n codeCopiedText: 'Copied!',\n copyResetDelayMs: 2000,\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-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)\"><i :class=\"getAssistantIcon(message)\"></i></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 <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button type=\"button\" class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <i class=\"fa-regular fa-thumbs-up\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <i class=\"fa-regular fa-thumbs-down\"></i>\n </button>\n </span>\n </template>\n <button type=\"button\" v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link p-0 button-message-toolbox ai-response-copy-btn\" :class=\"copiedMessageIndex === index ? 'text-success' : 'text-secondary'\" :data-copy-message-index=\"index\" @click=\"copyResponse(message, index, $event)\" :title=\"copiedMessageIndex === index ? copiedTitle : copyTitle\">\n <i :class=\"copiedMessageIndex === index ? 'fa-solid fa-check' : 'fa-solid fa-copy'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button type=\"button\" v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button type=\"button\" v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n 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 containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n normalized.isGenerated = (normalized.isGenerated ?? normalized.IsGenerated) === true;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n function buildCitationDisplay(content, references) {\n let processedContent = (content || '').trim();\n const messageReferences = normalizeReferences(references);\n const referenceEntries = Object.entries(messageReferences);\n\n if (!referenceEntries.length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = referenceEntries.filter(([key]) => processedContent.includes(key));\n const generatedRefs = referenceEntries.filter(([key, value]) => value.isGenerated && !processedContent.includes(key));\n\n if (!citedRefs.length && !generatedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n generatedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${displayIndex}_${value.index || displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: isDownloadCitationReference(value),\n placeholder: placeholder,\n });\n\n displayIndex++;\n }\n\n for (const citation of citations) {\n processedContent = processedContent.replaceAll(citation.placeholder, `<sup>${citation.displayIndex}</sup>`);\n }\n\n processedContent = processedContent.replaceAll('</sup><sup>', '</sup><sup>,</sup><sup>');\n\n // Generated files (such as exported tabular data) are always offered as a download even when\n // the model does not cite them inline, so the user never loses access to the produced file.\n for (const [key, value] of generatedRefs) {\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: true,\n placeholder: null,\n });\n\n displayIndex++;\n }\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n for (const citation of citations) {\n copyContent = copyContent.replaceAll(citation.referenceKey, `[${citation.displayIndex}]`);\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n const citationDisplay = buildCitationDisplay(rawContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n message.copyContent = buildCopyContent(rawContent, citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n 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 <i class=\"fa-solid fa-download\"></i>\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 + `<i class=\"fa-solid fa-download\"></i> ${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 function compactObject(source) {\n if (!source || typeof source !== 'object') {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(source).filter(([, value]) => value !== undefined)\n );\n }\n\n const initialize = (instanceConfig) => {\n const normalizedInstanceConfig = compactObject(instanceConfig);\n const normalizedWidgetConfig = compactObject(normalizedInstanceConfig.widget);\n const config = Object.assign({}, defaultConfig, normalizedInstanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, normalizedWidgetConfig);\n const hasWidgetConfig = !!(normalizedWidgetConfig.chatWidgetContainer && normalizedWidgetConfig.chatWidgetStateName);\n const widgetBehavior = window.coreAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n copiedTitle: config.copiedTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n copiedMessageIndex: -1,\n copyResetTimeoutId: null,\n activeCopyButton: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var 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 += '<i class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n 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 += '<i class=\"fa-solid fa-circle-exclamation\" style=\"font-size: 0.7rem;\"></i> ';\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 += '<i class=\"fa-solid fa-paperclip\"></i>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n 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, '&').replace(/</g, '<').replace(/>/g, '>');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, 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, '&').replace(/</g, '<').replace(/>/g, '>');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n }\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(\"addingCoreAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedCoreAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n 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 = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n 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 message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\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\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n });\n },\n updateCopyButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-copy-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-copy-message-index'));\n var isCopied = buttonIndex === this.copiedMessageIndex;\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n setCopyButtonState(button, isCopied) {\n if (!button) {\n return;\n }\n\n var iconHtml = isCopied\n ? '<i class=\"fa-solid fa-check\"></i>'\n : '<i class=\"fa-solid fa-copy\"></i>';\n\n button.classList.toggle('text-success', isCopied);\n button.classList.toggle('text-secondary', !isCopied);\n button.setAttribute('title', isCopied ? this.copiedTitle : this.copyTitle);\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.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 const initialMessages = Array.isArray(config.messages) ? config.messages : [];\n\n for (let i = 0; i < initialMessages.length; i++) {\n this.addMessage(initialMessages[i]);\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\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(\"initializingSessionCoreAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n clearCopiedMessageState() {\n if (this.copyResetTimeoutId) {\n window.clearTimeout(this.copyResetTimeoutId);\n this.copyResetTimeoutId = null;\n }\n\n if (this.activeCopyButton) {\n this.setCopyButtonState(this.activeCopyButton, false);\n this.activeCopyButton = null;\n }\n\n this.copiedMessageIndex = -1;\n },\n copyResponse(message, index, event) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n const button = event?.currentTarget || event?.target?.closest?.('[data-copy-message-index]') || null;\n\n navigator.clipboard.writeText(text)\n .then(() => {\n this.clearCopiedMessageState();\n this.copiedMessageIndex = typeof index === 'number' ? index : -1;\n this.activeCopyButton = button;\n\n if (button) {\n this.setCopyButtonState(button, true);\n } else {\n this.$nextTick(() => this.updateCopyButtons());\n }\n\n this.copyResetTimeoutId = window.setTimeout(() => {\n this.clearCopiedMessageState();\n this.$nextTick(() => this.updateCopyButtons());\n }, Number(config.copyResetDelayMs) || 2000);\n })\n .catch(err => console.error('Failed to copy response:', err));\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n copiedMessageIndex() {\n this.$nextTick(() => this.updateCopyButtons());\n },\n isConversationMode(active) {\n // Hide/show mic button.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // Hide/show send button.\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n // Disable/enable textarea.\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n\n this.$nextTick(() => {\n this.updateCopyButtons();\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.clearCopiedMessageState();\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n const autoInitializeSelector = '[data-coreai-chat-config],[data-coreai-chat-app-element-selector]';\n\n function getAttributeValue(element, attributeName) {\n const value = element.getAttribute(attributeName);\n return value === null || value === '' ? null : value;\n }\n\n function parseBooleanAttributeValue(value) {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n const normalized = String(value).trim().toLowerCase();\n if (normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n\n return null;\n }\n\n function parseJsonAttribute(element, attributeName, description) {\n const rawValue = getAttributeValue(element, attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n console.error('Failed to parse ' + description + ' JSON.', error);\n return null;\n }\n }\n\n function buildConfigFromDataAttributes(element, options) {\n const settings = options || {};\n\n if (element.hasAttribute('data-coreai-chat-widget-container-selector') && settings.allowWidgetHost !== true) {\n return null;\n }\n\n const appElementSelector = getAttributeValue(element, 'data-coreai-chat-app-element-selector');\n if (!appElementSelector) {\n return null;\n }\n\n const config = {\n signalRHubUrl: getAttributeValue(element, 'data-coreai-chat-signalr-hub-url'),\n appElementSelector: appElementSelector,\n chatContainerElementSelector: getAttributeValue(element, 'data-coreai-chat-container-element-selector'),\n inputElementSelector: getAttributeValue(element, 'data-coreai-chat-input-element-selector'),\n sendButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-send-button-element-selector'),\n placeholderElementSelector: getAttributeValue(element, 'data-coreai-chat-placeholder-element-selector'),\n messages: parseJsonAttribute(element, 'data-coreai-chat-messages', 'CoreAI chat messages') ?? undefined,\n chatMode: getAttributeValue(element, 'data-coreai-chat-mode'),\n micButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-mic-button-element-selector'),\n conversationButtonElementSelector: getAttributeValue(element, 'data-coreai-chat-conversation-button-element-selector'),\n ttsVoiceName: getAttributeValue(element, 'data-coreai-chat-tts-voice-name'),\n documentBarSelector: getAttributeValue(element, 'data-coreai-chat-document-bar-selector'),\n uploadDocumentUrl: getAttributeValue(element, 'data-coreai-chat-upload-document-url'),\n removeDocumentUrl: getAttributeValue(element, 'data-coreai-chat-remove-document-url'),\n allowedExtensions: getAttributeValue(element, 'data-coreai-chat-allowed-extensions'),\n supportedExtensionsText: getAttributeValue(element, 'data-coreai-chat-supported-extensions-text'),\n existingDocuments: parseJsonAttribute(element, 'data-coreai-chat-existing-documents', 'CoreAI chat existing documents') ?? undefined,\n initialPrompt: getAttributeValue(element, 'data-coreai-chat-initial-prompt'),\n userLabel: getAttributeValue(element, 'data-coreai-chat-user-label'),\n assistantLabel: getAttributeValue(element, 'data-coreai-chat-assistant-label'),\n copyTitle: getAttributeValue(element, 'data-coreai-chat-copy-title'),\n copiedTitle: getAttributeValue(element, 'data-coreai-chat-copied-title'),\n };\n\n const booleanAttributes = {\n metricsEnabled: 'data-coreai-chat-metrics-enabled',\n textToSpeechEnabled: 'data-coreai-chat-text-to-speech-enabled',\n sessionDocumentsEnabled: 'data-coreai-chat-session-documents-enabled',\n autoCreateSession: 'data-coreai-chat-auto-create-session',\n singleResponseMode: 'data-coreai-chat-single-response-mode',\n };\n\n Object.keys(booleanAttributes).forEach(key => {\n const parsed = parseBooleanAttributeValue(getAttributeValue(element, booleanAttributes[key]));\n if (parsed !== null) {\n config[key] = parsed;\n }\n });\n\n return compactObject(config);\n }\n\n function buildConfigFromElement(element, options) {\n const jsonConfig = parseJsonAttribute(element, 'data-coreai-chat-config', 'CoreAI chat config');\n const attributeConfig = buildConfigFromDataAttributes(element, options);\n\n if (!jsonConfig && !attributeConfig) {\n return null;\n }\n\n return Object.assign({}, jsonConfig || {}, attributeConfig || {});\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.coreAiChatInitialized === 'true') {\n return element ? element.__coreAIChatApp || null : null;\n }\n\n const config = buildConfigFromElement(element);\n if (!config) {\n return null;\n }\n\n const app = initialize(config);\n if (!app) {\n return null;\n }\n\n element.dataset.coreAiChatInitialized = 'true';\n element.__coreAIChatApp = app;\n\n return app;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches(autoInitializeSelector)) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll(autoInitializeSelector).forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n\n return {\n initialize: initialize,\n initializeFromElement: initializeFromElement,\n buildConfigFromElement: buildConfigFromElement,\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
|