quikchat 1.1.7 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,7 +26,10 @@ Quikchat is a vanilla (no dependancies) JavaScript chat control that can be easi
26
26
 
27
27
  [Simple Demo](https://deftio.github.io/quikchat/examples/example_umd.html)
28
28
 
29
- Full Examples are in the repo examples folder:
29
+ [List of Examples on Github](https://deftio.github.io/quikchat/examples/index.html)
30
+
31
+
32
+ Full Examples are in the repo examples folder (relative link):
30
33
  [Example Code and Demo](./examples/index.html).
31
34
 
32
35
  Examples include using ESM, UMD modules, theming, running multiple chats on the same page, and integration with LLM providers such as Ollama, LMStudio, OpenAI compatible providers.
@@ -183,10 +186,4 @@ quikchat is licensed under the BSD-2 License.
183
186
 
184
187
  ## Home Page
185
188
 
186
- [quikchat homepage and source code](https://githhub.com/deftio/quikchat)
187
-
188
-
189
-
190
-
191
-
192
-
189
+ [quikchat homepage and source code](https://github.com/deftio/quikchat)
@@ -311,7 +311,8 @@ var quikchat = /*#__PURE__*/function () {
311
311
  role: "user",
312
312
  userID: -1,
313
313
  timestamp: false,
314
- updatedtime: false
314
+ updatedtime: false,
315
+ scrollIntoView: false
315
316
  };
316
317
  var msgid = this.msgid;
317
318
  var messageDiv = document.createElement('div');
@@ -331,7 +332,7 @@ var quikchat = /*#__PURE__*/function () {
331
332
  this._messagesArea.appendChild(messageDiv);
332
333
 
333
334
  // Scroll to the last message only if the user is not actively scrolling up
334
- if (!this.userScrolledUp) {
335
+ if (!this.userScrolledUp || input.scrollIntoView) {
335
336
  this._messagesArea.lastElementChild.scrollIntoView();
336
337
  }
337
338
  this._textEntry.value = '';
@@ -364,12 +365,16 @@ var quikchat = /*#__PURE__*/function () {
364
365
  var userString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "user";
365
366
  var align = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "right";
366
367
  var role = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "user";
367
- return this.messageAddFull({
368
+ var scrollIntoView = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
369
+ var retvalue = this.messageAddFull({
368
370
  content: content,
369
371
  userString: userString,
370
372
  align: align,
371
- role: role
373
+ role: role,
374
+ scrollIntoView: scrollIntoView
372
375
  });
376
+ // this.messageScrollToBottom();
377
+ return retvalue;
373
378
  }
374
379
  }, {
375
380
  key: "messageRemove",
@@ -477,7 +482,11 @@ var quikchat = /*#__PURE__*/function () {
477
482
  }
478
483
  return success;
479
484
  }
480
-
485
+ }, {
486
+ key: "messageScrollToBottom",
487
+ value: function messageScrollToBottom() {
488
+ this._messagesArea.lastElementChild.scrollIntoView();
489
+ }
481
490
  // history functions
482
491
  /**
483
492
  *
@@ -577,7 +586,7 @@ var quikchat = /*#__PURE__*/function () {
577
586
  key: "version",
578
587
  value: function version() {
579
588
  return {
580
- "version": "1.1.7",
589
+ "version": "1.1.8",
581
590
  "license": "BSD-2",
582
591
  "url": "https://github/deftio/quikchat"
583
592
  };
@@ -1 +1 @@
1
- {"version":3,"file":"quikchat.cjs.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 titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n inputArea: { show: true }\n }; \n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n //console.log(parentElement, meta);\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\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\n // input area\n if (meta.inputArea) {\n if (meta.inputArea.show === true) \n this.inputAreaShow();\n else \n this.inputAreaHide();\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory || true;\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\">\n <span style=\"font-size: 1.5em; font-weight: 600;\">Title Area</span>\n </div>\n <div class=\"quikchat-messages-area\"></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\"></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._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\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', () => this._onSend(this, this._textEntry.value.trim()));\n window.addEventListener('resize', () => this._handleContainerResize());\n this._chatWidget.addEventListener('resize', () => this._handleContainerResize());\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n // Prevent default behavior (adding new line)\n event.preventDefault();\n this._onSend(this, this._textEntry.value.trim());\n }\n });\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight;\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\n // Public methods\n titleAreaToggle() {\n this._titleArea.style.display === 'none' ? this.titleAreaShow() : this.titleAreaHide();\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\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 this._inputArea.classList.toggle('hidden');\n this._inputArea.style.display === 'none' ? this.inputAreaShow() : this.inputAreaHide();\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\n }\n\n _adjustMessagesAreaHeight() {\n const hiddenElements = [...this._chatWidget.children].filter(child => child.classList.contains('hidden'));\n const totalHiddenHeight = hiddenElements.reduce((sum, child) => sum + child.offsetHeight, 0);\n const containerHeight = this._chatWidget.offsetHeight;\n this._messagesArea.style.height = `calc(100% - ${containerHeight - totalHiddenHeight}px)`;\n }\n\n _handleContainerResize() {\n this._adjustMessagesAreaHeight();\n this._adjustSendButtonWidth();\n return true;\n }\n\n _adjustSendButtonWidth() {\n const sendButtonText = this._sendButton.textContent.trim();\n const fontSize = parseFloat(getComputedStyle(this._sendButton).fontSize);\n const minWidth = fontSize * sendButtonText.length + 16;\n this._sendButton.style.minWidth = `${minWidth}px`;\n return true;\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, timestamp: false, updatedtime: false }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n const userIdClass = 'quikchat-userid-' + String(input.userString).padStart(10, '0'); // hash this..\n messageDiv.classList.add('quikchat-message', msgidClass);\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n const userDiv = document.createElement('div');\n userDiv.innerHTML = input.userString;\n userDiv.style = `width: 100%; text-align: ${input.align}; font-size: 1em; font-weight:700;`;\n\n const contentDiv = document.createElement('div');\n contentDiv.style = `width: 100%; text-align: ${input.align};`;\n contentDiv.innerHTML = input.content;\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\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.lastElementChild.scrollIntoView();\n }\n\n this._textEntry.value = '';\n this._adjustMessagesAreaHeight();\n // add timestamp now, unless it is passed in \n\n const timestamp = input.timestamp ? input.timestamp : new Date().toISOString() \n const updatedtime = input.updatedtime ? input.updatedtime : timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, 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 // use css selector to remove the message\n let sucess = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n sucess = true;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n if (sucess) {\n // slow way to remove from history\n //this._history = this._history.filter((item) => item.msgid !== n); // todo make this more efficient\n\n // better way to delete this from history\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n }\n return sucess;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n // now use css selector to get the message \n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\"\n // now use css selector to get the message \n try {\n // get from history..\n content = this._history.filter((item) => item.msgid === n)[0].content;\n //content = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.textContent;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return content;\n }\n\n /* append message to the message content\n */\n\n messageAppendContent(n, content) {\n let success = false;\n try {\n this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML += content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(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 this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML = content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(n)} : Message ID not found`);\n }\n return success;\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\n if (n == undefined) {\n n = 0;\n m = this._history.length;\n }\n if (m === undefined) {\n m = n < 0 ? m : n + 1;\n }\n // remember that entries could be deleted. TODO: So we need to return the actual history entries\n // so now we need to find the array index that correspondes to messageIds n (start) and m (end)\n\n return this._history.slice(n, m);\n }\n\n historyGetAllCopy() {\n return this._history.slice();\n }\n\n historyClear() {\n this.msgid = 0;\n this._messagesArea.innerHTML = \"\";\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\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) \n return this._history[n].content;\n else\n return \"\";\n }\n\n // expects an array of messages to be in the format of the history object\n historyRestoreAll(messageList) {\n // clear all messages and history\n this.historyClear();\n\n // clear the messages div \n this._messagesArea.innerHTML = \"\";\n\n // add all messages\n messageList.forEach((message) => {\n this.messageAddFull(message);\n });\n }\n /**\n * \n * @param {string} newTheme \n */\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n /**\n * Get the current theme\n * @returns {string} - The current theme\n */\n get theme() {\n return this._theme;\n }\n\n /**\n * \n * @returns {object} - Returns the version and license information for the library.\n */\n static version() {\n return { \"version\": \"1.1.7\", \"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() * (150)) + 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 let l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n if (typeof numChars !== \"number\") {\n numChars = l.length;\n }\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 let c = s[0].toUpperCase();\n c = /[A-Z]/.test(c) ? c : \"M\";\n s = c + 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","titleArea","title","show","align","messagesArea","alternating","inputArea","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","inputAreaShow","inputAreaHide","_attachEventListeners","_historyLimit","_history","_createClass","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesArea","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","trim","window","_handleContainerResize","event","shiftKey","keyCode","preventDefault","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","titleAreaToggle","style","display","_adjustMessagesAreaHeight","textAlign","titleAreaGetContents","inputAreaToggle","classList","toggle","hiddenElements","_toConsumableArray","children","filter","child","contains","totalHiddenHeight","reduce","sum","offsetHeight","containerHeight","height","_adjustSendButtonWidth","sendButtonText","textContent","fontSize","parseFloat","getComputedStyle","minWidth","alt","add","remove","messagesAreaAlternateColorsToggle","messagesAreaAlternateColorsGet","messageAddFull","input","content","userString","role","userID","timestamp","updatedtime","messageDiv","createElement","msgidClass","String","padStart","userDiv","contentDiv","appendChild","lastElementChild","scrollIntoView","Date","toISOString","push","shift","messageAddNew","messageRemove","n","sucess","removeChild","error","console","log","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","messageAppendContent","success","lastChild","messageReplaceContent","historyGet","m","slice","historyGetAllCopy","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","historyRestoreAll","messageList","_this2","forEach","message","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","Math","floor","random","test","l","substring","s","c","toUpperCase"],"mappings":"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"}
1
+ {"version":3,"file":"quikchat.cjs.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 titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n inputArea: { show: true }\n }; \n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n //console.log(parentElement, meta);\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\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\n // input area\n if (meta.inputArea) {\n if (meta.inputArea.show === true) \n this.inputAreaShow();\n else \n this.inputAreaHide();\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory || true;\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\">\n <span style=\"font-size: 1.5em; font-weight: 600;\">Title Area</span>\n </div>\n <div class=\"quikchat-messages-area\"></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\"></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._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\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', () => this._onSend(this, this._textEntry.value.trim()));\n window.addEventListener('resize', () => this._handleContainerResize());\n this._chatWidget.addEventListener('resize', () => this._handleContainerResize());\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n // Prevent default behavior (adding new line)\n event.preventDefault();\n this._onSend(this, this._textEntry.value.trim());\n }\n });\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight;\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\n // Public methods\n titleAreaToggle() {\n this._titleArea.style.display === 'none' ? this.titleAreaShow() : this.titleAreaHide();\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\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 this._inputArea.classList.toggle('hidden');\n this._inputArea.style.display === 'none' ? this.inputAreaShow() : this.inputAreaHide();\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\n }\n\n _adjustMessagesAreaHeight() {\n const hiddenElements = [...this._chatWidget.children].filter(child => child.classList.contains('hidden'));\n const totalHiddenHeight = hiddenElements.reduce((sum, child) => sum + child.offsetHeight, 0);\n const containerHeight = this._chatWidget.offsetHeight;\n this._messagesArea.style.height = `calc(100% - ${containerHeight - totalHiddenHeight}px)`;\n }\n\n _handleContainerResize() {\n this._adjustMessagesAreaHeight();\n this._adjustSendButtonWidth();\n return true;\n }\n\n _adjustSendButtonWidth() {\n const sendButtonText = this._sendButton.textContent.trim();\n const fontSize = parseFloat(getComputedStyle(this._sendButton).fontSize);\n const minWidth = fontSize * sendButtonText.length + 16;\n this._sendButton.style.minWidth = `${minWidth}px`;\n return true;\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, timestamp: false, updatedtime: false, scrollIntoView: false }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n const userIdClass = 'quikchat-userid-' + String(input.userString).padStart(10, '0'); // hash this..\n messageDiv.classList.add('quikchat-message', msgidClass);\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n const userDiv = document.createElement('div');\n userDiv.innerHTML = input.userString;\n userDiv.style = `width: 100%; text-align: ${input.align}; font-size: 1em; font-weight:700;`;\n\n const contentDiv = document.createElement('div');\n contentDiv.style = `width: 100%; text-align: ${input.align};`;\n contentDiv.innerHTML = input.content;\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\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) || input.scrollIntoView) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n\n this._textEntry.value = '';\n this._adjustMessagesAreaHeight();\n // add timestamp now, unless it is passed in \n\n const timestamp = input.timestamp ? input.timestamp : new Date().toISOString() \n const updatedtime = input.updatedtime ? input.updatedtime : timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, 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\", scrollIntoView = false) {\n let retvalue = this.messageAddFull(\n { content: content, userString: userString, align: align, role: role, scrollIntoView: scrollIntoView }\n );\n // this.messageScrollToBottom();\n return retvalue;\n\n }\n messageRemove(n) {\n // use css selector to remove the message\n let sucess = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n sucess = true;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n if (sucess) {\n // slow way to remove from history\n //this._history = this._history.filter((item) => item.msgid !== n); // todo make this more efficient\n\n // better way to delete this from history\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n }\n return sucess;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n // now use css selector to get the message \n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\"\n // now use css selector to get the message \n try {\n // get from history..\n content = this._history.filter((item) => item.msgid === n)[0].content;\n //content = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.textContent;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return content;\n }\n\n /* append message to the message content\n */\n\n messageAppendContent(n, content) {\n let success = false;\n try {\n this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML += content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(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 this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML = content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(n)} : Message ID not found`);\n }\n return success;\n }\n \n messageScrollToBottom() {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n // history functions\n /**\n * \n * @param {*} n \n * @param {*} m \n * @returns array of history messages\n */\n historyGet(n, m) {\n\n if (n == undefined) {\n n = 0;\n m = this._history.length;\n }\n if (m === undefined) {\n m = n < 0 ? m : n + 1;\n }\n // remember that entries could be deleted. TODO: So we need to return the actual history entries\n // so now we need to find the array index that correspondes to messageIds n (start) and m (end)\n\n return this._history.slice(n, m);\n }\n\n historyGetAllCopy() {\n return this._history.slice();\n }\n\n historyClear() {\n this.msgid = 0;\n this._messagesArea.innerHTML = \"\";\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\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) \n return this._history[n].content;\n else\n return \"\";\n }\n\n // expects an array of messages to be in the format of the history object\n historyRestoreAll(messageList) {\n // clear all messages and history\n this.historyClear();\n\n // clear the messages div \n this._messagesArea.innerHTML = \"\";\n\n // add all messages\n messageList.forEach((message) => {\n this.messageAddFull(message);\n });\n }\n /**\n * \n * @param {string} newTheme \n */\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n /**\n * Get the current theme\n * @returns {string} - The current theme\n */\n get theme() {\n return this._theme;\n }\n\n /**\n * \n * @returns {object} - Returns the version and license information for the library.\n */\n static version() {\n return { \"version\": \"1.1.8\", \"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() * (150)) + 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 let l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n if (typeof numChars !== \"number\") {\n numChars = l.length;\n }\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 let c = s[0].toUpperCase();\n c = /[A-Z]/.test(c) ? c : \"M\";\n s = c + 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","titleArea","title","show","align","messagesArea","alternating","inputArea","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","inputAreaShow","inputAreaHide","_attachEventListeners","_historyLimit","_history","_createClass","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesArea","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","trim","window","_handleContainerResize","event","shiftKey","keyCode","preventDefault","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","titleAreaToggle","style","display","_adjustMessagesAreaHeight","textAlign","titleAreaGetContents","inputAreaToggle","classList","toggle","hiddenElements","_toConsumableArray","children","filter","child","contains","totalHiddenHeight","reduce","sum","offsetHeight","containerHeight","height","_adjustSendButtonWidth","sendButtonText","textContent","fontSize","parseFloat","getComputedStyle","minWidth","alt","add","remove","messagesAreaAlternateColorsToggle","messagesAreaAlternateColorsGet","messageAddFull","input","content","userString","role","userID","timestamp","updatedtime","scrollIntoView","messageDiv","createElement","msgidClass","String","padStart","userDiv","contentDiv","appendChild","lastElementChild","Date","toISOString","push","shift","messageAddNew","retvalue","messageRemove","n","sucess","removeChild","error","console","log","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","messageAppendContent","success","lastChild","messageReplaceContent","messageScrollToBottom","historyGet","m","slice","historyGetAllCopy","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","historyRestoreAll","messageList","_this2","forEach","message","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","Math","floor","random","test","l","substring","s","c","toUpperCase"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=Array(t);i<t;i++)n[i]=e[i];return n}function t(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,a(n.key),n)}}function i(e,t,i){return(t=a(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function n(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(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(t){return function(t){if(Array.isArray(t))return e(t)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(t,i){if(t){if("string"==typeof t)return e(t,i);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,i):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t);if("object"!=typeof n)return n;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 i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},n=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 r=s(s({},{theme:"quikchat-theme-light",trackHistory:!0,titleArea:{title:"Chat",show:!1,align:"center"},messagesArea:{alternating:!0},inputArea:{show:!0}}),n);"string"==typeof t&&(t=document.querySelector(t)),this._parentElement=t,this._theme=r.theme,this._onSend=i||function(){},this._createWidget(),r.titleArea&&(this.titleAreaSetContents(r.titleArea.title,r.titleArea.align),!0===r.titleArea.show?this.titleAreaShow():this.titleAreaHide()),r.messagesArea&&this.messagesAreaAlternateColors(r.messagesArea.alternating),r.inputArea&&(!0===r.inputArea.show?this.inputAreaShow():this.inputAreaHide()),this._attachEventListeners(),this.trackHistory=r.trackHistory||!0,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">\n <span style="font-size: 1.5em; font-weight: 600;">Title Area</span>\n </div>\n <div class="quikchat-messages-area"></div>\n <div class="quikchat-input-area">\n <textarea class="quikchat-input-textbox"></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._messagesArea=this._chatWidget.querySelector(".quikchat-messages-area"),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(){return e._onSend(e,e._textEntry.value.trim())})),window.addEventListener("resize",(function(){return e._handleContainerResize()})),this._chatWidget.addEventListener("resize",(function(){return e._handleContainerResize()})),this._textEntry.addEventListener("keydown",(function(t){t.shiftKey&&13===t.keyCode&&(t.preventDefault(),e._onSend(e,e._textEntry.value.trim()))})),this._messagesArea.addEventListener("scroll",(function(){var t=e._messagesArea,i=t.scrollTop,n=t.scrollHeight,s=t.clientHeight;e.userScrolledUp=i+s<n}))}},{key:"setCallbackOnSend",value:function(e){this._onSend=e}},{key:"setCallbackonMessageAdded",value:function(e){this._onMessageAdded=e}},{key:"titleAreaToggle",value:function(){"none"===this._titleArea.style.display?this.titleAreaShow():this.titleAreaHide()}},{key:"titleAreaShow",value:function(){this._titleArea.style.display="",this._adjustMessagesAreaHeight()}},{key:"titleAreaHide",value:function(){this._titleArea.style.display="none",this._adjustMessagesAreaHeight()}},{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(){this._inputArea.classList.toggle("hidden"),"none"===this._inputArea.style.display?this.inputAreaShow():this.inputAreaHide()}},{key:"inputAreaShow",value:function(){this._inputArea.style.display="",this._adjustMessagesAreaHeight()}},{key:"inputAreaHide",value:function(){this._inputArea.style.display="none",this._adjustMessagesAreaHeight()}},{key:"_adjustMessagesAreaHeight",value:function(){var e=r(this._chatWidget.children).filter((function(e){return e.classList.contains("hidden")})).reduce((function(e,t){return e+t.offsetHeight}),0),t=this._chatWidget.offsetHeight;this._messagesArea.style.height="calc(100% - ".concat(t-e,"px)")}},{key:"_handleContainerResize",value:function(){return this._adjustMessagesAreaHeight(),this._adjustSendButtonWidth(),!0}},{key:"_adjustSendButtonWidth",value:function(){var e=this._sendButton.textContent.trim(),t=parseFloat(getComputedStyle(this._sendButton).fontSize)*e.length+16;return this._sendButton.style.minWidth="".concat(t,"px"),!0}},{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,timestamp:!1,updatedtime:!1},t=this.msgid,i=document.createElement("div"),n="quikchat-msgid-"+String(t).padStart(10,"0");String(e.userString).padStart(10,"0"),i.classList.add("quikchat-message",n),this.msgid++,i.classList.add(this._messagesArea.children.length%2==1?"quikchat-message-1":"quikchat-message-2");var r=document.createElement("div");r.innerHTML=e.userString,r.style="width: 100%; text-align: ".concat(e.align,"; font-size: 1em; font-weight:700;");var a=document.createElement("div");a.style="width: 100%; text-align: ".concat(e.align,";"),a.innerHTML=e.content,i.appendChild(r),i.appendChild(a),this._messagesArea.appendChild(i),this.userScrolledUp||this._messagesArea.lastElementChild.scrollIntoView(),this._textEntry.value="",this._adjustMessagesAreaHeight();var o=e.timestamp?e.timestamp:(new Date).toISOString(),l=e.updatedtime?e.updatedtime:o;return this.trackHistory&&(this._history.push(s(s({msgid:t},e),{},{timestamp:o,updatedtime:l,messageDiv:i})),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",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"right",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"user";return this.messageAddFull({content:e,userString:t,align:i,role:n})}},{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){console.log("{String(n)} : Message ID not found")}return t&&this._history.splice(this._history.findIndex((function(t){return t.msgid===e})),1),t}},{key:"messageGetDOMObject",value:function(e){var t=null;try{t=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0")))}catch(e){console.log("{String(n)} : Message ID not found")}return t}},{key:"messageGetContent",value:function(e){var t="";try{t=this._history.filter((function(t){return t.msgid===e}))[0].content}catch(e){console.log("{String(n)} : Message ID not found")}return t}},{key:"messageAppendContent",value:function(e,t){var i=!1;try{this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))).lastChild.innerHTML+=t;var n=this._history.filter((function(t){return t.msgid===e}))[0];n.content+=t,n.updatedtime=(new Date).toISOString(),i=!0,this.userScrolledUp||this._messagesArea.lastElementChild.scrollIntoView()}catch(t){console.log("".concat(String(e)," : Message ID not found"))}return i}},{key:"messageReplaceContent",value:function(e,t){var i=!1;try{this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))).lastChild.innerHTML=t;var n=this._history.filter((function(t){return t.msgid===e}))[0];n.content=t,n.updatedtime=(new Date).toISOString(),i=!0,this.userScrolledUp||this._messagesArea.lastElementChild.scrollIntoView()}catch(t){console.log("".concat(String(e)," : Message ID not found"))}return i}},{key:"historyGet",value:function(e,t){return null==e&&(e=0,t=this._history.length),void 0===t&&(t=e<0?t:e+1),this._history.slice(e,t)}},{key:"historyGetAllCopy",value:function(){return this._history.slice()}},{key:"historyClear",value:function(){this.msgid=0,this._messagesArea.innerHTML="",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:"historyRestoreAll",value:function(e){var t=this;this.historyClear(),this._messagesArea.innerHTML="",e.forEach((function(e){t.messageAddFull(e)}))}},{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.1.7",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,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n="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(150*Math.random())+25),void 0===t&&(t=Math.floor(446*Math.random())),t%=446;" "===n[t]||/[.,:;!?]/.test(n[t]);)t=(t+1)%446;var s=n.substring(t)+n.substring(0,t);"number"!=typeof e&&(e=s.length);for(var r="";e>0;)r+=e<s.length?s.substring(0,e):s,e-=s.length;if(" "===r[r.length-1]&&(r=r.substring(0,r.length-1)+"."),i){var a=r[0].toUpperCase();r=(a=/[A-Z]/.test(a)?a:"M")+r.substring(1)}return r}}],i&&t(e.prototype,i),n&&t(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,n}();module.exports=o;
1
+ "use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=Array(t);i<t;i++)n[i]=e[i];return n}function t(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,a(n.key),n)}}function i(e,t,i){return(t=a(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function n(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(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(t){return function(t){if(Array.isArray(t))return e(t)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(t,i){if(t){if("string"==typeof t)return e(t,i);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,i):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t);if("object"!=typeof n)return n;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 i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},n=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 r=s(s({},{theme:"quikchat-theme-light",trackHistory:!0,titleArea:{title:"Chat",show:!1,align:"center"},messagesArea:{alternating:!0},inputArea:{show:!0}}),n);"string"==typeof t&&(t=document.querySelector(t)),this._parentElement=t,this._theme=r.theme,this._onSend=i||function(){},this._createWidget(),r.titleArea&&(this.titleAreaSetContents(r.titleArea.title,r.titleArea.align),!0===r.titleArea.show?this.titleAreaShow():this.titleAreaHide()),r.messagesArea&&this.messagesAreaAlternateColors(r.messagesArea.alternating),r.inputArea&&(!0===r.inputArea.show?this.inputAreaShow():this.inputAreaHide()),this._attachEventListeners(),this.trackHistory=r.trackHistory||!0,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">\n <span style="font-size: 1.5em; font-weight: 600;">Title Area</span>\n </div>\n <div class="quikchat-messages-area"></div>\n <div class="quikchat-input-area">\n <textarea class="quikchat-input-textbox"></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._messagesArea=this._chatWidget.querySelector(".quikchat-messages-area"),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(){return e._onSend(e,e._textEntry.value.trim())})),window.addEventListener("resize",(function(){return e._handleContainerResize()})),this._chatWidget.addEventListener("resize",(function(){return e._handleContainerResize()})),this._textEntry.addEventListener("keydown",(function(t){t.shiftKey&&13===t.keyCode&&(t.preventDefault(),e._onSend(e,e._textEntry.value.trim()))})),this._messagesArea.addEventListener("scroll",(function(){var t=e._messagesArea,i=t.scrollTop,n=t.scrollHeight,s=t.clientHeight;e.userScrolledUp=i+s<n}))}},{key:"setCallbackOnSend",value:function(e){this._onSend=e}},{key:"setCallbackonMessageAdded",value:function(e){this._onMessageAdded=e}},{key:"titleAreaToggle",value:function(){"none"===this._titleArea.style.display?this.titleAreaShow():this.titleAreaHide()}},{key:"titleAreaShow",value:function(){this._titleArea.style.display="",this._adjustMessagesAreaHeight()}},{key:"titleAreaHide",value:function(){this._titleArea.style.display="none",this._adjustMessagesAreaHeight()}},{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(){this._inputArea.classList.toggle("hidden"),"none"===this._inputArea.style.display?this.inputAreaShow():this.inputAreaHide()}},{key:"inputAreaShow",value:function(){this._inputArea.style.display="",this._adjustMessagesAreaHeight()}},{key:"inputAreaHide",value:function(){this._inputArea.style.display="none",this._adjustMessagesAreaHeight()}},{key:"_adjustMessagesAreaHeight",value:function(){var e=r(this._chatWidget.children).filter((function(e){return e.classList.contains("hidden")})).reduce((function(e,t){return e+t.offsetHeight}),0),t=this._chatWidget.offsetHeight;this._messagesArea.style.height="calc(100% - ".concat(t-e,"px)")}},{key:"_handleContainerResize",value:function(){return this._adjustMessagesAreaHeight(),this._adjustSendButtonWidth(),!0}},{key:"_adjustSendButtonWidth",value:function(){var e=this._sendButton.textContent.trim(),t=parseFloat(getComputedStyle(this._sendButton).fontSize)*e.length+16;return this._sendButton.style.minWidth="".concat(t,"px"),!0}},{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,timestamp:!1,updatedtime:!1,scrollIntoView:!1},t=this.msgid,i=document.createElement("div"),n="quikchat-msgid-"+String(t).padStart(10,"0");String(e.userString).padStart(10,"0"),i.classList.add("quikchat-message",n),this.msgid++,i.classList.add(this._messagesArea.children.length%2==1?"quikchat-message-1":"quikchat-message-2");var r=document.createElement("div");r.innerHTML=e.userString,r.style="width: 100%; text-align: ".concat(e.align,"; font-size: 1em; font-weight:700;");var a=document.createElement("div");a.style="width: 100%; text-align: ".concat(e.align,";"),a.innerHTML=e.content,i.appendChild(r),i.appendChild(a),this._messagesArea.appendChild(i),this.userScrolledUp&&!e.scrollIntoView||this._messagesArea.lastElementChild.scrollIntoView(),this._textEntry.value="",this._adjustMessagesAreaHeight();var o=e.timestamp?e.timestamp:(new Date).toISOString(),l=e.updatedtime?e.updatedtime:o;return this.trackHistory&&(this._history.push(s(s({msgid:t},e),{},{timestamp:o,updatedtime:l,messageDiv:i})),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",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"right",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"user",s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return this.messageAddFull({content:e,userString:t,align:i,role:n,scrollIntoView:s})}},{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){console.log("{String(n)} : Message ID not found")}return t&&this._history.splice(this._history.findIndex((function(t){return t.msgid===e})),1),t}},{key:"messageGetDOMObject",value:function(e){var t=null;try{t=this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0")))}catch(e){console.log("{String(n)} : Message ID not found")}return t}},{key:"messageGetContent",value:function(e){var t="";try{t=this._history.filter((function(t){return t.msgid===e}))[0].content}catch(e){console.log("{String(n)} : Message ID not found")}return t}},{key:"messageAppendContent",value:function(e,t){var i=!1;try{this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))).lastChild.innerHTML+=t;var n=this._history.filter((function(t){return t.msgid===e}))[0];n.content+=t,n.updatedtime=(new Date).toISOString(),i=!0,this.userScrolledUp||this._messagesArea.lastElementChild.scrollIntoView()}catch(t){console.log("".concat(String(e)," : Message ID not found"))}return i}},{key:"messageReplaceContent",value:function(e,t){var i=!1;try{this._messagesArea.querySelector(".quikchat-msgid-".concat(String(e).padStart(10,"0"))).lastChild.innerHTML=t;var n=this._history.filter((function(t){return t.msgid===e}))[0];n.content=t,n.updatedtime=(new Date).toISOString(),i=!0,this.userScrolledUp||this._messagesArea.lastElementChild.scrollIntoView()}catch(t){console.log("".concat(String(e)," : Message ID not found"))}return i}},{key:"messageScrollToBottom",value:function(){this._messagesArea.lastElementChild.scrollIntoView()}},{key:"historyGet",value:function(e,t){return null==e&&(e=0,t=this._history.length),void 0===t&&(t=e<0?t:e+1),this._history.slice(e,t)}},{key:"historyGetAllCopy",value:function(){return this._history.slice()}},{key:"historyClear",value:function(){this.msgid=0,this._messagesArea.innerHTML="",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:"historyRestoreAll",value:function(e){var t=this;this.historyClear(),this._messagesArea.innerHTML="",e.forEach((function(e){t.messageAddFull(e)}))}},{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.1.8",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,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n="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(150*Math.random())+25),void 0===t&&(t=Math.floor(446*Math.random())),t%=446;" "===n[t]||/[.,:;!?]/.test(n[t]);)t=(t+1)%446;var s=n.substring(t)+n.substring(0,t);"number"!=typeof e&&(e=s.length);for(var r="";e>0;)r+=e<s.length?s.substring(0,e):s,e-=s.length;if(" "===r[r.length-1]&&(r=r.substring(0,r.length-1)+"."),i){var a=r[0].toUpperCase();r=(a=/[A-Z]/.test(a)?a:"M")+r.substring(1)}return r}}],i&&t(e.prototype,i),n&&t(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,n}();module.exports=o;
2
2
  //# sourceMappingURL=quikchat.cjs.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quikchat.cjs.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 titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n inputArea: { show: true }\n }; \n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n //console.log(parentElement, meta);\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\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\n // input area\n if (meta.inputArea) {\n if (meta.inputArea.show === true) \n this.inputAreaShow();\n else \n this.inputAreaHide();\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory || true;\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\">\n <span style=\"font-size: 1.5em; font-weight: 600;\">Title Area</span>\n </div>\n <div class=\"quikchat-messages-area\"></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\"></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._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\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', () => this._onSend(this, this._textEntry.value.trim()));\n window.addEventListener('resize', () => this._handleContainerResize());\n this._chatWidget.addEventListener('resize', () => this._handleContainerResize());\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n // Prevent default behavior (adding new line)\n event.preventDefault();\n this._onSend(this, this._textEntry.value.trim());\n }\n });\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight;\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\n // Public methods\n titleAreaToggle() {\n this._titleArea.style.display === 'none' ? this.titleAreaShow() : this.titleAreaHide();\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\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 this._inputArea.classList.toggle('hidden');\n this._inputArea.style.display === 'none' ? this.inputAreaShow() : this.inputAreaHide();\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\n }\n\n _adjustMessagesAreaHeight() {\n const hiddenElements = [...this._chatWidget.children].filter(child => child.classList.contains('hidden'));\n const totalHiddenHeight = hiddenElements.reduce((sum, child) => sum + child.offsetHeight, 0);\n const containerHeight = this._chatWidget.offsetHeight;\n this._messagesArea.style.height = `calc(100% - ${containerHeight - totalHiddenHeight}px)`;\n }\n\n _handleContainerResize() {\n this._adjustMessagesAreaHeight();\n this._adjustSendButtonWidth();\n return true;\n }\n\n _adjustSendButtonWidth() {\n const sendButtonText = this._sendButton.textContent.trim();\n const fontSize = parseFloat(getComputedStyle(this._sendButton).fontSize);\n const minWidth = fontSize * sendButtonText.length + 16;\n this._sendButton.style.minWidth = `${minWidth}px`;\n return true;\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, timestamp: false, updatedtime: false }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n const userIdClass = 'quikchat-userid-' + String(input.userString).padStart(10, '0'); // hash this..\n messageDiv.classList.add('quikchat-message', msgidClass);\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n const userDiv = document.createElement('div');\n userDiv.innerHTML = input.userString;\n userDiv.style = `width: 100%; text-align: ${input.align}; font-size: 1em; font-weight:700;`;\n\n const contentDiv = document.createElement('div');\n contentDiv.style = `width: 100%; text-align: ${input.align};`;\n contentDiv.innerHTML = input.content;\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\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.lastElementChild.scrollIntoView();\n }\n\n this._textEntry.value = '';\n this._adjustMessagesAreaHeight();\n // add timestamp now, unless it is passed in \n\n const timestamp = input.timestamp ? input.timestamp : new Date().toISOString() \n const updatedtime = input.updatedtime ? input.updatedtime : timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, 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 // use css selector to remove the message\n let sucess = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n sucess = true;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n if (sucess) {\n // slow way to remove from history\n //this._history = this._history.filter((item) => item.msgid !== n); // todo make this more efficient\n\n // better way to delete this from history\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n }\n return sucess;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n // now use css selector to get the message \n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\"\n // now use css selector to get the message \n try {\n // get from history..\n content = this._history.filter((item) => item.msgid === n)[0].content;\n //content = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.textContent;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return content;\n }\n\n /* append message to the message content\n */\n\n messageAppendContent(n, content) {\n let success = false;\n try {\n this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML += content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(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 this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML = content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(n)} : Message ID not found`);\n }\n return success;\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\n if (n == undefined) {\n n = 0;\n m = this._history.length;\n }\n if (m === undefined) {\n m = n < 0 ? m : n + 1;\n }\n // remember that entries could be deleted. TODO: So we need to return the actual history entries\n // so now we need to find the array index that correspondes to messageIds n (start) and m (end)\n\n return this._history.slice(n, m);\n }\n\n historyGetAllCopy() {\n return this._history.slice();\n }\n\n historyClear() {\n this.msgid = 0;\n this._messagesArea.innerHTML = \"\";\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\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) \n return this._history[n].content;\n else\n return \"\";\n }\n\n // expects an array of messages to be in the format of the history object\n historyRestoreAll(messageList) {\n // clear all messages and history\n this.historyClear();\n\n // clear the messages div \n this._messagesArea.innerHTML = \"\";\n\n // add all messages\n messageList.forEach((message) => {\n this.messageAddFull(message);\n });\n }\n /**\n * \n * @param {string} newTheme \n */\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n /**\n * Get the current theme\n * @returns {string} - The current theme\n */\n get theme() {\n return this._theme;\n }\n\n /**\n * \n * @returns {object} - Returns the version and license information for the library.\n */\n static version() {\n return { \"version\": \"1.1.7\", \"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() * (150)) + 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 let l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n if (typeof numChars !== \"number\") {\n numChars = l.length;\n }\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 let c = s[0].toUpperCase();\n c = /[A-Z]/.test(c) ? c : \"M\";\n s = c + 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","defaultOpts","theme","trackHistory","titleArea","title","show","align","messagesArea","alternating","inputArea","document","querySelector","this","_parentElement","_theme","_onSend","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","inputAreaShow","inputAreaHide","_attachEventListeners","_historyLimit","_history","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesArea","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","trim","window","_handleContainerResize","event","shiftKey","keyCode","preventDefault","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","callback","_onMessageAdded","style","display","_adjustMessagesAreaHeight","textAlign","classList","toggle","totalHiddenHeight","_toConsumableArray","children","filter","child","contains","reduce","sum","offsetHeight","containerHeight","height","_adjustSendButtonWidth","sendButtonText","textContent","minWidth","parseFloat","getComputedStyle","fontSize","alt","add","remove","input","content","userString","role","userID","timestamp","updatedtime","messageDiv","createElement","msgidClass","String","padStart","userDiv","contentDiv","appendChild","lastElementChild","scrollIntoView","Date","toISOString","push","shift","messageAddFull","n","sucess","removeChild","error","console","log","splice","findIndex","item","msg","success","lastChild","m","slice","messageList","_this2","historyClear","forEach","message","newTheme","get","version","license","url","numChars","startSpot","startWithCapitalLetter","loremText","Math","floor","random","test","l","substring","s","c","toUpperCase"],"mappings":"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"}
