quikchat 1.0.3 → 1.1.1

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
@@ -1,20 +1,30 @@
1
- # quikchat.js
2
- quikchat is a simple vanilla (no dependancies) JavaScript chat control that can be easily integrated into web applications. It provides a customizable chat interface with support for hiding and showing a title area and the input area.
1
+ # QuikChat (js)
2
+
3
+ Quikchat is a vanilla (no dependancies) JavaScript chat control that can be easily integrated into web applications. It provides a customizable chat interface with support for hiding and showing a title area and the input area.
3
4
 
4
5
  ## Features
5
- * Callback function for message events.
6
- * Responsive design for various screen sizes.
7
- * Themeable with css
8
- * Hideable/Showable Title and Text Entry areas allows flexibility of usage
9
- * Full history storage and retrieval
10
- * History can be fed directly to OpenAI / Mistral / Ollama compatible API
11
6
 
12
- ## Demo
13
- [Example Code and Demo](../examples/index.html)
7
+ * Themeable with CSS (examples for light and dark)
8
+ * Callback function for all message events (allows monitoring)
9
+ * Responsive design for various screen sizes and resizes with parent container
10
+ * Hideable/Showable Title and Text Entry areas allows flexibility of usage
11
+ * Full message history storage and retrieval
12
+ * History can be fed directly to OpenAI / Mistral / Ollama compatible APIs for context aware chats
13
+ * Available via NPM and CDN & github
14
+ * Provided in UMD and ESM formats
15
+ * Multiple separate instances can run on a single page
16
+ * Multiple users can be in a chat
17
+ * Left / Right / Center support of individual users
18
+ * Callback for all message events (to monitor chat)
14
19
 
20
+ ## Demo & Examples
15
21
 
22
+ Examples are here
23
+ [Example Code and Demo](./examples/index.html)
24
+ Example include using ESM, UMD modules, running multiple chats on the same page, and integration with LLM providers such as Ollama, LMStudio, OpenAI compatible providers.
16
25
 
17
26
  ## Installation
27
+
18
28
  To use quikchat in your project, follow these steps:
19
29
 
20
30
  Include the quikchat.js JavaScript file in your project.
@@ -27,29 +37,57 @@ html
27
37
  ```
28
38
 
29
39
  ### use quikchat Via CDN
40
+
30
41
  ```html
31
42
  <script src="https://unpkg.com/quikchat"></script>
32
43
  <link rel="stylesheet" href="https://unpkg.com/quikchat/dist/quikchat.css" />
33
44
  ```
34
45
 
35
- Create a container element in your HTML where you want the chat interface to appear:
46
+ Create a container element in your HTML where you want the chat interface to appear. The quikchat widget will take 100% of the paretn container height and width. If the parent container width or height is not specified the quikchat widget may grow as content is added. If the parent container is resized, quikchat will resize with the parent container.
47
+
36
48
  ```html
37
49
  <div id="chat-container"></div>
38
50
  ```
39
51
 
40
52
  Initialize quikchat in your JavaScript code by providing the container element and a callback function for message events:
41
- ```javascript
42
- const chat = new quikchat('#chat-container', messageCallback);
43
- //Use the provided methods to interact with the chat control:
44
-
45
- // Add a message
46
- chat.addMessage('Hello!', 'User', 'left'); // user should appear left or right justified
47
53
 
