quikchat 1.2.6 → 1.2.7

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.
Files changed (39) hide show
  1. package/README.md +7 -2
  2. package/dist/build-manifest.json +57 -57
  3. package/dist/quikchat-md-full.cjs.js +98 -5
  4. package/dist/quikchat-md-full.cjs.js.map +1 -1
  5. package/dist/quikchat-md-full.cjs.min.js +3 -3
  6. package/dist/quikchat-md-full.cjs.min.js.map +1 -1
  7. package/dist/quikchat-md-full.esm.js +98 -5
  8. package/dist/quikchat-md-full.esm.js.map +1 -1
  9. package/dist/quikchat-md-full.esm.min.js +3 -3
  10. package/dist/quikchat-md-full.esm.min.js.map +1 -1
  11. package/dist/quikchat-md-full.umd.js +98 -5
  12. package/dist/quikchat-md-full.umd.js.map +1 -1
  13. package/dist/quikchat-md-full.umd.min.js +3 -3
  14. package/dist/quikchat-md-full.umd.min.js.map +1 -1
  15. package/dist/quikchat-md.cjs.js +98 -5
  16. package/dist/quikchat-md.cjs.js.map +1 -1
  17. package/dist/quikchat-md.cjs.min.js +3 -3
  18. package/dist/quikchat-md.cjs.min.js.map +1 -1
  19. package/dist/quikchat-md.esm.js +98 -5
  20. package/dist/quikchat-md.esm.js.map +1 -1
  21. package/dist/quikchat-md.esm.min.js +3 -3
  22. package/dist/quikchat-md.esm.min.js.map +1 -1
  23. package/dist/quikchat-md.umd.js +98 -5
  24. package/dist/quikchat-md.umd.js.map +1 -1
  25. package/dist/quikchat-md.umd.min.js +3 -3
  26. package/dist/quikchat-md.umd.min.js.map +1 -1
  27. package/dist/quikchat.cjs.js +2 -2
  28. package/dist/quikchat.cjs.js.map +1 -1
  29. package/dist/quikchat.cjs.min.js +1 -1
  30. package/dist/quikchat.cjs.min.js.map +1 -1
  31. package/dist/quikchat.esm.js +2 -2
  32. package/dist/quikchat.esm.js.map +1 -1
  33. package/dist/quikchat.esm.min.js +1 -1
  34. package/dist/quikchat.esm.min.js.map +1 -1
  35. package/dist/quikchat.umd.js +2 -2
  36. package/dist/quikchat.umd.js.map +1 -1
  37. package/dist/quikchat.umd.min.js +1 -1
  38. package/dist/quikchat.umd.min.js.map +1 -1
  39. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"quikchat.umd.js","sources":["../src/quikchat.js"],"sourcesContent":["\nclass quikchat {\n /**\n *\n * @param string or DOM element parentElement\n * @param {*} meta\n */\n constructor(parentElement, onSend = () => { }, options = {}) {\n const defaultOpts = {\n theme: 'quikchat-theme-light',\n trackHistory: true,\n showTimestamps: false,\n titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n };\n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\n this._messageFormatter = meta.messageFormatter || null;\n this._sanitize = meta.sanitize || false;\n this._createWidget();\n // title area\n if (meta.titleArea) {\n this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);\n if (meta.titleArea.show === true) {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n // messages area\n if (meta.messagesArea) {\n this.messagesAreaAlternateColors(meta.messagesArea.alternating);\n }\n // timestamps\n if (meta.showTimestamps) {\n this.messagesAreaShowTimestamps(true);\n }\n // direction (ltr/rtl)\n if (meta.direction) {\n this.setDirection(meta.direction);\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory !== false;\n this._historyLimit = 10000000;\n this._history = [];\n }\n\n _createWidget() {\n const widgetHTML =\n `\n <div class=\"quikchat-base ${this.theme}\">\n <div class=\"quikchat-title-area\"></div>\n <div class=\"quikchat-messages-wrapper\"><div class=\"quikchat-messages-area\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\"></div><button class=\"quikchat-scroll-bottom\" aria-label=\"Scroll to bottom\"></button></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\" rows=\"1\" aria-label=\"Type a message\"></textarea>\n <button class=\"quikchat-input-send-btn\">Send</button>\n </div>\n </div>\n `;\n\n this._parentElement.innerHTML = widgetHTML;\n this._chatWidget = this._parentElement.querySelector('.quikchat-base');\n this._titleArea = this._chatWidget.querySelector('.quikchat-title-area');\n this._messagesWrapper = this._chatWidget.querySelector('.quikchat-messages-wrapper');\n this._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\n this._scrollBottomBtn = this._messagesWrapper.querySelector('.quikchat-scroll-bottom');\n this._inputArea = this._chatWidget.querySelector('.quikchat-input-area');\n this._textEntry = this._inputArea.querySelector('.quikchat-input-textbox');\n this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');\n this.msgid = 0;\n }\n\n /**\n * Attach event listeners to the widget\n */\n _attachEventListeners() {\n this._sendButton.addEventListener('click', () => {\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n });\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n event.preventDefault();\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n }\n });\n\n // Auto-grow textarea\n this._textEntry.addEventListener('input', () => this._autoGrowTextarea());\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight - 1;\n this._updateScrollBottomBtn();\n });\n\n // Scroll-to-bottom button\n this._scrollBottomBtn.addEventListener('click', () => this.scrollToBottom());\n\n // Ctrl+End to scroll to bottom\n this._chatWidget.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.key === 'End') {\n event.preventDefault();\n this.scrollToBottom();\n }\n });\n\n // Use ResizeObserver to detect parent container resize\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleContainerResize());\n this._resizeObserver.observe(this._parentElement);\n }\n }\n\n // set the onSend function callback.\n setCallbackOnSend(callback) {\n this._onSend = callback;\n }\n // set a callback for everytime a message is added (listener)\n setCallbackonMessageAdded(callback) {\n this._onMessageAdded = callback;\n }\n setCallbackonMessageAppend(callback) {\n this._onMessageAppend = callback;\n }\n setCallbackonMessageReplace(callback) {\n this._onMessageReplace = callback;\n }\n setCallbackonMessageDelete(callback) {\n this._onMessageDelete = callback;\n }\n\n // Public methods\n titleAreaToggle() {\n if (this._titleArea.style.display === 'none') {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n }\n\n titleAreaSetContents(title, align = 'center') {\n this._titleArea.innerHTML = title;\n this._titleArea.style.textAlign = align;\n }\n\n titleAreaGetContents() {\n return this._titleArea.innerHTML;\n }\n\n inputAreaToggle() {\n if (this._inputArea.style.display === 'none') {\n this.inputAreaShow();\n } else {\n this.inputAreaHide();\n }\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n }\n\n inputAreaSetEnabled(enabled) {\n this._textEntry.disabled = !enabled;\n this._sendButton.disabled = !enabled;\n }\n\n inputAreaSetButtonText(text) {\n this._sendButton.textContent = text;\n }\n\n inputAreaGetButtonText() {\n return this._sendButton.textContent;\n }\n\n setDirection(dir) {\n const d = dir === 'rtl' ? 'rtl' : 'ltr';\n this._chatWidget.setAttribute('dir', d);\n if (d === 'rtl') {\n this._chatWidget.classList.add('quikchat-rtl');\n } else {\n this._chatWidget.classList.remove('quikchat-rtl');\n }\n }\n\n getDirection() {\n return this._chatWidget.getAttribute('dir') || 'ltr';\n }\n\n _handleContainerResize() {\n // Layout is handled by CSS flexbox — no JS height calculation needed.\n // This hook exists for future use or custom resize callbacks.\n }\n\n scrollToBottom() {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n this.userScrolledUp = false;\n this._updateScrollBottomBtn();\n }\n\n _updateScrollBottomBtn() {\n if (this.userScrolledUp) {\n this._scrollBottomBtn.classList.add('quikchat-scroll-bottom-visible');\n } else {\n this._scrollBottomBtn.classList.remove('quikchat-scroll-bottom-visible');\n }\n }\n\n _autoGrowTextarea() {\n const el = this._textEntry;\n el.style.height = 'auto';\n const maxHeight = 120;\n el.style.height = Math.min(el.scrollHeight, maxHeight) + 'px';\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n _formatTimestamp(isoString) {\n const d = new Date(isoString);\n const h = d.getHours();\n const m = String(d.getMinutes()).padStart(2, '0');\n const ampm = h >= 12 ? 'PM' : 'AM';\n const h12 = h % 12 || 12;\n return h12 + ':' + m + ' ' + ampm;\n }\n\n messagesAreaShowTimestamps(show) {\n if (show) {\n this._messagesArea.classList.add('quikchat-show-timestamps');\n } else {\n this._messagesArea.classList.remove('quikchat-show-timestamps');\n }\n }\n\n messagesAreaShowTimestampsGet() {\n return this._messagesArea.classList.contains('quikchat-show-timestamps');\n }\n\n messagesAreaShowTimestampsToggle() {\n this._messagesArea.classList.toggle('quikchat-show-timestamps');\n }\n\n _escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n _processContent(content) {\n if (this._sanitize === true) {\n content = this._escapeHTML(content);\n } else if (typeof this._sanitize === 'function') {\n content = this._sanitize(content);\n }\n if (this._messageFormatter) {\n content = this._messageFormatter(content);\n }\n return content;\n }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n messageDiv.classList.add('quikchat-message', msgidClass);\n messageDiv.classList.add('quikchat-role-' + (input.role || 'user'));\n messageDiv.classList.add('quikchat-align-' + (input.align || 'right'));\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n // Visibility: default true, hidden messages get display:none\n const visible = input.visible !== false;\n if (!visible) {\n messageDiv.style.display = 'none';\n }\n\n // Tags: array of strings for group-based visibility control\n const tags = Array.isArray(input.tags) ? input.tags.slice() : [];\n\n const userDiv = document.createElement('div');\n userDiv.classList.add('quikchat-user-label');\n userDiv.style.textAlign = input.align;\n userDiv.innerHTML = input.userString;\n\n const contentDiv = document.createElement('div');\n contentDiv.classList.add('quikchat-message-content');\n contentDiv.style.textAlign = input.align;\n contentDiv.innerHTML = this._processContent(input.content);\n\n const timestamp = new Date().toISOString();\n const timestampSpan = document.createElement('span');\n timestampSpan.classList.add('quikchat-timestamp');\n timestampSpan.textContent = this._formatTimestamp(timestamp);\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\n messageDiv.appendChild(timestampSpan);\n this._messagesArea.appendChild(messageDiv);\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n\n this._textEntry.value = '';\n this._autoGrowTextarea();\n const updatedtime = timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, visible, tags, timestamp, updatedtime, messageDiv });\n if (this._history.length > this._historyLimit) {\n this._history.shift();\n }\n }\n\n if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n }\n\n return msgid;\n }\n\n\n messageAddNew(content = \"\", userString = \"user\", align = \"right\", role = \"user\") {\n return this.messageAddFull(\n { content: content, userString: userString, align: align, role: role }\n );\n }\n messageRemove(n) {\n let success = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n success = true;\n }\n catch (_error) {\n // Message ID not found\n }\n if (success) {\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n if (this._onMessageDelete) {\n this._onMessageDelete(this, n);\n }\n }\n return success;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (_error) {\n // Message ID not found\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\";\n try {\n content = this._history.filter((item) => item.msgid === n)[0].content;\n }\n catch (_error) {\n // Message ID not found\n }\n return content;\n }\n\n messageSetVisible(n, visible) {\n const msgEl = this.messageGetDOMObject(n);\n if (!msgEl) return false;\n msgEl.style.display = visible ? '' : 'none';\n const item = this._history.find((entry) => entry.msgid === n);\n if (item) item.visible = visible;\n return true;\n }\n\n messageGetVisible(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item ? item.visible !== false : false;\n }\n\n messageToggleVisible(n) {\n const current = this.messageGetVisible(n);\n return this.messageSetVisible(n, !current);\n }\n\n messageSetVisibleByTag(tag, visible) {\n let count = 0;\n for (const item of this._history) {\n if (item.tags && item.tags.includes(tag)) {\n this.messageSetVisible(item.msgid, visible);\n count++;\n }\n }\n return count;\n }\n\n messageGetTags(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item && item.tags ? item.tags.slice() : [];\n }\n\n messageSetTags(n, tags) {\n const item = this._history.find((entry) => entry.msgid === n);\n if (!item) return false;\n item.tags = Array.isArray(tags) ? tags.slice() : [];\n return true;\n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(item.content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageAppend) {\n this._onMessageAppend(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageReplace) {\n this._onMessageReplace(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n messageAddTypingIndicator(userString = '', align = 'left') {\n const msgid = this.messageAddFull({\n content: '',\n userString: userString,\n align: align,\n role: 'assistant',\n });\n const msgEl = this.messageGetDOMObject(msgid);\n msgEl.classList.add('quikchat-typing');\n const contentDiv = msgEl.querySelector('.quikchat-message-content');\n contentDiv.innerHTML = '<span class=\"quikchat-typing-dots\"><span>.</span><span>.</span><span>.</span></span>';\n return msgid;\n }\n\n setMessageFormatter(formatter) {\n this._messageFormatter = formatter;\n }\n\n setSanitize(sanitize) {\n this._sanitize = sanitize;\n }\n\n // history functions\n /**\n *\n * @param {*} n\n * @param {*} m\n * @returns array of history messages\n */\n historyGet(n, m) {\n if (n === undefined) {\n return this._history.slice();\n }\n if (m === undefined) {\n if (n < 0) {\n return this._history.slice(n);\n }\n return this._history.slice(n, n + 1);\n }\n return this._history.slice(n, m);\n }\n\n historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n];\n }\n return {};\n }\n\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n].content;\n }\n return \"\";\n }\n\n historyExport() {\n return this._history.map((item) => ({\n msgid: item.msgid,\n content: item.content,\n userString: item.userString,\n align: item.align,\n role: item.role,\n userID: item.userID,\n visible: item.visible,\n tags: item.tags ? item.tags.slice() : [],\n timestamp: item.timestamp,\n updatedtime: item.updatedtime,\n }));\n }\n\n historyImport(data) {\n // Clear existing messages from DOM and history\n this._messagesArea.innerHTML = '';\n this._history = [];\n this.msgid = 0;\n\n for (const entry of data) {\n this.messageAddFull({\n content: entry.content || '',\n userString: entry.userString || 'user',\n align: entry.align || 'right',\n role: entry.role || 'user',\n userID: entry.userID,\n visible: entry.visible,\n tags: entry.tags,\n });\n }\n }\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.2.6\", \"license\": \"BSD-2\", \"url\": \"https://github/deftio/quikchat\" };\n }\n\n /**\n * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.\n * borrowed from github.com/deftio/bitwrench.js\n * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).\n * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.\n * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.\n *\n * @returns {string} A string of Lorem Ipsum text.\n *\n * @example\n * // Returns 200 characters of Lorem Ipsum starting from index 50\n * loremIpsum(200, 50);\n *\n * @example\n * //Returns a 200 Lorem Ipsum characters starting from a random index\n * loremIpsum(200);\n */\n\n static loremIpsum(numChars, startSpot = undefined, startWithCapitalLetter = true) {\n const loremText = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \";\n\n if (typeof numChars !== \"number\") {\n numChars = Math.floor(Math.random() * 126) + 25;\n }\n\n if (startSpot === undefined) {\n startSpot = Math.floor(Math.random() * loremText.length);\n }\n\n startSpot = startSpot % loremText.length;\n\n // Move startSpot to the next non-whitespace and non-punctuation character\n while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {\n startSpot = (startSpot + 1) % loremText.length;\n }\n\n const l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n let s = \"\";\n while (numChars > 0) {\n s += numChars < l.length ? l.substring(0, numChars) : l;\n numChars -= l.length;\n }\n\n if (s[s.length - 1] === \" \") {\n s = s.substring(0, s.length - 1) + \".\"; // always end on non-whitespace. \".\" was chosen arbitrarily.\n }\n\n if (startWithCapitalLetter) {\n s = s[0].toUpperCase() + s.substring(1);\n }\n\n return s;\n };\n\n\n}\n\nexport default quikchat;\n"],"names":["quikchat","parentElement","onSend","arguments","length","undefined","options","_classCallCheck","defaultOpts","theme","trackHistory","showTimestamps","titleArea","title","show","align","messagesArea","alternating","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_messageFormatter","messageFormatter","_sanitize","sanitize","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","messagesAreaShowTimestamps","direction","setDirection","_attachEventListeners","_historyLimit","_history","_createClass","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesWrapper","_messagesArea","_scrollBottomBtn","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","text","trim","event","shiftKey","keyCode","preventDefault","_autoGrowTextarea","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","_updateScrollBottomBtn","scrollToBottom","ctrlKey","ResizeObserver","_resizeObserver","_handleContainerResize","observe","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","setCallbackonMessageAppend","_onMessageAppend","setCallbackonMessageReplace","_onMessageReplace","setCallbackonMessageDelete","_onMessageDelete","titleAreaToggle","style","display","textAlign","titleAreaGetContents","inputAreaToggle","inputAreaShow","inputAreaHide","inputAreaSetEnabled","enabled","disabled","inputAreaSetButtonText","textContent","inputAreaGetButtonText","dir","d","setAttribute","classList","add","remove","getDirection","getAttribute","el","height","maxHeight","Math","min","overflowY","_formatTimestamp","isoString","Date","h","getHours","m","String","getMinutes","padStart","ampm","h12","messagesAreaShowTimestampsGet","contains","messagesAreaShowTimestampsToggle","toggle","_escapeHTML","str","div","createElement","_processContent","content","alt","messagesAreaAlternateColorsToggle","messagesAreaAlternateColorsGet","messageAddFull","input","userString","role","userID","messageDiv","msgidClass","children","visible","tags","Array","isArray","slice","userDiv","contentDiv","timestamp","toISOString","timestampSpan","appendChild","updatedtime","push","shift","messageAddNew","messageRemove","n","success","removeChild","_error","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","filter","messageSetVisible","msgEl","find","entry","messageGetVisible","messageToggleVisible","current","messageSetVisibleByTag","tag","count","_iterator","_createForOfIteratorHelper","_step","s","done","includes","err","e","f","messageGetTags","messageSetTags","messageAppendContent","messageReplaceContent","messageAddTypingIndicator","setMessageFormatter","formatter","setSanitize","historyGet","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","historyExport","map","historyImport","data","_iterator2","_step2","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","floor","random","test","l","substring","toUpperCase"],"mappings":"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"}
