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

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ai-chat-widget.js"],"names":["window","openAIChatWidgetBehavior","parsePixelValue","value","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","attach","app","config","__aiChatWidgetAttached","chatWidgetStateName","chatWidgetStateSession","chatWidgetStateDocuments","chatWidgetLayoutKey","chatHistorySection","widgetContainerElement","widgetToggleButtonElement","widgetResetSizeButtonElement","widgetResizeObserver","widgetViewportResizeHandler","widgetDefaultWidth","widgetDefaultHeight","widgetIsInitialized","getStoredWidgetLayout","widget","persistLayout","storedLayout","localStorage","getItem","JSON","parse","error","console","warn","saveStoredWidgetLayout","partialLayout","currentLayout","nextLayout","Object","assign","panel","undefined","position","setItem","stringify","getElementSize","element","fallbackWidth","fallbackHeight","width","height","rect","getBoundingClientRect","computed","getComputedStyle","round","getElementPosition","left","top","inlineLeft","style","inlineTop","computedLeft","computedTop","isHidden","display","getAvailableWidgetPositionRange","viewportPadding","padding","maxLeft","innerWidth","maxTop","innerHeight","createStoredPosition","range","leftSpan","topSpan","leftRatio","topRatio","resolveStoredPosition","storedPosition","clampWidgetPosition","getStoredWidgetDocuments","storedDocuments","parsedDocuments","Array","isArray","saveStoredWidgetDocuments","documents","clearStoredWidgetDocuments","removeItem","applyAbsolutePosition","right","bottom","getWidgetDefaultSize","defaultWidth","defaultHeight","getWidgetToggleGap","isWidgetPanelVisible","classList","contains","persistWidgetPanelPosition","panelDefaultSize","panelPosition","panelSize","toggleSize","linkedPosition","persistWidgetTogglePosition","togglePosition","persistWidgetPanelSize","enableResizing","defaultSize","currentSize","abs","syncTogglePositionToPanel","syncPanelPositionToToggle","updateWidgetResetSizeButtonVisibility","add","isResized","toggle","resetWidgetSize","removeProperty","constrainWidgetElementsToViewport","restoreWidgetLayout","storedTogglePosition","enableDragging","attachDraggableWidgetElement","handle","layoutKey","suppressClickOnDrag","activePointerId","startX","startY","startLeft","startTop","dragged","dragThreshold","interactiveSelector","self","stopDragging","event","pointerId","document","removeEventListener","onPointerMove","remove","dataset","dragSuppressClick","setTimeout","deltaX","clientX","deltaY","clientY","hypot","nextPosition","addEventListener","button","target","closest","setPointerCapture","preventDefault","clampedPanel","clampedToggle","showChatScreen","initialize","chatWidgetContainer","querySelector","toggleButtonSelector","resetSizeButtonSelector","minWidth","minHeight","ResizeObserver","observe","dragHandleSelector","dragHandle","reloadCurrentSession","autoCreateSession","getSessionId","startNewSession","showHistoryButton","closeHistoryButton","newChatButton","resetSession","resolveSessionId","onSessionInitialized","sessionId","onSessionReset","onDocumentsChanged","handleReceiveError","isSessionStarted","_attemptedSessionRecovery","dispose","disconnect","onMounted","onBeforeUnmount","openAIChatWidgetManager","options","chatConfig","configElementSelector","configElement","getAttribute","messageTemplateSelector","messageTemplate","innerHTML","indicatorTemplateSelector","indicatorTemplate","shell","shellSelector","widgetContainer","widgetContainerSelector","toggleButton","closeButton","closeButtonSelector","profileInput","inputSelector","widgetStateName","widgetOpenStateKey","widgetLayoutKey","openStateValue","closedStateValue","profile","id","setAttribute","layout","panelLayout","toggleLeft","toggleTop","isOpen","deferReveal","initialOpen","panelWidth","panelHeight","toggleGap","openIconHtml","closedIconHtml","visibility","widgetApp","openAIChatManager","applySessionProfilePatch","crestAppsAIChat","patchSessionProfileSync","revealShell","syncOpenPanelPosition","updateTtsPlaybackButtons","buttons","querySelectorAll","forEach","buttonIndex","isPlaying","ttsPlayingMessageIndex","iconHtml","replaceChildren","DOMPurify","sanitize","RETURN_DOM_FRAGMENT","queueTtsPlaybackButtonUpdate","requestAnimationFrame","revealShellWhenStable","hasRevealed","resizeObserver","finalizeReveal","lastWidth","lastHeight","stablePasses","entries","entry","contentRect","setWidgetOpen","isCurrentlyOpen","renderPendingCharts","$watch"],"mappings":"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","file":"ai-chat-widget.js","sourcesContent":["window.openAIChatWidgetBehavior = window.openAIChatWidgetBehavior || function () {\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 attach(app, config) {\n if (!app || app.__aiChatWidgetAttached) {\n return;\n }\n\n app.__aiChatWidgetAttached = true;\n app.chatWidgetStateName = null;\n app.chatWidgetStateSession = null;\n app.chatWidgetStateDocuments = null;\n app.chatWidgetLayoutKey = null;\n app.chatHistorySection = null;\n app.widgetContainerElement = null;\n app.widgetToggleButtonElement = null;\n app.widgetResetSizeButtonElement = null;\n app.widgetResizeObserver = null;\n app.widgetViewportResizeHandler = null;\n app.widgetDefaultWidth = null;\n app.widgetDefaultHeight = null;\n app.widgetIsInitialized = false;\n\n app.getStoredWidgetLayout = function () {\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 }\n catch (error) {\n console.warn('Failed to read widget layout state.', error);\n return {};\n }\n };\n\n app.saveStoredWidgetLayout = function (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\n app.getElementSize = function (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\n app.getElementPosition = function (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(isHidden && Number.isFinite(inlineLeft) ? inlineLeft : rect.left || inlineLeft || computedLeft || 0),\n top: Math.round(isHidden && Number.isFinite(inlineTop) ? inlineTop : rect.top || inlineTop || computedTop || 0)\n };\n };\n \n app.getAvailableWidgetPositionRange = function (width, height) {\n var viewportPadding = 8;\n return {\n padding: viewportPadding,\n maxLeft: Math.max(viewportPadding, window.innerWidth - width - viewportPadding),\n maxTop: Math.max(viewportPadding, window.innerHeight - height - viewportPadding)\n };\n };\n \n app.createStoredPosition = function (left, top, width, height) {\n var range = this.getAvailableWidgetPositionRange(width, height);\n var leftSpan = Math.max(0, range.maxLeft - range.padding);\n var topSpan = Math.max(0, range.maxTop - range.padding);\n \n return {\n left: Math.round(left),\n top: Math.round(top),\n leftRatio: leftSpan === 0 ? 0 : (left - range.padding) / leftSpan,\n topRatio: topSpan === 0 ? 0 : (top - range.padding) / topSpan\n };\n };\n \n app.resolveStoredPosition = function (storedPosition, width, height) {\n if (!storedPosition) {\n return null;\n }\n \n var range = this.getAvailableWidgetPositionRange(width, height);\n var left = Number(storedPosition.left);\n var top = Number(storedPosition.top);\n var leftRatio = Number(storedPosition.leftRatio);\n var topRatio = Number(storedPosition.topRatio);\n \n if (Number.isFinite(leftRatio)) {\n left = range.padding + Math.max(0, range.maxLeft - range.padding) * leftRatio;\n }\n \n if (Number.isFinite(topRatio)) {\n top = range.padding + Math.max(0, range.maxTop - range.padding) * topRatio;\n }\n \n if (!Number.isFinite(left) || !Number.isFinite(top)) {\n return null;\n }\n \n return this.clampWidgetPosition(left, top, width, height);\n };\n\n app.clampWidgetPosition = function (left, top, width, height) {\n var range = this.getAvailableWidgetPositionRange(width, height);\n\n return {\n left: Math.round(clamp(left, range.padding, range.maxLeft)),\n top: Math.round(clamp(top, range.padding, range.maxTop))\n };\n };\n \n app.getStoredWidgetDocuments = function () {\n if (!this.chatWidgetStateDocuments) {\n return [];\n }\n \n try {\n var storedDocuments = localStorage.getItem(this.chatWidgetStateDocuments);\n var parsedDocuments = storedDocuments ? JSON.parse(storedDocuments) : [];\n return Array.isArray(parsedDocuments) ? parsedDocuments : [];\n }\n catch (error) {\n console.warn('Failed to read widget documents state.', error);\n return [];\n }\n };\n \n app.saveStoredWidgetDocuments = function (documents) {\n if (!this.chatWidgetStateDocuments) {\n return;\n }\n \n try {\n localStorage.setItem(this.chatWidgetStateDocuments, JSON.stringify(Array.isArray(documents) ? documents : []));\n }\n catch (error) {\n console.warn('Failed to persist widget documents state.', error);\n }\n };\n \n app.clearStoredWidgetDocuments = function () {\n if (!this.chatWidgetStateDocuments) {\n return;\n }\n \n localStorage.removeItem(this.chatWidgetStateDocuments);\n };\n\n app.applyAbsolutePosition = function (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\n app.getWidgetDefaultSize = function () {\n return {\n width: this.widgetDefaultWidth || parsePixelValue(config.widget.defaultWidth) || 380,\n height: this.widgetDefaultHeight || parsePixelValue(config.widget.defaultHeight) || 520\n };\n };\n\n app.getWidgetToggleGap = function () {\n return 8;\n };\n\n app.isWidgetPanelVisible = function () {\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\n app.persistWidgetPanelPosition = function () {\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({ position: this.createStoredPosition(linkedPosition.left, linkedPosition.top, toggleSize.width, toggleSize.height) });\n };\n\n app.persistWidgetTogglePosition = function () {\n if (!this.widgetToggleButtonElement || !config.widget.persistLayout) {\n return;\n }\n\n var togglePosition = this.getElementPosition(this.widgetToggleButtonElement);\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n this.saveStoredWidgetLayout({ position: this.createStoredPosition(togglePosition.left, togglePosition.top, toggleSize.width, toggleSize.height) });\n };\n\n app.persistWidgetPanelSize = function () {\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\n app.syncTogglePositionToPanel = function (persistLayout) {\n if (persistLayout === undefined) {\n persistLayout = true;\n }\n\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\n app.syncPanelPositionToToggle = function (persistLayout) {\n if (persistLayout === undefined) {\n persistLayout = true;\n }\n\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\n app.updateWidgetResetSizeButtonVisibility = function () {\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\n app.resetWidgetSize = function () {\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\n app.restoreWidgetLayout = function () {\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 }\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 }\n else {\n this.widgetContainerElement.style.removeProperty('height');\n }\n }\n\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n var storedTogglePosition = this.resolveStoredPosition(storedLayout.position, toggleSize.width, toggleSize.height);\n if (this.widgetToggleButtonElement && config.widget.enableDragging && storedTogglePosition) {\n this.applyAbsolutePosition(this.widgetToggleButtonElement, storedTogglePosition.left, storedTogglePosition.top);\n this.syncPanelPositionToToggle(false);\n }\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 }\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\n app.attachDraggableWidgetElement = function (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 var self = this;\n\n function 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 self.syncTogglePositionToPanel(false);\n self.persistWidgetPanelPosition();\n }\n else if (layoutKey === 'toggle') {\n self.syncPanelPositionToToggle(false);\n self.persistWidgetTogglePosition();\n }\n\n if (config.widget.persistLayout) {\n self.persistWidgetPanelPosition();\n self.persistWidgetTogglePosition();\n }\n\n if (suppressClickOnDrag) {\n element.dataset.dragSuppressClick = 'true';\n window.setTimeout(function () {\n if (element.dataset.dragSuppressClick === 'true') {\n element.dataset.dragSuppressClick = 'false';\n }\n }, 0);\n }\n }\n\n function 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 = self.getWidgetDefaultSize();\n var currentSize = self.getElementSize(\n element,\n layoutKey === 'panel' ? defaultSize.width : 52,\n layoutKey === 'panel' ? defaultSize.height : 52);\n var nextPosition = self.clampWidgetPosition(startLeft + deltaX, startTop + deltaY, currentSize.width, currentSize.height);\n\n self.applyAbsolutePosition(element, nextPosition.left, nextPosition.top);\n\n if (layoutKey === 'panel') {\n self.syncTogglePositionToPanel(false);\n }\n else if (layoutKey === 'toggle') {\n self.syncPanelPositionToToggle(false);\n }\n }\n\n handle.addEventListener('pointerdown', function (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\n app.constrainWidgetElementsToViewport = function () {\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 }\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\n app.showChatScreen = function () {\n if (!this.chatHistorySection) {\n return;\n }\n\n this.chatHistorySection.classList.remove('show');\n };\n }\n\n function initialize(app, config) {\n if (!app || app.widgetIsInitialized) {\n return;\n }\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 var chatWidgetContainer = document.querySelector(config.widget.chatWidgetContainer);\n if (!chatWidgetContainer) {\n return;\n }\n\n if (config.widget.chatHistorySection) {\n app.chatHistorySection = document.querySelector(config.widget.chatHistorySection);\n }\n\n app.chatWidgetStateName = config.widget.chatWidgetStateName;\n app.chatWidgetStateSession = config.widget.chatWidgetStateName + 'Session';\n app.chatWidgetStateDocuments = config.widget.chatWidgetStateName + 'Documents';\n app.chatWidgetLayoutKey = config.widget.chatWidgetStateName + 'Layout';\n app.widgetContainerElement = chatWidgetContainer;\n app.widgetToggleButtonElement = config.widget.toggleButtonSelector ? document.querySelector(config.widget.toggleButtonSelector) : null;\n app.widgetResetSizeButtonElement = config.widget.resetSizeButtonSelector ? document.querySelector(config.widget.resetSizeButtonSelector) : null;\n app.widgetDefaultWidth = parsePixelValue(config.widget.defaultWidth) || parsePixelValue(window.getComputedStyle(chatWidgetContainer).width) || 380;\n app.widgetDefaultHeight = parsePixelValue(config.widget.defaultHeight) || parsePixelValue(window.getComputedStyle(chatWidgetContainer).height) || 520;\n app.widgetIsInitialized = true;\n app.documents = app.getStoredWidgetDocuments();\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 app.widgetResizeObserver = new ResizeObserver(function () {\n app.persistWidgetPanelSize();\n app.constrainWidgetElementsToViewport();\n app.updateWidgetResetSizeButtonVisibility();\n });\n\n app.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 app.attachDraggableWidgetElement(chatWidgetContainer, dragHandle, 'panel', false);\n }\n\n if (config.widget.enableDragging && app.widgetToggleButtonElement) {\n app.widgetToggleButtonElement.classList.add('ai-chat-widget-draggable');\n app.attachDraggableWidgetElement(app.widgetToggleButtonElement, app.widgetToggleButtonElement, 'toggle', true);\n }\n\n if (app.widgetResetSizeButtonElement) {\n app.widgetResetSizeButtonElement.addEventListener('click', function (event) {\n event.preventDefault();\n app.resetWidgetSize();\n });\n }\n\n app.restoreWidgetLayout();\n\n if (!app.widgetViewportResizeHandler) {\n app.widgetViewportResizeHandler = function () {\n if (config.widget.persistLayout) {\n app.restoreWidgetLayout();\n } else {\n app.constrainWidgetElementsToViewport();\n }\n\n app.updateWidgetResetSizeButtonVisibility();\n };\n\n window.addEventListener('resize', app.widgetViewportResizeHandler);\n }\n\n app.reloadCurrentSession();\n\n if (config.autoCreateSession && !app.getSessionId()) {\n app.startNewSession();\n }\n\n if (config.widget.showHistoryButton && app.chatHistorySection) {\n var showHistoryButton = document.querySelector(config.widget.showHistoryButton);\n if (showHistoryButton) {\n showHistoryButton.addEventListener('click', function () {\n app.chatHistorySection.classList.toggle('show');\n });\n }\n\n if (config.widget.closeHistoryButton) {\n var closeHistoryButton = document.querySelector(config.widget.closeHistoryButton);\n if (closeHistoryButton) {\n closeHistoryButton.addEventListener('click', function () {\n app.showChatScreen();\n });\n }\n }\n }\n\n if (config.widget.newChatButton) {\n var newChatButton = document.querySelector(config.widget.newChatButton);\n if (newChatButton) {\n newChatButton.addEventListener('click', function () {\n app.resetSession();\n app.showChatScreen();\n });\n }\n }\n }\n\n function resolveSessionId(app) {\n if (!app || !app.widgetIsInitialized) {\n return null;\n }\n\n return localStorage.getItem(app.chatWidgetStateSession);\n }\n\n function onSessionInitialized(app, sessionId) {\n if (app && app.widgetIsInitialized) {\n localStorage.setItem(app.chatWidgetStateSession, sessionId);\n }\n }\n\n function onSessionReset(app) {\n if (app && app.widgetIsInitialized) {\n localStorage.removeItem(app.chatWidgetStateSession);\n app.clearStoredWidgetDocuments();\n }\n }\n \n function onDocumentsChanged(app, documents) {\n if (app && app.widgetIsInitialized) {\n app.saveStoredWidgetDocuments(documents);\n }\n }\n\n function handleReceiveError(app) {\n if (app && app.widgetIsInitialized && !app.isSessionStarted && !app._attemptedSessionRecovery) {\n app._attemptedSessionRecovery = true;\n localStorage.removeItem(app.chatWidgetStateSession);\n app.clearStoredWidgetDocuments();\n app.startNewSession();\n }\n }\n\n function dispose(app) {\n if (!app) {\n return;\n }\n\n if (app.widgetResizeObserver) {\n app.widgetResizeObserver.disconnect();\n app.widgetResizeObserver = null;\n }\n\n if (app.widgetViewportResizeHandler) {\n window.removeEventListener('resize', app.widgetViewportResizeHandler);\n app.widgetViewportResizeHandler = null;\n }\n }\n\n return {\n attach: attach,\n initialize: initialize,\n onMounted: initialize,\n resolveSessionId: resolveSessionId,\n onSessionInitialized: onSessionInitialized,\n onSessionReset: onSessionReset,\n onDocumentsChanged: onDocumentsChanged,\n handleReceiveError: handleReceiveError,\n dispose: dispose,\n onBeforeUnmount: dispose\n };\n}();\n\nwindow.openAIChatWidgetManager = window.openAIChatWidgetManager || function () {\n function initialize(options) {\n if (!options) {\n return null;\n }\n\n var chatConfig = options.chatConfig;\n if (!chatConfig && options.configElementSelector) {\n var configElement = document.querySelector(options.configElementSelector);\n chatConfig = configElement ? JSON.parse(configElement.getAttribute('data-config')) : null;\n }\n\n if (!chatConfig) {\n return null;\n }\n\n if (options.messageTemplateSelector) {\n var messageTemplate = document.querySelector(options.messageTemplateSelector);\n if (messageTemplate) {\n chatConfig.messageTemplate = messageTemplate.innerHTML;\n }\n }\n\n if (options.indicatorTemplateSelector) {\n var indicatorTemplate = document.querySelector(options.indicatorTemplateSelector);\n if (indicatorTemplate) {\n chatConfig.indicatorTemplate = indicatorTemplate.innerHTML;\n }\n }\n\n var shell = document.querySelector(options.shellSelector);\n var widgetContainer = document.querySelector(options.widgetContainerSelector);\n var toggleButton = document.querySelector(options.toggleButtonSelector);\n var closeButton = document.querySelector(options.closeButtonSelector);\n var profileInput = options.inputSelector ? document.querySelector(options.inputSelector) : null;\n var widgetStateName = options.widgetStateName || chatConfig.widget.chatWidgetStateName;\n var widgetOpenStateKey = options.widgetOpenStateKey || (widgetStateName + 'Open');\n var widgetLayoutKey = widgetStateName + 'Layout';\n var openStateValue = options.openStateValue || 'open';\n var closedStateValue = options.closedStateValue || 'closed';\n\n if (profileInput && options.profile && options.profile.id) {\n profileInput.setAttribute('data-profile-id', options.profile.id);\n }\n\n try {\n var storedLayout = localStorage.getItem(widgetLayoutKey);\n var layout = storedLayout ? JSON.parse(storedLayout) || {} : {};\n var position = layout.position || {};\n var panelLayout = layout.panel || {};\n var toggleLeft = Number(position.left);\n var toggleTop = Number(position.top);\n var isOpen = localStorage.getItem(widgetOpenStateKey) === openStateValue;\n var viewportPadding = 8;\n\n if (shell) {\n shell.dataset.deferReveal = isOpen ? 'true' : 'false';\n shell.dataset.initialOpen = isOpen ? 'true' : 'false';\n }\n\n if (widgetContainer && toggleButton) {\n var toggleSize = 52;\n var panelWidth = Number.isFinite(Number(panelLayout.width))\n ? Number(panelLayout.width)\n : Math.round(parseFloat(window.getComputedStyle(widgetContainer).width) || 380);\n var panelHeight = Number.isFinite(Number(panelLayout.height))\n ? Number(panelLayout.height)\n : Math.round(parseFloat(window.getComputedStyle(widgetContainer).height) || 520);\n var maxLeft = Math.max(viewportPadding, window.innerWidth - toggleSize - viewportPadding);\n var maxTop = Math.max(viewportPadding, window.innerHeight - toggleSize - viewportPadding);\n if (Number.isFinite(Number(position.leftRatio))) {\n toggleLeft = viewportPadding + Math.max(0, maxLeft - viewportPadding) * Number(position.leftRatio);\n }\n if (Number.isFinite(Number(position.topRatio))) {\n toggleTop = viewportPadding + Math.max(0, maxTop - viewportPadding) * Number(position.topRatio);\n }\n if (Number.isFinite(toggleLeft) && Number.isFinite(toggleTop)) {\n toggleLeft = Math.round(clamp(toggleLeft, viewportPadding, maxLeft));\n toggleTop = Math.round(clamp(toggleTop, viewportPadding, maxTop));\n }\n \n if (Number.isFinite(toggleLeft) && Number.isFinite(toggleTop)) {\n toggleButton.style.left = toggleLeft + 'px';\n toggleButton.style.top = toggleTop + 'px';\n toggleButton.style.right = 'auto';\n toggleButton.style.bottom = 'auto';\n \n var toggleGap = 8;\n widgetContainer.style.left = (toggleLeft + toggleSize - panelWidth) + 'px';\n widgetContainer.style.top = (toggleTop - panelHeight - toggleGap) + 'px';\n widgetContainer.style.right = 'auto';\n widgetContainer.style.bottom = 'auto';\n }\n }\n\n if (widgetContainer) {\n widgetContainer.classList.remove('open');\n widgetContainer.style.display = 'none';\n widgetContainer.setAttribute('aria-hidden', 'true');\n }\n\n if (toggleButton) {\n toggleButton.innerHTML = isOpen ? options.openIconHtml : options.closedIconHtml;\n }\n }\n catch (error) {\n console.warn('Failed to restore widget layout before initialization.', error);\n }\n finally {\n if (shell && shell.dataset.deferReveal !== 'true') {\n shell.style.visibility = '';\n }\n }\n\n var widgetApp = window.openAIChatManager.initialize(chatConfig);\n if (options.applySessionProfilePatch !== false && window.crestAppsAIChat && window.crestAppsAIChat.patchSessionProfileSync) {\n window.crestAppsAIChat.patchSessionProfileSync(widgetApp);\n }\n\n function revealShell() {\n if (!shell) {\n return;\n }\n\n shell.style.visibility = '';\n shell.dataset.deferReveal = 'false';\n }\n\n function syncOpenPanelPosition() {\n if (!widgetApp || typeof widgetApp.syncPanelPositionToToggle !== 'function') {\n return;\n }\n\n widgetApp.syncPanelPositionToToggle(false);\n }\n\n function updateTtsPlaybackButtons() {\n if (!widgetContainer) {\n return;\n }\n\n var buttons = widgetContainer.querySelectorAll('[data-tts-message-index]');\n buttons.forEach(function (button) {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === widgetApp.ttsPlayingMessageIndex;\n var iconHtml = isPlaying\n ? '<span class=\"fa-solid fa-circle-pause\" style=\"font-size: 0.9rem;\"></span>'\n : '<span class=\"fa-solid fa-circle-play\" style=\"font-size: 0.9rem;\"></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\n function queueTtsPlaybackButtonUpdate() {\n requestAnimationFrame(updateTtsPlaybackButtons);\n }\n\n function revealShellWhenStable(initialOpen) {\n if (!shell || shell.dataset.deferReveal !== 'true' || !initialOpen) {\n revealShell();\n return;\n }\n\n var hasRevealed = false;\n var resizeObserver = null;\n\n function finalizeReveal() {\n if (hasRevealed) {\n return;\n }\n\n hasRevealed = true;\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n\n requestAnimationFrame(function () {\n syncOpenPanelPosition();\n requestAnimationFrame(function () {\n revealShell();\n });\n });\n }\n\n if (typeof ResizeObserver === 'undefined') {\n window.setTimeout(finalizeReveal, 0);\n return;\n }\n\n var lastWidth = 0;\n var lastHeight = 0;\n var stablePasses = 0;\n\n resizeObserver = new ResizeObserver(function (entries) {\n var entry = entries && entries[0];\n if (!entry) {\n return;\n }\n\n var width = Math.round(entry.contentRect.width);\n var height = Math.round(entry.contentRect.height);\n if (!width || !height) {\n return;\n }\n\n syncOpenPanelPosition();\n\n if (width === lastWidth && height === lastHeight) {\n stablePasses++;\n }\n else {\n lastWidth = width;\n lastHeight = height;\n stablePasses = 0;\n }\n\n if (stablePasses >= 1) {\n finalizeReveal();\n }\n });\n\n resizeObserver.observe(widgetContainer);\n window.setTimeout(finalizeReveal, 150);\n }\n\n function setWidgetOpen(isOpen) {\n if (widgetApp) {\n var isCurrentlyOpen = widgetContainer.classList.contains('open');\n if (isOpen && !isCurrentlyOpen && typeof widgetApp.syncPanelPositionToToggle === 'function') {\n widgetApp.syncPanelPositionToToggle();\n }\n else if (!isOpen && isCurrentlyOpen && typeof widgetApp.syncTogglePositionToPanel === 'function') {\n widgetApp.syncTogglePositionToPanel();\n }\n }\n\n widgetContainer.classList.toggle('open', isOpen);\n widgetContainer.style.display = isOpen ? 'flex' : 'none';\n widgetContainer.setAttribute('aria-hidden', isOpen ? 'false' : 'true');\n toggleButton.innerHTML = isOpen ? options.openIconHtml : options.closedIconHtml;\n localStorage.setItem(widgetOpenStateKey, isOpen ? openStateValue : closedStateValue);\n\n if (isOpen && typeof window.renderPendingCharts === 'function') {\n setTimeout(function () { window.renderPendingCharts(); }, 100);\n }\n }\n\n var initialOpen = shell && shell.dataset.initialOpen === 'true';\n setWidgetOpen(initialOpen);\n revealShellWhenStable(initialOpen);\n\n if (widgetApp && typeof widgetApp.$watch === 'function') {\n widgetApp.$watch('ttsPlayingMessageIndex', function () {\n queueTtsPlaybackButtonUpdate();\n });\n }\n\n queueTtsPlaybackButtonUpdate();\n\n if (toggleButton) {\n toggleButton.addEventListener('click', function () {\n if (toggleButton.dataset.dragSuppressClick === 'true') {\n toggleButton.dataset.dragSuppressClick = 'false';\n return;\n }\n\n setWidgetOpen(!widgetContainer.classList.contains('open'));\n });\n }\n\n if (closeButton) {\n closeButton.addEventListener('click', function () {\n setWidgetOpen(false);\n });\n }\n\n return widgetApp;\n }\n\n return {\n initialize: initialize\n };\n}();\n"]}
@@ -0,0 +1,2 @@
1
+ window.openAIChatWidgetBehavior=window.openAIChatWidgetBehavior||function(){function t(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"!=typeof t)return null;var e=parseFloat(t);return Number.isFinite(e)?e:null}function e(t,e,i){return Math.min(Math.max(t,e),i)}function i(e,i){if(e&&!e.widgetIsInitialized)if(i.widget.chatWidgetContainer)if(i.widget.chatWidgetStateName){var n=document.querySelector(i.widget.chatWidgetContainer);if(n){i.widget.chatHistorySection&&(e.chatHistorySection=document.querySelector(i.widget.chatHistorySection)),e.chatWidgetStateName=i.widget.chatWidgetStateName,e.chatWidgetStateSession=i.widget.chatWidgetStateName+"Session",e.chatWidgetStateDocuments=i.widget.chatWidgetStateName+"Documents",e.chatWidgetLayoutKey=i.widget.chatWidgetStateName+"Layout",e.widgetContainerElement=n,e.widgetToggleButtonElement=i.widget.toggleButtonSelector?document.querySelector(i.widget.toggleButtonSelector):null,e.widgetResetSizeButtonElement=i.widget.resetSizeButtonSelector?document.querySelector(i.widget.resetSizeButtonSelector):null,e.widgetDefaultWidth=t(i.widget.defaultWidth)||t(window.getComputedStyle(n).width)||380,e.widgetDefaultHeight=t(i.widget.defaultHeight)||t(window.getComputedStyle(n).height)||520,e.widgetIsInitialized=!0,e.documents=e.getStoredWidgetDocuments(),i.widget.enableResizing&&(n.classList.add("ai-chat-widget-resizable"),n.style.minWidth=(t(i.widget.minWidth)||320)+"px",n.style.minHeight=(t(i.widget.minHeight)||420)+"px","undefined"!=typeof ResizeObserver&&(e.widgetResizeObserver=new ResizeObserver(function(){e.persistWidgetPanelSize(),e.constrainWidgetElementsToViewport(),e.updateWidgetResetSizeButtonVisibility()}),e.widgetResizeObserver.observe(n)));var o=i.widget.dragHandleSelector||".ai-chat-widget-header",s=n.querySelector(o);if(i.widget.enableDragging&&s&&(s.classList.add("ai-chat-widget-drag-handle"),n.classList.add("ai-chat-widget-draggable"),e.attachDraggableWidgetElement(n,s,"panel",!1)),i.widget.enableDragging&&e.widgetToggleButtonElement&&(e.widgetToggleButtonElement.classList.add("ai-chat-widget-draggable"),e.attachDraggableWidgetElement(e.widgetToggleButtonElement,e.widgetToggleButtonElement,"toggle",!0)),e.widgetResetSizeButtonElement&&e.widgetResetSizeButtonElement.addEventListener("click",function(t){t.preventDefault(),e.resetWidgetSize()}),e.restoreWidgetLayout(),e.widgetViewportResizeHandler||(e.widgetViewportResizeHandler=function(){i.widget.persistLayout?e.restoreWidgetLayout():e.constrainWidgetElementsToViewport(),e.updateWidgetResetSizeButtonVisibility()},window.addEventListener("resize",e.widgetViewportResizeHandler)),e.reloadCurrentSession(),i.autoCreateSession&&!e.getSessionId()&&e.startNewSession(),i.widget.showHistoryButton&&e.chatHistorySection){var a=document.querySelector(i.widget.showHistoryButton);if(a&&a.addEventListener("click",function(){e.chatHistorySection.classList.toggle("show")}),i.widget.closeHistoryButton){var l=document.querySelector(i.widget.closeHistoryButton);l&&l.addEventListener("click",function(){e.showChatScreen()})}}if(i.widget.newChatButton){var g=document.querySelector(i.widget.newChatButton);g&&g.addEventListener("click",function(){e.resetSession(),e.showChatScreen()})}}}else console.error("The widget chatWidgetStateName is required.");else console.error("The widget chatWidgetContainer is required.")}function n(t){t&&(t.widgetResizeObserver&&(t.widgetResizeObserver.disconnect(),t.widgetResizeObserver=null),t.widgetViewportResizeHandler&&(window.removeEventListener("resize",t.widgetViewportResizeHandler),t.widgetViewportResizeHandler=null))}return{attach:function(i,n){i&&!i.__aiChatWidgetAttached&&(i.__aiChatWidgetAttached=!0,i.chatWidgetStateName=null,i.chatWidgetStateSession=null,i.chatWidgetStateDocuments=null,i.chatWidgetLayoutKey=null,i.chatHistorySection=null,i.widgetContainerElement=null,i.widgetToggleButtonElement=null,i.widgetResetSizeButtonElement=null,i.widgetResizeObserver=null,i.widgetViewportResizeHandler=null,i.widgetDefaultWidth=null,i.widgetDefaultHeight=null,i.widgetIsInitialized=!1,i.getStoredWidgetLayout=function(){if(!this.chatWidgetLayoutKey||!n.widget.persistLayout)return{};try{var t=localStorage.getItem(this.chatWidgetLayoutKey);return t&&JSON.parse(t)||{}}catch(t){return console.warn("Failed to read widget layout state.",t),{}}},i.saveStoredWidgetLayout=function(t){if(this.chatWidgetLayoutKey&&n.widget.persistLayout){var e=this.getStoredWidgetLayout(),i=Object.assign({},e);void 0!==t.panel&&(i.panel=Object.assign({},e.panel||{},t.panel||{})),void 0!==t.position&&(i.position=Object.assign({},e.position||{},t.position||{})),localStorage.setItem(this.chatWidgetLayoutKey,JSON.stringify(i))}},i.getElementSize=function(e,i,n){if(!e)return{width:i||0,height:n||0};var o=e.getBoundingClientRect(),s=window.getComputedStyle(e);return{width:Math.round(o.width||t(s.width)||i||0),height:Math.round(o.height||t(s.height)||n||0)}},i.getElementPosition=function(e){if(!e)return{left:0,top:0};var i=e.getBoundingClientRect(),n=window.getComputedStyle(e),o=t(e.style.left),s=t(e.style.top),a=t(n.left),l=t(n.top),g="none"===n.display;return{left:Math.round(g&&Number.isFinite(o)?o:i.left||o||a||0),top:Math.round(g&&Number.isFinite(s)?s:i.top||s||l||0)}},i.getAvailableWidgetPositionRange=function(t,e){return{padding:8,maxLeft:Math.max(8,window.innerWidth-t-8),maxTop:Math.max(8,window.innerHeight-e-8)}},i.createStoredPosition=function(t,e,i,n){var o=this.getAvailableWidgetPositionRange(i,n),s=Math.max(0,o.maxLeft-o.padding),a=Math.max(0,o.maxTop-o.padding);return{left:Math.round(t),top:Math.round(e),leftRatio:0===s?0:(t-o.padding)/s,topRatio:0===a?0:(e-o.padding)/a}},i.resolveStoredPosition=function(t,e,i){if(!t)return null;var n=this.getAvailableWidgetPositionRange(e,i),o=Number(t.left),s=Number(t.top),a=Number(t.leftRatio),l=Number(t.topRatio);return Number.isFinite(a)&&(o=n.padding+Math.max(0,n.maxLeft-n.padding)*a),Number.isFinite(l)&&(s=n.padding+Math.max(0,n.maxTop-n.padding)*l),Number.isFinite(o)&&Number.isFinite(s)?this.clampWidgetPosition(o,s,e,i):null},i.clampWidgetPosition=function(t,i,n,o){var s=this.getAvailableWidgetPositionRange(n,o);return{left:Math.round(e(t,s.padding,s.maxLeft)),top:Math.round(e(i,s.padding,s.maxTop))}},i.getStoredWidgetDocuments=function(){if(!this.chatWidgetStateDocuments)return[];try{var t=localStorage.getItem(this.chatWidgetStateDocuments),e=t?JSON.parse(t):[];return Array.isArray(e)?e:[]}catch(t){return console.warn("Failed to read widget documents state.",t),[]}},i.saveStoredWidgetDocuments=function(t){if(this.chatWidgetStateDocuments)try{localStorage.setItem(this.chatWidgetStateDocuments,JSON.stringify(Array.isArray(t)?t:[]))}catch(t){console.warn("Failed to persist widget documents state.",t)}},i.clearStoredWidgetDocuments=function(){this.chatWidgetStateDocuments&&localStorage.removeItem(this.chatWidgetStateDocuments)},i.applyAbsolutePosition=function(t,e,i){t&&(t.style.left=e+"px",t.style.top=i+"px",t.style.right="auto",t.style.bottom="auto")},i.getWidgetDefaultSize=function(){return{width:this.widgetDefaultWidth||t(n.widget.defaultWidth)||380,height:this.widgetDefaultHeight||t(n.widget.defaultHeight)||520}},i.getWidgetToggleGap=function(){return 8},i.isWidgetPanelVisible=function(){if(!this.widgetContainerElement)return!1;var t=window.getComputedStyle(this.widgetContainerElement);return this.widgetContainerElement.classList.contains("open")&&"none"!==t.display},i.persistWidgetPanelPosition=function(){if(this.widgetContainerElement&&n.widget.persistLayout){var t=this.getWidgetDefaultSize(),e=this.getElementPosition(this.widgetContainerElement),i=this.getElementSize(this.widgetContainerElement,t.width,t.height),o=this.getElementSize(this.widgetToggleButtonElement,52,52),s=this.clampWidgetPosition(e.left+i.width-o.width,e.top+i.height+this.getWidgetToggleGap(),o.width,o.height);this.saveStoredWidgetLayout({position:this.createStoredPosition(s.left,s.top,o.width,o.height)})}},i.persistWidgetTogglePosition=function(){if(this.widgetToggleButtonElement&&n.widget.persistLayout){var t=this.getElementPosition(this.widgetToggleButtonElement),e=this.getElementSize(this.widgetToggleButtonElement,52,52);this.saveStoredWidgetLayout({position:this.createStoredPosition(t.left,t.top,e.width,e.height)})}},i.persistWidgetPanelSize=function(){if(this.widgetContainerElement&&n.widget.enableResizing&&n.widget.persistLayout){var t=this.getWidgetDefaultSize(),e=this.getElementSize(this.widgetContainerElement,t.width,t.height);this.saveStoredWidgetLayout({panel:{width:Math.abs(e.width-t.width)<=1?null:e.width,height:Math.abs(e.height-t.height)<=1?null:e.height}})}},i.syncTogglePositionToPanel=function(t){if(void 0===t&&(t=!0),this.widgetContainerElement&&this.widgetToggleButtonElement){var e=this.getWidgetDefaultSize(),i=this.getElementSize(this.widgetContainerElement,e.width,e.height),o=this.getElementSize(this.widgetToggleButtonElement,52,52),s=this.getElementPosition(this.widgetContainerElement),a=this.clampWidgetPosition(s.left+i.width-o.width,s.top+i.height+this.getWidgetToggleGap(),o.width,o.height);this.applyAbsolutePosition(this.widgetToggleButtonElement,a.left,a.top),t&&n.widget.persistLayout&&this.persistWidgetTogglePosition()}},i.syncPanelPositionToToggle=function(t){if(void 0===t&&(t=!0),this.widgetContainerElement&&this.widgetToggleButtonElement){var e=this.getWidgetDefaultSize(),i=this.getElementSize(this.widgetContainerElement,e.width,e.height),o=this.getElementSize(this.widgetToggleButtonElement,52,52),s=this.getElementPosition(this.widgetToggleButtonElement),a=this.clampWidgetPosition(s.left+o.width-i.width,s.top-i.height-this.getWidgetToggleGap(),i.width,i.height);this.applyAbsolutePosition(this.widgetContainerElement,a.left,a.top),t&&n.widget.persistLayout&&this.persistWidgetPanelPosition()}},i.updateWidgetResetSizeButtonVisibility=function(){if(this.widgetResetSizeButtonElement)if(n.widget.enableResizing&&this.widgetContainerElement){var t=this.getWidgetDefaultSize(),e=this.getElementSize(this.widgetContainerElement,t.width,t.height),i=Math.abs(e.width-t.width)>1||Math.abs(e.height-t.height)>1||!!this.widgetContainerElement.style.width||!!this.widgetContainerElement.style.height;this.widgetResetSizeButtonElement.classList.toggle("d-none",!i)}else this.widgetResetSizeButtonElement.classList.add("d-none")},i.resetWidgetSize=function(){this.widgetContainerElement&&n.widget.enableResizing&&(this.widgetContainerElement.style.removeProperty("width"),this.widgetContainerElement.style.removeProperty("height"),this.persistWidgetPanelSize(),this.constrainWidgetElementsToViewport(),this.updateWidgetResetSizeButtonVisibility())},i.restoreWidgetLayout=function(){var t=this.getStoredWidgetLayout();this.widgetContainerElement&&n.widget.enableResizing&&(Number.isFinite(t.panel&&t.panel.width)?this.widgetContainerElement.style.width=t.panel.width+"px":this.widgetContainerElement.style.removeProperty("width"),Number.isFinite(t.panel&&t.panel.height)?this.widgetContainerElement.style.height=t.panel.height+"px":this.widgetContainerElement.style.removeProperty("height"));var e=this.getElementSize(this.widgetToggleButtonElement,52,52),i=this.resolveStoredPosition(t.position,e.width,e.height);this.widgetToggleButtonElement&&n.widget.enableDragging&&i?(this.applyAbsolutePosition(this.widgetToggleButtonElement,i.left,i.top),this.syncPanelPositionToToggle(!1)):this.widgetToggleButtonElement&&n.widget.enableDragging&&Number.isFinite(t.toggle&&t.toggle.left)&&Number.isFinite(t.toggle&&t.toggle.top)?(this.applyAbsolutePosition(this.widgetToggleButtonElement,t.toggle.left,t.toggle.top),this.syncPanelPositionToToggle(!1)):this.widgetContainerElement&&n.widget.enableDragging&&Number.isFinite(t.panel&&t.panel.left)&&Number.isFinite(t.panel&&t.panel.top)&&(this.applyAbsolutePosition(this.widgetContainerElement,t.panel.left,t.panel.top),this.syncTogglePositionToPanel(!1)),this.constrainWidgetElementsToViewport(),this.updateWidgetResetSizeButtonVisibility()},i.attachDraggableWidgetElement=function(t,e,i,o){if(t&&e&&n.widget.enableDragging){var s=null,a=0,l=0,g=0,d=0,r=!1,u=this;e.addEventListener("pointerdown",function(n){if(0===n.button&&("panel"!==i||!n.target.closest("button, a, input, textarea, select, option, label"))){var o=t.getBoundingClientRect();a=n.clientX,l=n.clientY,g=o.left,d=o.top,r=!1,s=n.pointerId,t.classList.add("ai-chat-widget-dragging"),e.setPointerCapture&&e.setPointerCapture(n.pointerId),document.addEventListener("pointermove",c),document.addEventListener("pointerup",h),document.addEventListener("pointercancel",h),n.preventDefault()}})}function h(e){null!==s&&(e&&void 0!==e.pointerId&&e.pointerId!==s||(document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",h),document.removeEventListener("pointercancel",h),t.classList.remove("ai-chat-widget-dragging"),s=null,r&&("panel"===i?(u.syncTogglePositionToPanel(!1),u.persistWidgetPanelPosition()):"toggle"===i&&(u.syncPanelPositionToToggle(!1),u.persistWidgetTogglePosition()),n.widget.persistLayout&&(u.persistWidgetPanelPosition(),u.persistWidgetTogglePosition()),o&&(t.dataset.dragSuppressClick="true",window.setTimeout(function(){"true"===t.dataset.dragSuppressClick&&(t.dataset.dragSuppressClick="false")},0)))))}function c(e){if(null!==s&&e.pointerId===s){var n=e.clientX-a,o=e.clientY-l;if(r||!(Math.hypot(n,o)<4)){r=!0;var h=u.getWidgetDefaultSize(),c=u.getElementSize(t,"panel"===i?h.width:52,"panel"===i?h.height:52),m=u.clampWidgetPosition(g+n,d+o,c.width,c.height);u.applyAbsolutePosition(t,m.left,m.top),"panel"===i?u.syncTogglePositionToPanel(!1):"toggle"===i&&u.syncPanelPositionToToggle(!1)}}}},i.constrainWidgetElementsToViewport=function(){if(this.widgetContainerElement&&this.widgetContainerElement.style.left&&this.isWidgetPanelVisible()){var t=this.getWidgetDefaultSize(),e=this.getElementSize(this.widgetContainerElement,t.width,t.height),i=this.getElementPosition(this.widgetContainerElement),o=this.clampWidgetPosition(i.left,i.top,e.width,e.height);this.applyAbsolutePosition(this.widgetContainerElement,o.left,o.top),this.syncTogglePositionToPanel(!1),n.widget.persistLayout&&(this.persistWidgetPanelPosition(),this.persistWidgetTogglePosition())}else if(this.widgetToggleButtonElement&&this.widgetToggleButtonElement.style.left){var s=this.getElementSize(this.widgetToggleButtonElement,52,52),a=this.getElementPosition(this.widgetToggleButtonElement),l=this.clampWidgetPosition(a.left,a.top,s.width,s.height);this.applyAbsolutePosition(this.widgetToggleButtonElement,l.left,l.top),this.syncPanelPositionToToggle(!1),n.widget.persistLayout&&(this.persistWidgetTogglePosition(),this.persistWidgetPanelPosition())}},i.showChatScreen=function(){this.chatHistorySection&&this.chatHistorySection.classList.remove("show")})},initialize:i,onMounted:i,resolveSessionId:function(t){return t&&t.widgetIsInitialized?localStorage.getItem(t.chatWidgetStateSession):null},onSessionInitialized:function(t,e){t&&t.widgetIsInitialized&&localStorage.setItem(t.chatWidgetStateSession,e)},onSessionReset:function(t){t&&t.widgetIsInitialized&&(localStorage.removeItem(t.chatWidgetStateSession),t.clearStoredWidgetDocuments())},onDocumentsChanged:function(t,e){t&&t.widgetIsInitialized&&t.saveStoredWidgetDocuments(e)},handleReceiveError:function(t){t&&t.widgetIsInitialized&&!t.isSessionStarted&&!t._attemptedSessionRecovery&&(t._attemptedSessionRecovery=!0,localStorage.removeItem(t.chatWidgetStateSession),t.clearStoredWidgetDocuments(),t.startNewSession())},dispose:n,onBeforeUnmount:n}}(),window.openAIChatWidgetManager=window.openAIChatWidgetManager||{initialize:function(t){if(!t)return null;var e=t.chatConfig;if(!e&&t.configElementSelector){var i=document.querySelector(t.configElementSelector);e=i?JSON.parse(i.getAttribute("data-config")):null}if(!e)return null;if(t.messageTemplateSelector){var n=document.querySelector(t.messageTemplateSelector);n&&(e.messageTemplate=n.innerHTML)}if(t.indicatorTemplateSelector){var o=document.querySelector(t.indicatorTemplateSelector);o&&(e.indicatorTemplate=o.innerHTML)}var s=document.querySelector(t.shellSelector),a=document.querySelector(t.widgetContainerSelector),l=document.querySelector(t.toggleButtonSelector),g=document.querySelector(t.closeButtonSelector),d=t.inputSelector?document.querySelector(t.inputSelector):null,r=t.widgetStateName||e.widget.chatWidgetStateName,u=t.widgetOpenStateKey||r+"Open",h=r+"Layout",c=t.openStateValue||"open",m=t.closedStateValue||"closed";d&&t.profile&&t.profile.id&&d.setAttribute("data-profile-id",t.profile.id);try{var w=localStorage.getItem(h),p=w&&JSON.parse(w)||{},f=p.position||{},S=p.panel||{},y=Number(f.left),W=Number(f.top),v=localStorage.getItem(u)===c;if(s&&(s.dataset.deferReveal=v?"true":"false",s.dataset.initialOpen=v?"true":"false"),a&&l){var E=Number.isFinite(Number(S.width))?Number(S.width):Math.round(parseFloat(window.getComputedStyle(a).width)||380),b=Number.isFinite(Number(S.height))?Number(S.height):Math.round(parseFloat(window.getComputedStyle(a).height)||520),P=Math.max(8,window.innerWidth-52-8),T=Math.max(8,window.innerHeight-52-8);Number.isFinite(Number(f.leftRatio))&&(y=8+Math.max(0,P-8)*Number(f.leftRatio)),Number.isFinite(Number(f.topRatio))&&(W=8+Math.max(0,T-8)*Number(f.topRatio)),Number.isFinite(y)&&Number.isFinite(W)&&(y=Math.round(clamp(y,8,P)),W=Math.round(clamp(W,8,T))),Number.isFinite(y)&&Number.isFinite(W)&&(l.style.left=y+"px",l.style.top=W+"px",l.style.right="auto",l.style.bottom="auto",a.style.left=y+52-E+"px",a.style.top=W-b-8+"px",a.style.right="auto",a.style.bottom="auto")}a&&(a.classList.remove("open"),a.style.display="none",a.setAttribute("aria-hidden","true")),l&&(l.innerHTML=v?t.openIconHtml:t.closedIconHtml)}catch(t){console.warn("Failed to restore widget layout before initialization.",t)}finally{s&&"true"!==s.dataset.deferReveal&&(s.style.visibility="")}var z=window.openAIChatManager.initialize(e);function C(){s&&(s.style.visibility="",s.dataset.deferReveal="false")}function L(){z&&"function"==typeof z.syncPanelPositionToToggle&&z.syncPanelPositionToToggle(!1)}function R(){a&&a.querySelectorAll("[data-tts-message-index]").forEach(function(t){var e=Number(t.getAttribute("data-tts-message-index"))===z.ttsPlayingMessageIndex,i=e?'<span class="fa-solid fa-circle-pause" style="font-size: 0.9rem;"></span>':'<span class="fa-solid fa-circle-play" style="font-size: 0.9rem;"></span>';t.classList.toggle("tts-playing",e),t.setAttribute("title",e?"Pause audio":"Read aloud"),t.replaceChildren(DOMPurify.sanitize(i,{RETURN_DOM_FRAGMENT:!0}))})}function N(){requestAnimationFrame(R)}function B(e){if(z){var i=a.classList.contains("open");e&&!i&&"function"==typeof z.syncPanelPositionToToggle?z.syncPanelPositionToToggle():!e&&i&&"function"==typeof z.syncTogglePositionToPanel&&z.syncTogglePositionToPanel()}a.classList.toggle("open",e),a.style.display=e?"flex":"none",a.setAttribute("aria-hidden",e?"false":"true"),l.innerHTML=e?t.openIconHtml:t.closedIconHtml,localStorage.setItem(u,e?c:m),e&&"function"==typeof window.renderPendingCharts&&setTimeout(function(){window.renderPendingCharts()},100)}!1!==t.applySessionProfilePatch&&window.crestAppsAIChat&&window.crestAppsAIChat.patchSessionProfileSync&&window.crestAppsAIChat.patchSessionProfileSync(z);var I=s&&"true"===s.dataset.initialOpen;return B(I),function(t){if(s&&"true"===s.dataset.deferReveal&&t){var e=!1,i=null;if("undefined"!=typeof ResizeObserver){var n=0,o=0,l=0;(i=new ResizeObserver(function(t){var e=t&&t[0];if(e){var i=Math.round(e.contentRect.width),s=Math.round(e.contentRect.height);i&&s&&(L(),i===n&&s===o?l++:(n=i,o=s,l=0),l>=1&&g())}})).observe(a),window.setTimeout(g,150)}else window.setTimeout(g,0)}else C();function g(){e||(e=!0,i&&i.disconnect(),requestAnimationFrame(function(){L(),requestAnimationFrame(function(){C()})}))}}(I),z&&"function"==typeof z.$watch&&z.$watch("ttsPlayingMessageIndex",function(){N()}),N(),l&&l.addEventListener("click",function(){"true"!==l.dataset.dragSuppressClick?B(!a.classList.contains("open")):l.dataset.dragSuppressClick="false"}),g&&g.addEventListener("click",function(){B(!1)}),z}};
2
+ //# sourceMappingURL=ai-chat-widget.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ai-chat-widget.js"],"names":["window","openAIChatWidgetBehavior","parsePixelValue","value","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","initialize","app","config","widgetIsInitialized","widget","chatWidgetContainer","chatWidgetStateName","document","querySelector","chatHistorySection","chatWidgetStateSession","chatWidgetStateDocuments","chatWidgetLayoutKey","widgetContainerElement","widgetToggleButtonElement","toggleButtonSelector","widgetResetSizeButtonElement","resetSizeButtonSelector","widgetDefaultWidth","defaultWidth","getComputedStyle","width","widgetDefaultHeight","defaultHeight","height","documents","getStoredWidgetDocuments","enableResizing","classList","add","style","minWidth","minHeight","ResizeObserver","widgetResizeObserver","persistWidgetPanelSize","constrainWidgetElementsToViewport","updateWidgetResetSizeButtonVisibility","observe","dragHandleSelector","dragHandle","enableDragging","attachDraggableWidgetElement","addEventListener","event","preventDefault","resetWidgetSize","restoreWidgetLayout","widgetViewportResizeHandler","persistLayout","reloadCurrentSession","autoCreateSession","getSessionId","startNewSession","showHistoryButton","toggle","closeHistoryButton","showChatScreen","newChatButton","resetSession","console","error","dispose","disconnect","removeEventListener","attach","__aiChatWidgetAttached","getStoredWidgetLayout","this","storedLayout","localStorage","getItem","JSON","parse","warn","saveStoredWidgetLayout","partialLayout","currentLayout","nextLayout","Object","assign","undefined","panel","position","setItem","stringify","getElementSize","element","fallbackWidth","fallbackHeight","rect","getBoundingClientRect","computed","round","getElementPosition","left","top","inlineLeft","inlineTop","computedLeft","computedTop","isHidden","display","getAvailableWidgetPositionRange","padding","maxLeft","innerWidth","maxTop","innerHeight","createStoredPosition","range","leftSpan","topSpan","leftRatio","topRatio","resolveStoredPosition","storedPosition","clampWidgetPosition","storedDocuments","parsedDocuments","Array","isArray","saveStoredWidgetDocuments","clearStoredWidgetDocuments","removeItem","applyAbsolutePosition","right","bottom","getWidgetDefaultSize","getWidgetToggleGap","isWidgetPanelVisible","contains","persistWidgetPanelPosition","panelDefaultSize","panelPosition","panelSize","toggleSize","linkedPosition","persistWidgetTogglePosition","togglePosition","defaultSize","currentSize","abs","syncTogglePositionToPanel","syncPanelPositionToToggle","isResized","removeProperty","storedTogglePosition","handle","layoutKey","suppressClickOnDrag","activePointerId","startX","startY","startLeft","startTop","dragged","self","button","target","closest","clientX","clientY","pointerId","setPointerCapture","onPointerMove","stopDragging","remove","dataset","dragSuppressClick","setTimeout","deltaX","deltaY","hypot","nextPosition","clampedPanel","clampedToggle","onMounted","resolveSessionId","onSessionInitialized","sessionId","onSessionReset","onDocumentsChanged","handleReceiveError","isSessionStarted","_attemptedSessionRecovery","onBeforeUnmount","openAIChatWidgetManager","options","chatConfig","configElementSelector","configElement","getAttribute","messageTemplateSelector","messageTemplate","innerHTML","indicatorTemplateSelector","indicatorTemplate","shell","shellSelector","widgetContainer","widgetContainerSelector","toggleButton","closeButton","closeButtonSelector","profileInput","inputSelector","widgetStateName","widgetOpenStateKey","widgetLayoutKey","openStateValue","closedStateValue","profile","id","setAttribute","layout","panelLayout","toggleLeft","toggleTop","isOpen","deferReveal","initialOpen","panelWidth","panelHeight","openIconHtml","closedIconHtml","visibility","widgetApp","openAIChatManager","revealShell","syncOpenPanelPosition","updateTtsPlaybackButtons","querySelectorAll","forEach","isPlaying","ttsPlayingMessageIndex","iconHtml","replaceChildren","DOMPurify","sanitize","RETURN_DOM_FRAGMENT","queueTtsPlaybackButtonUpdate","requestAnimationFrame","setWidgetOpen","isCurrentlyOpen","renderPendingCharts","applySessionProfilePatch","crestAppsAIChat","patchSessionProfileSync","hasRevealed","resizeObserver","lastWidth","lastHeight","stablePasses","entries","entry","contentRect","finalizeReveal","revealShellWhenStable","$watch"],"mappings":"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","file":"ai-chat-widget.min.js","sourcesContent":["window.openAIChatWidgetBehavior = window.openAIChatWidgetBehavior || function () {\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 attach(app, config) {\n if (!app || app.__aiChatWidgetAttached) {\n return;\n }\n\n app.__aiChatWidgetAttached = true;\n app.chatWidgetStateName = null;\n app.chatWidgetStateSession = null;\n app.chatWidgetStateDocuments = null;\n app.chatWidgetLayoutKey = null;\n app.chatHistorySection = null;\n app.widgetContainerElement = null;\n app.widgetToggleButtonElement = null;\n app.widgetResetSizeButtonElement = null;\n app.widgetResizeObserver = null;\n app.widgetViewportResizeHandler = null;\n app.widgetDefaultWidth = null;\n app.widgetDefaultHeight = null;\n app.widgetIsInitialized = false;\n\n app.getStoredWidgetLayout = function () {\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 }\n catch (error) {\n console.warn('Failed to read widget layout state.', error);\n return {};\n }\n };\n\n app.saveStoredWidgetLayout = function (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\n app.getElementSize = function (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\n app.getElementPosition = function (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(isHidden && Number.isFinite(inlineLeft) ? inlineLeft : rect.left || inlineLeft || computedLeft || 0),\n top: Math.round(isHidden && Number.isFinite(inlineTop) ? inlineTop : rect.top || inlineTop || computedTop || 0)\n };\n };\n \n app.getAvailableWidgetPositionRange = function (width, height) {\n var viewportPadding = 8;\n return {\n padding: viewportPadding,\n maxLeft: Math.max(viewportPadding, window.innerWidth - width - viewportPadding),\n maxTop: Math.max(viewportPadding, window.innerHeight - height - viewportPadding)\n };\n };\n \n app.createStoredPosition = function (left, top, width, height) {\n var range = this.getAvailableWidgetPositionRange(width, height);\n var leftSpan = Math.max(0, range.maxLeft - range.padding);\n var topSpan = Math.max(0, range.maxTop - range.padding);\n \n return {\n left: Math.round(left),\n top: Math.round(top),\n leftRatio: leftSpan === 0 ? 0 : (left - range.padding) / leftSpan,\n topRatio: topSpan === 0 ? 0 : (top - range.padding) / topSpan\n };\n };\n \n app.resolveStoredPosition = function (storedPosition, width, height) {\n if (!storedPosition) {\n return null;\n }\n \n var range = this.getAvailableWidgetPositionRange(width, height);\n var left = Number(storedPosition.left);\n var top = Number(storedPosition.top);\n var leftRatio = Number(storedPosition.leftRatio);\n var topRatio = Number(storedPosition.topRatio);\n \n if (Number.isFinite(leftRatio)) {\n left = range.padding + Math.max(0, range.maxLeft - range.padding) * leftRatio;\n }\n \n if (Number.isFinite(topRatio)) {\n top = range.padding + Math.max(0, range.maxTop - range.padding) * topRatio;\n }\n \n if (!Number.isFinite(left) || !Number.isFinite(top)) {\n return null;\n }\n \n return this.clampWidgetPosition(left, top, width, height);\n };\n\n app.clampWidgetPosition = function (left, top, width, height) {\n var range = this.getAvailableWidgetPositionRange(width, height);\n\n return {\n left: Math.round(clamp(left, range.padding, range.maxLeft)),\n top: Math.round(clamp(top, range.padding, range.maxTop))\n };\n };\n \n app.getStoredWidgetDocuments = function () {\n if (!this.chatWidgetStateDocuments) {\n return [];\n }\n \n try {\n var storedDocuments = localStorage.getItem(this.chatWidgetStateDocuments);\n var parsedDocuments = storedDocuments ? JSON.parse(storedDocuments) : [];\n return Array.isArray(parsedDocuments) ? parsedDocuments : [];\n }\n catch (error) {\n console.warn('Failed to read widget documents state.', error);\n return [];\n }\n };\n \n app.saveStoredWidgetDocuments = function (documents) {\n if (!this.chatWidgetStateDocuments) {\n return;\n }\n \n try {\n localStorage.setItem(this.chatWidgetStateDocuments, JSON.stringify(Array.isArray(documents) ? documents : []));\n }\n catch (error) {\n console.warn('Failed to persist widget documents state.', error);\n }\n };\n \n app.clearStoredWidgetDocuments = function () {\n if (!this.chatWidgetStateDocuments) {\n return;\n }\n \n localStorage.removeItem(this.chatWidgetStateDocuments);\n };\n\n app.applyAbsolutePosition = function (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\n app.getWidgetDefaultSize = function () {\n return {\n width: this.widgetDefaultWidth || parsePixelValue(config.widget.defaultWidth) || 380,\n height: this.widgetDefaultHeight || parsePixelValue(config.widget.defaultHeight) || 520\n };\n };\n\n app.getWidgetToggleGap = function () {\n return 8;\n };\n\n app.isWidgetPanelVisible = function () {\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\n app.persistWidgetPanelPosition = function () {\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({ position: this.createStoredPosition(linkedPosition.left, linkedPosition.top, toggleSize.width, toggleSize.height) });\n };\n\n app.persistWidgetTogglePosition = function () {\n if (!this.widgetToggleButtonElement || !config.widget.persistLayout) {\n return;\n }\n\n var togglePosition = this.getElementPosition(this.widgetToggleButtonElement);\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n this.saveStoredWidgetLayout({ position: this.createStoredPosition(togglePosition.left, togglePosition.top, toggleSize.width, toggleSize.height) });\n };\n\n app.persistWidgetPanelSize = function () {\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\n app.syncTogglePositionToPanel = function (persistLayout) {\n if (persistLayout === undefined) {\n persistLayout = true;\n }\n\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\n app.syncPanelPositionToToggle = function (persistLayout) {\n if (persistLayout === undefined) {\n persistLayout = true;\n }\n\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\n app.updateWidgetResetSizeButtonVisibility = function () {\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\n app.resetWidgetSize = function () {\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\n app.restoreWidgetLayout = function () {\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 }\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 }\n else {\n this.widgetContainerElement.style.removeProperty('height');\n }\n }\n\n var toggleSize = this.getElementSize(this.widgetToggleButtonElement, 52, 52);\n var storedTogglePosition = this.resolveStoredPosition(storedLayout.position, toggleSize.width, toggleSize.height);\n if (this.widgetToggleButtonElement && config.widget.enableDragging && storedTogglePosition) {\n this.applyAbsolutePosition(this.widgetToggleButtonElement, storedTogglePosition.left, storedTogglePosition.top);\n this.syncPanelPositionToToggle(false);\n }\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 }\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\n app.attachDraggableWidgetElement = function (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 var self = this;\n\n function 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 self.syncTogglePositionToPanel(false);\n self.persistWidgetPanelPosition();\n }\n else if (layoutKey === 'toggle') {\n self.syncPanelPositionToToggle(false);\n self.persistWidgetTogglePosition();\n }\n\n if (config.widget.persistLayout) {\n self.persistWidgetPanelPosition();\n self.persistWidgetTogglePosition();\n }\n\n if (suppressClickOnDrag) {\n element.dataset.dragSuppressClick = 'true';\n window.setTimeout(function () {\n if (element.dataset.dragSuppressClick === 'true') {\n element.dataset.dragSuppressClick = 'false';\n }\n }, 0);\n }\n }\n\n function 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 = self.getWidgetDefaultSize();\n var currentSize = self.getElementSize(\n element,\n layoutKey === 'panel' ? defaultSize.width : 52,\n layoutKey === 'panel' ? defaultSize.height : 52);\n var nextPosition = self.clampWidgetPosition(startLeft + deltaX, startTop + deltaY, currentSize.width, currentSize.height);\n\n self.applyAbsolutePosition(element, nextPosition.left, nextPosition.top);\n\n if (layoutKey === 'panel') {\n self.syncTogglePositionToPanel(false);\n }\n else if (layoutKey === 'toggle') {\n self.syncPanelPositionToToggle(false);\n }\n }\n\n handle.addEventListener('pointerdown', function (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\n app.constrainWidgetElementsToViewport = function () {\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 }\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\n app.showChatScreen = function () {\n if (!this.chatHistorySection) {\n return;\n }\n\n this.chatHistorySection.classList.remove('show');\n };\n }\n\n function initialize(app, config) {\n if (!app || app.widgetIsInitialized) {\n return;\n }\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 var chatWidgetContainer = document.querySelector(config.widget.chatWidgetContainer);\n if (!chatWidgetContainer) {\n return;\n }\n\n if (config.widget.chatHistorySection) {\n app.chatHistorySection = document.querySelector(config.widget.chatHistorySection);\n }\n\n app.chatWidgetStateName = config.widget.chatWidgetStateName;\n app.chatWidgetStateSession = config.widget.chatWidgetStateName + 'Session';\n app.chatWidgetStateDocuments = config.widget.chatWidgetStateName + 'Documents';\n app.chatWidgetLayoutKey = config.widget.chatWidgetStateName + 'Layout';\n app.widgetContainerElement = chatWidgetContainer;\n app.widgetToggleButtonElement = config.widget.toggleButtonSelector ? document.querySelector(config.widget.toggleButtonSelector) : null;\n app.widgetResetSizeButtonElement = config.widget.resetSizeButtonSelector ? document.querySelector(config.widget.resetSizeButtonSelector) : null;\n app.widgetDefaultWidth = parsePixelValue(config.widget.defaultWidth) || parsePixelValue(window.getComputedStyle(chatWidgetContainer).width) || 380;\n app.widgetDefaultHeight = parsePixelValue(config.widget.defaultHeight) || parsePixelValue(window.getComputedStyle(chatWidgetContainer).height) || 520;\n app.widgetIsInitialized = true;\n app.documents = app.getStoredWidgetDocuments();\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 app.widgetResizeObserver = new ResizeObserver(function () {\n app.persistWidgetPanelSize();\n app.constrainWidgetElementsToViewport();\n app.updateWidgetResetSizeButtonVisibility();\n });\n\n app.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 app.attachDraggableWidgetElement(chatWidgetContainer, dragHandle, 'panel', false);\n }\n\n if (config.widget.enableDragging && app.widgetToggleButtonElement) {\n app.widgetToggleButtonElement.classList.add('ai-chat-widget-draggable');\n app.attachDraggableWidgetElement(app.widgetToggleButtonElement, app.widgetToggleButtonElement, 'toggle', true);\n }\n\n if (app.widgetResetSizeButtonElement) {\n app.widgetResetSizeButtonElement.addEventListener('click', function (event) {\n event.preventDefault();\n app.resetWidgetSize();\n });\n }\n\n app.restoreWidgetLayout();\n\n if (!app.widgetViewportResizeHandler) {\n app.widgetViewportResizeHandler = function () {\n if (config.widget.persistLayout) {\n app.restoreWidgetLayout();\n } else {\n app.constrainWidgetElementsToViewport();\n }\n\n app.updateWidgetResetSizeButtonVisibility();\n };\n\n window.addEventListener('resize', app.widgetViewportResizeHandler);\n }\n\n app.reloadCurrentSession();\n\n if (config.autoCreateSession && !app.getSessionId()) {\n app.startNewSession();\n }\n\n if (config.widget.showHistoryButton && app.chatHistorySection) {\n var showHistoryButton = document.querySelector(config.widget.showHistoryButton);\n if (showHistoryButton) {\n showHistoryButton.addEventListener('click', function () {\n app.chatHistorySection.classList.toggle('show');\n });\n }\n\n if (config.widget.closeHistoryButton) {\n var closeHistoryButton = document.querySelector(config.widget.closeHistoryButton);\n if (closeHistoryButton) {\n closeHistoryButton.addEventListener('click', function () {\n app.showChatScreen();\n });\n }\n }\n }\n\n if (config.widget.newChatButton) {\n var newChatButton = document.querySelector(config.widget.newChatButton);\n if (newChatButton) {\n newChatButton.addEventListener('click', function () {\n app.resetSession();\n app.showChatScreen();\n });\n }\n }\n }\n\n function resolveSessionId(app) {\n if (!app || !app.widgetIsInitialized) {\n return null;\n }\n\n return localStorage.getItem(app.chatWidgetStateSession);\n }\n\n function onSessionInitialized(app, sessionId) {\n if (app && app.widgetIsInitialized) {\n localStorage.setItem(app.chatWidgetStateSession, sessionId);\n }\n }\n\n function onSessionReset(app) {\n if (app && app.widgetIsInitialized) {\n localStorage.removeItem(app.chatWidgetStateSession);\n app.clearStoredWidgetDocuments();\n }\n }\n \n function onDocumentsChanged(app, documents) {\n if (app && app.widgetIsInitialized) {\n app.saveStoredWidgetDocuments(documents);\n }\n }\n\n function handleReceiveError(app) {\n if (app && app.widgetIsInitialized && !app.isSessionStarted && !app._attemptedSessionRecovery) {\n app._attemptedSessionRecovery = true;\n localStorage.removeItem(app.chatWidgetStateSession);\n app.clearStoredWidgetDocuments();\n app.startNewSession();\n }\n }\n\n function dispose(app) {\n if (!app) {\n return;\n }\n\n if (app.widgetResizeObserver) {\n app.widgetResizeObserver.disconnect();\n app.widgetResizeObserver = null;\n }\n\n if (app.widgetViewportResizeHandler) {\n window.removeEventListener('resize', app.widgetViewportResizeHandler);\n app.widgetViewportResizeHandler = null;\n }\n }\n\n return {\n attach: attach,\n initialize: initialize,\n onMounted: initialize,\n resolveSessionId: resolveSessionId,\n onSessionInitialized: onSessionInitialized,\n onSessionReset: onSessionReset,\n onDocumentsChanged: onDocumentsChanged,\n handleReceiveError: handleReceiveError,\n dispose: dispose,\n onBeforeUnmount: dispose\n };\n}();\n\nwindow.openAIChatWidgetManager = window.openAIChatWidgetManager || function () {\n function initialize(options) {\n if (!options) {\n return null;\n }\n\n var chatConfig = options.chatConfig;\n if (!chatConfig && options.configElementSelector) {\n var configElement = document.querySelector(options.configElementSelector);\n chatConfig = configElement ? JSON.parse(configElement.getAttribute('data-config')) : null;\n }\n\n if (!chatConfig) {\n return null;\n }\n\n if (options.messageTemplateSelector) {\n var messageTemplate = document.querySelector(options.messageTemplateSelector);\n if (messageTemplate) {\n chatConfig.messageTemplate = messageTemplate.innerHTML;\n }\n }\n\n if (options.indicatorTemplateSelector) {\n var indicatorTemplate = document.querySelector(options.indicatorTemplateSelector);\n if (indicatorTemplate) {\n chatConfig.indicatorTemplate = indicatorTemplate.innerHTML;\n }\n }\n\n var shell = document.querySelector(options.shellSelector);\n var widgetContainer = document.querySelector(options.widgetContainerSelector);\n var toggleButton = document.querySelector(options.toggleButtonSelector);\n var closeButton = document.querySelector(options.closeButtonSelector);\n var profileInput = options.inputSelector ? document.querySelector(options.inputSelector) : null;\n var widgetStateName = options.widgetStateName || chatConfig.widget.chatWidgetStateName;\n var widgetOpenStateKey = options.widgetOpenStateKey || (widgetStateName + 'Open');\n var widgetLayoutKey = widgetStateName + 'Layout';\n var openStateValue = options.openStateValue || 'open';\n var closedStateValue = options.closedStateValue || 'closed';\n\n if (profileInput && options.profile && options.profile.id) {\n profileInput.setAttribute('data-profile-id', options.profile.id);\n }\n\n try {\n var storedLayout = localStorage.getItem(widgetLayoutKey);\n var layout = storedLayout ? JSON.parse(storedLayout) || {} : {};\n var position = layout.position || {};\n var panelLayout = layout.panel || {};\n var toggleLeft = Number(position.left);\n var toggleTop = Number(position.top);\n var isOpen = localStorage.getItem(widgetOpenStateKey) === openStateValue;\n var viewportPadding = 8;\n\n if (shell) {\n shell.dataset.deferReveal = isOpen ? 'true' : 'false';\n shell.dataset.initialOpen = isOpen ? 'true' : 'false';\n }\n\n if (widgetContainer && toggleButton) {\n var toggleSize = 52;\n var panelWidth = Number.isFinite(Number(panelLayout.width))\n ? Number(panelLayout.width)\n : Math.round(parseFloat(window.getComputedStyle(widgetContainer).width) || 380);\n var panelHeight = Number.isFinite(Number(panelLayout.height))\n ? Number(panelLayout.height)\n : Math.round(parseFloat(window.getComputedStyle(widgetContainer).height) || 520);\n var maxLeft = Math.max(viewportPadding, window.innerWidth - toggleSize - viewportPadding);\n var maxTop = Math.max(viewportPadding, window.innerHeight - toggleSize - viewportPadding);\n if (Number.isFinite(Number(position.leftRatio))) {\n toggleLeft = viewportPadding + Math.max(0, maxLeft - viewportPadding) * Number(position.leftRatio);\n }\n if (Number.isFinite(Number(position.topRatio))) {\n toggleTop = viewportPadding + Math.max(0, maxTop - viewportPadding) * Number(position.topRatio);\n }\n if (Number.isFinite(toggleLeft) && Number.isFinite(toggleTop)) {\n toggleLeft = Math.round(clamp(toggleLeft, viewportPadding, maxLeft));\n toggleTop = Math.round(clamp(toggleTop, viewportPadding, maxTop));\n }\n \n if (Number.isFinite(toggleLeft) && Number.isFinite(toggleTop)) {\n toggleButton.style.left = toggleLeft + 'px';\n toggleButton.style.top = toggleTop + 'px';\n toggleButton.style.right = 'auto';\n toggleButton.style.bottom = 'auto';\n \n var toggleGap = 8;\n widgetContainer.style.left = (toggleLeft + toggleSize - panelWidth) + 'px';\n widgetContainer.style.top = (toggleTop - panelHeight - toggleGap) + 'px';\n widgetContainer.style.right = 'auto';\n widgetContainer.style.bottom = 'auto';\n }\n }\n\n if (widgetContainer) {\n widgetContainer.classList.remove('open');\n widgetContainer.style.display = 'none';\n widgetContainer.setAttribute('aria-hidden', 'true');\n }\n\n if (toggleButton) {\n toggleButton.innerHTML = isOpen ? options.openIconHtml : options.closedIconHtml;\n }\n }\n catch (error) {\n console.warn('Failed to restore widget layout before initialization.', error);\n }\n finally {\n if (shell && shell.dataset.deferReveal !== 'true') {\n shell.style.visibility = '';\n }\n }\n\n var widgetApp = window.openAIChatManager.initialize(chatConfig);\n if (options.applySessionProfilePatch !== false && window.crestAppsAIChat && window.crestAppsAIChat.patchSessionProfileSync) {\n window.crestAppsAIChat.patchSessionProfileSync(widgetApp);\n }\n\n function revealShell() {\n if (!shell) {\n return;\n }\n\n shell.style.visibility = '';\n shell.dataset.deferReveal = 'false';\n }\n\n function syncOpenPanelPosition() {\n if (!widgetApp || typeof widgetApp.syncPanelPositionToToggle !== 'function') {\n return;\n }\n\n widgetApp.syncPanelPositionToToggle(false);\n }\n\n function updateTtsPlaybackButtons() {\n if (!widgetContainer) {\n return;\n }\n\n var buttons = widgetContainer.querySelectorAll('[data-tts-message-index]');\n buttons.forEach(function (button) {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === widgetApp.ttsPlayingMessageIndex;\n var iconHtml = isPlaying\n ? '<span class=\"fa-solid fa-circle-pause\" style=\"font-size: 0.9rem;\"></span>'\n : '<span class=\"fa-solid fa-circle-play\" style=\"font-size: 0.9rem;\"></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\n function queueTtsPlaybackButtonUpdate() {\n requestAnimationFrame(updateTtsPlaybackButtons);\n }\n\n function revealShellWhenStable(initialOpen) {\n if (!shell || shell.dataset.deferReveal !== 'true' || !initialOpen) {\n revealShell();\n return;\n }\n\n var hasRevealed = false;\n var resizeObserver = null;\n\n function finalizeReveal() {\n if (hasRevealed) {\n return;\n }\n\n hasRevealed = true;\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n\n requestAnimationFrame(function () {\n syncOpenPanelPosition();\n requestAnimationFrame(function () {\n revealShell();\n });\n });\n }\n\n if (typeof ResizeObserver === 'undefined') {\n window.setTimeout(finalizeReveal, 0);\n return;\n }\n\n var lastWidth = 0;\n var lastHeight = 0;\n var stablePasses = 0;\n\n resizeObserver = new ResizeObserver(function (entries) {\n var entry = entries && entries[0];\n if (!entry) {\n return;\n }\n\n var width = Math.round(entry.contentRect.width);\n var height = Math.round(entry.contentRect.height);\n if (!width || !height) {\n return;\n }\n\n syncOpenPanelPosition();\n\n if (width === lastWidth && height === lastHeight) {\n stablePasses++;\n }\n else {\n lastWidth = width;\n lastHeight = height;\n stablePasses = 0;\n }\n\n if (stablePasses >= 1) {\n finalizeReveal();\n }\n });\n\n resizeObserver.observe(widgetContainer);\n window.setTimeout(finalizeReveal, 150);\n }\n\n function setWidgetOpen(isOpen) {\n if (widgetApp) {\n var isCurrentlyOpen = widgetContainer.classList.contains('open');\n if (isOpen && !isCurrentlyOpen && typeof widgetApp.syncPanelPositionToToggle === 'function') {\n widgetApp.syncPanelPositionToToggle();\n }\n else if (!isOpen && isCurrentlyOpen && typeof widgetApp.syncTogglePositionToPanel === 'function') {\n widgetApp.syncTogglePositionToPanel();\n }\n }\n\n widgetContainer.classList.toggle('open', isOpen);\n widgetContainer.style.display = isOpen ? 'flex' : 'none';\n widgetContainer.setAttribute('aria-hidden', isOpen ? 'false' : 'true');\n toggleButton.innerHTML = isOpen ? options.openIconHtml : options.closedIconHtml;\n localStorage.setItem(widgetOpenStateKey, isOpen ? openStateValue : closedStateValue);\n\n if (isOpen && typeof window.renderPendingCharts === 'function') {\n setTimeout(function () { window.renderPendingCharts(); }, 100);\n }\n }\n\n var initialOpen = shell && shell.dataset.initialOpen === 'true';\n setWidgetOpen(initialOpen);\n revealShellWhenStable(initialOpen);\n\n if (widgetApp && typeof widgetApp.$watch === 'function') {\n widgetApp.$watch('ttsPlayingMessageIndex', function () {\n queueTtsPlaybackButtonUpdate();\n });\n }\n\n queueTtsPlaybackButtonUpdate();\n\n if (toggleButton) {\n toggleButton.addEventListener('click', function () {\n if (toggleButton.dataset.dragSuppressClick === 'true') {\n toggleButton.dataset.dragSuppressClick = 'false';\n return;\n }\n\n setWidgetOpen(!widgetContainer.classList.contains('open'));\n });\n }\n\n if (closeButton) {\n closeButton.addEventListener('click', function () {\n setWidgetOpen(false);\n });\n }\n\n return widgetApp;\n }\n\n return {\n initialize: initialize\n };\n}();\n"]}