54
+ ```javascript
55
+ chat = new quikchat(
56
+ "#chat-container", // this can be a css selector such as "#chat-container" or DOM element
57
+ {
58
+ theme: 'quikchat-theme-light', // theme see css
59
+ titleArea: { title: 'My Chat', align: 'left', show: true }, // internal title area
60
+ onSend: (chat, msg) => { // this callback is triggered with the user hits the Send button
61
+ // messages are not automatically echoed to the chat after onSend. This
62
+ // allows filtering / other processing of the message before posting.
63
+ chat.messageAddNew(msg, 'me', 'right'); // echo the message to the chat area
64
+ // now call an LLM or do other actions
65
+ // ... callLLM(msg) ... do other logic if needed.
66
+ }
67
+ });
68
+
69
+ // Add a message at any point not just from call back
70
+ chat.addMessage('Hello!', 'You', 'left'); // user should appear left or right justified
71
+
72
+ //... other logic
73
+ let messageHistory = chat.historyGet(); // get all the messages (see docs for filters)
74
+ console.log(messageHistory); // do something with messages
75
+
76
+ // show / hide the title area
77
+ chat.titleAreaHide(); // hides the title area for a bare chat
78
+
79
+ // hide the input area
80
+ chat.inputAreaHide(); // hides the input area so chat is now just a message stream.
81
+
82
+ // change themes
83
+ chat.changeTheme("quikchat-theme-dark"); // change theme on the fly (see quikchat.css for examples)
48
84
  ```
85
+
49
86
  ## Theming
50
- QuikChat also allows theming using CSS of all the messages, and user area, and overal widget.
51
87
 
52
- Below is the prebuilt 'light' theme. To change the theme, make a new set of classes with different values but the same css selector naming (e.g. change "quikchat-theme-light" to "my-theme") and save as a style. Then pass the "my-theme" to the constructor.
88
+ QuikChat allows theming using CSS of all the messages, and user area, and overal widget.
89
+
90
+ Below is the prebuilt 'light' theme. To change the theme, make a new set of classes with different values but the same css selector naming (e.g. change "quikchat-theme-light" to "my-theme") and save as a style. Then pass the "my-theme" to the constructor or to the changeTheme() function.
53
91
 
54
92
  Themes can be changed at anytime by calling
55
93
  myChatWidget.changeTheme(newTheme) where myChatWidget is the instance of your widget.
@@ -57,60 +95,63 @@ myChatWidget.changeTheme(newTheme) where myChatWidget is the instance of your wi
57
95
  If several widgets are on the same page, each can have a separate theme.
58
96
 
59
97
  ```css
60
-
98
+ /* quikchat theme light */
61
99
  .quikchat-theme-light {
62
- border: 1px solid #cccccc;
63
- border-radius: 10px;
64
- padding: 5px;
65
- background-color: #f9f9f9;
66
- }
67
-
100
+ border: 1px solid #cccccc;
101
+ border-radius: 10px;
102
+ background-color: #f9f9f9;
103
+ }
104
+
68
105
  .quikchat-theme-light .quikchat-title-area {
69
- color: #333;
106
+ padding: 8px;
107
+ color: #333;
70
108
  }
71
-
109
+
72
110
  .quikchat-theme-light .quikchat-messages-area {
73
- background-color: #ffffffe2;
74
- color: #333;
111
+ background-color: #ffffffe2;
112
+ color: #333;
75
113
  }
76
-
114
+
77
115
  .quikchat-theme-light .quikchat-message-1 {
78
- background-color: #fffffff0;
79
- color: #005662;
116
+ background-color: #fffffff0;
117
+ color: #005662;
80
118
  }
81
-
119
+
82
120
  .quikchat-theme-light .quikchat-message-2 {
83
- background-color: #eeeeeee9;
84
- color: #353535;
121
+ background-color: #eeeeeee9;
122
+ color: #353535;
85
123
  }
86
-
124
+
87
125
  .quikchat-theme-light .quikchat-input-area {
88
- background-color: #f0f0f0;
126
+ background-color: #f9f9f9;
127
+ border-bottom-left-radius : 10px;
128
+ border-bottom-right-radius : 10px;
89
129
  }
90
130
 
91
131
  .quikchat-theme-light .quikchat-input-textbox {
92
- background-color: #ffffff;
93
- border: 1px solid #ccc;
94
- border-radius: 4px;
95
- font-size: 14px;
96
- color: #333;
132
+ background-color: #ffffff;
133
+ border: 1px solid #ccc;
134
+ border-radius: 4px;
135
+ font-size: 14px;
136
+ color: #333;
97
137
  }
98
-
138
+
99
139
  .quikchat-theme-light .quikchat-input-send-btn {
100
- background-color: #4caf50;
101
- color: white;
102
- border: none;
103
- border-radius: 4px;
140
+ background-color: #4caf50;
141
+ color: white;
142
+ border: none;
143
+ border-radius: 4px;
104
144
  }
105
-
106
145
  ```