1
+ {"version":3,"file":"quikchat.umd.js","sources":["../src/quikchat.js"],"sourcesContent":["\nclass quikchat {\n /**\n *\n * @param string or DOM element parentElement\n * @param {*} meta\n */\n constructor(parentElement, onSend = () => { }, options = {}) {\n const defaultOpts = {\n theme: 'quikchat-theme-light',\n trackHistory: true,\n showTimestamps: false,\n titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n };\n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\n this._messageFormatter = meta.messageFormatter || null;\n this._sanitize = meta.sanitize || false;\n this._createWidget();\n // title area\n if (meta.titleArea) {\n this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);\n if (meta.titleArea.show === true) {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n // messages area\n if (meta.messagesArea) {\n this.messagesAreaAlternateColors(meta.messagesArea.alternating);\n }\n // timestamps\n if (meta.showTimestamps) {\n this.messagesAreaShowTimestamps(true);\n }\n // direction (ltr/rtl)\n if (meta.direction) {\n this.setDirection(meta.direction);\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory !== false;\n this._historyLimit = 10000000;\n this._history = [];\n }\n\n _createWidget() {\n const widgetHTML =\n `\n <div class=\"quikchat-base ${this.theme}\">\n <div class=\"quikchat-title-area\"></div>\n <div class=\"quikchat-messages-wrapper\"><div class=\"quikchat-messages-area\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\"></div><button class=\"quikchat-scroll-bottom\" aria-label=\"Scroll to bottom\"></button></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\" rows=\"1\" aria-label=\"Type a message\"></textarea>\n <button class=\"quikchat-input-send-btn\">Send</button>\n </div>\n </div>\n `;\n\n this._parentElement.innerHTML = widgetHTML;\n this._chatWidget = this._parentElement.querySelector('.quikchat-base');\n this._titleArea = this._chatWidget.querySelector('.quikchat-title-area');\n this._messagesWrapper = this._chatWidget.querySelector('.quikchat-messages-wrapper');\n this._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\n this._scrollBottomBtn = this._messagesWrapper.querySelector('.quikchat-scroll-bottom');\n this._inputArea = this._chatWidget.querySelector('.quikchat-input-area');\n this._textEntry = this._inputArea.querySelector('.quikchat-input-textbox');\n this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');\n this.msgid = 0;\n }\n\n /**\n * Attach event listeners to the widget\n */\n _attachEventListeners() {\n this._sendButton.addEventListener('click', () => {\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n });\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n event.preventDefault();\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n }\n });\n\n // Auto-grow textarea\n this._textEntry.addEventListener('input', () => this._autoGrowTextarea());\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight - 1;\n this._updateScrollBottomBtn();\n });\n\n // Scroll-to-bottom button\n this._scrollBottomBtn.addEventListener('click', () => this.scrollToBottom());\n\n // Ctrl+End to scroll to bottom\n this._chatWidget.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.key === 'End') {\n event.preventDefault();\n this.scrollToBottom();\n }\n });\n\n // Use ResizeObserver to detect parent container resize\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleContainerResize());\n this._resizeObserver.observe(this._parentElement);\n }\n }\n\n // set the onSend function callback.\n setCallbackOnSend(callback) {\n this._onSend = callback;\n }\n // set a callback for everytime a message is added (listener)\n setCallbackonMessageAdded(callback) {\n this._onMessageAdded = callback;\n }\n setCallbackonMessageAppend(callback) {\n this._onMessageAppend = callback;\n }\n setCallbackonMessageReplace(callback) {\n this._onMessageReplace = callback;\n }\n setCallbackonMessageDelete(callback) {\n this._onMessageDelete = callback;\n }\n\n // Public methods\n titleAreaToggle() {\n if (this._titleArea.style.display === 'none') {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n }\n\n titleAreaSetContents(title, align = 'center') {\n this._titleArea.innerHTML = title;\n this._titleArea.style.textAlign = align;\n }\n\n titleAreaGetContents() {\n return this._titleArea.innerHTML;\n }\n\n inputAreaToggle() {\n if (this._inputArea.style.display === 'none') {\n this.inputAreaShow();\n } else {\n this.inputAreaHide();\n }\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n }\n\n inputAreaSetEnabled(enabled) {\n this._textEntry.disabled = !enabled;\n this._sendButton.disabled = !enabled;\n }\n\n inputAreaSetButtonText(text) {\n this._sendButton.textContent = text;\n }\n\n inputAreaGetButtonText() {\n return this._sendButton.textContent;\n }\n\n setDirection(dir) {\n const d = dir === 'rtl' ? 'rtl' : 'ltr';\n this._chatWidget.setAttribute('dir', d);\n if (d === 'rtl') {\n this._chatWidget.classList.add('quikchat-rtl');\n } else {\n this._chatWidget.classList.remove('quikchat-rtl');\n }\n }\n\n getDirection() {\n return this._chatWidget.getAttribute('dir') || 'ltr';\n }\n\n _handleContainerResize() {\n // Layout is handled by CSS flexbox — no JS height calculation needed.\n // This hook exists for future use or custom resize callbacks.\n }\n\n scrollToBottom() {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n this.userScrolledUp = false;\n this._updateScrollBottomBtn();\n }\n\n _updateScrollBottomBtn() {\n if (this.userScrolledUp) {\n this._scrollBottomBtn.classList.add('quikchat-scroll-bottom-visible');\n } else {\n this._scrollBottomBtn.classList.remove('quikchat-scroll-bottom-visible');\n }\n }\n\n _autoGrowTextarea() {\n const el = this._textEntry;\n el.style.height = 'auto';\n const maxHeight = 120;\n el.style.height = Math.min(el.scrollHeight, maxHeight) + 'px';\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n _formatTimestamp(isoString) {\n const d = new Date(isoString);\n const h = d.getHours();\n const m = String(d.getMinutes()).padStart(2, '0');\n const ampm = h >= 12 ? 'PM' : 'AM';\n const h12 = h % 12 || 12;\n return h12 + ':' + m + ' ' + ampm;\n }\n\n messagesAreaShowTimestamps(show) {\n if (show) {\n this._messagesArea.classList.add('quikchat-show-timestamps');\n } else {\n this._messagesArea.classList.remove('quikchat-show-timestamps');\n }\n }\n\n messagesAreaShowTimestampsGet() {\n return this._messagesArea.classList.contains('quikchat-show-timestamps');\n }\n\n messagesAreaShowTimestampsToggle() {\n this._messagesArea.classList.toggle('quikchat-show-timestamps');\n }\n\n _escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n _processContent(content) {\n if (this._sanitize === true) {\n content = this._escapeHTML(content);\n } else if (typeof this._sanitize === 'function') {\n content = this._sanitize(content);\n }\n if (this._messageFormatter) {\n content = this._messageFormatter(content);\n }\n return content;\n }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n messageDiv.classList.add('quikchat-message', msgidClass);\n messageDiv.classList.add('quikchat-role-' + (input.role || 'user'));\n messageDiv.classList.add('quikchat-align-' + (input.align || 'right'));\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n // Visibility: default true, hidden messages get display:none\n const visible = input.visible !== false;\n if (!visible) {\n messageDiv.style.display = 'none';\n }\n\n // Tags: array of strings for group-based visibility control\n const tags = Array.isArray(input.tags) ? input.tags.slice() : [];\n\n const userDiv = document.createElement('div');\n userDiv.classList.add('quikchat-user-label');\n userDiv.style.textAlign = input.align;\n userDiv.innerHTML = input.userString;\n\n const contentDiv = document.createElement('div');\n contentDiv.classList.add('quikchat-message-content');\n contentDiv.style.textAlign = input.align;\n contentDiv.innerHTML = this._processContent(input.content);\n\n const timestamp = new Date().toISOString();\n const timestampSpan = document.createElement('span');\n timestampSpan.classList.add('quikchat-timestamp');\n timestampSpan.textContent = this._formatTimestamp(timestamp);\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\n messageDiv.appendChild(timestampSpan);\n this._messagesArea.appendChild(messageDiv);\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n\n this._textEntry.value = '';\n this._autoGrowTextarea();\n const updatedtime = timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, visible, tags, timestamp, updatedtime, messageDiv });\n if (this._history.length > this._historyLimit) {\n this._history.shift();\n }\n }\n\n if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n }\n\n return msgid;\n }\n\n\n messageAddNew(content = \"\", userString = \"user\", align = \"right\", role = \"user\") {\n return this.messageAddFull(\n { content: content, userString: userString, align: align, role: role }\n );\n }\n messageRemove(n) {\n let success = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n success = true;\n }\n catch (_error) {\n // Message ID not found\n }\n if (success) {\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n if (this._onMessageDelete) {\n this._onMessageDelete(this, n);\n }\n }\n return success;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (_error) {\n // Message ID not found\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\";\n try {\n content = this._history.filter((item) => item.msgid === n)[0].content;\n }\n catch (_error) {\n // Message ID not found\n }\n return content;\n }\n\n messageSetVisible(n, visible) {\n const msgEl = this.messageGetDOMObject(n);\n if (!msgEl) return false;\n msgEl.style.display = visible ? '' : 'none';\n const item = this._history.find((entry) => entry.msgid === n);\n if (item) item.visible = visible;\n return true;\n }\n\n messageGetVisible(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item ? item.visible !== false : false;\n }\n\n messageToggleVisible(n) {\n const current = this.messageGetVisible(n);\n return this.messageSetVisible(n, !current);\n }\n\n messageSetVisibleByTag(tag, visible) {\n let count = 0;\n for (const item of this._history) {\n if (item.tags && item.tags.includes(tag)) {\n this.messageSetVisible(item.msgid, visible);\n count++;\n }\n }\n return count;\n }\n\n messageGetTags(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item && item.tags ? item.tags.slice() : [];\n }\n\n messageSetTags(n, tags) {\n const item = this._history.find((entry) => entry.msgid === n);\n if (!item) return false;\n item.tags = Array.isArray(tags) ? tags.slice() : [];\n return true;\n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(item.content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageAppend) {\n this._onMessageAppend(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageReplace) {\n this._onMessageReplace(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n messageAddTypingIndicator(userString = '', align = 'left') {\n const msgid = this.messageAddFull({\n content: '',\n userString: userString,\n align: align,\n role: 'assistant',\n });\n const msgEl = this.messageGetDOMObject(msgid);\n msgEl.classList.add('quikchat-typing');\n const contentDiv = msgEl.querySelector('.quikchat-message-content');\n contentDiv.innerHTML = '<span class=\"quikchat-typing-dots\"><span>.</span><span>.</span><span>.</span></span>';\n return msgid;\n }\n\n setMessageFormatter(formatter) {\n this._messageFormatter = formatter;\n }\n\n setSanitize(sanitize) {\n this._sanitize = sanitize;\n }\n\n // history functions\n /**\n *\n * @param {*} n\n * @param {*} m\n * @returns array of history messages\n */\n historyGet(n, m) {\n if (n === undefined) {\n return this._history.slice();\n }\n if (m === undefined) {\n if (n < 0) {\n return this._history.slice(n);\n }\n return this._history.slice(n, n + 1);\n }\n return this._history.slice(n, m);\n }\n\n historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n];\n }\n return {};\n }\n\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n].content;\n }\n return \"\";\n }\n\n historyExport() {\n return this._history.map((item) => ({\n msgid: item.msgid,\n content: item.content,\n userString: item.userString,\n align: item.align,\n role: item.role,\n userID: item.userID,\n visible: item.visible,\n tags: item.tags ? item.tags.slice() : [],\n timestamp: item.timestamp,\n updatedtime: item.updatedtime,\n }));\n }\n\n historyImport(data) {\n // Clear existing messages from DOM and history\n this._messagesArea.innerHTML = '';\n this._history = [];\n this.msgid = 0;\n\n for (const entry of data) {\n this.messageAddFull({\n content: entry.content || '',\n userString: entry.userString || 'user',\n align: entry.align || 'right',\n role: entry.role || 'user',\n userID: entry.userID,\n visible: entry.visible,\n tags: entry.tags,\n });\n }\n }\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.2.7\", \"license\": \"BSD-2\", \"url\": \"https://github.com/deftio/quikchat\" };\n }\n\n /**\n * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.\n * borrowed from github.com/deftio/bitwrench.js\n * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).\n * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.\n * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.\n *\n * @returns {string} A string of Lorem Ipsum text.\n *\n * @example\n * // Returns 200 characters of Lorem Ipsum starting from index 50\n * loremIpsum(200, 50);\n *\n * @example\n * //Returns a 200 Lorem Ipsum characters starting from a random index\n * loremIpsum(200);\n */\n\n static loremIpsum(numChars, startSpot = undefined, startWithCapitalLetter = true) {\n const loremText = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \";\n\n if (typeof numChars !== \"number\") {\n numChars = Math.floor(Math.random() * 126) + 25;\n }\n\n if (startSpot === undefined) {\n startSpot = Math.floor(Math.random() * loremText.length);\n }\n\n startSpot = startSpot % loremText.length;\n\n // Move startSpot to the next non-whitespace and non-punctuation character\n while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {\n startSpot = (startSpot + 1) % loremText.length;\n }\n\n const l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n let s = \"\";\n while (numChars > 0) {\n s += numChars < l.length ? l.substring(0, numChars) : l;\n numChars -= l.length;\n }\n\n if (s[s.length - 1] === \" \") {\n s = s.substring(0, s.length - 1) + \".\"; // always end on non-whitespace. \".\" was chosen arbitrarily.\n }\n\n if (startWithCapitalLetter) {\n s = s[0].toUpperCase() + s.substring(1);\n }\n\n return s;\n };\n\n\n}\n\nexport default quikchat;\n"],"names":["quikchat","parentElement","onSend","arguments","length","undefined","options","_classCallCheck","defaultOpts","theme","trackHistory","showTimestamps","titleArea","title","show","align","messagesArea","alternating","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_messageFormatter","messageFormatter","_sanitize","sanitize","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","messagesAreaShowTimestamps","direction","setDirection","_attachEventListeners","_historyLimit","_history","_createClass","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesWrapper","_messagesArea","_scrollBottomBtn","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","text","trim","event","shiftKey","keyCode","preventDefault","_autoGrowTextarea","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","_updateScrollBottomBtn","scrollToBottom","ctrlKey","ResizeObserver","_resizeObserver","_handleContainerResize","observe","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","setCallbackonMessageAppend","_onMessageAppend","setCallbackonMessageReplace","_onMessageReplace","setCallbackonMessageDelete","_onMessageDelete","titleAreaToggle","style","display","textAlign","titleAreaGetContents","inputAreaToggle","inputAreaShow","inputAreaHide","inputAreaSetEnabled","enabled","disabled","inputAreaSetButtonText","textContent","inputAreaGetButtonText","dir","d","setAttribute","classList","add","remove","getDirection","getAttribute","el","height","maxHeight","Math","min","overflowY","_formatTimestamp","isoString","Date","h","getHours","m","String","getMinutes","padStart","ampm","h12","messagesAreaShowTimestampsGet","contains","messagesAreaShowTimestampsToggle","toggle","_escapeHTML","str","div","createElement","_processContent","content","alt","messagesAreaAlternateColorsToggle","messagesAreaAlternateColorsGet","messageAddFull","input","userString","role","userID","messageDiv","msgidClass","children","visible","tags","Array","isArray","slice","userDiv","contentDiv","timestamp","toISOString","timestampSpan","appendChild","updatedtime","push","shift","messageAddNew","messageRemove","n","success","removeChild","_error","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","filter","messageSetVisible","msgEl","find","entry","messageGetVisible","messageToggleVisible","current","messageSetVisibleByTag","tag","count","_iterator","_createForOfIteratorHelper","_step","s","done","includes","err","e","f","messageGetTags","messageSetTags","messageAppendContent","messageReplaceContent","messageAddTypingIndicator","setMessageFormatter","formatter","setSanitize","historyGet","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","historyExport","map","historyImport","data","_iterator2","_step2","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","floor","random","test","l","substring","toUpperCase"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).quikchat=t()}(this,(function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var s=0,i=Array(t);s<t;s++)i[s]=e[s];return i}function t(e,t){for(var s=0;s<t.length;s++){var i=t[s];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,r(i.key),i)}}function s(t,s){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!i){if(Array.isArray(t)||(i=function(t,s){if(t){if("string"==typeof t)return e(t,s);var i={}.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?e(t,s):void 0}}(t))||s){i&&(t=i);var n=0,a=function(){};return{s:a,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,l=!1;return{s:function(){i=i.call(t)},n:function(){var e=i.next();return o=e.done,e},e:function(e){l=!0,r=e},f:function(){try{o||null==i.return||i.return()}finally{if(l)throw r}}}}function i(e,t,s){return(t=r(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function n(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,i)}return s}function a(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?n(Object(s),!0).forEach((function(t){i(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):n(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}function r(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}var o=function(){return e=function e(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var n=a(a({},{theme:"quikchat-theme-light",trackHistory:!0,showTimestamps:!1,titleArea:{title:"Chat",show:!1,align:"center"},messagesArea:{alternating:!0}}),i);"string"==typeof t&&(t=document.querySelector(t)),this._parentElement=t,this._theme=n.theme,this._onSend=s||function(){},this._messageFormatter=n.messageFormatter||null,this._sanitize=n.sanitize||!1,this._createWidget(),n.titleArea&&(this.titleAreaSetContents(n.titleArea.title,n.titleArea.align),!0===n.titleArea.show?this.titleAreaShow():this.titleAreaHide()),n.messagesArea&&this.messagesAreaAlternateColors(n.messagesArea.alternating),n.showTimestamps&&this.messagesAreaShowTimestamps(!0),n.direction&&this.setDirection(n.direction),this._attachEventListeners(),this.trackHistory=!1!==n.trackHistory,this._historyLimit=1e7,this._history=[]},i=[{key:"_createWidget",value:function(){var e='\n <div class="quikchat-base '.concat(this.theme,'">\n <div class="quikchat-title-area"></div>\n <div class="quikchat-messages-wrapper"><div class="quikchat-messages-area" role="log" aria-live="polite" aria-label="Chat messages"></div><button class="quikchat-scroll-bottom" aria-label="Scroll to bottom"></button></div>\n <div class="quikchat-input-area">\n <textarea class="quikchat-input-textbox" rows="1" aria-label="Type a message"></textarea>\n <button class="quikchat-input-send-btn">Send</button>\n </div>\n </div>\n ');this._parentElement.innerHTML=e,this._chatWidget=this._parentElement.querySelector(".quikchat-base"),this._titleArea=this._chatWidget.querySelector(".quikchat-title-area"),this._messagesWrapper=this._chatWidget.querySelector(".quikchat-messages-wrapper"),this._messagesArea=this._chatWidget.querySelector(".quikchat-messages-area"),this._scrollBottomBtn=this._messagesWrapper.querySelector(".quikchat-scroll-bottom"),this._inputArea=this._chatWidget.querySelector(".quikchat-input-area"),this._textEntry=this._inputArea.querySelector(".quikchat-input-textbox"),this._sendButton=this._inputArea.querySelector(".quikchat-input-send-btn"),this.msgid=0}},{key:"_attachEventListeners",value:function(){var e=this;this._sendButton.addEventListener("click",(function(){var t=e._textEntry.value.trim();""!==t&&e._onSend(e,t)})),this._textEntry.addEventListener("keydown",(function(t){if(t.shiftKey&&13===t.keyCode){t.preventDefault();var s=e._textEntry.value.trim();if(""===s)return;e._onSend(e,s)}})),this._textEntry.addEventListener("input",(function(){return e._autoGrowTextarea()})),this._messagesArea.addEventListener("scroll",(function(){var t=e._messagesArea,s=t.scrollTop,i=t.scrollHeight,n=t.clientHeight;e.userScrolledUp=s+n<i-1,e._updateScrollBottomBtn()})),this._scrollBottomBtn.addEventListener("click",(function(){return e.scrollToBottom()})),this._chatWidget.addEventListener("keydown",(function(t){t.ctrlKey&&"End"===t.key&&(t.preventDefault(),e.scrollToBottom())})),"undefined"!=typeof ResizeObserver&&(this._resizeObserver=new ResizeObserver((function(){return e._handleContainerResize()})),this._resizeObserver.observe(this._parentElement))}},{key:"setCallbackOnSend",value:function(e){this._onSend=e}},{key:"setCallbackonMessageAdded",value:function(e){this._onMessageAdded=e}},{key:"setCallbackonMessageAppend",value:function(e){this._onMessageAppend=e}},{key:"setCallbackonMessageReplace",value:function(e){this._onMessageReplace=e}},{key:"setCallbackonMessageDelete",value:function(e){this._onMessageDelete=e}},{key:"titleAreaToggle",value:function(){"none"===this._titleArea.style.display?this.titleAreaShow():this.titleAreaHide()}},{key:"titleAreaShow",value:function(){this._titleArea.style.display=""}},{key:"titleAreaHide",value:function(){this._titleArea.style.display="none"}},{key:"titleAreaSetContents",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"center";this._titleArea.innerHTML=e,this._titleArea.style.textAlign=t}},{key:"titleAreaGetContents",value:function(){return this._titleArea.innerHTML}},{key:"inputAreaToggle",value:function(){"none"===this._inputArea.style.display?this.inputAreaShow():this.inputAreaHide()}},{key:"inputAreaShow",value:function(){this._inputArea.style.display=""}},{key:"inputAreaHide",value:function(){this._inputArea.style.display="none"}},{key:"inputAreaSetEnabled",value:function(e){this._textEntry.disabled=!e,this._sendButton.disabled=!e}},{key:"inputAreaSetButtonText",value:function(e){this._sendButton.textContent=e}},{key:"inputAreaGetButtonText",value:function(){return this._sendButton.textContent}},{key:"setDirection",value:function(e){var t="rtl"===e?"rtl":"ltr";this._chatWidget.setAttribute("dir",t),"rtl"===t?this._chatWidget.classList.add("quikchat-rtl"):this._chatWidget.classList.remove("quikchat-rtl")}},{key:"getDirection",value:function(){return this._chatWidget.getAttribute("dir")||"ltr"}},{key:"_handleContainerResize",value:function(){}},{key:"scrollToBottom",value:function(){this._messagesArea.scrollTop=this._messagesArea.scrollHeight,this.userScrolledUp=!1,this._updateScrollBottomBtn()}},{key:"_updateScrollBottomBtn",value:function(){this.userScrolledUp?this._scrollBottomBtn.classList.add("quikchat-scroll-bottom-visible"):this._scrollBottomBtn.classList.remove("quikchat-scroll-bottom-visible")}},{key:"_autoGrowTextarea",value:function(){var e=this._textEntry;e.style.height="auto",e.style.height=Math.min(e.scrollHeight,120)+"px",e.style.overflowY=e.scrollHeight>120?"auto":"hidden"}},{key:"_formatTimestamp",value:function(e){var t=new Date(e),s=t.getHours();return(s%12||12)+":"+String(t.getMinutes()).padStart(2,"0")+" "+(s>=12?"PM":"AM")}},{key:"messagesAreaShowTimestamps",value:function(e){e?this._messagesArea.classList.add("quikchat-show-timestamps"):this._messagesArea.classList.remove("quikchat-show-timestamps")}},{key:"messagesAreaShowTimestampsGet",value:function(){return this._messagesArea.classList.contains("quikchat-show-timestamps")}},{key:"messagesAreaShowTimestampsToggle",value:function(){this._messagesArea.classList.toggle("quikchat-show-timestamps")}},{key:"_escapeHTML",value:function(e){var t=document.createElement("div");return t.textContent=e,t.innerHTML}},{key:"_processContent",value:function(e){return!0===this._sanitize?e=this._escapeHTML(e):"function"==typeof this._sanitize&&(e=this._sanitize(e)),this._messageFormatter&&(e=this._messageFormatter(e)),e}},{key:"messagesAreaAlternateColors",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return e?this._messagesArea.classList.add("quikchat-messages-area-alt"):this._messagesArea.classList.remove("quikchat-messages-area-alt"),!0===e}},{key:"messagesAreaAlternateColorsToggle",value:function(){this._messagesArea.classList.toggle("quikchat-messages-area-alt")}},{key:"messagesAreaAlternateColorsGet",value:function(){return this._messagesArea.classList.contains("quikchat-messages-area-alt")}},{key:"messageAddFull",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{content:"",userString:"user",align:"right",role:"user",userID:-1},t=this.msgid,s=document.createElement("div"),i="quikchat-msgid-"+String(t).padStart(10,"0");s.classList.add("quikchat-message",i),s.classList.add("quikchat-role-"+(e.role||"user")),s.classList.add("quikchat-align-"+(e.align||"right")),this.msgid++,s.classList.add(this._messagesArea.children.length%2==1?"quikchat-message-1":"quikchat-message-2");var n=!1!==e.visible;n||(s.style.display="none");var r=Array.isArray(e.tags)?e.tags.slice():[],o=document.createElement("div");o.classList.add("quikchat-user-label"),o.style.textAlign=e.align,o.innerHTML=e.userString;var l=document.createElement("div");l.classList.add("quikchat-message-content"),l.style.textAlign=e.align,l.innerHTML=this._processContent(e.content);var u=(new Date).toISOString(),c=document.createElement("span");c.classList.add("quikchat-timestamp"),c.textContent=this._formatTimestamp(u),s.appendChild(o),s.appendChild(l),s.appendChild(c),this._messagesArea.appendChild(s),this.userScrolledUp||(this._messagesArea.scrollTop=this._messagesArea.scrollHeight),this._textEntry.value="",this._autoGrowTextarea();var h=u;return this.trackHistory&&(this._history.push(a(a({msgid:t},e),{},{visible:n,tags:r,timestamp:u,updatedtime:h,messageDiv:s})),this._history.length>this._historyLimit&&this._history.shift()),this._onMessageAdded&&this._onMessageAdded(this,t),t}},{key:"messageAddNew",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"user",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"right",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"user";return this.messageAddFull({content:e,userString:t,align:s,role:i})}},{key:"messageRemove",value:function(e){var t=!1;try{this._messagesArea.removeChild(this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0")))),t=!0}catch(e){}return t&&(this._history.splice(this._history.findIndex((function(t){return t.msgid===e})),1),this._onMessageDelete&&this._onMessageDelete(this,e)),t}},{key:"messageGetDOMObject",value:function(e){var t=null;try{t=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0")))}catch(e){}return t}},{key:"messageGetContent",value:function(e){var t="";try{t=this._history.filter((function(t){return t.msgid===e}))[0].content}catch(e){}return t}},{key:"messageSetVisible",value:function(e,t){var s=this.messageGetDOMObject(e);if(!s)return!1;s.style.display=t?"":"none";var i=this._history.find((function(t){return t.msgid===e}));return i&&(i.visible=t),!0}},{key:"messageGetVisible",value:function(e){var t=this._history.find((function(t){return t.msgid===e}));return!!t&&!1!==t.visible}},{key:"messageToggleVisible",value:function(e){var t=this.messageGetVisible(e);return this.messageSetVisible(e,!t)}},{key:"messageSetVisibleByTag",value:function(e,t){var i,n=0,a=s(this._history);try{for(a.s();!(i=a.n()).done;){var r=i.value;r.tags&&r.tags.includes(e)&&(this.messageSetVisible(r.msgid,t),n++)}}catch(e){a.e(e)}finally{a.f()}return n}},{key:"messageGetTags",value:function(e){var t=this._history.find((function(t){return t.msgid===e}));return t&&t.tags?t.tags.slice():[]}},{key:"messageSetTags",value:function(e,t){var s=this._history.find((function(t){return t.msgid===e}));return!!s&&(s.tags=Array.isArray(t)?t.slice():[],!0)}},{key:"messageAppendContent",value:function(e,t){var s=!1;try{var i=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))),n=this._history.filter((function(t){return t.msgid===e}))[0];n.content+=t,n.updatedtime=(new Date).toISOString(),i.querySelector(".quikchat-message-content").innerHTML=this._processContent(n.content),i.classList.remove("quikchat-typing"),s=!0,this.userScrolledUp||(this._messagesArea.scrollTop=this._messagesArea.scrollHeight),this._onMessageAppend&&this._onMessageAppend(this,e,t)}catch(e){}return s}},{key:"messageReplaceContent",value:function(e,t){var s=!1;try{var i=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))),n=this._history.filter((function(t){return t.msgid===e}))[0];n.content=t,n.updatedtime=(new Date).toISOString(),i.querySelector(".quikchat-message-content").innerHTML=this._processContent(t),i.classList.remove("quikchat-typing"),s=!0,this.userScrolledUp||(this._messagesArea.scrollTop=this._messagesArea.scrollHeight),this._onMessageReplace&&this._onMessageReplace(this,e,t)}catch(e){}return s}},{key:"messageAddTypingIndicator",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"left",s=this.messageAddFull({content:"",userString:e,align:t,role:"assistant"}),i=this.messageGetDOMObject(s);return i.classList.add("quikchat-typing"),i.querySelector(".quikchat-message-content").innerHTML='<span class="quikchat-typing-dots"><span>.</span><span>.</span><span>.</span></span>',s}},{key:"setMessageFormatter",value:function(e){this._messageFormatter=e}},{key:"setSanitize",value:function(e){this._sanitize=e}},{key:"historyGet",value:function(e,t){return void 0===e?this._history.slice():void 0===t?e<0?this._history.slice(e):this._history.slice(e,e+1):this._history.slice(e,t)}},{key:"historyClear",value:function(){this.msgid=0,this._history=[]}},{key:"historyGetLength",value:function(){return this._history.length}},{key:"historyGetMessage",value:function(e){return e>=0&&e<this._history.length?this._history[e]:{}}},{key:"historyGetMessageContent",value:function(e){return e>=0&&e<this._history.length?this._history[e].content:""}},{key:"historyExport",value:function(){return this._history.map((function(e){return{msgid:e.msgid,content:e.content,userString:e.userString,align:e.align,role:e.role,userID:e.userID,visible:e.visible,tags:e.tags?e.tags.slice():[],timestamp:e.timestamp,updatedtime:e.updatedtime}}))}},{key:"historyImport",value:function(e){this._messagesArea.innerHTML="",this._history=[],this.msgid=0;var t,i=s(e);try{for(i.s();!(t=i.n()).done;){var n=t.value;this.messageAddFull({content:n.content||"",userString:n.userString||"user",align:n.align||"right",role:n.role||"user",userID:n.userID,visible:n.visible,tags:n.tags})}}catch(e){i.e(e)}finally{i.f()}}},{key:"changeTheme",value:function(e){this._chatWidget.classList.remove(this._theme),this._chatWidget.classList.add(e),this._theme=e}},{key:"theme",get:function(){return this._theme}}],n=[{key:"version",value:function(){return{version:"1.2.6",license:"BSD-2",url:"https://github/deftio/quikchat"}}},{key:"loremIpsum",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ";for("number"!=typeof e&&(e=Math.floor(126*Math.random())+25),void 0===t&&(t=Math.floor(446*Math.random())),t%=446;" "===i[t]||/[.,:;!?]/.test(i[t]);)t=(t+1)%446;for(var n=i.substring(t)+i.substring(0,t),a="";e>0;)a+=e<n.length?n.substring(0,e):n,e-=n.length;return" "===a[a.length-1]&&(a=a.substring(0,a.length-1)+"."),s&&(a=a[0].toUpperCase()+a.substring(1)),a}}],i&&t(e.prototype,i),n&&t(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,n}();return o}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).quikchat=t()}(this,(function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var s=0,i=Array(t);s<t;s++)i[s]=e[s];return i}function t(e,t){for(var s=0;s<t.length;s++){var i=t[s];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,r(i.key),i)}}function s(t,s){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!i){if(Array.isArray(t)||(i=function(t,s){if(t){if("string"==typeof t)return e(t,s);var i={}.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?e(t,s):void 0}}(t))||s){i&&(t=i);var n=0,a=function(){};return{s:a,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,l=!1;return{s:function(){i=i.call(t)},n:function(){var e=i.next();return o=e.done,e},e:function(e){l=!0,r=e},f:function(){try{o||null==i.return||i.return()}finally{if(l)throw r}}}}function i(e,t,s){return(t=r(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function n(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,i)}return s}function a(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?n(Object(s),!0).forEach((function(t){i(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):n(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}function r(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}var o=function(){return e=function e(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var n=a(a({},{theme:"quikchat-theme-light",trackHistory:!0,showTimestamps:!1,titleArea:{title:"Chat",show:!1,align:"center"},messagesArea:{alternating:!0}}),i);"string"==typeof t&&(t=document.querySelector(t)),this._parentElement=t,this._theme=n.theme,this._onSend=s||function(){},this._messageFormatter=n.messageFormatter||null,this._sanitize=n.sanitize||!1,this._createWidget(),n.titleArea&&(this.titleAreaSetContents(n.titleArea.title,n.titleArea.align),!0===n.titleArea.show?this.titleAreaShow():this.titleAreaHide()),n.messagesArea&&this.messagesAreaAlternateColors(n.messagesArea.alternating),n.showTimestamps&&this.messagesAreaShowTimestamps(!0),n.direction&&this.setDirection(n.direction),this._attachEventListeners(),this.trackHistory=!1!==n.trackHistory,this._historyLimit=1e7,this._history=[]},i=[{key:"_createWidget",value:function(){var e='\n <div class="quikchat-base '.concat(this.theme,'">\n <div class="quikchat-title-area"></div>\n <div class="quikchat-messages-wrapper"><div class="quikchat-messages-area" role="log" aria-live="polite" aria-label="Chat messages"></div><button class="quikchat-scroll-bottom" aria-label="Scroll to bottom"></button></div>\n <div class="quikchat-input-area">\n <textarea class="quikchat-input-textbox" rows="1" aria-label="Type a message"></textarea>\n <button class="quikchat-input-send-btn">Send</button>\n </div>\n </div>\n ');this._parentElement.innerHTML=e,this._chatWidget=this._parentElement.querySelector(".quikchat-base"),this._titleArea=this._chatWidget.querySelector(".quikchat-title-area"),this._messagesWrapper=this._chatWidget.querySelector(".quikchat-messages-wrapper"),this._messagesArea=this._chatWidget.querySelector(".quikchat-messages-area"),this._scrollBottomBtn=this._messagesWrapper.querySelector(".quikchat-scroll-bottom"),this._inputArea=this._chatWidget.querySelector(".quikchat-input-area"),this._textEntry=this._inputArea.querySelector(".quikchat-input-textbox"),this._sendButton=this._inputArea.querySelector(".quikchat-input-send-btn"),this.msgid=0}},{key:"_attachEventListeners",value:function(){var e=this;this._sendButton.addEventListener("click",(function(){var t=e._textEntry.value.trim();""!==t&&e._onSend(e,t)})),this._textEntry.addEventListener("keydown",(function(t){if(t.shiftKey&&13===t.keyCode){t.preventDefault();var s=e._textEntry.value.trim();if(""===s)return;e._onSend(e,s)}})),this._textEntry.addEventListener("input",(function(){return e._autoGrowTextarea()})),this._messagesArea.addEventListener("scroll",(function(){var t=e._messagesArea,s=t.scrollTop,i=t.scrollHeight,n=t.clientHeight;e.userScrolledUp=s+n<i-1,e._updateScrollBottomBtn()})),this._scrollBottomBtn.addEventListener("click",(function(){return e.scrollToBottom()})),this._chatWidget.addEventListener("keydown",(function(t){t.ctrlKey&&"End"===t.key&&(t.preventDefault(),e.scrollToBottom())})),"undefined"!=typeof ResizeObserver&&(this._resizeObserver=new ResizeObserver((function(){return e._handleContainerResize()})),this._resizeObserver.observe(this._parentElement))}},{key:"setCallbackOnSend",value:function(e){this._onSend=e}},{key:"setCallbackonMessageAdded",value:function(e){this._onMessageAdded=e}},{key:"setCallbackonMessageAppend",value:function(e){this._onMessageAppend=e}},{key:"setCallbackonMessageReplace",value:function(e){this._onMessageReplace=e}},{key:"setCallbackonMessageDelete",value:function(e){this._onMessageDelete=e}},{key:"titleAreaToggle",value:function(){"none"===this._titleArea.style.display?this.titleAreaShow():this.titleAreaHide()}},{key:"titleAreaShow",value:function(){this._titleArea.style.display=""}},{key:"titleAreaHide",value:function(){this._titleArea.style.display="none"}},{key:"titleAreaSetContents",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"center";this._titleArea.innerHTML=e,this._titleArea.style.textAlign=t}},{key:"titleAreaGetContents",value:function(){return this._titleArea.innerHTML}},{key:"inputAreaToggle",value:function(){"none"===this._inputArea.style.display?this.inputAreaShow():this.inputAreaHide()}},{key:"inputAreaShow",value:function(){this._inputArea.style.display=""}},{key:"inputAreaHide",value:function(){this._inputArea.style.display="none"}},{key:"inputAreaSetEnabled",value:function(e){this._textEntry.disabled=!e,this._sendButton.disabled=!e}},{key:"inputAreaSetButtonText",value:function(e){this._sendButton.textContent=e}},{key:"inputAreaGetButtonText",value:function(){return this._sendButton.textContent}},{key:"setDirection",value:function(e){var t="rtl"===e?"rtl":"ltr";this._chatWidget.setAttribute("dir",t),"rtl"===t?this._chatWidget.classList.add("quikchat-rtl"):this._chatWidget.classList.remove("quikchat-rtl")}},{key:"getDirection",value:function(){return this._chatWidget.getAttribute("dir")||"ltr"}},{key:"_handleContainerResize",value:function(){}},{key:"scrollToBottom",value:function(){this._messagesArea.scrollTop=this._messagesArea.scrollHeight,this.userScrolledUp=!1,this._updateScrollBottomBtn()}},{key:"_updateScrollBottomBtn",value:function(){this.userScrolledUp?this._scrollBottomBtn.classList.add("quikchat-scroll-bottom-visible"):this._scrollBottomBtn.classList.remove("quikchat-scroll-bottom-visible")}},{key:"_autoGrowTextarea",value:function(){var e=this._textEntry;e.style.height="auto",e.style.height=Math.min(e.scrollHeight,120)+"px",e.style.overflowY=e.scrollHeight>120?"auto":"hidden"}},{key:"_formatTimestamp",value:function(e){var t=new Date(e),s=t.getHours();return(s%12||12)+":"+String(t.getMinutes()).padStart(2,"0")+" "+(s>=12?"PM":"AM")}},{key:"messagesAreaShowTimestamps",value:function(e){e?this._messagesArea.classList.add("quikchat-show-timestamps"):this._messagesArea.classList.remove("quikchat-show-timestamps")}},{key:"messagesAreaShowTimestampsGet",value:function(){return this._messagesArea.classList.contains("quikchat-show-timestamps")}},{key:"messagesAreaShowTimestampsToggle",value:function(){this._messagesArea.classList.toggle("quikchat-show-timestamps")}},{key:"_escapeHTML",value:function(e){var t=document.createElement("div");return t.textContent=e,t.innerHTML}},{key:"_processContent",value:function(e){return!0===this._sanitize?e=this._escapeHTML(e):"function"==typeof this._sanitize&&(e=this._sanitize(e)),this._messageFormatter&&(e=this._messageFormatter(e)),e}},{key:"messagesAreaAlternateColors",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return e?this._messagesArea.classList.add("quikchat-messages-area-alt"):this._messagesArea.classList.remove("quikchat-messages-area-alt"),!0===e}},{key:"messagesAreaAlternateColorsToggle",value:function(){this._messagesArea.classList.toggle("quikchat-messages-area-alt")}},{key:"messagesAreaAlternateColorsGet",value:function(){return this._messagesArea.classList.contains("quikchat-messages-area-alt")}},{key:"messageAddFull",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{content:"",userString:"user",align:"right",role:"user",userID:-1},t=this.msgid,s=document.createElement("div"),i="quikchat-msgid-"+String(t).padStart(10,"0");s.classList.add("quikchat-message",i),s.classList.add("quikchat-role-"+(e.role||"user")),s.classList.add("quikchat-align-"+(e.align||"right")),this.msgid++,s.classList.add(this._messagesArea.children.length%2==1?"quikchat-message-1":"quikchat-message-2");var n=!1!==e.visible;n||(s.style.display="none");var r=Array.isArray(e.tags)?e.tags.slice():[],o=document.createElement("div");o.classList.add("quikchat-user-label"),o.style.textAlign=e.align,o.innerHTML=e.userString;var l=document.createElement("div");l.classList.add("quikchat-message-content"),l.style.textAlign=e.align,l.innerHTML=this._processContent(e.content);var u=(new Date).toISOString(),c=document.createElement("span");c.classList.add("quikchat-timestamp"),c.textContent=this._formatTimestamp(u),s.appendChild(o),s.appendChild(l),s.appendChild(c),this._messagesArea.appendChild(s),this.userScrolledUp||(this._messagesArea.scrollTop=this._messagesArea.scrollHeight),this._textEntry.value="",this._autoGrowTextarea();var h=u;return this.trackHistory&&(this._history.push(a(a({msgid:t},e),{},{visible:n,tags:r,timestamp:u,updatedtime:h,messageDiv:s})),this._history.length>this._historyLimit&&this._history.shift()),this._onMessageAdded&&this._onMessageAdded(this,t),t}},{key:"messageAddNew",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"user",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"right",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"user";return this.messageAddFull({content:e,userString:t,align:s,role:i})}},{key:"messageRemove",value:function(e){var t=!1;try{this._messagesArea.removeChild(this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0")))),t=!0}catch(e){}return t&&(this._history.splice(this._history.findIndex((function(t){return t.msgid===e})),1),this._onMessageDelete&&this._onMessageDelete(this,e)),t}},{key:"messageGetDOMObject",value:function(e){var t=null;try{t=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0")))}catch(e){}return t}},{key:"messageGetContent",value:function(e){var t="";try{t=this._history.filter((function(t){return t.msgid===e}))[0].content}catch(e){}return t}},{key:"messageSetVisible",value:function(e,t){var s=this.messageGetDOMObject(e);if(!s)return!1;s.style.display=t?"":"none";var i=this._history.find((function(t){return t.msgid===e}));return i&&(i.visible=t),!0}},{key:"messageGetVisible",value:function(e){var t=this._history.find((function(t){return t.msgid===e}));return!!t&&!1!==t.visible}},{key:"messageToggleVisible",value:function(e){var t=this.messageGetVisible(e);return this.messageSetVisible(e,!t)}},{key:"messageSetVisibleByTag",value:function(e,t){var i,n=0,a=s(this._history);try{for(a.s();!(i=a.n()).done;){var r=i.value;r.tags&&r.tags.includes(e)&&(this.messageSetVisible(r.msgid,t),n++)}}catch(e){a.e(e)}finally{a.f()}return n}},{key:"messageGetTags",value:function(e){var t=this._history.find((function(t){return t.msgid===e}));return t&&t.tags?t.tags.slice():[]}},{key:"messageSetTags",value:function(e,t){var s=this._history.find((function(t){return t.msgid===e}));return!!s&&(s.tags=Array.isArray(t)?t.slice():[],!0)}},{key:"messageAppendContent",value:function(e,t){var s=!1;try{var i=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))),n=this._history.filter((function(t){return t.msgid===e}))[0];n.content+=t,n.updatedtime=(new Date).toISOString(),i.querySelector(".quikchat-message-content").innerHTML=this._processContent(n.content),i.classList.remove("quikchat-typing"),s=!0,this.userScrolledUp||(this._messagesArea.scrollTop=this._messagesArea.scrollHeight),this._onMessageAppend&&this._onMessageAppend(this,e,t)}catch(e){}return s}},{key:"messageReplaceContent",value:function(e,t){var s=!1;try{var i=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))),n=this._history.filter((function(t){return t.msgid===e}))[0];n.content=t,n.updatedtime=(new Date).toISOString(),i.querySelector(".quikchat-message-content").innerHTML=this._processContent(t),i.classList.remove("quikchat-typing"),s=!0,this.userScrolledUp||(this._messagesArea.scrollTop=this._messagesArea.scrollHeight),this._onMessageReplace&&this._onMessageReplace(this,e,t)}catch(e){}return s}},{key:"messageAddTypingIndicator",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"left",s=this.messageAddFull({content:"",userString:e,align:t,role:"assistant"}),i=this.messageGetDOMObject(s);return i.classList.add("quikchat-typing"),i.querySelector(".quikchat-message-content").innerHTML='<span class="quikchat-typing-dots"><span>.</span><span>.</span><span>.</span></span>',s}},{key:"setMessageFormatter",value:function(e){this._messageFormatter=e}},{key:"setSanitize",value:function(e){this._sanitize=e}},{key:"historyGet",value:function(e,t){return void 0===e?this._history.slice():void 0===t?e<0?this._history.slice(e):this._history.slice(e,e+1):this._history.slice(e,t)}},{key:"historyClear",value:function(){this.msgid=0,this._history=[]}},{key:"historyGetLength",value:function(){return this._history.length}},{key:"historyGetMessage",value:function(e){return e>=0&&e<this._history.length?this._history[e]:{}}},{key:"historyGetMessageContent",value:function(e){return e>=0&&e<this._history.length?this._history[e].content:""}},{key:"historyExport",value:function(){return this._history.map((function(e){return{msgid:e.msgid,content:e.content,userString:e.userString,align:e.align,role:e.role,userID:e.userID,visible:e.visible,tags:e.tags?e.tags.slice():[],timestamp:e.timestamp,updatedtime:e.updatedtime}}))}},{key:"historyImport",value:function(e){this._messagesArea.innerHTML="",this._history=[],this.msgid=0;var t,i=s(e);try{for(i.s();!(t=i.n()).done;){var n=t.value;this.messageAddFull({content:n.content||"",userString:n.userString||"user",align:n.align||"right",role:n.role||"user",userID:n.userID,visible:n.visible,tags:n.tags})}}catch(e){i.e(e)}finally{i.f()}}},{key:"changeTheme",value:function(e){this._chatWidget.classList.remove(this._theme),this._chatWidget.classList.add(e),this._theme=e}},{key:"theme",get:function(){return this._theme}}],n=[{key:"version",value:function(){return{version:"1.2.7",license:"BSD-2",url:"https://github.com/deftio/quikchat"}}},{key:"loremIpsum",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ";for("number"!=typeof e&&(e=Math.floor(126*Math.random())+25),void 0===t&&(t=Math.floor(446*Math.random())),t%=446;" "===i[t]||/[.,:;!?]/.test(i[t]);)t=(t+1)%446;for(var n=i.substring(t)+i.substring(0,t),a="";e>0;)a+=e<n.length?n.substring(0,e):n,e-=n.length;return" "===a[a.length-1]&&(a=a.substring(0,a.length-1)+"."),s&&(a=a[0].toUpperCase()+a.substring(1)),a}}],i&&t(e.prototype,i),n&&t(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,n}();return o}));
2
2
  //# sourceMappingURL=quikchat.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quikchat.umd.min.js","sources":["../src/quikchat.js"],"sourcesContent":["\nclass quikchat {\n /**\n *\n * @param string or DOM element parentElement\n * @param {*} meta\n */\n constructor(parentElement, onSend = () => { }, options = {}) {\n const defaultOpts = {\n theme: 'quikchat-theme-light',\n trackHistory: true,\n showTimestamps: false,\n titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n };\n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\n this._messageFormatter = meta.messageFormatter || null;\n this._sanitize = meta.sanitize || false;\n this._createWidget();\n // title area\n if (meta.titleArea) {\n this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);\n if (meta.titleArea.show === true) {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n // messages area\n if (meta.messagesArea) {\n this.messagesAreaAlternateColors(meta.messagesArea.alternating);\n }\n // timestamps\n if (meta.showTimestamps) {\n this.messagesAreaShowTimestamps(true);\n }\n // direction (ltr/rtl)\n if (meta.direction) {\n this.setDirection(meta.direction);\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory !== false;\n this._historyLimit = 10000000;\n this._history = [];\n }\n\n _createWidget() {\n const widgetHTML =\n `\n <div class=\"quikchat-base ${this.theme}\">\n <div class=\"quikchat-title-area\"></div>\n <div class=\"quikchat-messages-wrapper\"><div class=\"quikchat-messages-area\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\"></div><button class=\"quikchat-scroll-bottom\" aria-label=\"Scroll to bottom\"></button></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\" rows=\"1\" aria-label=\"Type a message\"></textarea>\n <button class=\"quikchat-input-send-btn\">Send</button>\n </div>\n </div>\n `;\n\n this._parentElement.innerHTML = widgetHTML;\n this._chatWidget = this._parentElement.querySelector('.quikchat-base');\n this._titleArea = this._chatWidget.querySelector('.quikchat-title-area');\n this._messagesWrapper = this._chatWidget.querySelector('.quikchat-messages-wrapper');\n this._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\n this._scrollBottomBtn = this._messagesWrapper.querySelector('.quikchat-scroll-bottom');\n this._inputArea = this._chatWidget.querySelector('.quikchat-input-area');\n this._textEntry = this._inputArea.querySelector('.quikchat-input-textbox');\n this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');\n this.msgid = 0;\n }\n\n /**\n * Attach event listeners to the widget\n */\n _attachEventListeners() {\n this._sendButton.addEventListener('click', () => {\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n });\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n event.preventDefault();\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n }\n });\n\n // Auto-grow textarea\n this._textEntry.addEventListener('input', () => this._autoGrowTextarea());\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight - 1;\n this._updateScrollBottomBtn();\n });\n\n // Scroll-to-bottom button\n this._scrollBottomBtn.addEventListener('click', () => this.scrollToBottom());\n\n // Ctrl+End to scroll to bottom\n this._chatWidget.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.key === 'End') {\n event.preventDefault();\n this.scrollToBottom();\n }\n });\n\n // Use ResizeObserver to detect parent container resize\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleContainerResize());\n this._resizeObserver.observe(this._parentElement);\n }\n }\n\n // set the onSend function callback.\n setCallbackOnSend(callback) {\n this._onSend = callback;\n }\n // set a callback for everytime a message is added (listener)\n setCallbackonMessageAdded(callback) {\n this._onMessageAdded = callback;\n }\n setCallbackonMessageAppend(callback) {\n this._onMessageAppend = callback;\n }\n setCallbackonMessageReplace(callback) {\n this._onMessageReplace = callback;\n }\n setCallbackonMessageDelete(callback) {\n this._onMessageDelete = callback;\n }\n\n // Public methods\n titleAreaToggle() {\n if (this._titleArea.style.display === 'none') {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n }\n\n titleAreaSetContents(title, align = 'center') {\n this._titleArea.innerHTML = title;\n this._titleArea.style.textAlign = align;\n }\n\n titleAreaGetContents() {\n return this._titleArea.innerHTML;\n }\n\n inputAreaToggle() {\n if (this._inputArea.style.display === 'none') {\n this.inputAreaShow();\n } else {\n this.inputAreaHide();\n }\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n }\n\n inputAreaSetEnabled(enabled) {\n this._textEntry.disabled = !enabled;\n this._sendButton.disabled = !enabled;\n }\n\n inputAreaSetButtonText(text) {\n this._sendButton.textContent = text;\n }\n\n inputAreaGetButtonText() {\n return this._sendButton.textContent;\n }\n\n setDirection(dir) {\n const d = dir === 'rtl' ? 'rtl' : 'ltr';\n this._chatWidget.setAttribute('dir', d);\n if (d === 'rtl') {\n this._chatWidget.classList.add('quikchat-rtl');\n } else {\n this._chatWidget.classList.remove('quikchat-rtl');\n }\n }\n\n getDirection() {\n return this._chatWidget.getAttribute('dir') || 'ltr';\n }\n\n _handleContainerResize() {\n // Layout is handled by CSS flexbox — no JS height calculation needed.\n // This hook exists for future use or custom resize callbacks.\n }\n\n scrollToBottom() {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n this.userScrolledUp = false;\n this._updateScrollBottomBtn();\n }\n\n _updateScrollBottomBtn() {\n if (this.userScrolledUp) {\n this._scrollBottomBtn.classList.add('quikchat-scroll-bottom-visible');\n } else {\n this._scrollBottomBtn.classList.remove('quikchat-scroll-bottom-visible');\n }\n }\n\n _autoGrowTextarea() {\n const el = this._textEntry;\n el.style.height = 'auto';\n const maxHeight = 120;\n el.style.height = Math.min(el.scrollHeight, maxHeight) + 'px';\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n _formatTimestamp(isoString) {\n const d = new Date(isoString);\n const h = d.getHours();\n const m = String(d.getMinutes()).padStart(2, '0');\n const ampm = h >= 12 ? 'PM' : 'AM';\n const h12 = h % 12 || 12;\n return h12 + ':' + m + ' ' + ampm;\n }\n\n messagesAreaShowTimestamps(show) {\n if (show) {\n this._messagesArea.classList.add('quikchat-show-timestamps');\n } else {\n this._messagesArea.classList.remove('quikchat-show-timestamps');\n }\n }\n\n messagesAreaShowTimestampsGet() {\n return this._messagesArea.classList.contains('quikchat-show-timestamps');\n }\n\n messagesAreaShowTimestampsToggle() {\n this._messagesArea.classList.toggle('quikchat-show-timestamps');\n }\n\n _escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n _processContent(content) {\n if (this._sanitize === true) {\n content = this._escapeHTML(content);\n } else if (typeof this._sanitize === 'function') {\n content = this._sanitize(content);\n }\n if (this._messageFormatter) {\n content = this._messageFormatter(content);\n }\n return content;\n }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n messageDiv.classList.add('quikchat-message', msgidClass);\n messageDiv.classList.add('quikchat-role-' + (input.role || 'user'));\n messageDiv.classList.add('quikchat-align-' + (input.align || 'right'));\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n // Visibility: default true, hidden messages get display:none\n const visible = input.visible !== false;\n if (!visible) {\n messageDiv.style.display = 'none';\n }\n\n // Tags: array of strings for group-based visibility control\n const tags = Array.isArray(input.tags) ? input.tags.slice() : [];\n\n const userDiv = document.createElement('div');\n userDiv.classList.add('quikchat-user-label');\n userDiv.style.textAlign = input.align;\n userDiv.innerHTML = input.userString;\n\n const contentDiv = document.createElement('div');\n contentDiv.classList.add('quikchat-message-content');\n contentDiv.style.textAlign = input.align;\n contentDiv.innerHTML = this._processContent(input.content);\n\n const timestamp = new Date().toISOString();\n const timestampSpan = document.createElement('span');\n timestampSpan.classList.add('quikchat-timestamp');\n timestampSpan.textContent = this._formatTimestamp(timestamp);\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\n messageDiv.appendChild(timestampSpan);\n this._messagesArea.appendChild(messageDiv);\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n\n this._textEntry.value = '';\n this._autoGrowTextarea();\n const updatedtime = timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, visible, tags, timestamp, updatedtime, messageDiv });\n if (this._history.length > this._historyLimit) {\n this._history.shift();\n }\n }\n\n if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n }\n\n return msgid;\n }\n\n\n messageAddNew(content = \"\", userString = \"user\", align = \"right\", role = \"user\") {\n return this.messageAddFull(\n { content: content, userString: userString, align: align, role: role }\n );\n }\n messageRemove(n) {\n let success = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n success = true;\n }\n catch (_error) {\n // Message ID not found\n }\n if (success) {\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n if (this._onMessageDelete) {\n this._onMessageDelete(this, n);\n }\n }\n return success;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (_error) {\n // Message ID not found\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\";\n try {\n content = this._history.filter((item) => item.msgid === n)[0].content;\n }\n catch (_error) {\n // Message ID not found\n }\n return content;\n }\n\n messageSetVisible(n, visible) {\n const msgEl = this.messageGetDOMObject(n);\n if (!msgEl) return false;\n msgEl.style.display = visible ? '' : 'none';\n const item = this._history.find((entry) => entry.msgid === n);\n if (item) item.visible = visible;\n return true;\n }\n\n messageGetVisible(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item ? item.visible !== false : false;\n }\n\n messageToggleVisible(n) {\n const current = this.messageGetVisible(n);\n return this.messageSetVisible(n, !current);\n }\n\n messageSetVisibleByTag(tag, visible) {\n let count = 0;\n for (const item of this._history) {\n if (item.tags && item.tags.includes(tag)) {\n this.messageSetVisible(item.msgid, visible);\n count++;\n }\n }\n return count;\n }\n\n messageGetTags(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item && item.tags ? item.tags.slice() : [];\n }\n\n messageSetTags(n, tags) {\n const item = this._history.find((entry) => entry.msgid === n);\n if (!item) return false;\n item.tags = Array.isArray(tags) ? tags.slice() : [];\n return true;\n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(item.content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageAppend) {\n this._onMessageAppend(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageReplace) {\n this._onMessageReplace(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n messageAddTypingIndicator(userString = '', align = 'left') {\n const msgid = this.messageAddFull({\n content: '',\n userString: userString,\n align: align,\n role: 'assistant',\n });\n const msgEl = this.messageGetDOMObject(msgid);\n msgEl.classList.add('quikchat-typing');\n const contentDiv = msgEl.querySelector('.quikchat-message-content');\n contentDiv.innerHTML = '<span class=\"quikchat-typing-dots\"><span>.</span><span>.</span><span>.</span></span>';\n return msgid;\n }\n\n setMessageFormatter(formatter) {\n this._messageFormatter = formatter;\n }\n\n setSanitize(sanitize) {\n this._sanitize = sanitize;\n }\n\n // history functions\n /**\n *\n * @param {*} n\n * @param {*} m\n * @returns array of history messages\n */\n historyGet(n, m) {\n if (n === undefined) {\n return this._history.slice();\n }\n if (m === undefined) {\n if (n < 0) {\n return this._history.slice(n);\n }\n return this._history.slice(n, n + 1);\n }\n return this._history.slice(n, m);\n }\n\n historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n];\n }\n return {};\n }\n\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n].content;\n }\n return \"\";\n }\n\n historyExport() {\n return this._history.map((item) => ({\n msgid: item.msgid,\n content: item.content,\n userString: item.userString,\n align: item.align,\n role: item.role,\n userID: item.userID,\n visible: item.visible,\n tags: item.tags ? item.tags.slice() : [],\n timestamp: item.timestamp,\n updatedtime: item.updatedtime,\n }));\n }\n\n historyImport(data) {\n // Clear existing messages from DOM and history\n this._messagesArea.innerHTML = '';\n this._history = [];\n this.msgid = 0;\n\n for (const entry of data) {\n this.messageAddFull({\n content: entry.content || '',\n userString: entry.userString || 'user',\n align: entry.align || 'right',\n role: entry.role || 'user',\n userID: entry.userID,\n visible: entry.visible,\n tags: entry.tags,\n });\n }\n }\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.2.6\", \"license\": \"BSD-2\", \"url\": \"https://github/deftio/quikchat\" };\n }\n\n /**\n * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.\n * borrowed from github.com/deftio/bitwrench.js\n * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).\n * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.\n * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.\n *\n * @returns {string} A string of Lorem Ipsum text.\n *\n * @example\n * // Returns 200 characters of Lorem Ipsum starting from index 50\n * loremIpsum(200, 50);\n *\n * @example\n * //Returns a 200 Lorem Ipsum characters starting from a random index\n * loremIpsum(200);\n */\n\n static loremIpsum(numChars, startSpot = undefined, startWithCapitalLetter = true) {\n const loremText = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \";\n\n if (typeof numChars !== \"number\") {\n numChars = Math.floor(Math.random() * 126) + 25;\n }\n\n if (startSpot === undefined) {\n startSpot = Math.floor(Math.random() * loremText.length);\n }\n\n startSpot = startSpot % loremText.length;\n\n // Move startSpot to the next non-whitespace and non-punctuation character\n while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {\n startSpot = (startSpot + 1) % loremText.length;\n }\n\n const l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n let s = \"\";\n while (numChars > 0) {\n s += numChars < l.length ? l.substring(0, numChars) : l;\n numChars -= l.length;\n }\n\n if (s[s.length - 1] === \" \") {\n s = s.substring(0, s.length - 1) + \".\"; // always end on non-whitespace. \".\" was chosen arbitrarily.\n }\n\n if (startWithCapitalLetter) {\n s = s[0].toUpperCase() + s.substring(1);\n }\n\n return s;\n };\n\n\n}\n\nexport default quikchat;\n"],"names":["quikchat","parentElement","onSend","arguments","length","undefined","options","_classCallCheck","meta","_objectSpread","theme","trackHistory","showTimestamps","titleArea","title","show","align","messagesArea","alternating","document","querySelector","this","_parentElement","_theme","_onSend","_messageFormatter","messageFormatter","_sanitize","sanitize","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","messagesAreaShowTimestamps","direction","setDirection","_attachEventListeners","_historyLimit","_history","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesWrapper","_messagesArea","_scrollBottomBtn","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","text","trim","event","shiftKey","keyCode","preventDefault","_autoGrowTextarea","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","_updateScrollBottomBtn","scrollToBottom","ctrlKey","ResizeObserver","_resizeObserver","_handleContainerResize","observe","callback","_onMessageAdded","_onMessageAppend","_onMessageReplace","_onMessageDelete","style","display","textAlign","inputAreaShow","inputAreaHide","enabled","disabled","textContent","dir","d","setAttribute","classList","add","remove","getAttribute","el","height","Math","min","overflowY","isoString","Date","h","getHours","String","getMinutes","padStart","contains","toggle","str","div","createElement","content","_escapeHTML","alt","input","userString","role","userID","messageDiv","msgidClass","children","visible","tags","Array","isArray","slice","userDiv","contentDiv","_processContent","timestamp","toISOString","timestampSpan","_formatTimestamp","appendChild","updatedtime","push","shift","messageAddFull","n","success","removeChild","_error","splice","findIndex","item","msg","filter","msgEl","messageGetDOMObject","find","entry","current","messageGetVisible","messageSetVisible","tag","_step","count","_iterator","_createForOfIteratorHelper","s","done","includes","err","e","f","formatter","m","map","data","_step2","_iterator2","newTheme","get","version","license","url","numChars","startSpot","startWithCapitalLetter","loremText","floor","random","test","l","substring","toUpperCase"],"mappings":"40EACMA,EAAQ,WAmDT,SA7CD,SAAAA,EAAYC,GAAiD,IAAlCC,EAAMC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,WAAQ,EAAGG,EAAOH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,+FAAEI,MAAAP,GACvD,IAOMQ,EAAIC,EAAAA,EAAA,CAAA,EAPU,CAChBC,MAAO,uBACPC,cAAc,EACdC,gBAAgB,EAChBC,UAAW,CAAEC,MAAO,OAAQC,MAAM,EAAOC,MAAO,UAChDC,aAAc,CAAEC,aAAa,KAECZ,GAEL,iBAAlBL,IACPA,EAAgBkB,SAASC,cAAcnB,IAE3CoB,KAAKC,eAAiBrB,EACtBoB,KAAKE,OAASf,EAAKE,MACnBW,KAAKG,QAAUtB,GAAkB,WAAQ,EACzCmB,KAAKI,kBAAoBjB,EAAKkB,kBAAoB,KAClDL,KAAKM,UAAYnB,EAAKoB,WAAY,EAClCP,KAAKQ,gBAEDrB,EAAKK,YACLQ,KAAKS,qBAAqBtB,EAAKK,UAAUC,MAAON,EAAKK,UAAUG,QACnC,IAAxBR,EAAKK,UAAUE,KACfM,KAAKU,gBAELV,KAAKW,iBAITxB,EAAKS,cACLI,KAAKY,4BAA4BzB,EAAKS,aAAaC,aAGnDV,EAAKI,gBACLS,KAAKa,4BAA2B,GAGhC1B,EAAK2B,WACLd,KAAKe,aAAa5B,EAAK2B,WAG3Bd,KAAKgB,wBACLhB,KAAKV,cAAqC,IAAtBH,EAAKG,aACzBU,KAAKiB,cAAgB,IACrBjB,KAAKkB,SAAW,EACpB,IAAC,CAAA,CAAAC,IAAA,gBAAAC,MAED,WACI,IAAMC,EAAU,2CAAAC,OAEgBtB,KAAKX,MAAK,slBAU1CW,KAAKC,eAAesB,UAAYF,EAChCrB,KAAKwB,YAAcxB,KAAKC,eAAeF,cAAc,kBACrDC,KAAKyB,WAAazB,KAAKwB,YAAYzB,cAAc,wBACjDC,KAAK0B,iBAAmB1B,KAAKwB,YAAYzB,cAAc,8BACvDC,KAAK2B,cAAgB3B,KAAKwB,YAAYzB,cAAc,2BACpDC,KAAK4B,iBAAmB5B,KAAK0B,iBAAiB3B,cAAc,2BAC5DC,KAAK6B,WAAa7B,KAAKwB,YAAYzB,cAAc,wBACjDC,KAAK8B,WAAa9B,KAAK6B,WAAW9B,cAAc,2BAChDC,KAAK+B,YAAc/B,KAAK6B,WAAW9B,cAAc,4BACjDC,KAAKgC,MAAQ,CACjB,GAEA,CAAAb,IAAA,wBAAAC,MAGA,WAAwB,IAAAa,EAAAjC,KACpBA,KAAK+B,YAAYG,iBAAiB,SAAS,WACvC,IAAMC,EAAOF,EAAKH,WAAWV,MAAMgB,OACtB,KAATD,GACJF,EAAK9B,QAAQ8B,EAAME,EACvB,IACAnC,KAAK8B,WAAWI,iBAAiB,WAAW,SAACG,GAEzC,GAAIA,EAAMC,UAA8B,KAAlBD,EAAME,QAAgB,CACxCF,EAAMG,iBACN,IAAML,EAAOF,EAAKH,WAAWV,MAAMgB,OACnC,GAAa,KAATD,EAAa,OACjBF,EAAK9B,QAAQ8B,EAAME,EACvB,CACJ,IAGAnC,KAAK8B,WAAWI,iBAAiB,SAAS,WAAA,OAAMD,EAAKQ,mBAAmB,IAExEzC,KAAK2B,cAAcO,iBAAiB,UAAU,WAC1C,IAAAQ,EAAkDT,EAAKN,cAA/CgB,EAASD,EAATC,UAAWC,EAAYF,EAAZE,aAAcC,EAAYH,EAAZG,aACjCZ,EAAKa,eAAiBH,EAAYE,EAAeD,EAAe,EAChEX,EAAKc,wBACT,IAGA/C,KAAK4B,iBAAiBM,iBAAiB,SAAS,WAAA,OAAMD,EAAKe,gBAAgB,IAG3EhD,KAAKwB,YAAYU,iBAAiB,WAAW,SAACG,GACtCA,EAAMY,SAAyB,QAAdZ,EAAMlB,MACvBkB,EAAMG,iBACNP,EAAKe,iBAEb,IAG8B,oBAAnBE,iBACPlD,KAAKmD,gBAAkB,IAAID,gBAAe,WAAA,OAAMjB,EAAKmB,wBAAwB,IAC7EpD,KAAKmD,gBAAgBE,QAAQrD,KAAKC,gBAE1C,GAEA,CAAAkB,IAAA,oBAAAC,MACA,SAAkBkC,GACdtD,KAAKG,QAAUmD,CACnB,GACA,CAAAnC,IAAA,4BAAAC,MACA,SAA0BkC,GACtBtD,KAAKuD,gBAAkBD,CAC3B,GAAC,CAAAnC,IAAA,6BAAAC,MACD,SAA2BkC,GACvBtD,KAAKwD,iBAAmBF,CAC5B,GAAC,CAAAnC,IAAA,8BAAAC,MACD,SAA4BkC,GACxBtD,KAAKyD,kBAAoBH,CAC7B,GAAC,CAAAnC,IAAA,6BAAAC,MACD,SAA2BkC,GACvBtD,KAAK0D,iBAAmBJ,CAC5B,GAEA,CAAAnC,IAAA,kBAAAC,MACA,WAC0C,SAAlCpB,KAAKyB,WAAWkC,MAAMC,QACtB5D,KAAKU,gBAELV,KAAKW,eAEb,GAAC,CAAAQ,IAAA,gBAAAC,MAED,WACIpB,KAAKyB,WAAWkC,MAAMC,QAAU,EACpC,GAAC,CAAAzC,IAAA,gBAAAC,MAED,WACIpB,KAAKyB,WAAWkC,MAAMC,QAAU,MACpC,GAAC,CAAAzC,IAAA,uBAAAC,MAED,SAAqB3B,GAAyB,IAAlBE,EAAKb,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAChCkB,KAAKyB,WAAWF,UAAY9B,EAC5BO,KAAKyB,WAAWkC,MAAME,UAAYlE,CACtC,GAAC,CAAAwB,IAAA,uBAAAC,MAED,WACI,OAAOpB,KAAKyB,WAAWF,SAC3B,GAAC,CAAAJ,IAAA,kBAAAC,MAED,WAC0C,SAAlCpB,KAAK6B,WAAW8B,MAAMC,QACtB5D,KAAK8D,gBAEL9D,KAAK+D,eAEb,GAAC,CAAA5C,IAAA,gBAAAC,MAED,WACIpB,KAAK6B,WAAW8B,MAAMC,QAAU,EACpC,GAAC,CAAAzC,IAAA,gBAAAC,MAED,WACIpB,KAAK6B,WAAW8B,MAAMC,QAAU,MACpC,GAAC,CAAAzC,IAAA,sBAAAC,MAED,SAAoB4C,GAChBhE,KAAK8B,WAAWmC,UAAYD,EAC5BhE,KAAK+B,YAAYkC,UAAYD,CACjC,GAAC,CAAA7C,IAAA,yBAAAC,MAED,SAAuBe,GACnBnC,KAAK+B,YAAYmC,YAAc/B,CACnC,GAAC,CAAAhB,IAAA,yBAAAC,MAED,WACI,OAAOpB,KAAK+B,YAAYmC,WAC5B,GAAC,CAAA/C,IAAA,eAAAC,MAED,SAAa+C,GACT,IAAMC,EAAY,QAARD,EAAgB,MAAQ,MAClCnE,KAAKwB,YAAY6C,aAAa,MAAOD,GAC3B,QAANA,EACApE,KAAKwB,YAAY8C,UAAUC,IAAI,gBAE/BvE,KAAKwB,YAAY8C,UAAUE,OAAO,eAE1C,GAAC,CAAArD,IAAA,eAAAC,MAED,WACI,OAAOpB,KAAKwB,YAAYiD,aAAa,QAAU,KACnD,GAAC,CAAAtD,IAAA,yBAAAC,MAED,WAEI,GACH,CAAAD,IAAA,iBAAAC,MAED,WACIpB,KAAK2B,cAAcgB,UAAY3C,KAAK2B,cAAciB,aAClD5C,KAAK8C,gBAAiB,EACtB9C,KAAK+C,wBACT,GAAC,CAAA5B,IAAA,yBAAAC,MAED,WACQpB,KAAK8C,eACL9C,KAAK4B,iBAAiB0C,UAAUC,IAAI,kCAEpCvE,KAAK4B,iBAAiB0C,UAAUE,OAAO,iCAE/C,GAAC,CAAArD,IAAA,oBAAAC,MAED,WACI,IAAMsD,EAAK1E,KAAK8B,WAChB4C,EAAGf,MAAMgB,OAAS,OAElBD,EAAGf,MAAMgB,OAASC,KAAKC,IAAIH,EAAG9B,aADZ,KACuC,KACzD8B,EAAGf,MAAMmB,UAAYJ,EAAG9B,aAFN,IAEiC,OAAS,QAChE,GAAC,CAAAzB,IAAA,mBAAAC,MAED,SAAiB2D,GACb,IAAMX,EAAI,IAAIY,KAAKD,GACbE,EAAIb,EAAEc,WAIZ,OADYD,EAAI,IAAM,IACT,IAHHE,OAAOf,EAAEgB,cAAcC,SAAS,EAAG,KAGtB,KAFVJ,GAAK,GAAK,KAAO,KAGlC,GAAC,CAAA9D,IAAA,6BAAAC,MAED,SAA2B1B,GACnBA,EACAM,KAAK2B,cAAc2C,UAAUC,IAAI,4BAEjCvE,KAAK2B,cAAc2C,UAAUE,OAAO,2BAE5C,GAAC,CAAArD,IAAA,gCAAAC,MAED,WACI,OAAOpB,KAAK2B,cAAc2C,UAAUgB,SAAS,2BACjD,GAAC,CAAAnE,IAAA,mCAAAC,MAED,WACIpB,KAAK2B,cAAc2C,UAAUiB,OAAO,2BACxC,GAAC,CAAApE,IAAA,cAAAC,MAED,SAAYoE,GACR,IAAMC,EAAM3F,SAAS4F,cAAc,OAEnC,OADAD,EAAIvB,YAAcsB,EACXC,EAAIlE,SACf,GAAC,CAAAJ,IAAA,kBAAAC,MAED,SAAgBuE,GASZ,OARuB,IAAnB3F,KAAKM,UACLqF,EAAU3F,KAAK4F,YAAYD,GACM,mBAAnB3F,KAAKM,YACnBqF,EAAU3F,KAAKM,UAAUqF,IAEzB3F,KAAKI,oBACLuF,EAAU3F,KAAKI,kBAAkBuF,IAE9BA,CACX,GAEA,CAAAxE,IAAA,8BAAAC,MACA,WAAwC,IAAZyE,IAAG/G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAO3B,OANI+G,EACA7F,KAAK2B,cAAc2C,UAAUC,IAAI,8BAGjCvE,KAAK2B,cAAc2C,UAAUE,OAAO,+BAEzB,IAARqB,CACX,GAAC,CAAA1E,IAAA,oCAAAC,MACD,WACIpB,KAAK2B,cAAc2C,UAAUiB,OAAO,6BACxC,GAAC,CAAApE,IAAA,iCAAAC,MACD,WACI,OAAOpB,KAAK2B,cAAc2C,UAAUgB,SAAS,6BACjD,GACA,CAAAnE,IAAA,iBAAAC,MACA,WAAsG,IAAvF0E,EAAKhH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE6G,QAAS,GAAII,WAAY,OAAQpG,MAAO,QAASqG,KAAM,OAAQC,QAAQ,GACtFjE,EAAQhC,KAAKgC,MACbkE,EAAapG,SAAS4F,cAAc,OACpCS,EAAa,kBAAoBhB,OAAOnD,GAAOqD,SAAS,GAAI,KAClEa,EAAW5B,UAAUC,IAAI,mBAAoB4B,GAC7CD,EAAW5B,UAAUC,IAAI,kBAAoBuB,EAAME,MAAQ,SAC3DE,EAAW5B,UAAUC,IAAI,mBAAqBuB,EAAMnG,OAAS,UAC7DK,KAAKgC,QACLkE,EAAW5B,UAAUC,IAAIvE,KAAK2B,cAAcyE,SAASrH,OAAS,GAAM,EAAI,qBAAuB,sBAG/F,IAAMsH,GAA4B,IAAlBP,EAAMO,QACjBA,IACDH,EAAWvC,MAAMC,QAAU,QAI/B,IAAM0C,EAAOC,MAAMC,QAAQV,EAAMQ,MAAQR,EAAMQ,KAAKG,QAAU,GAExDC,EAAU5G,SAAS4F,cAAc,OACvCgB,EAAQpC,UAAUC,IAAI,uBACtBmC,EAAQ/C,MAAME,UAAYiC,EAAMnG,MAChC+G,EAAQnF,UAAYuE,EAAMC,WAE1B,IAAMY,EAAa7G,SAAS4F,cAAc,OAC1CiB,EAAWrC,UAAUC,IAAI,4BACzBoC,EAAWhD,MAAME,UAAYiC,EAAMnG,MACnCgH,EAAWpF,UAAYvB,KAAK4G,gBAAgBd,EAAMH,SAElD,IAAMkB,GAAY,IAAI7B,MAAO8B,cACvBC,EAAgBjH,SAAS4F,cAAc,QAC7CqB,EAAczC,UAAUC,IAAI,sBAC5BwC,EAAc7C,YAAclE,KAAKgH,iBAAiBH,GAElDX,EAAWe,YAAYP,GACvBR,EAAWe,YAAYN,GACvBT,EAAWe,YAAYF,GACvB/G,KAAK2B,cAAcsF,YAAYf,GAG1BlG,KAAK8C,iBACN9C,KAAK2B,cAAcgB,UAAY3C,KAAK2B,cAAciB,cAGtD5C,KAAK8B,WAAWV,MAAQ,GACxBpB,KAAKyC,oBACL,IAAMyE,EAAcL,EAapB,OAXI7G,KAAKV,eACLU,KAAKkB,SAASiG,KAAI/H,EAAAA,EAAA,CAAG4C,MAAAA,GAAU8D,GAAK,GAAA,CAAEO,QAAAA,EAASC,KAAAA,EAAMO,UAAAA,EAAWK,YAAAA,EAAahB,WAAAA,KACzElG,KAAKkB,SAASnC,OAASiB,KAAKiB,eAC5BjB,KAAKkB,SAASkG,SAIlBpH,KAAKuD,iBACLvD,KAAKuD,gBAAgBvD,KAAMgC,GAGxBA,CACX,GAAC,CAAAb,IAAA,gBAAAC,MAGD,WAAiF,IAAnEuE,EAAO7G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIiH,EAAUjH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,OAAQa,EAAKb,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,QAASkH,EAAIlH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,OACrE,OAAOkB,KAAKqH,eACR,CAAE1B,QAASA,EAASI,WAAYA,EAAYpG,MAAOA,EAAOqG,KAAMA,GAExE,GAAC,CAAA7E,IAAA,gBAAAC,MACD,SAAckG,GACV,IAAIC,GAAU,EACd,IACIvH,KAAK2B,cAAc6F,YAAYxH,KAAK2B,cAAc5B,cAAa,mBAAAuB,OAAoB6D,OAAOmC,GAAGjC,SAAS,GAAI,QAC1GkC,GAAU,CACd,CACA,MAAOE,GACH,CAQJ,OANIF,IACAvH,KAAKkB,SAASwG,OAAO1H,KAAKkB,SAASyG,WAAU,SAACC,GAAI,OAAKA,EAAK5F,QAAUsF,CAAC,IAAG,GACtEtH,KAAK0D,kBACL1D,KAAK0D,iBAAiB1D,KAAMsH,IAG7BC,CACX,GACA,CAAApG,IAAA,sBAAAC,MAEA,SAAoBkG,GAChB,IAAIO,EAAM,KACV,IACIA,EAAM7H,KAAK2B,cAAc5B,cAAa,mBAAAuB,OAAoB6D,OAAOmC,GAAGjC,SAAS,GAAI,MACrF,CACA,MAAOoC,GACH,CAEJ,OAAOI,CACX,GACA,CAAA1G,IAAA,oBAAAC,MAEA,SAAkBkG,GACd,IAAI3B,EAAU,GACd,IACIA,EAAU3F,KAAKkB,SAAS4G,QAAO,SAACF,GAAI,OAAKA,EAAK5F,QAAUsF,CAAC,IAAE,GAAG3B,OAClE,CACA,MAAO8B,GACH,CAEJ,OAAO9B,CACX,GAAC,CAAAxE,IAAA,oBAAAC,MAED,SAAkBkG,EAAGjB,GACjB,IAAM0B,EAAQ/H,KAAKgI,oBAAoBV,GACvC,IAAKS,EAAO,OAAO,EACnBA,EAAMpE,MAAMC,QAAUyC,EAAU,GAAK,OACrC,IAAMuB,EAAO5H,KAAKkB,SAAS+G,MAAK,SAACC,GAAK,OAAKA,EAAMlG,QAAUsF,CAAC,IAE5D,OADIM,IAAMA,EAAKvB,QAAUA,IAClB,CACX,GAAC,CAAAlF,IAAA,oBAAAC,MAED,SAAkBkG,GACd,IAAMM,EAAO5H,KAAKkB,SAAS+G,MAAK,SAACC,GAAK,OAAKA,EAAMlG,QAAUsF,CAAC,IAC5D,QAAOM,IAAwB,IAAjBA,EAAKvB,OACvB,GAAC,CAAAlF,IAAA,uBAAAC,MAED,SAAqBkG,GACjB,IAAMa,EAAUnI,KAAKoI,kBAAkBd,GACvC,OAAOtH,KAAKqI,kBAAkBf,GAAIa,EACtC,GAAC,CAAAhH,IAAA,yBAAAC,MAED,SAAuBkH,EAAKjC,GACxB,IACgCkC,EAD5BC,EAAQ,EAAEC,EAAAC,EACK1I,KAAKkB,UAAQ,IAAhC,IAAAuH,EAAAE,MAAAJ,EAAAE,EAAAnB,KAAAsB,MAAkC,CAAA,IAAvBhB,EAAIW,EAAAnH,MACPwG,EAAKtB,MAAQsB,EAAKtB,KAAKuC,SAASP,KAChCtI,KAAKqI,kBAAkBT,EAAK5F,MAAOqE,GACnCmC,IAER,CAAC,CAAA,MAAAM,GAAAL,EAAAM,EAAAD,EAAA,CAAA,QAAAL,EAAAO,GAAA,CACD,OAAOR,CACX,GAAC,CAAArH,IAAA,iBAAAC,MAED,SAAekG,GACX,IAAMM,EAAO5H,KAAKkB,SAAS+G,MAAK,SAACC,GAAK,OAAKA,EAAMlG,QAAUsF,CAAC,IAC5D,OAAOM,GAAQA,EAAKtB,KAAOsB,EAAKtB,KAAKG,QAAU,EACnD,GAAC,CAAAtF,IAAA,iBAAAC,MAED,SAAekG,EAAGhB,GACd,IAAMsB,EAAO5H,KAAKkB,SAAS+G,MAAK,SAACC,GAAK,OAAKA,EAAMlG,QAAUsF,CAAC,IAC5D,QAAKM,IACLA,EAAKtB,KAAOC,MAAMC,QAAQF,GAAQA,EAAKG,QAAU,IAC1C,EACX,GAEA,CAAAtF,IAAA,uBAAAC,MAEA,SAAqBkG,EAAG3B,GACpB,IAAI4B,GAAU,EACd,IACI,IAAMQ,EAAQ/H,KAAK2B,cAAc5B,cAAa,mBAAAuB,OAAoB6D,OAAOmC,GAAGjC,SAAS,GAAI,OACnFuC,EAAO5H,KAAKkB,SAAS4G,QAAO,SAACI,GAAK,OAAKA,EAAMlG,QAAUsF,CAAC,IAAE,GAChEM,EAAKjC,SAAWA,EAChBiC,EAAKV,aAAc,IAAIlC,MAAO8B,cAC9BiB,EAAMhI,cAAc,6BAA6BwB,UAAYvB,KAAK4G,gBAAgBgB,EAAKjC,SACvFoC,EAAMzD,UAAUE,OAAO,mBACvB+C,GAAU,EAELvH,KAAK8C,iBACN9C,KAAK2B,cAAcgB,UAAY3C,KAAK2B,cAAciB,cAElD5C,KAAKwD,kBACLxD,KAAKwD,iBAAiBxD,KAAMsH,EAAG3B,EAEvC,CAAE,MAAO8B,GACL,CAEJ,OAAOF,CACX,GAEA,CAAApG,IAAA,wBAAAC,MAEA,SAAsBkG,EAAG3B,GACrB,IAAI4B,GAAU,EACd,IACI,IAAMQ,EAAQ/H,KAAK2B,cAAc5B,cAAa,mBAAAuB,OAAoB6D,OAAOmC,GAAGjC,SAAS,GAAI,OACnFuC,EAAO5H,KAAKkB,SAAS4G,QAAO,SAACI,GAAK,OAAKA,EAAMlG,QAAUsF,CAAC,IAAE,GAChEM,EAAKjC,QAAUA,EACfiC,EAAKV,aAAc,IAAIlC,MAAO8B,cAC9BiB,EAAMhI,cAAc,6BAA6BwB,UAAYvB,KAAK4G,gBAAgBjB,GAClFoC,EAAMzD,UAAUE,OAAO,mBACvB+C,GAAU,EAELvH,KAAK8C,iBACN9C,KAAK2B,cAAcgB,UAAY3C,KAAK2B,cAAciB,cAElD5C,KAAKyD,mBACLzD,KAAKyD,kBAAkBzD,KAAMsH,EAAG3B,EAExC,CAAE,MAAO8B,GACL,CAEJ,OAAOF,CACX,GAAC,CAAApG,IAAA,4BAAAC,MAED,WAA2D,IAAjC2E,EAAUjH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIa,EAAKb,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,OACzCkD,EAAQhC,KAAKqH,eAAe,CAC9B1B,QAAS,GACTI,WAAYA,EACZpG,MAAOA,EACPqG,KAAM,cAEJ+B,EAAQ/H,KAAKgI,oBAAoBhG,GAIvC,OAHA+F,EAAMzD,UAAUC,IAAI,mBACDwD,EAAMhI,cAAc,6BAC5BwB,UAAY,uFAChBS,CACX,GAAC,CAAAb,IAAA,sBAAAC,MAED,SAAoB6H,GAChBjJ,KAAKI,kBAAoB6I,CAC7B,GAAC,CAAA9H,IAAA,cAAAC,MAED,SAAYb,GACRP,KAAKM,UAAYC,CACrB,GAGA,CAAAY,IAAA,aAAAC,MAMA,SAAWkG,EAAG4B,GACV,YAAUlK,IAANsI,EACOtH,KAAKkB,SAASuF,aAEfzH,IAANkK,EACI5B,EAAI,EACGtH,KAAKkB,SAASuF,MAAMa,GAExBtH,KAAKkB,SAASuF,MAAMa,EAAGA,EAAI,GAE/BtH,KAAKkB,SAASuF,MAAMa,EAAG4B,EAClC,GAAC,CAAA/H,IAAA,eAAAC,MAED,WACIpB,KAAKgC,MAAQ,EACbhC,KAAKkB,SAAW,EACpB,GAAC,CAAAC,IAAA,mBAAAC,MAED,WACI,OAAOpB,KAAKkB,SAASnC,MACzB,GAAC,CAAAoC,IAAA,oBAAAC,MAED,SAAkBkG,GACd,OAAIA,GAAK,GAAKA,EAAItH,KAAKkB,SAASnC,OACrBiB,KAAKkB,SAASoG,GAElB,CAAA,CACX,GAAC,CAAAnG,IAAA,2BAAAC,MAED,SAAyBkG,GACrB,OAAIA,GAAK,GAAKA,EAAItH,KAAKkB,SAASnC,OACrBiB,KAAKkB,SAASoG,GAAG3B,QAErB,EACX,GAAC,CAAAxE,IAAA,gBAAAC,MAED,WACI,OAAOpB,KAAKkB,SAASiI,KAAI,SAACvB,GAAI,MAAM,CAChC5F,MAAO4F,EAAK5F,MACZ2D,QAASiC,EAAKjC,QACdI,WAAY6B,EAAK7B,WACjBpG,MAAOiI,EAAKjI,MACZqG,KAAM4B,EAAK5B,KACXC,OAAQ2B,EAAK3B,OACbI,QAASuB,EAAKvB,QACdC,KAAMsB,EAAKtB,KAAOsB,EAAKtB,KAAKG,QAAU,GACtCI,UAAWe,EAAKf,UAChBK,YAAaU,EAAKV,YACrB,GACL,GAAC,CAAA/F,IAAA,gBAAAC,MAED,SAAcgI,GAEVpJ,KAAK2B,cAAcJ,UAAY,GAC/BvB,KAAKkB,SAAW,GAChBlB,KAAKgC,MAAQ,EAAE,IAESqH,EAFTC,EAAAZ,EAEKU,GAAI,IAAxB,IAAAE,EAAAX,MAAAU,EAAAC,EAAAhC,KAAAsB,MAA0B,CAAA,IAAfV,EAAKmB,EAAAjI,MACZpB,KAAKqH,eAAe,CAChB1B,QAASuC,EAAMvC,SAAW,GAC1BI,WAAYmC,EAAMnC,YAAc,OAChCpG,MAAOuI,EAAMvI,OAAS,QACtBqG,KAAMkC,EAAMlC,MAAQ,OACpBC,OAAQiC,EAAMjC,OACdI,QAAS6B,EAAM7B,QACfC,KAAM4B,EAAM5B,MAEpB,CAAC,CAAA,MAAAwC,GAAAQ,EAAAP,EAAAD,EAAA,CAAA,QAAAQ,EAAAN,GAAA,CACL,GAAC,CAAA7H,IAAA,cAAAC,MAED,SAAYmI,GACRvJ,KAAKwB,YAAY8C,UAAUE,OAAOxE,KAAKE,QACvCF,KAAKwB,YAAY8C,UAAUC,IAAIgF,GAC/BvJ,KAAKE,OAASqJ,CAClB,GAAC,CAAApI,IAAA,QAAAqI,IAED,WACI,OAAOxJ,KAAKE,MAChB,MAAC,CAAA,CAAAiB,IAAA,UAAAC,MAED,WACI,MAAO,CAAEqI,QAAW,QAASC,QAAW,QAASC,IAAO,iCAC5D,GAEA,CAAAxI,IAAA,aAAAC,MAkBA,SAAkBwI,GAAgE,IAAtDC,EAAS/K,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,QAAGE,EAAW8K,IAAsBhL,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC/DiL,EAAY,icAalB,IAXwB,iBAAbH,IACPA,EAAWhF,KAAKoF,MAAsB,IAAhBpF,KAAKqF,UAAkB,SAG/BjL,IAAd6K,IACAA,EAAYjF,KAAKoF,MAAsBD,IAAhBnF,KAAKqF,WAGhCJ,GAAwBE,IAGQ,MAAzBA,EAAUF,IAAsB,WAAWK,KAAKH,EAAUF,KAC7DA,GAAaA,EAAY,GAAKE,IAMlC,IAHA,IAAMI,EAAIJ,EAAUK,UAAUP,GAAaE,EAAUK,UAAU,EAAGP,GAE9DlB,EAAI,GACDiB,EAAW,GACdjB,GAAKiB,EAAWO,EAAEpL,OAASoL,EAAEC,UAAU,EAAGR,GAAYO,EACtDP,GAAYO,EAAEpL,OAWlB,MARwB,MAApB4J,EAAEA,EAAE5J,OAAS,KACb4J,EAAIA,EAAEyB,UAAU,EAAGzB,EAAE5J,OAAS,GAAK,KAGnC+K,IACAnB,EAAIA,EAAE,GAAG0B,cAAgB1B,EAAEyB,UAAU,IAGlCzB,CACX,gGAAC,CA1pBS"}
1
+ {"version":3,"file":"quikchat.umd.min.js","sources":["../src/quikchat.js"],"sourcesContent":["\nclass quikchat {\n /**\n *\n * @param string or DOM element parentElement\n * @param {*} meta\n */\n constructor(parentElement, onSend = () => { }, options = {}) {\n const defaultOpts = {\n theme: 'quikchat-theme-light',\n trackHistory: true,\n showTimestamps: false,\n titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n };\n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\n this._messageFormatter = meta.messageFormatter || null;\n this._sanitize = meta.sanitize || false;\n this._createWidget();\n // title area\n if (meta.titleArea) {\n this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);\n if (meta.titleArea.show === true) {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n // messages area\n if (meta.messagesArea) {\n this.messagesAreaAlternateColors(meta.messagesArea.alternating);\n }\n // timestamps\n if (meta.showTimestamps) {\n this.messagesAreaShowTimestamps(true);\n }\n // direction (ltr/rtl)\n if (meta.direction) {\n this.setDirection(meta.direction);\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory !== false;\n this._historyLimit = 10000000;\n this._history = [];\n }\n\n _createWidget() {\n const widgetHTML =\n `\n <div class=\"quikchat-base ${this.theme}\">\n <div class=\"quikchat-title-area\"></div>\n <div class=\"quikchat-messages-wrapper\"><div class=\"quikchat-messages-area\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\"></div><button class=\"quikchat-scroll-bottom\" aria-label=\"Scroll to bottom\"></button></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\" rows=\"1\" aria-label=\"Type a message\"></textarea>\n <button class=\"quikchat-input-send-btn\">Send</button>\n </div>\n </div>\n `;\n\n this._parentElement.innerHTML = widgetHTML;\n this._chatWidget = this._parentElement.querySelector('.quikchat-base');\n this._titleArea = this._chatWidget.querySelector('.quikchat-title-area');\n this._messagesWrapper = this._chatWidget.querySelector('.quikchat-messages-wrapper');\n this._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\n this._scrollBottomBtn = this._messagesWrapper.querySelector('.quikchat-scroll-bottom');\n this._inputArea = this._chatWidget.querySelector('.quikchat-input-area');\n this._textEntry = this._inputArea.querySelector('.quikchat-input-textbox');\n this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');\n this.msgid = 0;\n }\n\n /**\n * Attach event listeners to the widget\n */\n _attachEventListeners() {\n this._sendButton.addEventListener('click', () => {\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n });\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n event.preventDefault();\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n }\n });\n\n // Auto-grow textarea\n this._textEntry.addEventListener('input', () => this._autoGrowTextarea());\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight - 1;\n this._updateScrollBottomBtn();\n });\n\n // Scroll-to-bottom button\n this._scrollBottomBtn.addEventListener('click', () => this.scrollToBottom());\n\n // Ctrl+End to scroll to bottom\n this._chatWidget.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.key === 'End') {\n event.preventDefault();\n this.scrollToBottom();\n }\n });\n\n // Use ResizeObserver to detect parent container resize\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleContainerResize());\n this._resizeObserver.observe(this._parentElement);\n }\n }\n\n // set the onSend function callback.\n setCallbackOnSend(callback) {\n this._onSend = callback;\n }\n // set a callback for everytime a message is added (listener)\n setCallbackonMessageAdded(callback) {\n this._onMessageAdded = callback;\n }\n setCallbackonMessageAppend(callback) {\n this._onMessageAppend = callback;\n }\n setCallbackonMessageReplace(callback) {\n this._onMessageReplace = callback;\n }\n setCallbackonMessageDelete(callback) {\n this._onMessageDelete = callback;\n }\n\n // Public methods\n titleAreaToggle() {\n if (this._titleArea.style.display === 'none') {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n }\n\n titleAreaSetContents(title, align = 'center') {\n this._titleArea.innerHTML = title;\n this._titleArea.style.textAlign = align;\n }\n\n titleAreaGetContents() {\n return this._titleArea.innerHTML;\n }\n\n inputAreaToggle() {\n if (this._inputArea.style.display === 'none') {\n this.inputAreaShow();\n } else {\n this.inputAreaHide();\n }\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n }\n\n inputAreaSetEnabled(enabled) {\n this._textEntry.disabled = !enabled;\n this._sendButton.disabled = !enabled;\n }\n\n inputAreaSetButtonText(text) {\n this._sendButton.textContent = text;\n }\n\n inputAreaGetButtonText() {\n return this._sendButton.textContent;\n }\n\n setDirection(dir) {\n const d = dir === 'rtl' ? 'rtl' : 'ltr';\n this._chatWidget.setAttribute('dir', d);\n if (d === 'rtl') {\n this._chatWidget.classList.add('quikchat-rtl');\n } else {\n this._chatWidget.classList.remove('quikchat-rtl');\n }\n }\n\n getDirection() {\n return this._chatWidget.getAttribute('dir') || 'ltr';\n }\n\n _handleContainerResize() {\n // Layout is handled by CSS flexbox — no JS height calculation needed.\n // This hook exists for future use or custom resize callbacks.\n }\n\n scrollToBottom() {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n this.userScrolledUp = false;\n this._updateScrollBottomBtn();\n }\n\n _updateScrollBottomBtn() {\n if (this.userScrolledUp) {\n this._scrollBottomBtn.classList.add('quikchat-scroll-bottom-visible');\n } else {\n this._scrollBottomBtn.classList.remove('quikchat-scroll-bottom-visible');\n }\n }\n\n _autoGrowTextarea() {\n const el = this._textEntry;\n el.style.height = 'auto';\n const maxHeight = 120;\n el.style.height = Math.min(el.scrollHeight, maxHeight) + 'px';\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n _formatTimestamp(isoString) {\n const d = new Date(isoString);\n const h = d.getHours();\n const m = String(d.getMinutes()).padStart(2, '0');\n const ampm = h >= 12 ? 'PM' : 'AM';\n const h12 = h % 12 || 12;\n return h12 + ':' + m + ' ' + ampm;\n }\n\n messagesAreaShowTimestamps(show) {\n if (show) {\n this._messagesArea.classList.add('quikchat-show-timestamps');\n } else {\n this._messagesArea.classList.remove('quikchat-show-timestamps');\n }\n }\n\n messagesAreaShowTimestampsGet() {\n return this._messagesArea.classList.contains('quikchat-show-timestamps');\n }\n\n messagesAreaShowTimestampsToggle() {\n this._messagesArea.classList.toggle('quikchat-show-timestamps');\n }\n\n _escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n _processContent(content) {\n if (this._sanitize === true) {\n content = this._escapeHTML(content);\n } else if (typeof this._sanitize === 'function') {\n content = this._sanitize(content);\n }\n if (this._messageFormatter) {\n content = this._messageFormatter(content);\n }\n return content;\n }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n messageDiv.classList.add('quikchat-message', msgidClass);\n messageDiv.classList.add('quikchat-role-' + (input.role || 'user'));\n messageDiv.classList.add('quikchat-align-' + (input.align || 'right'));\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n // Visibility: default true, hidden messages get display:none\n const visible = input.visible !== false;\n if (!visible) {\n messageDiv.style.display = 'none';\n }\n\n // Tags: array of strings for group-based visibility control\n const tags = Array.isArray(input.tags) ? input.tags.slice() : [];\n\n const userDiv = document.createElement('div');\n userDiv.classList.add('quikchat-user-label');\n userDiv.style.textAlign = input.align;\n userDiv.innerHTML = input.userString;\n\n const contentDiv = document.createElement('div');\n contentDiv.classList.add('quikchat-message-content');\n contentDiv.style.textAlign = input.align;\n contentDiv.innerHTML = this._processContent(input.content);\n\n const timestamp = new Date().toISOString();\n const timestampSpan = document.createElement('span');\n timestampSpan.classList.add('quikchat-timestamp');\n timestampSpan.textContent = this._formatTimestamp(timestamp);\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\n messageDiv.appendChild(timestampSpan);\n this._messagesArea.appendChild(messageDiv);\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n\n this._textEntry.value = '';\n this._autoGrowTextarea();\n const updatedtime = timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, visible, tags, timestamp, updatedtime, messageDiv });\n if (this._history.length > this._historyLimit) {\n this._history.shift();\n }\n }\n\n if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n }\n\n return msgid;\n }\n\n\n messageAddNew(content = \"\", userString = \"user\", align = \"right\", role = \"user\") {\n return this.messageAddFull(\n { content: content, userString: userString, align: align, role: role }\n );\n }\n messageRemove(n) {\n let success = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n success = true;\n }\n catch (_error) {\n // Message ID not found\n }\n if (success) {\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n if (this._onMessageDelete) {\n this._onMessageDelete(this, n);\n }\n }\n return success;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (_error) {\n // Message ID not found\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\";\n try {\n content = this._history.filter((item) => item.msgid === n)[0].content;\n }\n catch (_error) {\n // Message ID not found\n }\n return content;\n }\n\n messageSetVisible(n, visible) {\n const msgEl = this.messageGetDOMObject(n);\n if (!msgEl) return false;\n msgEl.style.display = visible ? '' : 'none';\n const item = this._history.find((entry) => entry.msgid === n);\n if (item) item.visible = visible;\n return true;\n }\n\n messageGetVisible(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item ? item.visible !== false : false;\n }\n\n messageToggleVisible(n) {\n const current = this.messageGetVisible(n);\n return this.messageSetVisible(n, !current);\n }\n\n messageSetVisibleByTag(tag, visible) {\n let count = 0;\n for (const item of this._history) {\n if (item.tags && item.tags.includes(tag)) {\n this.messageSetVisible(item.msgid, visible);\n count++;\n }\n }\n return count;\n }\n\n messageGetTags(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item && item.tags ? item.tags.slice() : [];\n }\n\n messageSetTags(n, tags) {\n const item = this._history.find((entry) => entry.msgid === n);\n if (!item) return false;\n item.tags = Array.isArray(tags) ? tags.slice() : [];\n return true;\n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(item.content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageAppend) {\n this._onMessageAppend(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageReplace) {\n this._onMessageReplace(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n messageAddTypingIndicator(userString = '', align = 'left') {\n const msgid = this.messageAddFull({\n content: '',\n userString: userString,\n align: align,\n role: 'assistant',\n });\n const msgEl = this.messageGetDOMObject(msgid);\n msgEl.classList.add('quikchat-typing');\n const contentDiv = msgEl.querySelector('.quikchat-message-content');\n contentDiv.innerHTML = '<span class=\"quikchat-typing-dots\"><span>.</span><span>.</span><span>.</span></span>';\n return msgid;\n }\n\n setMessageFormatter(formatter) {\n this._messageFormatter = formatter;\n }\n\n setSanitize(sanitize) {\n this._sanitize = sanitize;\n }\n\n // history functions\n /**\n *\n * @param {*} n\n * @param {*} m\n * @returns array of history messages\n */\n historyGet(n, m) {\n if (n === undefined) {\n return this._history.slice();\n }\n if (m === undefined) {\n if (n < 0) {\n return this._history.slice(n);\n }\n return this._history.slice(n, n + 1);\n }\n return this._history.slice(n, m);\n }\n\n historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n];\n }\n return {};\n }\n\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n].content;\n }\n return \"\";\n }\n\n historyExport() {\n return this._history.map((item) => ({\n msgid: item.msgid,\n content: item.content,\n userString: item.userString,\n align: item.align,\n role: item.role,\n userID: item.userID,\n visible: item.visible,\n tags: item.tags ? item.tags.slice() : [],\n timestamp: item.timestamp,\n updatedtime: item.updatedtime,\n }));\n }\n\n historyImport(data) {\n // Clear existing messages from DOM and history\n this._messagesArea.innerHTML = '';\n this._history = [];\n this.msgid = 0;\n\n for (const entry of data) {\n this.messageAddFull({\n content: entry.content || '',\n userString: entry.userString || 'user',\n align: entry.align || 'right',\n role: entry.role || 'user',\n userID: entry.userID,\n visible: entry.visible,\n tags: entry.tags,\n });\n }\n }\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.2.7\", \"license\": \"BSD-2\", \"url\": \"https://github.com/deftio/quikchat\" };\n }\n\n /**\n * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.\n * borrowed from github.com/deftio/bitwrench.js\n * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).\n * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.\n * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.\n *\n * @returns {string} A string of Lorem Ipsum text.\n *\n * @example\n * // Returns 200 characters of Lorem Ipsum starting from index 50\n * loremIpsum(200, 50);\n *\n * @example\n * //Returns a 200 Lorem Ipsum characters starting from a random index\n * loremIpsum(200);\n */\n\n static loremIpsum(numChars, startSpot = undefined, startWithCapitalLetter = true) {\n const loremText = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \";\n\n if (typeof numChars !== \"number\") {\n numChars = Math.floor(Math.random() * 126) + 25;\n }\n\n if (startSpot === undefined) {\n startSpot = Math.floor(Math.random() * loremText.length);\n }\n\n startSpot = startSpot % loremText.length;\n\n // Move startSpot to the next non-whitespace and non-punctuation character\n while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {\n startSpot = (startSpot + 1) % loremText.length;\n }\n\n const l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n let s = \"\";\n while (numChars > 0) {\n s += numChars < l.length ? l.substring(0, numChars) : l;\n numChars -= l.length;\n }\n\n if (s[s.length - 1] === \" \") {\n s = s.substring(0, s.length - 1) + \".\"; // always end on non-whitespace. \".\" was chosen arbitrarily.\n }\n\n if (startWithCapitalLetter) {\n s = s[0].toUpperCase() + s.substring(1);\n }\n\n return s;\n };\n\n\n}\n\nexport default quikchat;\n"],"names":["quikchat","parentElement","onSend","arguments","length","undefined","options","_classCallCheck","meta","_objectSpread","theme","trackHistory","showTimestamps","titleArea","title","show","align","messagesArea","alternating","document","querySelector","this","_parentElement","_theme","_onSend","_messageFormatter","messageFormatter","_sanitize","sanitize","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","messagesAreaShowTimestamps","direction","setDirection","_attachEventListeners","_historyLimit","_history","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesWrapper","_messagesArea","_scrollBottomBtn","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","text","trim","event","shiftKey","keyCode","preventDefault","_autoGrowTextarea","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","_updateScrollBottomBtn","scrollToBottom","ctrlKey","ResizeObserver","_resizeObserver","_handleContainerResize","observe","callback","_onMessageAdded","_onMessageAppend","_onMessageReplace","_onMessageDelete","style","display","textAlign","inputAreaShow","inputAreaHide","enabled","disabled","textContent","dir","d","setAttribute","classList","add","remove","getAttribute","el","height","Math","min","overflowY","isoString","Date","h","getHours","String","getMinutes","padStart","contains","toggle","str","div","createElement","content","_escapeHTML","alt","input","userString","role","userID","messageDiv","msgidClass","children","visible","tags","Array","isArray","slice","userDiv","contentDiv","_processContent","timestamp","toISOString","timestampSpan","_formatTimestamp","appendChild","updatedtime","push","shift","messageAddFull","n","success","removeChild","_error","splice","findIndex","item","msg","filter","msgEl","messageGetDOMObject","find","entry","current","messageGetVisible","messageSetVisible","tag","_step","count","_iterator","_createForOfIteratorHelper","s","done","includes","err","e","f","formatter","m","map","data","_step2","_iterator2","newTheme","get","version","license","url","numChars","startSpot","startWithCapitalLetter","loremText","floor","random","test","l","substring","toUpperCase"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quikchat",
3
- "version": "1.2.6",
3
+ "version": "1.2.7",
4
4
  "description": "quikchat is a simple vanilla (no dependancies) JavaScript chat control for browsers ",
5
5
  "author": "deftio (https://github.com/deftio",
6
6
  "license": "BSD-2-Clause",
@@ -111,7 +111,7 @@
111
111
  "husky": "^9.1.7",
112
112
  "jest": "^30.3.0",
113
113
  "jest-environment-jsdom": "^30.3.0",
114
- "quikdown": "^1.2.10",
114
+ "quikdown": "^1.2.11",
115
115
  "rollup": "^4.60.1",
116
116
  "rollup-plugin-css-only": "^4.5.5",
117
117
  "rollup-plugin-postcss": "^4.0.2"