1
+ {"version":3,"file":"quikchat.cjs.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 titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n inputArea: { show: true }\n }; \n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n //console.log(parentElement, meta);\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\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\n // input area\n if (meta.inputArea) {\n if (meta.inputArea.show === true) \n this.inputAreaShow();\n else \n this.inputAreaHide();\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory || true;\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\">\n <span style=\"font-size: 1.5em; font-weight: 600;\">Title Area</span>\n </div>\n <div class=\"quikchat-messages-area\"></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\"></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._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\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', () => this._onSend(this, this._textEntry.value.trim()));\n window.addEventListener('resize', () => this._handleContainerResize());\n this._chatWidget.addEventListener('resize', () => this._handleContainerResize());\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n // Prevent default behavior (adding new line)\n event.preventDefault();\n this._onSend(this, this._textEntry.value.trim());\n }\n });\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight;\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\n // Public methods\n titleAreaToggle() {\n this._titleArea.style.display === 'none' ? this.titleAreaShow() : this.titleAreaHide();\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\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 this._inputArea.classList.toggle('hidden');\n this._inputArea.style.display === 'none' ? this.inputAreaShow() : this.inputAreaHide();\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n this._adjustMessagesAreaHeight();\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n this._adjustMessagesAreaHeight();\n }\n\n _adjustMessagesAreaHeight() {\n const hiddenElements = [...this._chatWidget.children].filter(child => child.classList.contains('hidden'));\n const totalHiddenHeight = hiddenElements.reduce((sum, child) => sum + child.offsetHeight, 0);\n const containerHeight = this._chatWidget.offsetHeight;\n this._messagesArea.style.height = `calc(100% - ${containerHeight - totalHiddenHeight}px)`;\n }\n\n _handleContainerResize() {\n this._adjustMessagesAreaHeight();\n this._adjustSendButtonWidth();\n return true;\n }\n\n _adjustSendButtonWidth() {\n const sendButtonText = this._sendButton.textContent.trim();\n const fontSize = parseFloat(getComputedStyle(this._sendButton).fontSize);\n const minWidth = fontSize * sendButtonText.length + 16;\n this._sendButton.style.minWidth = `${minWidth}px`;\n return true;\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, timestamp: false, updatedtime: false, scrollIntoView: false }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n const userIdClass = 'quikchat-userid-' + String(input.userString).padStart(10, '0'); // hash this..\n messageDiv.classList.add('quikchat-message', msgidClass);\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n const userDiv = document.createElement('div');\n userDiv.innerHTML = input.userString;\n userDiv.style = `width: 100%; text-align: ${input.align}; font-size: 1em; font-weight:700;`;\n\n const contentDiv = document.createElement('div');\n contentDiv.style = `width: 100%; text-align: ${input.align};`;\n contentDiv.innerHTML = input.content;\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\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) || input.scrollIntoView) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n\n this._textEntry.value = '';\n this._adjustMessagesAreaHeight();\n // add timestamp now, unless it is passed in \n\n const timestamp = input.timestamp ? input.timestamp : new Date().toISOString() \n const updatedtime = input.updatedtime ? input.updatedtime : timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, 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\", scrollIntoView = false) {\n let retvalue = this.messageAddFull(\n { content: content, userString: userString, align: align, role: role, scrollIntoView: scrollIntoView }\n );\n // this.messageScrollToBottom();\n return retvalue;\n\n }\n messageRemove(n) {\n // use css selector to remove the message\n let sucess = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n sucess = true;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n if (sucess) {\n // slow way to remove from history\n //this._history = this._history.filter((item) => item.msgid !== n); // todo make this more efficient\n\n // better way to delete this from history\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n }\n return sucess;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n // now use css selector to get the message \n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\"\n // now use css selector to get the message \n try {\n // get from history..\n content = this._history.filter((item) => item.msgid === n)[0].content;\n //content = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.textContent;\n }\n catch (error) {\n console.log(`{String(n)} : Message ID not found`);\n }\n return content;\n }\n\n /* append message to the message content\n */\n\n messageAppendContent(n, content) {\n let success = false;\n try {\n this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML += content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(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 this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML = content;\n // update history\n let item = this._history.filter((item) => item.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n success = true;\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n } catch (error) {\n console.log(`${String(n)} : Message ID not found`);\n }\n return success;\n }\n \n messageScrollToBottom() {\n this._messagesArea.lastElementChild.scrollIntoView();\n }\n // history functions\n /**\n * \n * @param {*} n \n * @param {*} m \n * @returns array of history messages\n */\n historyGet(n, m) {\n\n if (n == undefined) {\n n = 0;\n m = this._history.length;\n }\n if (m === undefined) {\n m = n < 0 ? m : n + 1;\n }\n // remember that entries could be deleted. TODO: So we need to return the actual history entries\n // so now we need to find the array index that correspondes to messageIds n (start) and m (end)\n\n return this._history.slice(n, m);\n }\n\n historyGetAllCopy() {\n return this._history.slice();\n }\n\n historyClear() {\n this.msgid = 0;\n this._messagesArea.innerHTML = \"\";\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\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) \n return this._history[n].content;\n else\n return \"\";\n }\n\n // expects an array of messages to be in the format of the history object\n historyRestoreAll(messageList) {\n // clear all messages and history\n this.historyClear();\n\n // clear the messages div \n this._messagesArea.innerHTML = \"\";\n\n // add all messages\n messageList.forEach((message) => {\n this.messageAddFull(message);\n });\n }\n /**\n * \n * @param {string} newTheme \n */\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n /**\n * Get the current theme\n * @returns {string} - The current theme\n */\n get theme() {\n return this._theme;\n }\n\n /**\n * \n * @returns {object} - Returns the version and license information for the library.\n */\n static version() {\n return { \"version\": \"1.1.8\", \"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() * (150)) + 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 let l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n if (typeof numChars !== \"number\") {\n numChars = l.length;\n }\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 let c = s[0].toUpperCase();\n c = /[A-Z]/.test(c) ? c : \"M\";\n s = c + 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","defaultOpts","theme","trackHistory","titleArea","title","show","align","messagesArea","alternating","inputArea","document","querySelector","this","_parentElement","_theme","_onSend","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","inputAreaShow","inputAreaHide","_attachEventListeners","_historyLimit","_history","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesArea","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","trim","window","_handleContainerResize","event","shiftKey","keyCode","preventDefault","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","callback","_onMessageAdded","style","display","_adjustMessagesAreaHeight","textAlign","classList","toggle","totalHiddenHeight","_toConsumableArray","children","filter","child","contains","reduce","sum","offsetHeight","containerHeight","height","_adjustSendButtonWidth","sendButtonText","textContent","minWidth","parseFloat","getComputedStyle","fontSize","alt","add","remove","input","content","userString","role","userID","timestamp","updatedtime","scrollIntoView","messageDiv","createElement","msgidClass","String","padStart","userDiv","contentDiv","appendChild","lastElementChild","Date","toISOString","push","shift","messageAddFull","n","sucess","removeChild","error","console","log","splice","findIndex","item","msg","success","lastChild","m","slice","messageList","_this2","historyClear","forEach","message","newTheme","get","version","license","url","numChars","startSpot","startWithCapitalLetter","loremText","Math","floor","random","test","l","substring","s","c","toUpperCase"],"mappings":"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"}
package/dist/quikchat.css CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  quikchat.css see www.github.com/deftio/quikchat for more info
3
3
 