107
146
 
108
147
  ## Building from Source
148
+
149
+ quikchat is built with [https://rollupjs.org/](rollup.js).
150
+
109
151
  Make sure to run npm install. Then run npm run build.
110
- Note that at run time quikchat has no dependancies, but at build time several tools are used for packing and minifying code.
111
152
 
112
- ## Contributors
153
+ Note that at run time quikchat has no dependancies, but at build time several tools are used for packing and minifying code.
113
154
 
114
155
  ## License
115
- quikchat is licensed under the BSD-2 License.
116
156
 
157
+ quikchat is licensed under the BSD-2 License.
@@ -89,33 +89,45 @@ var quikchat = /*#__PURE__*/function () {
89
89
  * @param {*} meta
90
90
  */
91
91
  function quikchat(parentElement) {
92
- var meta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
92
+ var onSend = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
93
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
94
+ _classCallCheck(this, quikchat);
95
+ var defaultOpts = {
93
96
  theme: 'quikchat-theme-light',
94
- onSend: function onSend() {},
95
97
  trackHistory: true,
96
98
  titleArea: {
97
- title: "Title Area",
99
+ title: "Chat",
98
100
  show: false,
99
101
  align: "center"
102
+ },
103
+ messagesArea: {
104
+ alternating: true
100
105
  }
101
106
  };
102
- _classCallCheck(this, quikchat);
107
+ var meta = _objectSpread2(_objectSpread2({}, defaultOpts), options); // merge options with defaults
108
+
103
109
  if (typeof parentElement === 'string') {
104
110
  parentElement = document.querySelector(parentElement);
105
111
  }
112
+ //console.log(parentElement, meta);
106
113
  this._parentElement = parentElement;
107
114
  this._theme = meta.theme;
108
- this._onSend = meta.onSend ? meta.onSend : function () {};
115
+ this._onSend = onSend ? onSend : function () {}; // call back function for onSend
109
116
  this._createWidget();
110
117
  // title area
111
118
  if (meta.titleArea) {
112
119
  this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);
113
- if (meta.titleArea.show == true) {
120
+ if (meta.titleArea.show === true) {
114
121
  this.titleAreaShow();
115
122
  } else {
116
123
  this.titleAreaHide();
117
124
  }
118
125
  }
126
+ // messages area
127
+ if (meta.messagesArea) {
128
+ this.messagesAreaAlternateColors(meta.messagesArea.alternating);
129
+ }
130
+ // plumbing
119
131
  this._attachEventListeners();
120
132
  this.trackHistory = meta.trackHistory || true;
121
133
  this._historyLimit = 10000000;
@@ -134,6 +146,10 @@ var quikchat = /*#__PURE__*/function () {
134
146
  this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');
135
147
  this.msgid = 0;
136
148
  }
149
+
150
+ /**
151
+ * Attach event listeners to the widget
152
+ */
137
153
  }, {
138
154
  key: "_attachEventListeners",
139
155
  value: function _attachEventListeners() {
@@ -155,7 +171,15 @@ var quikchat = /*#__PURE__*/function () {
155
171
  _this._onSend(_this, _this._textEntry.value.trim());
156
172
  }
157
173
  });
174
+ this._messagesArea.addEventListener('scroll', function () {
175
+ var _this$_messagesArea = _this._messagesArea,
176
+ scrollTop = _this$_messagesArea.scrollTop,
177
+ scrollHeight = _this$_messagesArea.scrollHeight,
178
+ clientHeight = _this$_messagesArea.clientHeight;
179
+ _this.userScrolledUp = scrollTop + clientHeight < scrollHeight;
180
+ });
158
181
  }
182
+
159
183
  // set the onSend function callback.
160
184
  }, {
161
185
  key: "setCallbackOnSend",
@@ -244,6 +268,30 @@ var quikchat = /*#__PURE__*/function () {
244
268
  var minWidth = fontSize * sendButtonText.length + 16;
245
269
  this._sendButton.style.minWidth = "".concat(minWidth, "px");
246
270
  }
271
+
272
+ //messagesArea functions
273
+ }, {
274
+ key: "messagesAreaAlternateColors",
275
+ value: function messagesAreaAlternateColors() {
276
+ var alt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
277
+ if (alt) {
278
+ this._messagesArea.classList.add('quikchat-messages-area-alt');
279
+ } else {
280
+ this._messagesArea.classList.remove('quikchat-messages-area-alt');
281
+ }
282
+ return alt === true;
283
+ }
284
+ }, {
285
+ key: "messagesAreaAlternateColorsToggle",
286
+ value: function messagesAreaAlternateColorsToggle() {
287
+ this._messagesArea.classList.toggle('quikchat-messages-area-alt');
288
+ }
289
+ }, {
290
+ key: "messagesAreaAlternateColorsGet",
291
+ value: function messagesAreaAlternateColorsGet() {
292
+ return this._messagesArea.classList.contains('quikchat-messages-area-alt');
293
+ }
294
+ // message functions
247
295
  }, {
248
296
  key: "messageAddFull",
249
297
  value: function messageAddFull() {
@@ -263,14 +311,18 @@ var quikchat = /*#__PURE__*/function () {
263
311
  messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');
264
312
  var userDiv = document.createElement('div');
265
313
  userDiv.innerHTML = input.userString;
266
- userDiv.style = "width: 100%; text-align: ".concat(input.align, "; font-size: 1em; font-weight:700; color: #444;");
314
+ userDiv.style = "width: 100%; text-align: ".concat(input.align, "; font-size: 1em; font-weight:700;");
267
315
  var contentDiv = document.createElement('div');
268
316
  contentDiv.style = "width: 100%; text-align: ".concat(input.align, ";");
269
317
  contentDiv.innerHTML = input.content;
270
318
  messageDiv.appendChild(userDiv);
271
319
  messageDiv.appendChild(contentDiv);
272
320
  this._messagesArea.appendChild(messageDiv);
273
- this._messagesArea.lastChild.scrollIntoView();
321
+
322
+ // Scroll to the last message only if the user is not actively scrolling up
323
+ if (!this.userScrolledUp) {
324
+ this._messagesArea.lastElementChild.scrollIntoView();
325
+ }
274
326
  this._textEntry.value = '';
275
327
  this._adjustMessagesAreaHeight();
276
328
  var timestamp = new Date().toISOString();
@@ -366,7 +418,7 @@ var quikchat = /*#__PURE__*/function () {
366
418
  }, {
367
419
  key: "messageAppendContent",
368
420
  value: function messageAppendContent(n, content) {
369
- var sucess = false;
421
+ var success = false;
370
422
  try {
371
423
  this._messagesArea.querySelector(".quikchat-msgid-".concat(String(n).padStart(10, '0'))).lastChild.innerHTML += content;
372
424
  // update history
@@ -375,30 +427,44 @@ var quikchat = /*#__PURE__*/function () {
375
427
  })[0];
376
428
  item.content += content;
377
429
  item.updatedtime = new Date().toISOString();
378
- sucess = true;
379
- this._messagesArea.lastChild.scrollIntoView();
430
+ success = true;
431
+
432
+ // Scroll to the last message only if the user is not actively scrolling up
433
+ if (!this.userScrolledUp) {
434
+ this._messagesArea.lastElementChild.scrollIntoView();
435
+ }
380
436
  } catch (error) {
381
- console.log("{String(n)} : Message ID not found");
437
+ console.log("".concat(String(n), " : Message ID not found"));
382
438
  }
439
+ return success;
383
440
  }
441
+
384
442
  /* replace message content
385
443
  */
386
444
  }, {
387
445
  key: "messageReplaceContent",
388
446
  value: function messageReplaceContent(n, content) {
389
- var sucess = false;
447
+ var success = false;
390
448
  try {
391
449
  this._messagesArea.querySelector(".quikchat-msgid-".concat(String(n).padStart(10, '0'))).lastChild.innerHTML = content;
392
450
  // update history
393
- this._history.filter(function (item) {
451
+ var item = this._history.filter(function (item) {
394
452
  return item.msgid === n;
395
- })[0].content = content;
396
- sucess = true;
453
+ })[0];
454
+ item.content = content;
455
+ item.updatedtime = new Date().toISOString();
456
+ success = true;
457
+
458
+ // Scroll to the last message only if the user is not actively scrolling up
459
+ if (!this.userScrolledUp) {
460
+ this._messagesArea.lastElementChild.scrollIntoView();
461
+ }
397
462
  } catch (error) {
398
- console.log("{String(n)} : Message ID not found");
463
+ console.log("".concat(String(n), " : Message ID not found"));
399
464
  }
400
- return sucess;
465
+ return success;
401
466
  }
467
+
402
468
  // history functions
403
469
  /**
404
470
  *
@@ -458,12 +524,69 @@ var quikchat = /*#__PURE__*/function () {
458
524
  return this._theme;
459
525
  }
460
526
  }], [{
461
- key: "getVersion",
462
- value: function getVersion() {
527
+ key: "version",
528
+ value: function version() {
463
529
  return {
464
- "version": "1.0.3"
530
+ "version": "1.1.1",
531
+ "license": "BSD-2",
532
+ "url": "https://github/deftio/quikchat"
465
533
  };
466
534
  }
535
+
536
+ /**
537
+ * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.
538
+ * borrowed from github.com/deftio/bitwrench.js
539
+ * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).
540
+ * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.
541
+ * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.
542
+ *
543
+ * @returns {string} A string of Lorem Ipsum text.
544
+ *
545
+ * @example
546
+ * // Returns 200 characters of Lorem Ipsum starting from index 50
547
+ * loremIpsum(200, 50);
548
+ *
549
+ * @example
550
+ * //Returns a 200 Lorem Ipsum characters starting from a random index
551
+ * loremIpsum(200);
552
+ */
553
+ }, {
554
+ key: "loremIpsum",
555
+ value: function loremIpsum(numChars) {
556
+ var startSpot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
557
+ var startWithCapitalLetter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
558
+ var 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. ";
559
+ if (typeof numChars !== "number") {
560
+ numChars = Math.floor(Math.random() * 150) + 25;
561
+ }
562
+ if (startSpot === undefined) {
563
+ startSpot = Math.floor(Math.random() * loremText.length);
564
+ }
565
+ startSpot = startSpot % loremText.length;
566
+
567
+ // Move startSpot to the next non-whitespace and non-punctuation character
568
+ while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {
569
+ startSpot = (startSpot + 1) % loremText.length;
570
+ }
571
+ var l = loremText.substring(startSpot) + loremText.substring(0, startSpot);
572
+ if (typeof numChars !== "number") {
573
+ numChars = l.length;
574
+ }
575
+ var s = "";
576
+ while (numChars > 0) {
577
+ s += numChars < l.length ? l.substring(0, numChars) : l;
578
+ numChars -= l.length;
579
+ }
580
+ if (s[s.length - 1] === " ") {
581
+ s = s.substring(0, s.length - 1) + "."; // always end on non-whitespace. "." was chosen arbitrarily.
582
+ }
583
+ if (startWithCapitalLetter) {
584
+ var c = s[0].toUpperCase();
585
+ c = /[A-Z]/.test(c) ? c : "M";
586
+ s = c + s.substring(1);
587
+ }
588
+ return s;
589
+ }
467
590
  }]);
468
591
  }();