4
- Base Styles - Affect behavior so change with char
4
+ Base Styles - Affect behavior so change with care
5
5
  For Themes scroll past this section
6
6
  */
7
7
 
@@ -309,7 +309,8 @@ var quikchat = /*#__PURE__*/function () {
309
309
  role: "user",
310
310
  userID: -1,
311
311
  timestamp: false,
312
- updatedtime: false
312
+ updatedtime: false,
313
+ scrollIntoView: false
313
314
  };
314
315
  var msgid = this.msgid;
315
316
  var messageDiv = document.createElement('div');
@@ -329,7 +330,7 @@ var quikchat = /*#__PURE__*/function () {
329
330
  this._messagesArea.appendChild(messageDiv);
330
331
 
331
332
  // Scroll to the last message only if the user is not actively scrolling up
332
- if (!this.userScrolledUp) {
333
+ if (!this.userScrolledUp || input.scrollIntoView) {
333
334
  this._messagesArea.lastElementChild.scrollIntoView();
334
335
  }
335
336
  this._textEntry.value = '';
@@ -362,12 +363,16 @@ var quikchat = /*#__PURE__*/function () {
362
363
  var userString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "user";
363
364
  var align = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "right";
364
365
  var role = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "user";
365
- return this.messageAddFull({
366
+ var scrollIntoView = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
367
+ var retvalue = this.messageAddFull({
366
368
  content: content,
367
369
  userString: userString,
368
370
  align: align,
369
- role: role
371
+ role: role,
372
+ scrollIntoView: scrollIntoView
370
373
  });
374
+ // this.messageScrollToBottom();
375
+ return retvalue;
371
376
  }
372
377
  }, {
373
378
  key: "messageRemove",
@@ -475,7 +480,11 @@ var quikchat = /*#__PURE__*/function () {
475
480
  }
476
481
  return success;
477
482
  }
478
-
483
+ }, {
484
+ key: "messageScrollToBottom",
485
+ value: function messageScrollToBottom() {
486
+ this._messagesArea.lastElementChild.scrollIntoView();
487
+ }
479
488
  // history functions
480
489
  /**
481
490
  *
@@ -575,7 +584,7 @@ var quikchat = /*#__PURE__*/function () {
575
584
  key: "version",
576
585
  value: function version() {
577
586
  return {
578
- "version": "1.1.7",
587
+ "version": "1.1.8",
579
588
  "license": "BSD-2",
580
589
  "url": "https://github/deftio/quikchat"
581
590
  };