469
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, \n meta = { \n theme: 'quikchat-theme-light', \n onSend: () => { }, \n trackHistory: true,\n titleArea: {title: \"Title Area\", show: false, align: \"center\"}\n }) \n {\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = meta.onSend ? meta.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 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 _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 // 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 //console.log('Container resized');\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 }\n \n messageAddFull(input = {content: \"\", userString: \"user\", align : \"right\", role : \"user\", userID : -1}) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n 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; color: #444;`;\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 this._messagesArea.lastChild.scrollIntoView();\n\n this._textEntry.value = '';\n this._adjustMessagesAreaHeight();\n const timestamp = new Date().toISOString();\n const updatedtime = timestamp;\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 if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n };\n return msgid;\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 {\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 {\n console.log(`{String(n)} : Message ID not found`);\n }\n return content; \n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let sucess = 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 sucess = true;\n this._messagesArea.lastChild.scrollIntoView();\n } \n catch (error) \n {\n console.log(`{String(n)} : Message ID not found`);\n } \n }\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let sucess = false;\n try {\n this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`).lastChild.innerHTML = content;\n // update history\n this._history.filter((item) => item.msgid === n)[0].content = content;\n sucess = true;\n } \n catch (error) \n {\n console.log(`{String(n)} : Message ID not found`);\n }\n return sucess;\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 historyClear() {\n this.msgid = 0;\n this._history = [];\n } \n\n historyGetLength() {\n return this._history.length;\n } \n\n historyGetMessage(n) {\n if ( n>=0 && n < this._history.length) {\n this._history[n];\n }\n return {};\n\n } \n\n historyGetMessageContent(n) {\n return this._history[n].message;\n }\n\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static getVersion() {\n return {\"version\" : \"1.0.3\"}\n }\n}\n\nexport default quikchat;\n"],"names":["quikchat","parentElement","meta","arguments","length","undefined","theme","onSend","trackHistory","titleArea","title","show","align","_classCallCheck","document","querySelector","_parentElement","_theme","_onSend","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","_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","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","titleAreaToggle","style","display","_adjustMessagesAreaHeight","textAlign","titleAreaGetContents","inputAreaToggle","classList","toggle","inputAreaShow","inputAreaHide","hiddenElements","_toConsumableArray","children","filter","child","contains","totalHiddenHeight","reduce","sum","offsetHeight","containerHeight","height","_adjustSendButtonWidth","sendButtonText","textContent","fontSize","parseFloat","getComputedStyle","minWidth","messageAddFull","input","content","userString","role","userID","messageDiv","createElement","msgidClass","String","padStart","add","userDiv","contentDiv","appendChild","lastChild","scrollIntoView","timestamp","Date","toISOString","updatedtime","push","_objectSpread","shift","messageAddNew","messageRemove","n","sucess","removeChild","error","console","log","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","messageAppendContent","messageReplaceContent","historyGet","m","slice","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","message","changeTheme","newTheme","remove","get","getVersion"],"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 };\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 // 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 //console.log('Container resized');\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 }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n 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 const timestamp = new Date().toISOString();\n const 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 historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n this._history[n];\n }\n return {};\n\n }\n\n historyGetMessageContent(n) {\n return this._history[n].message;\n }\n\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.1.1\", \"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","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","_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","inputAreaShow","inputAreaHide","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","messageDiv","createElement","msgidClass","String","padStart","userDiv","contentDiv","appendChild","lastElementChild","scrollIntoView","timestamp","Date","toISOString","updatedtime","push","shift","messageAddNew","messageRemove","n","sucess","removeChild","error","console","log","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","messageAppendContent","success","lastChild","messageReplaceContent","historyGet","m","slice","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","message","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","Math","floor","random","test","l","substring","s","c","toUpperCase"],"mappings":"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"}