chatnest 3.4.0 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/chat-widget.min.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! For license information please see chat-widget.min.js.LICENSE.txt */
|
|
2
|
-
!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.EasyChatWidget=n():t.EasyChatWidget=n()}(this,(()=>{return t={877:t=>{function n(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,i)}return e}function e(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?n(Object(o),!0).forEach((function(n){i(t,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(o,n))}))}return t}function i(t,n,e){return(n=w(n))in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var i,o,a,r,s=[],c=!0,l=!1;try{if(a=(e=e.call(t)).next,0===n){if(Object(e)!==e)return;c=!1}else for(;!(c=(i=a.call(e)).done)&&(s.push(i.value),s.length!==n);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=e.return&&(r=e.return(),Object(r)!==r))return}finally{if(l)throw o}}return s}}(t,n)||function(t,n){if(t){if("string"==typeof t)return r(t,n);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(t,n):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,i=Array(n);e<n;e++)i[e]=t[e];return i}function s(){"use strict";var t=h(),n=t.m(s),e=(Object.getPrototypeOf?Object.getPrototypeOf(n):n.__proto__).constructor;function i(t){var n="function"==typeof t&&t.constructor;return!!n&&(n===e||"GeneratorFunction"===(n.displayName||n.name))}var o={throw:1,return:2,break:3,continue:3};function a(t){var n,e;return function(i){n||(n={stop:function(){return e(i.a,2)},catch:function(){return i.v},abrupt:function(t,n){return e(i.a,o[t],n)},delegateYield:function(t,o,a){return n.resultName=o,e(i.d,c(t),a)},finish:function(t){return e(i.f,t)}},e=function(t,e,o){i.p=n.prev,i.n=n.next;try{return t(e,o)}finally{n.next=i.n}}),n.resultName&&(n[n.resultName]=i.v,n.resultName=void 0),n.sent=i.v,n.next=i.n;try{return t.call(this,n)}finally{i.p=n.prev,i.n=n.next}}}return(s=function(){return{wrap:function(n,e,i,o){return t.w(a(n),e,i,o&&o.reverse())},isGeneratorFunction:i,mark:t.m,awrap:function(t,n){return new g(t,n)},AsyncIterator:d,async:function(t,n,e,o,r){return(i(n)?p:u)(a(t),n,e,o,r)},keys:l,values:c}})()}function c(t){if(null!=t){var n=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],e=0;if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&e>=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}}}throw new TypeError(o(t)+" is not iterable")}function l(t){var n=Object(t),e=[];for(var i in n)e.unshift(i);return function t(){for(;e.length;)if((i=e.pop())in n)return t.value=i,t.done=!1,t;return t.done=!0,t}}function u(t,n,e,i,o){var a=p(t,n,e,i,o);return a.next().then((function(t){return t.done?t.value:a.next()}))}function p(t,n,e,i,o){return new d(h().w(t,n,e,i),o||Promise)}function d(t,n){function e(i,o,a,r){try{var s=t[i](o),c=s.value;return c instanceof g?n.resolve(c.v).then((function(t){e("next",t,a,r)}),(function(t){e("throw",t,a,r)})):n.resolve(c).then((function(t){s.value=t,a(s)}),(function(t){return e("throw",t,a,r)}))}catch(t){r(t)}}var i;this.next||(m(d.prototype),m(d.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",(function(){return this}))),m(this,"_invoke",(function(t,o,a){function r(){return new n((function(n,i){e(t,a,n,i)}))}return i=i?i.then(r,r):r()}),!0)}function h(){var t,n,e="function"==typeof Symbol?Symbol:{},i=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function a(e,i,o,a){var c=i&&i.prototype instanceof s?i:s,l=Object.create(c.prototype);return m(l,"_invoke",function(e,i,o){var a,s,c,l=0,u=o||[],p=!1,d={p:0,n:0,v:t,a:h,f:h.bind(t,4),d:function(n,e){return a=n,s=0,c=t,d.n=e,r}};function h(e,i){for(s=e,c=i,n=0;!p&&l&&!o&&n<u.length;n++){var o,a=u[n],h=d.p,m=a[2];e>3?(o=m===i)&&(c=a[(s=a[4])?5:(s=3,3)],a[4]=a[5]=t):a[0]<=h&&((o=e<2&&h<a[1])?(s=0,d.v=i,d.n=a[1]):h<m&&(o=e<3||a[0]>i||i>m)&&(a[4]=e,a[5]=i,d.n=m,s=0))}if(o||e>1)return r;throw p=!0,i}return function(o,u,m){if(l>1)throw TypeError("Generator is already running");for(p&&1===u&&h(u,m),s=u,c=m;(n=s<2?t:c)||!p;){a||(s?s<3?(s>1&&(d.n=-1),h(s,c)):d.n=c:d.v=c);try{if(l=2,a){if(s||(o="next"),n=a[o]){if(!(n=n.call(a,c)))throw TypeError("iterator result is not an object");if(!n.done)return n;c=n.value,s<2&&(s=0)}else 1===s&&(n=a.return)&&n.call(a),s<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),s=1);a=t}else if((n=(p=d.n<0)?c:e.call(i,d))!==r)break}catch(n){a=t,s=1,c=n}finally{l=1}}return{value:n,done:p}}}(e,o,a),!0),l}var r={};function s(){}function c(){}function l(){}n=Object.getPrototypeOf;var u=[][i]?n(n([][i]())):(m(n={},i,(function(){return this})),n),p=l.prototype=s.prototype=Object.create(u);function d(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,l):(t.__proto__=l,m(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t}return c.prototype=l,m(p,"constructor",l),m(l,"constructor",c),c.displayName="GeneratorFunction",m(l,o,"GeneratorFunction"),m(p),m(p,o,"Generator"),m(p,i,(function(){return this})),m(p,"toString",(function(){return"[object Generator]"})),(h=function(){return{w:a,m:d}})()}function m(t,n,e,i){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}m=function(t,n,e,i){if(n)o?o(t,n,{value:e,enumerable:!i,configurable:!i,writable:!i}):t[n]=e;else{var a=function(n,e){m(t,n,(function(t){return this._invoke(n,e,t)}))};a("next",0),a("throw",1),a("return",2)}},m(t,n,e,i)}function g(t,n){this.v=t,this.k=n}function f(t,n,e,i,o,a,r){try{var s=t[a](r),c=s.value}catch(t){return void e(t)}s.done?n(c):Promise.resolve(c).then(i,o)}function v(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var a=t.apply(n,e);function r(t){f(a,i,o,r,s,"next",t)}function s(t){f(a,i,o,r,s,"throw",t)}r(void 0)}))}}function b(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function y(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,w(i.key),i)}}function x(t,n,e){return n&&y(t.prototype,n),e&&y(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function w(t){var n=function(t,n){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,n||"default");if("object"!=o(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(t,"string");return"symbol"==o(n)?n:n+""}var D=function(){return x((function t(){var n=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};b(this,t),this.isWaitingForResponse=!1,this.initConfig(e),this.userManager=new k(this.config),this.storageManager=new E(this.userManager,this.config),this.ensureDependencies().then((function(){n.initializeWidget(),n.setupEventListeners(),n.storageManager.setWidget(n),n.loadChatHistory(),n.setupEraseButton()})),this.activeForm=null,C[this.config.position]||(console.warn('Invalid position "'.concat(this.config.position,'". Falling back to bottom-right.')),this.config.position="bottom-right")}),[{key:"hexToRgb",value:function(t){if(!t)return"0, 132, 255";if(t.includes("linear-gradient")||t.includes("radial-gradient")){var n=t.match(/#[a-fA-F0-9]{6}|#[a-fA-F0-9]{3}/);if(n){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n[0]);return e?"".concat(parseInt(e[1],16),", ").concat(parseInt(e[2],16),", ").concat(parseInt(e[3],16)):"0, 132, 255"}return"0, 132, 255"}var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?"".concat(parseInt(i[1],16),", ").concat(parseInt(i[2],16),", ").concat(parseInt(i[3],16)):"0, 132, 255"}},{key:"isGradient",value:function(t){return t&&(t.includes("linear-gradient")||t.includes("radial-gradient"))}},{key:"getCurrentTheme",value:function(){return"system"===this.config.theme?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":this.config.theme}},{key:"getThemeColor",value:function(t){var n,e={light:{bg:"#ffffff",text:"#333333",border:"#e1e5e9",inputBg:"#ffffff",messageBg:"#ffffff",headerBg:"#ffffff",headerText:"#333333"},dark:{bg:"#1a1a1a",text:"#ffffff",border:"#404040",inputBg:"#2d2d2d",messageBg:"#2d2d2d",headerBg:"#2d2d2d",headerText:"#ffffff"}};return(null===(n=e[this.getCurrentTheme()])||void 0===n?void 0:n[t])||e.light[t]}},{key:"applyTheme",value:function(){var t=this,n=this.getCurrentTheme();this.widget&&(this.widget.className="chat-widget ".concat(n,"-theme")),"system"===this.config.theme&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",(function(){t.loadStyles()}))}},{key:"generateAiAvatar",value:function(){if(!this.config.showAiAvatar)return"";var t=this.config.aiAvatar;return t?this.isEmoji(t)?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon emoji-avatar">'.concat(t,'</div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):this.isImageUrl(t)?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon image-avatar">\n <img src="'.concat(t,'" alt="').concat(this.config.botName,'" \n onerror="this.style.display=\'none\'; this.parentNode.innerHTML=\'🤖\';" \n onload="this.style.display=\'block\';" />\n </div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):this.isSvg(t)?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon svg-avatar">\n '.concat(this.sanitizeSvg(t),'\n </div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):t.length<=10?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon text-avatar">'.concat(t,'</div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):'\n <div class="ai-avatar">\n <div class="ai-avatar-icon">🤖</div>\n <div class="ai-name">'.concat(this.config.botName,"</div>\n </div>\n "):'\n <div class="ai-avatar">\n <div class="ai-avatar-icon">🤖</div>\n <div class="ai-name">'.concat(this.config.botName,"</div>\n </div>\n ")}},{key:"isEmoji",value:function(t){if(!t||t.length>20)return!1;var n=/(?:\uD83C[\uDFFB-\uDFFF])|\u200D|\uFE0F/.test(t);return/^(?:\uD83D[\uDE00-\uDE4F])|(?:\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])|(?:\uD83D[\uDE80-\uDEFF])|(?:\uD83C[\uDDE0-\uDDFF])|[\u2600-\u26FF]|[\u2700-\u27BF]|(?:\uD83E[\uDD00-\uDDFF])|(?:\uD83C[\uDC18-\uDE70])|[\u238C-\u2454]|[\u20D0-\u20FF]|\uFE0F|\u200D|(?:\uDB40[\uDC20-\uDC7F])/.test(t)||n||/(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEDC-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9\uDEF0-\uDEF8])/.test(t)}},{key:"isImageUrl",value:function(t){return!(!t||"string"!=typeof t)&&([/^https?:\/\/.+\.(jpg|jpeg|png|gif|svg|webp|bmp|ico)(\?.*)?$/i,/^data:image\/.+;base64,/i,/^\/.*\.(jpg|jpeg|png|gif|svg|webp|bmp|ico)(\?.*)?$/i,/^\.\.?\/.*\.(jpg|jpeg|png|gif|svg|webp|bmp|ico)(\?.*)?$/i].some((function(n){return n.test(t.trim())}))||t.startsWith("http")||t.startsWith("data:image")||t.startsWith("/")||t.includes("://"))}},{key:"isSvg",value:function(t){if(!t||"string"!=typeof t)return!1;var n=t.trim();return n.startsWith("<svg")&&n.includes("</svg>")}},{key:"sanitizeSvg",value:function(t){var n=t.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"").replace(/on\w+="[^"]*"/gi,"").replace(/on\w+='[^']*'/gi,"").replace(/javascript:/gi,"").replace(/vbscript:/gi,"").replace(/data:/gi,"");return!n.includes("viewBox")&&n.includes("<svg")&&(n=n.replace("<svg",'<svg viewBox="0 0 24 24"')),n}},{key:"generateGreetingAvatar",value:function(){var t=this.config.aiAvatar;return t?this.isEmoji(t)?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon emoji-avatar">'.concat(t,'</div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):this.isImageUrl(t)?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon image-avatar">\n <img src="'.concat(t,'" alt="').concat(this.config.botName,'"\n onerror="this.style.display=\'none\'; this.parentNode.innerHTML=\'🤖\';" \n onload="this.style.display=\'block\';" />\n </div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):this.isSvg(t)?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon svg-avatar">\n '.concat(this.sanitizeSvg(t),'\n </div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):t.length<=10?'\n <div class="ai-avatar">\n <div class="ai-avatar-icon text-avatar">'.concat(t,'</div>\n <div class="ai-name">').concat(this.config.botName,"</div>\n </div>\n "):'\n <div class="ai-avatar">\n <div class="ai-avatar-icon">🤖</div>\n <div class="ai-name">'.concat(this.config.botName,"</div>\n </div>\n "):'\n <div class="ai-avatar">\n <div class="ai-avatar-icon">🤖</div>\n <div class="ai-name">'.concat(this.config.botName,"</div>\n </div>\n ")}},{key:"initConfig",value:function(t){var n,e,i,o,a=function(t,n,e){var i=parseInt(t);return"".concat(Math.min(Math.max(i,n),e),"px")},r=function(t){return t?t.startsWith("//")?"".concat(window.location.protocol).concat(t):t.startsWith("/")?"".concat(window.location.origin).concat(t):t.startsWith("http")?t:"http://".concat(t):"http://localhost:7000/chat"};this.config={botName:t.botName||"Chat Assistant",botImage:t.botImage||"https://cdn-icons-png.flaticon.com/512/1786/1786548.png",greeting:t.greeting||"Hello! How can I help you today?",placeholder:t.placeholder||"Type your message here...",primaryColor:t.primaryColor||"#0084ff",fontSize:function(t){var n;n="string"==typeof t?parseInt(t.replace("px","")):"number"==typeof t?t:14;var e=Math.min(Math.max(14,n),25);return"".concat(e,"px")}(t.fontSize||14),width:a(t.width||"400px",300,600),height:a(t.height||"600px",400,800),showTimestamp:t.showTimestamp||!1,enableTypingIndicator:!1!==t.enableTypingIndicator,enableMarkdown:!1!==t.enableMarkdown,enableHistory:!1!==t.enableHistory,maxHistoryLength:t.maxHistoryLength||100,enableTypewriter:!1!==t.enableTypewriter,typewriterSpeed:t.typewriterSpeed||{min:30,max:70},typewritewithscroll:void 0!==t.typewritewithscroll&&t.typewritewithscroll,chips:t.chips||[],customStyles:t.customStyles||{},onInit:t.onInit||null,onMessage:t.onMessage||null,onError:t.onError||null,apiEndpoint:r(t.apiEndpoint),apiKey:t.apiKey||"",apiHeaders:t.apiHeaders||{"Content-Type":"application/json"},apiRequestFormat:t.apiRequestFormat||{query:"query",userId:"userId",domain:"domain"},apiResponseFormat:t.apiResponseFormat||{response:"response"},apiMethod:t.apiMethod||"POST",apiTimeout:t.apiTimeout||3e4,enableBackendHistory:!1!==t.enableBackendHistory,backendHistoryEndpoint:r(t.backendHistoryEndpoint),deleteEndpoint:r(t.deleteEndpoint)||"".concat(r(t.apiEndpoint).replace(/\/chat$/,""),"/delete-history"),separateSubpageHistory:t.separateSubpageHistory||!1,feedbackEndpoint:r(t.feedbackEndpoint)||"".concat(this.config.apiEndpoint,"/feedback"),hubspot:{enabled:(null===(n=t.hubspot)||void 0===n?void 0:n.enabled)||!1,portalId:(null===(e=t.hubspot)||void 0===e?void 0:e.portalId)||"",formGuid:(null===(i=t.hubspot)||void 0===i?void 0:i.formGuid)||"",triggerKeywords:(null===(o=t.hubspot)||void 0===o?void 0:o.triggerKeywords)||["pricing","demo","contact","quote","help","support"],formShownToUsers:new Set,formSubmittedUsers:new Set},position:t.position||"bottom-right",enableServerHistoryDelete:void 0!==t.enableServerHistoryDelete&&t.enableServerHistoryDelete,enableFileUpload:!1!==t.enableFileUpload,enableDeleteButton:!1!==t.enableDeleteButton,useMultipartFormData:!1!==t.useMultipartFormData,apiDataFormat:t.apiDataFormat||"json",typingIndicatorColor:t.typingIndicatorColor||"#666",showTypingText:!1,toggleButtonIcon:t.toggleButtonIcon||null,chatBackgroundImage:t.chatBackgroundImage||null,chatBackgroundColor:t.chatBackgroundColor||"#ffffff",sendButtonIconSize:t.sendButtonIconSize||24,enableEnhancedMobileInput:!1!==t.enableEnhancedMobileInput,aiAvatar:t.aiAvatar||null,showAiAvatar:!1!==t.showAiAvatar,botSubname:t.botSubname||null,showBotSubname:!1!==t.showBotSubname,showFormOnStart:!1!==t.showFormOnStart,useEmailAsUserId:!1!==t.useEmailAsUserId,formTitle:t.formTitle||"Give Your Details",formSubtitle:t.formSubtitle||"Please provide your information to start chatting.",theme:t.theme||"light",showBranding:!1!==t.showBranding,brandingText:t.brandingText||"Powered by NeuroBrain",brandingUrl:t.brandingUrl||"https://neurobrains.co/",showMessageActions:!1!==t.showMessageActions,showTextBox:!1!==t.showTextBox,textBoxMessage:t.textBoxMessage||"Hi there! If you need any assistance, I am always here.",textBoxSubMessage:t.textBoxSubMessage||"💬 24/7 Live Chat Support",showTextBoxCloseButton:!1!==t.showTextBoxCloseButton,toggleButtonAnimation:void 0!==t.toggleButtonAnimation?Math.max(0,Math.min(5,parseInt(t.toggleButtonAnimation)||0)):4,toggleButtonSize:t.toggleButtonSize?Math.max(40,Math.min(80,parseInt(t.toggleButtonSize))):60,toggleButtonBottomMargin:t.toggleButtonBottomMargin?Math.max(10,Math.min(50,parseInt(t.toggleButtonBottomMargin))):50,toggleButtonRightMargin:t.toggleButtonRightMargin?Math.max(10,Math.min(100,parseInt(t.toggleButtonRightMargin))):30,websiteBottomSpacing:t.websiteBottomSpacing?Math.max(0,Math.min(100,parseInt(t.websiteBottomSpacing))):0,textBoxSpacingFromToggle:void 0!==t.textBoxSpacingFromToggle?Math.max(0,Math.min(30,parseInt(t.textBoxSpacingFromToggle))):0,textBoxTextColor:t.textBoxTextColor||"primary"}}},{key:"updateFontSize",value:function(t){this.config.fontSize=t,document.documentElement.style.setProperty("--chat-message-font-size",t)}},{key:"ensureDependencies",value:(p=v(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(window.marked||!this.config.enableMarkdown){t.next=3;break}return t.next=3,this.loadScript("https://cdn.jsdelivr.net/npm/marked/marked.min.js");case 3:this.loadStyles();case 4:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"loadScript",value:function(t){return new Promise((function(n,e){var i=document.createElement("script");i.src=t,i.async=!0,i.onload=n,i.onerror=e,document.head.appendChild(i)}))}},{key:"loadStyles",value:function(){this.applyTheme();var t=document.createElement("style");t.textContent="\n :root {\n --chat-primary-color: ".concat(this.config.primaryColor,";\n --chat-primary-color-gradient: ").concat((this.isGradient(this.config.primaryColor),this.config.primaryColor),";\n --chat-message-font-size: ").concat(this.config.fontSize,";\n --chat-width: ").concat(this.config.width,";\n --chat-height: ").concat(this.config.height,";\n --chat-toggle-size: ").concat(this.config.toggleButtonSize,"px;\n --chat-toggle-bottom-margin: ").concat(this.config.toggleButtonBottomMargin,"px;\n --chat-toggle-right-margin: ").concat(this.config.toggleButtonRightMargin,"px;\n --website-bottom-spacing: ").concat(this.config.websiteBottomSpacing,"px;\n --text-box-spacing-from-toggle: ").concat(this.config.textBoxSpacingFromToggle,"px;\n --text-box-text-color: ").concat("primary"===this.config.textBoxTextColor?this.config.primaryColor:"default"===this.config.textBoxTextColor?"#374151":this.config.textBoxTextColor,";\n --text-box-submessage-color: ").concat("primary"===this.config.textBoxTextColor?this.config.primaryColor:"default"===this.config.textBoxTextColor?"#6b7280":this.config.textBoxTextColor,";\n --text-box-submessage-opacity: ").concat("primary"===this.config.textBoxTextColor?"0.8":"1",";\n --text-box-is-gradient: ").concat("primary"===this.config.textBoxTextColor&&this.isGradient(this.config.primaryColor)?"true":"false",";\n --chat-border-radius: 16px;\n --chat-shadow: 0 5px 40px rgba(0,0,0,0.16);\n --typing-dot-color: ").concat(this.config.typingIndicatorColor,";\n --chat-primary-color-rgb: ").concat(this.hexToRgb(this.config.primaryColor),";\n --send-button-icon-size: ").concat(this.config.sendButtonIconSize,"px;\n \n /* Theme variables */\n --chat-bg-color: ").concat(this.getThemeColor("bg"),";\n --chat-text-color: ").concat(this.getThemeColor("text"),";\n --chat-border-color: ").concat(this.getThemeColor("border"),";\n --chat-input-bg: ").concat(this.getThemeColor("inputBg"),";\n --chat-message-bg: ").concat(this.getThemeColor("messageBg"),";\n --chat-header-bg: ").concat(this.getThemeColor("headerBg"),";\n --chat-header-text: ").concat(this.getThemeColor("headerText"),';\n }\n\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;\n }\n\n body {\n background-color: #f5f5f5;\n min-height: 100vh;\n }\n\n /* Main Website Content */\n .website-content {\n padding: 2rem;\n max-width: 1200px;\n margin: 0 auto;\n }\n\n /* Chat Widget Container */\n .chat-widget {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 2147483647;\n }\n\n .chat-widget.left .chat-toggle {\n left: 20px;\n right: auto;\n }\n\n .chat-widget.left .chat-window {\n left: 20px;\n right: auto;\n }\n\n /* Chat Toggle Button - Positioned above chat window */\n .chat-toggle {\n width: var(--chat-toggle-size);\n height: var(--chat-toggle-size);\n border-radius: 50%;\n background: var(--chat-primary-color-gradient);\n box-shadow: 0 2px 12px rgba(0,0,0,0.15);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.3s ease;\n z-index: 2147483650; /* Higher than chat window (2147483647) to appear in front */\n position: fixed;\n text-align: center;\n }\n\n .chat-toggle:hover {\n transform: scale(1.1);\n }\n\n .chat-toggle img {\n width: 30px;\n height: 30px;\n display: block;\n margin: 0 auto;\n }\n\n .chat-toggle span {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 24px;\n line-height: 1;\n }\n\n /* Toggle Button Animations - Enhanced for production compatibility */\n .chat-toggle.animation-1 {\n animation: pulseAnimation 2s infinite !important;\n -webkit-animation: pulseAnimation 2s infinite !important;\n }\n\n .chat-toggle.animation-2 {\n animation: bounceAnimation 2s infinite !important;\n -webkit-animation: bounceAnimation 2s infinite !important;\n }\n\n .chat-toggle.animation-3 {\n animation: shakeAnimation 3s infinite !important;\n -webkit-animation: shakeAnimation 3s infinite !important;\n }\n\n .chat-toggle.animation-4 {\n animation: infinityAnimation 3s infinite !important;\n -webkit-animation: infinityAnimation 3s infinite !important;\n }\n\n .chat-toggle.animation-5 {\n animation: rotateAnimation 4s infinite linear !important;\n -webkit-animation: rotateAnimation 4s infinite linear !important;\n }\n\n /* Keyframe Animations - Enhanced with vendor prefixes for production compatibility */\n @keyframes pulseAnimation {\n 0%, 100% { \n transform: scale(1); \n -webkit-transform: scale(1);\n }\n 50% { \n transform: scale(1.15); \n -webkit-transform: scale(1.15);\n }\n }\n\n @-webkit-keyframes pulseAnimation {\n 0%, 100% { -webkit-transform: scale(1); }\n 50% { -webkit-transform: scale(1.15); }\n }\n\n @keyframes bounceAnimation {\n 0%, 20%, 50%, 80%, 100% { \n transform: translateY(0); \n -webkit-transform: translateY(0);\n }\n 40% { \n transform: translateY(-10px); \n -webkit-transform: translateY(-10px);\n }\n 60% { \n transform: translateY(-5px); \n -webkit-transform: translateY(-5px);\n }\n }\n\n @-webkit-keyframes bounceAnimation {\n 0%, 20%, 50%, 80%, 100% { -webkit-transform: translateY(0); }\n 40% { -webkit-transform: translateY(-10px); }\n 60% { -webkit-transform: translateY(-5px); }\n }\n\n @keyframes shakeAnimation {\n 0%, 100% { \n transform: translateX(0); \n -webkit-transform: translateX(0);\n }\n 10%, 30%, 50%, 70%, 90% { \n transform: translateX(-5px); \n -webkit-transform: translateX(-5px);\n }\n 20%, 40%, 60%, 80% { \n transform: translateX(5px); \n -webkit-transform: translateX(5px);\n }\n }\n\n @-webkit-keyframes shakeAnimation {\n 0%, 100% { -webkit-transform: translateX(0); }\n 10%, 30%, 50%, 70%, 90% { -webkit-transform: translateX(-5px); }\n 20%, 40%, 60%, 80% { -webkit-transform: translateX(5px); }\n }\n\n @keyframes infinityAnimation {\n 0%, 100% { \n transform: scale(1); \n -webkit-transform: scale(1);\n }\n 25% { \n transform: scale(1.2); \n -webkit-transform: scale(1.2);\n }\n 50% { \n transform: scale(1); \n -webkit-transform: scale(1);\n }\n 75% { \n transform: scale(1.2); \n -webkit-transform: scale(1.2);\n }\n }\n\n @-webkit-keyframes infinityAnimation {\n 0%, 100% { -webkit-transform: scale(1); }\n 25% { -webkit-transform: scale(1.2); }\n 50% { -webkit-transform: scale(1); }\n 75% { -webkit-transform: scale(1.2); }\n }\n\n @keyframes rotateAnimation {\n from { \n transform: rotate(0deg); \n -webkit-transform: rotate(0deg);\n }\n to { \n transform: rotate(360deg); \n -webkit-transform: rotate(360deg);\n }\n }\n\n @-webkit-keyframes rotateAnimation {\n from { -webkit-transform: rotate(0deg); }\n to { -webkit-transform: rotate(360deg); }\n }\n\n /* Text Box Styles - Positioned below chat window for better visibility */\n .chat-text-box {\n z-index: 2147483640; /* Lower than chat window (2147483647) to not block branding */\n max-width: min(280px, calc(100vw - 40px)); /* Responsive max-width with proper margins */\n pointer-events: auto;\n box-sizing: border-box;\n position: fixed; /* Ensure proper stacking context */\n opacity: 1;\n /* No transitions for direct show/hide */\n /* Spacing is now handled by CSS variables in position-specific rules */\n }\n\n .chat-text-box-content {\n background: white;\n border-radius: 12px;\n padding: 16px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.15);\n border: 1px solid #e5e7eb;\n position: relative;\n animation: slideInUp 0.3s ease-out;\n }\n\n .chat-text-box-close {\n position: absolute;\n top: 10px;\n right: 10px;\n background: var(--chat-primary-color-gradient);\n border: none;\n cursor: pointer;\n padding: 8px;\n border-radius: 50%;\n color: white;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n z-index: 10;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n }\n\n .chat-text-box-close:hover {\n filter: brightness(0.9);\n transform: scale(1.15) rotate(90deg);\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n }\n\n .chat-text-box-close svg {\n width: 18px;\n height: 18px;\n stroke-width: 2.5;\n }\n\n .chat-text-box-message {\n font-size: 16px;\n line-height: 1.5;\n margin-bottom: 14px;\n font-weight: 600;\n padding-right: 35px;\n }\n \n /* Gradient text support for text box message */\n .chat-text-box-message {\n background: var(--text-box-text-color);\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n color: var(--text-box-text-color); /* Fallback for non-webkit browsers */\n }\n \n /* Non-gradient text fallback */\n .chat-text-box-message:not([data-gradient="true"]) {\n background: none;\n background-clip: unset;\n -webkit-background-clip: unset;\n -webkit-text-fill-color: unset;\n color: var(--text-box-text-color);\n }\n\n .chat-text-box-separator {\n height: 1px;\n background: #e5e7eb;\n margin: 0 -4px 14px -4px;\n }\n\n .chat-text-box-submessage {\n font-size: 15px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 8px;\n opacity: var(--text-box-submessage-opacity);\n }\n \n /* Gradient text support for text box submessage */\n .chat-text-box-submessage {\n background: var(--text-box-submessage-color);\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n color: var(--text-box-submessage-color); /* Fallback for non-webkit browsers */\n }\n \n /* Non-gradient text fallback */\n .chat-text-box-submessage:not([data-gradient="true"]) {\n background: none;\n background-clip: unset;\n -webkit-background-clip: unset;\n -webkit-text-fill-color: unset;\n color: var(--text-box-submessage-color);\n }\n\n .chat-text-box-submessage::before {\n content: \'\';\n width: 8px;\n height: 8px;\n background: #10b981;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n /* Text Box Animation */\n @keyframes slideInUp {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes slideOutDown {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateY(-10px) scale(0.95);\n }\n }\n\n /* Dark theme styles for text box */\n .chat-widget.dark .chat-text-box-content {\n background: #374151;\n border-color: #4b5563;\n }\n\n .chat-widget.dark .chat-text-box-message {\n color: var(--text-box-text-color);\n }\n\n .chat-widget.dark .chat-text-box-submessage {\n color: var(--text-box-submessage-color);\n opacity: var(--text-box-submessage-opacity);\n }\n\n .chat-widget.dark .chat-text-box-separator {\n background: #4b5563;\n }\n\n .chat-widget.dark .chat-text-box-close {\n color: #9ca3af;\n }\n\n .chat-widget.dark .chat-text-box-close:hover {\n background: #4b5563;\n color: #d1d5db;\n }\n\n /* Chat Window */\n .chat-window {\n position: fixed;\n bottom: 100px;\n right: 20px;\n width: var(--chat-width);\n height: var(--chat-height);\n background: var(--chat-bg-color);\n border-radius: var(--chat-border-radius);\n box-shadow: var(--chat-shadow);\n display: none;\n flex-direction: column;\n overflow: hidden;\n transition: transform 0.3s ease, opacity 0.3s ease;\n transform: translateY(20px);\n opacity: 0;\n font-size: var(--chat-font-size);\n min-width: 300px;\n max-width: 600px;\n min-height: 400px;\n max-height: 800px;\n padding: 0;\n box-sizing: border-box;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n\n .chat-window.active {\n display: flex;\n transform: translateY(0);\n opacity: 1;\n border-radius: var(--chat-border-radius);\n overflow: hidden;\n }\n\n /* Chat Header */\n .chat-header {\n background: var(--chat-primary-color);\n color: white;\n padding: 1rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n margin: 0;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n border-bottom: 1px solid var(--chat-primary-color);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n /* Fix for header background extending to edges */\n .chat-header::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: -1px;\n right: -1px;\n bottom: 0;\n background: var(--chat-primary-color);\n z-index: -1;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n }\n\n .chat-header-title {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n position: relative;\n z-index: 1;\n }\n \n .chat-header-text {\n display: flex;\n flex-direction: column;\n gap: 0.1rem;\n }\n \n .chat-header-subname {\n font-size: 0.8em;\n opacity: 0.8;\n font-weight: 400;\n line-height: 1.2;\n }\n\n .chat-header-avatar {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: white;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .chat-header-avatar img {\n width: 33px;\n height: 33px;\n border-radius: 50%;\n }\n\n .chat-header-actions {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n position: relative;\n z-index: 1;\n }\n\n .erase-chat, .close-chat {\n background: none;\n border: none;\n color: white;\n cursor: pointer;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transition: all 0.2s ease;\n width: 40px;\n height: 40px;\n }\n\n .erase-chat:hover, .close-chat:hover {\n background: rgba(255, 255, 255, 0.1);\n transform: scale(1.05);\n }\n\n .erase-chat:active, .close-chat:active {\n background: var(--chat-primary-color) !important;\n transform: scale(0.95);\n }\n\n /* Enhanced mobile touch support for header buttons */\n @media (max-width: 768px) {\n .erase-chat, .close-chat {\n width: 44px;\n height: 44px;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n \n .erase-chat:active, .close-chat:active {\n background: var(--chat-primary-color) !important;\n transform: scale(0.9);\n }\n }\n\n .erase-chat img, .close-chat img {\n width: 20px;\n height: 20px;\n pointer-events: none;\n }\n\n /* Chat Messages - Normal bottom flow */\n .chat-messages {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n scroll-behavior: smooth;\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\n background: var(--chat-message-bg);\n ').concat(this.config.chatBackgroundImage?"\n background-image: url('".concat(this.config.chatBackgroundImage,"');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n background-attachment: fixed;\n "):"\n background: var(--chat-message-bg);\n ","\n }\n\n .chat-messages::-webkit-scrollbar {\n width: 6px;\n }\n\n .chat-messages::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .chat-messages::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n }\n\n /* Prevent iOS rubber-band effect */\n @supports (-webkit-touch-callout: none) {\n .chat-window {\n height: -webkit-fill-available;\n }\n \n .chat-messages {\n height: -webkit-fill-available;\n }\n }\n\n /* Dark theme styles */\n .chat-widget.dark-theme .chat-window {\n background: var(--chat-bg-color);\n border: 1px solid var(--chat-border-color);\n }\n\n .chat-widget.dark-theme .chat-header {\n background: var(--chat-primary-color);\n color: white;\n }\n\n .chat-widget.dark-theme .chat-input input,\n .chat-widget.dark-theme .chat-input .chat-textarea {\n background: var(--chat-input-bg);\n color: var(--chat-text-color);\n border-color: var(--chat-border-color);\n }\n\n .chat-widget.dark-theme .chat-input input::placeholder,\n .chat-widget.dark-theme .chat-input .chat-textarea::placeholder {\n color: #888888;\n }\n\n .chat-widget.dark-theme .bot-message {\n background: var(--chat-message-bg);\n color: var(--chat-text-color);\n border: 1px solid var(--chat-border-color);\n }\n\n .chat-widget.dark-theme .user-message {\n background: var(--chat-primary-color);\n color: white;\n }\n\n .chat-widget.dark-theme .typing-indicator {\n background: var(--chat-message-bg);\n border: 1px solid var(--chat-border-color);\n }\n\n .chat-widget.dark-theme .chip {\n background: var(--chat-message-bg);\n color: var(--chat-text-color);\n border: 1px solid var(--chat-border-color);\n }\n\n .chat-widget.dark-theme .chip:hover {\n background: var(--chat-border-color);\n }\n\n .message {\n max-width: 80%;\n padding: 0.8rem 1rem;\n border-radius: 1rem;\n margin: 0.25rem 0;\n font-size: calc(var(--chat-font-size) * 0.8);\n transition: max-width 0.3s ease, padding 0.3s ease;\n }\n\n .message-row {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n }\n\n /* Chat spacer to ensure new messages and responses are visible */\n .chat-spacer {\n height: 20px;\n min-height: 20px;\n flex-shrink: 0;\n pointer-events: none;\n }\n\n /* Bot Message Styling */\n .bot-message {\n max-width: 80%;\n padding: 1rem;\n background: #f0f2f5;\n border-radius: 1rem;\n border-top-left-radius: 0;\n font-size: 14px;\n line-height: 1.5;\n color: #000000;\n box-shadow: none !important;\n ").concat(this.config.chatBackgroundImage?"\n background: rgba(240, 242, 245, 0.95) !important;\n box-shadow: none !important;\n ":"",'\n }\n \n /* Ensure bot message has no shadow */\n .chat-widget .bot-message,\n .chat-widget .ai-message {\n box-shadow: none !important;\n background: #f0f2f5 !important;\n }\n\n .bot-message img {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n margin: 8px 0;\n transition: min-height 0.3s ease;\n }\n\n .bot-message img[src=""] {\n display: none;\n }\n\n .bot-message a {\n color: #0084ff;\n text-decoration: none;\n }\n\n .bot-message a:hover {\n text-decoration: underline;\n }\n\n /* User Message */\n .user-message {\n margin-left: auto;\n background: var(--chat-primary-color);\n color: white;\n border-top-right-radius: 0;\n text-align: left;\n ').concat(this.config.chatBackgroundImage?"\n background: rgba(var(--chat-primary-color-rgb, 0, 132, 255), 0.95);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n ":"","\n }\n\n /* Markdown Content Styles */\n .bot-message h1, .bot-message h2, .bot-message h3 {\n margin: 16px 0 8px 0;\n }\n\n .bot-message p {\n margin: 8px 0;\n }\n\n .bot-message ul, .bot-message ol {\n margin: 8px 0;\n padding-left: 20px;\n }\n\n .bot-message code {\n background: rgba(0, 0, 0, 0.05);\n padding: 2px 4px;\n border-radius: 4px;\n font-family: monospace;\n }\n\n .bot-message pre {\n background: rgba(0, 0, 0, 0.05);\n padding: 12px;\n border-radius: 4px;\n overflow-x: auto;\n }\n\n .bot-message blockquote {\n border-left: 4px solid #0084ff;\n margin: 8px 0;\n padding-left: 12px;\n color: #666;\n }\n \n /* COMPREHENSIVE GREETING WIDTH FIX - Force identical width to other AI responses */\n #greeting-row {\n display: flex !important;\n align-items: flex-start !important;\n gap: 0.5rem !important;\n width: 100% !important;\n max-width: 100% !important;\n }\n \n #greeting-row .bot-message-container {\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n margin-bottom: 1rem !important;\n max-width: 80% !important;\n width: 80% !important;\n min-width: 60px !important;\n }\n \n #greeting-row .bot-message {\n max-width: 100% !important;\n width: 100% !important;\n min-width: 100% !important;\n padding: 1rem !important;\n background: #f0f2f5 !important;\n border-radius: 1rem !important;\n border-top-left-radius: 0 !important;\n font-size: 14px !important;\n line-height: 1.5 !important;\n color: #000000 !important;\n box-sizing: border-box !important;\n }\n \n #greeting-row .message-content {\n margin-top: 0.5rem !important;\n width: 100% !important;\n max-width: 100% !important;\n word-wrap: break-word !important;\n overflow-wrap: break-word !important;\n }\n \n /* Mobile responsive width for greeting */\n @media screen and (max-width: 480px) {\n #greeting-row .bot-message-container {\n max-width: 85% !important;\n width: 85% !important;\n }\n \n #greeting-row .bot-message {\n max-width: 100% !important;\n width: 100% !important;\n }\n }\n \n /* Remove greeting message shadow */\n #greeting-row .bot-message {\n box-shadow: none !important;\n }\n \n /* AI Avatar Styling */\n .bot-message-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin-bottom: 1rem;\n }\n \n .ai-avatar {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 0.8rem;\n font-size: 0.9em;\n }\n \n .ai-avatar-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: var(--chat-primary-color, #0084ff);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n color: white;\n flex-shrink: 0;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n position: relative;\n }\n \n /* Enhanced avatar type styles with fallback colors */\n .ai-avatar-icon.emoji-avatar {\n background: transparent !important;\n font-size: 18px;\n color: inherit;\n box-shadow: none;\n }\n \n .ai-avatar-icon.text-avatar {\n background: var(--chat-primary-color, ").concat(this.config.primaryColor||"#0084ff",") !important;\n font-size: 14px;\n font-weight: 600;\n color: white;\n }\n \n .ai-avatar-icon.image-avatar {\n background: transparent !important;\n padding: 0;\n }\n \n .ai-avatar-icon.svg-avatar {\n background: var(--chat-primary-color, ").concat(this.config.primaryColor||"#0084ff",") !important;\n padding: 4px;\n }\n \n /* Fallback for when CSS variables don't load properly */\n .chat-widget .ai-avatar-icon:not(.emoji-avatar):not(.image-avatar) {\n background-color: ").concat(this.config.primaryColor||"#0084ff"," !important;\n }\n \n .ai-avatar-icon img {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n object-fit: cover;\n display: block;\n }\n \n .ai-avatar-icon svg {\n width: 18px;\n height: 18px;\n fill: currentColor;\n color: white;\n }\n \n .ai-avatar-icon.svg-avatar svg {\n fill: white;\n color: white;\n }\n \n .ai-name {\n font-weight: 600;\n color: var(--chat-primary-color, #0084ff);\n font-size: 0.9em;\n line-height: 1.2;\n }\n \n .message-content {\n margin-top: 0.5rem;\n }\n\n /* Chat Input Container */\n .chat-input-container {\n padding: 1rem;\n border-top: 1px solid var(--chat-border-color);\n background: var(--chat-input-bg);\n }\n\n /* Chat Branding */\n .chat-branding {\n padding: 0.5rem 1rem;\n background: var(--chat-input-bg);\n text-align: center;\n border-bottom-left-radius: inherit;\n border-bottom-right-radius: inherit;\n font-size: 11px;\n color: #666;\n opacity: 0.8;\n }\n\n .chat-branding a {\n color: inherit;\n text-decoration: none;\n font-size: inherit;\n font-weight: 400;\n transition: color 0.2s ease;\n }\n\n .chat-branding a:hover {\n color: var(--chat-primary-color);\n opacity: 1;\n text-decoration: none;\n }\n\n .chat-branding strong {\n font-weight: 600;\n font-size: inherit;\n color: #333;\n }\n\n .chat-widget.dark .chat-branding {\n color: #a0aec0;\n }\n\n .chat-widget.dark .chat-branding a:hover {\n color: var(--chat-primary-color);\n }\n\n .chat-widget.dark .chat-branding strong {\n color: #e2e8f0;\n font-size: inherit;\n }\n\n .chat-widget.dark .chat-branding a:hover strong {\n color: var(--chat-primary-color);\n }\n\n /* Suggestion Chips */\n .suggestion-chips {\n padding: 0.5rem;\n display: flex;\n gap: 0.5rem;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n scroll-behavior: smooth;\n scrollbar-width: auto;\n scrollbar-color: var(--chat-primary-color) #f0f2f5;\n }\n\n .suggestion-chips::-webkit-scrollbar {\n height: 6px;\n }\n\n .suggestion-chips::-webkit-scrollbar-track {\n background: #f0f2f5;\n border-radius: 3px;\n }\n\n .suggestion-chips::-webkit-scrollbar-thumb {\n background: var(--chat-primary-color);\n border-radius: 3px;\n transition: background 0.2s ease;\n }\n\n .suggestion-chips::-webkit-scrollbar-thumb:hover {\n background: var(--chat-primary-color);\n opacity: 0.8;\n }\n\n .chat-input input {\n -webkit-user-select: text !important; /* Allow text selection on Safari */\n user-select: text !important; /* Ensure text selection works */\n -webkit-tap-highlight-color: transparent !important; /* Remove tap highlight on iOS/Android */\n cursor: text !important; /* Ensure text cursor appears */\n }\n\n /* Avoid global bright blue outline rules (we use ash focus styling above) */\n .chat-input input:focus {\n outline: none !important;\n }\n\n /* Ensure active inputs remain functional */\n .chat-input input.active {\n user-select: text !important; /* Ensure text selection */\n -webkit-user-select: text !important; /* Support for Safari */\n }\n\n /* Keep inactive inputs styled properly */\n .chat-input input:not(.active):focus {\n outline: none !important; /* Remove focus outline */\n border-color: #e4e6eb !important; /* Keep the border color default */\n }\n\n /* Prevent issues with z-index or visibility */\n .chat-input input,\n .chat-input .chat-textarea {\n z-index: 1 !important;\n visibility: visible !important;\n pointer-events: auto !important;\n }\n\n\n .chip {\n background: #e4e6eb;\n padding: 0.5rem 1rem;\n border-radius: 16px;\n white-space: nowrap;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .chip:hover {\n background: #d8dadf;\n }\n\n /* Optimized Chat Input - Desktop */\n .chat-input {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n margin-bottom: 0;\n padding: 0;\n position: relative;\n }\n\n .chat-input input,\n .chat-input .chat-textarea {\n flex: 1;\n padding: 12px 16px;\n border: 1.5px solid #e4e6eb;\n border-radius: 14px;\n outline: none;\n font-size: 14px;\n background-color: white;\n cursor: text;\n transition: all 0.25s ease;\n min-height: 48px;\n height: 48px;\n line-height: 1.4;\n box-sizing: border-box;\n }\n\n /* Multiline textarea specifics */\n .chat-input .chat-textarea {\n resize: none;\n overflow: hidden;\n height: auto;\n max-height: 140px;\n padding: 12px 48px 12px 16px; /* space for send button */\n }\n \n .chat-input input:focus,\n .chat-input .chat-textarea:focus {\n /* Desktop focus: use a soft ash outline instead of black */\n border-color: #cbd5e1;\n border-width: 2px;\n box-shadow: 0 0 0 3px rgba(203, 213, 225, 0.45);\n outline: none;\n padding: 11px 47px 11px 15px; /* Adjust for thicker border + send icon space */\n }\n\n .chat-input input.cursor-active,\n .chat-input .chat-textarea.cursor-active {\n cursor: text !important;\n caret-color: auto !important;\n }\n\n .chat-input input:focus,\n .chat-input .chat-textarea:focus {\n cursor: text !important;\n caret-color: auto !important;\n outline: none;\n }\n\n /* Perfect mobile input design with send button inside */\n @media (max-width: 768px) {\n .chat-input {\n padding: 4px 8px !important;\n position: sticky !important;\n bottom: 0 !important;\n background: var(--chat-input-bg) !important;\n border-top: 1px solid #e4e6eb !important;\n z-index: 1000 !important;\n display: flex !important;\n align-items: flex-end !important;\n gap: 10px !important;\n /* Minimal design */\n min-height: auto !important;\n touch-action: manipulation !important;\n position: relative !important;\n margin: 0 !important;\n }\n \n .chat-input input,\n .chat-input .chat-textarea {\n font-size: 16px !important; /* Prevent iOS zoom */\n -webkit-user-select: text !important;\n user-select: text !important;\n -webkit-touch-callout: default !important;\n cursor: text !important;\n /* Perfect size */\n min-height: 48px !important;\n height: auto !important;\n line-height: 20px !important;\n touch-action: manipulation !important;\n -webkit-appearance: none !important;\n appearance: none !important;\n border-radius: 14px !important;\n /* Send button is outside on mobile now */\n padding: 12px 14px !important;\n border: 1.5px solid #e4e6eb !important;\n background: #ffffff !important;\n transition: all 0.25s ease !important;\n outline: none !important;\n z-index: 100 !important;\n position: relative !important;\n width: 100% !important;\n flex: 1 !important;\n /* Ensure full clickability */\n pointer-events: auto !important;\n -webkit-tap-highlight-color: rgba(0,0,0,0.1) !important;\n box-sizing: border-box !important;\n /* Subtle shadow */\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08) !important;\n margin: 0 !important;\n }\n \n .chat-input input::placeholder {\n color: #9ca3af !important;\n font-size: 15px !important;\n pointer-events: none !important;\n user-select: none !important;\n -webkit-user-select: none !important;\n }\n \n .chat-input input:focus,\n .chat-input input.mobile-focused {\n border-color: var(--chat-primary-color) !important;\n border-width: 2px !important;\n box-shadow: 0 0 0 3px rgba(var(--chat-primary-rgb), 0.15) !important;\n background: #ffffff !important;\n caret-color: var(--chat-primary-color) !important;\n transform: none !important;\n padding: 0 47px 0 17px !important; /* Adjust for thicker border and smaller button */\n }\n \n .chat-input input:active {\n background: #ffffff !important;\n border-color: var(--chat-primary-color) !important;\n }\n \n /* Mobile send button (rectangular, inside input) */\n .send-button {\n position: relative !important;\n right: auto !important;\n bottom: auto !important;\n top: auto !important;\n left: auto !important;\n transform: none !important;\n min-width: 48px !important;\n min-height: 48px !important;\n width: 48px !important;\n height: 48px !important;\n touch-action: manipulation !important;\n /* Rectangular (mobile) */\n border-radius: 12px !important;\n margin: 0 !important;\n flex-shrink: 0 !important;\n -webkit-tap-highlight-color: rgba(0,0,0,0.05) !important;\n z-index: 200 !important;\n /* Use primary color on mobile like your screenshot */\n background: var(--chat-primary-color-gradient) !important;\n border: none !important;\n cursor: pointer !important;\n box-shadow: none !important;\n transition: all 0.2s ease !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding: 0 !important;\n pointer-events: auto !important;\n -webkit-user-select: none !important;\n user-select: none !important;\n opacity: 1 !important;\n }\n\n .send-button:hover {\n transform: scale(1.06) !important;\n background: rgba(0,0,0,0.06) !important;\n }\n \n .send-button:active {\n transform: scale(0.94) !important;\n background: rgba(0,0,0,0.08) !important;\n }\n \n .send-button:disabled {\n opacity: 1 !important;\n pointer-events: auto !important;\n cursor: pointer !important;\n }\n\n .send-button img {\n width: 22px !important;\n height: 22px !important;\n margin: 0 !important;\n padding: 0 !important;\n object-fit: contain !important;\n /* Ensure icon is visible on primary background */\n filter: brightness(0) invert(1) !important;\n pointer-events: none !important;\n }\n \n /* Mobile typing indicator: Thinking + animated ellipsis (no 3-dot bubbles) */\n .chat-widget .typing-indicator {\n margin: 10px 0 !important;\n margin-left: 0 !important;\n margin-right: auto !important;\n padding: 12px 16px !important;\n max-width: 220px !important;\n min-width: 110px !important;\n border-radius: 14px !important;\n border-top-left-radius: 6px !important;\n height: auto !important;\n }\n \n .chat-widget .typing-indicator.active {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: flex-start !important;\n }\n \n /* Mobile chat window adjustments */\n .chat-window {\n overflow: hidden !important;\n }\n \n .chat-messages {\n overflow-y: auto !important;\n -webkit-overflow-scrolling: touch !important;\n overscroll-behavior: contain !important;\n }\n }\n\n\n\n /* Default send button styling (desktop/tablet). Mobile is overridden above in the (max-width: 768px) block. */\n /* Desktop/tablet send button (circular) only when the device supports hover + fine pointer. */\n @media (hover: hover) and (pointer: fine) {\n .send-button {\n background: var(--chat-primary-color-gradient) !important;\n color: white !important;\n border: none !important;\n border-radius: 50% !important;\n width: 48px !important;\n height: 48px !important;\n cursor: pointer !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n transition: all 0.25s ease !important;\n margin: 0 !important;\n min-width: 48px !important;\n min-height: 48px !important;\n flex-shrink: 0 !important;\n box-shadow: 0 1px 4px rgba(var(--chat-primary-color-rgb), 0.25) !important;\n }\n\n .send-button:hover {\n background: var(--chat-primary-color-gradient) !important;\n transform: scale(1.02) !important;\n box-shadow: 0 2px 8px rgba(var(--chat-primary-color-rgb), 0.35) !important;\n }\n\n .send-button:active {\n transform: scale(0.98) !important;\n }\n\n .send-button img {\n width: var(--send-button-icon-size, ").concat(this.config.sendButtonIconSize,"px) !important;\n height: var(--send-button-icon-size, ").concat(this.config.sendButtonIconSize,"px) !important;\n min-width: var(--send-button-icon-size, ").concat(this.config.sendButtonIconSize,"px) !important;\n min-height: var(--send-button-icon-size, ").concat(this.config.sendButtonIconSize,"px) !important;\n max-width: var(--send-button-icon-size, ").concat(this.config.sendButtonIconSize,"px) !important;\n max-height: var(--send-button-icon-size, ").concat(this.config.sendButtonIconSize,'px) !important;\n object-fit: contain !important;\n display: block !important;\n flex-shrink: 0 !important;\n filter: brightness(0) invert(1) !important;\n pointer-events: none !important;\n }\n }\n\n /* HARD OVERRIDE: touch devices must keep the mobile rectangular send button */\n @media (pointer: coarse) {\n .chat-input .send-button {\n border-radius: 12px !important;\n background: var(--chat-primary-color-gradient) !important;\n opacity: 1 !important;\n }\n }\n\n /* Typing indicator: "Thinking…" text with animated ellipsis (no 3-dot bubbles) */\n .chat-widget .typing-indicator {\n display: none !important;\n padding: 12px 16px !important;\n background: #f0f2f5 !important;\n border-radius: 14px !important;\n border-top-left-radius: 6px !important;\n align-self: flex-start !important;\n margin: 12px 0 !important;\n margin-left: 0 !important;\n margin-right: auto !important;\n box-shadow: none !important;\n border: 1px solid #e4e6eb !important;\n position: relative !important;\n width: fit-content !important;\n max-width: 220px !important;\n animation: fadeInUp 0.4s ease-out !important;\n -webkit-animation: fadeInUp 0.4s ease-out !important;\n }\n \n .typing-indicator.active {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: flex-start !important;\n }\n\n .typing-text {\n display: inline-flex !important;\n align-items: center !important;\n gap: 6px !important;\n font-size: 13px !important;\n color: #6b7280 !important;\n font-weight: 600 !important;\n line-height: 1 !important;\n white-space: nowrap !important;\n }\n\n .typing-spinner {\n display: inline-block !important;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border-radius: 999px;\n border: 2px solid rgba(107, 114, 128, 0.25);\n border-top-color: var(--chat-primary-color);\n animation: typingSpin 0.8s linear infinite;\n }\n @keyframes typingSpin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n /* Safety: if an old cached build still renders dot <span>s, hide them */\n .typing-indicator span {\n display: none !important;\n }\n\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(15px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes shimmer {\n 0% { left: -100%; }\n 100% { left: 100%; }\n }\n\n /* Dark theme typing indicator */\n .chat-widget.dark .typing-indicator {\n background: #1f2937 !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n }\n .chat-widget.dark .typing-text {\n color: #cbd5e1 !important;\n }\n\n /* Typing Text Styles (only when showTypingText is true) */\n .typing-text {\n font-size: 11px;\n color: #6c757d;\n margin-top: 4px;\n text-align: center;\n font-weight: 400;\n opacity: 0.7;\n animation: pulse 2s infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 0.6; }\n 50% { opacity: 1; }\n }\n\n .chat-widget.dark .typing-text {\n color: #a0aec0;\n }\n\n /* File Upload Styles */\n .file-button {\n background: none;\n border: none;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n margin-right: 8px;\n }\n\n .file-button:hover {\n background: rgba(0, 0, 0, 0.05);\n transform: scale(1.05);\n }\n\n .file-button img {\n width: 20px;\n height: 20px;\n opacity: 0.7;\n transition: opacity 0.2s ease;\n }\n\n .file-button:hover img {\n opacity: 1;\n }\n\n .file-preview {\n margin-top: 8px;\n padding: 8px;\n background: #f8f9fa;\n border-radius: 8px;\n border: 1px solid #e9ecef;\n }\n\n .file-preview-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 8px;\n margin: 2px 0;\n background: white;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n }\n\n .file-preview-item .file-info {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n }\n\n .file-preview-item .file-name {\n font-size: 12px;\n color: #495057;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .file-preview-item .file-size {\n font-size: 10px;\n color: #6c757d;\n }\n\n .file-preview-item .remove-file {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 2px;\n border-radius: 2px;\n font-size: 12px;\n }\n\n .file-preview-item .remove-file:hover {\n background: #dc3545;\n color: white;\n }\n\n .chat-widget.dark .file-preview {\n background: #2d3748;\n border-color: #4a5568;\n }\n\n .chat-widget.dark .file-preview-item {\n background: #1a202c;\n border-color: #4a5568;\n }\n\n .chat-widget.dark .file-preview-item .file-name {\n color: #e2e8f0;\n }\n\n .chat-widget.dark .file-preview-item .file-size {\n color: #a0aec0;\n }\n\n /* Output Styles */\n #output {\n white-space: pre-wrap;\n font-family: Arial, sans-serif;\n line-height: 1.5;\n }\n\n #output img {\n max-width: 100%;\n height: auto;\n }\n\n #output code {\n background-color: #f4f4f4;\n padding: 2px 4px;\n border-radius: 3px;\n }\n\n /* Dark Theme */\n .chat-widget.dark {\n --chat-bg-color: #1a1a1a;\n --chat-text-color: #ffffff;\n --chat-message-bg: #2d2d2d;\n --chat-bot-message-bg: #383838;\n --chat-input-bg: #2d2d2d;\n --chat-input-border: #404040;\n }\n\n .chat-widget.dark .chat-window {\n background: var(--chat-bg-color);\n color: var(--chat-text-color);\n }\n\n .chat-widget.dark .message {\n background: var(--chat-message-bg);\n color: var(--chat-text-color);\n }\n\n .chat-widget.dark .bot-message {\n background: #2d2d2d;\n color: #ffffff;\n box-shadow: none !important;\n }\n\n .chat-widget.dark .chat-input input {\n background: var(--chat-input-bg);\n color: var(--chat-text-color);\n border-color: var(--chat-input-border);\n }\n\n /* Initial greeting message style - removed to match other AI responses */\n\n /* Responsive Design */\n /* Mobile Portrait */\n @media screen and (max-width: 480px) {\n :root {\n --chat-toggle-size: 50px;\n }\n\n .chat-input input {\n -webkit-user-select: text !important; /* Allow text selection on Safari */\n user-select: text !important; /* Ensure text selection works */\n -webkit-tap-highlight-color: transparent !important; /* Remove tap highlight on iOS/Android */\n cursor: text !important; /* Ensure text cursor appears */\n }\n\n .chat-input input:focus {\n outline: none !important;\n }\n\n /* Ensure active inputs remain functional */\n .chat-input input.active {\n user-select: text !important; /* Ensure text selection */\n -webkit-user-select: text !important; /* Support for Safari */\n }\n\n /* Keep inactive inputs styled properly */\n .chat-input input:not(.active):focus {\n outline: none !important; /* Remove focus outline */\n border-color: #e4e6eb !important; /* Keep the border color default */\n }\n\n /* Prevent issues with z-index or visibility */\n .chat-input input {\n z-index: 1 !important;\n visibility: visible !important;\n pointer-events: auto !important;\n }\n\n \n .chat-window {\n position: fixed !important;\n bottom: 0 !important;\n right: 0 !important;\n left: 0 !important;\n top: 0 !important;\n width: 100vw !important;\n height: var(--chat-mobile-vh, 100dvh) !important;\n min-width: 100vw !important;\n max-width: 100vw !important;\n min-height: var(--chat-mobile-vh, 100dvh) !important;\n max-height: var(--chat-mobile-vh, 100dvh) !important;\n margin: 0 !important;\n padding: 0 !important;\n border: none !important;\n border-radius: 0 !important;\n box-sizing: border-box !important;\n transform: translateY(100%) !important;\n transition: transform 0.3s ease-in-out !important;\n z-index: 999999 !important;\n background: white !important;\n overflow: hidden !important;\n display: flex !important;\n flex-direction: column !important;\n }\n\n .chat-window.active {\n transform: translateY(0) !important;\n }\n \n /* Extra aggressive fullscreen for npm/CDN */\n .chat-widget .chat-window.active {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100vw !important;\n height: var(--chat-mobile-vh, 100dvh) !important;\n min-width: 100vw !important;\n max-width: 100vw !important;\n min-height: var(--chat-mobile-vh, 100dvh) !important;\n max-height: var(--chat-mobile-vh, 100dvh) !important;\n margin: 0 !important;\n padding: 0 !important;\n border: none !important;\n border-radius: 0 !important;\n box-sizing: border-box !important;\n z-index: 999999 !important;\n background: white !important;\n overflow: hidden !important;\n transform: translateY(0) !important;\n display: flex !important;\n flex-direction: column !important;\n }\n \n .chat-toggle {\n position: fixed !important;\n bottom: 20px !important;\n right: 20px !important;\n z-index: 2147483650 !important;\n transform: none;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n visibility: visible !important;\n }\n\n .chat-toggle img {\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n margin: 0 auto !important;\n }\n\n .chat-toggle span {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 100% !important;\n height: 100% !important;\n font-size: 24px !important;\n line-height: 1 !important;\n }\n\n /* Hide toggle when chat is active on mobile */\n .chat-widget .chat-window.active ~ .chat-toggle {\n display: none !important;\n }\n \n .chat-header {\n padding: 0.8rem;\n }\n \n .chat-messages {\n padding: 0.8rem;\n }\n \n .chat-input-container {\n padding: 0.8rem;\n padding-bottom: max(0.8rem, env(safe-area-inset-bottom));\n border-top: none;\n position: sticky !important;\n bottom: 0 !important;\n z-index: 9999 !important;\n background: var(--chat-input-bg) !important;\n }\n \n .message {\n max-width: 85%;\n padding: 0.7rem;\n }\n \n .suggestion-chips {\n padding: 0.5rem 0;\n }\n \n .chip {\n padding: 0.4rem 0.8rem;\n font-size: 0.9rem;\n }\n }\n \n /* Mobile Landscape */\n @media screen and (max-height: 500px) and (orientation: landscape) {\n .chat-window {\n height: 100vh;\n max-height: calc(100vh - 20px);\n }\n\n .chat-input input {\n -webkit-user-select: text !important; /* Allow text selection on Safari */\n user-select: text !important; /* Ensure text selection works */\n -webkit-tap-highlight-color: transparent !important; /* Remove tap highlight on iOS/Android */\n cursor: text !important; /* Ensure text cursor appears */\n }\n\n .chat-input input:focus {\n outline: none !important;\n }\n\n /* Ensure active inputs remain functional */\n .chat-input input.active {\n user-select: text !important; /* Ensure text selection */\n -webkit-user-select: text !important; /* Support for Safari */\n }\n\n /* Keep inactive inputs styled properly */\n .chat-input input:not(.active):focus {\n outline: none !important; /* Remove focus outline */\n border-color: #e4e6eb !important; /* Keep the border color default */\n }\n\n /* Prevent issues with z-index or visibility */\n .chat-input input {\n z-index: 1 !important;\n visibility: visible !important;\n pointer-events: auto !important;\n }\n\n \n .chat-messages {\n flex: 1;\n max-height: calc(100vh - 180px);\n }\n \n .suggestion-chips {\n padding: 0.3rem 0;\n }\n \n .chip {\n padding: 0.3rem 0.6rem;\n }\n \n .chat-input-container {\n padding: 0.5rem;\n border-top: none;\n }\n .chat-input input {\n -webkit-user-select: none; /* For Safari */\n -webkit-tap-highlight-color: transparent; /* Remove tap highlight on iOS */\n }\n\n .chat-input input.active {\n user-select: text; /* Allow text selection when active */\n -webkit-user-select: text; /* For Safari */\n }\n\n /* Prevent any focus styling until activated */\n .chat-input input:not(.active):focus {\n outline: none;\n border-color: #e4e6eb; /* Keep default border */\n }\n }\n \n /* Tablet Portrait */\n @media screen and (min-width: 481px) and (max-width: 768px) {\n .chat-window {\n width: 380px;\n height: 520px;\n bottom: 80px;\n right: 10px;\n }\n \n .chat-toggle {\n bottom: 15px;\n right: 15px;\n }\n .chat-input input {\n user-select: text;\n -webkit-user-select: text;\n }\n }\n \n /* Tablet Landscape */\n @media screen and (min-width: 769px) and (max-width: 1024px) {\n .chat-window {\n width: 420px;\n height: 580px;\n }\n }\n \n /* Desktop */\n @media screen and (min-width: 1025px) and (max-width: 1919px) {\n .chat-window {\n width: 425px;\n height: 600px;\n }\n }\n \n /* Large Desktop (1920px and above) */\n @media screen and (min-width: 1920px) {\n .chat-window {\n width: 500px;\n height: 700px;\n }\n \n .chat-messages {\n font-size: 1.1em;\n }\n \n .chat-input input {\n font-size: 1em;\n padding: 1rem 1.2rem;\n }\n \n .send-button {\n width: 48px !important;\n height: 48px !important;\n min-width: 48px !important;\n min-height: 48px !important;\n }\n \n .send-button img {\n width: ').concat(Math.round(1.17*this.config.sendButtonIconSize),"px !important;\n height: ").concat(Math.round(1.17*this.config.sendButtonIconSize),"px !important;\n min-width: ").concat(Math.round(1.17*this.config.sendButtonIconSize),"px !important;\n min-height: ").concat(Math.round(1.17*this.config.sendButtonIconSize),"px !important;\n max-width: ").concat(Math.round(1.17*this.config.sendButtonIconSize),"px !important;\n max-height: ").concat(Math.round(1.17*this.config.sendButtonIconSize),"px !important;\n }\n \n .chat-header {\n padding: 1.2rem;\n }\n }\n \n /* 4K Displays */\n @media screen and (min-width: 2560px) {\n .chat-window {\n width: 600px;\n height: 800px;\n }\n \n .chat-messages {\n font-size: 1.2em;\n }\n \n .chat-input input {\n font-size: 1.1em;\n padding: 1.2rem 1.4rem;\n }\n \n .send-button {\n width: 52px !important;\n height: 52px !important;\n min-width: 52px !important;\n min-height: 52px !important;\n }\n \n .send-button img {\n width: ").concat(Math.round(1.25*this.config.sendButtonIconSize),"px !important;\n height: ").concat(Math.round(1.25*this.config.sendButtonIconSize),"px !important;\n min-width: ").concat(Math.round(1.25*this.config.sendButtonIconSize),"px !important;\n min-height: ").concat(Math.round(1.25*this.config.sendButtonIconSize),"px !important;\n max-width: ").concat(Math.round(1.25*this.config.sendButtonIconSize),"px !important;\n max-height: ").concat(Math.round(1.25*this.config.sendButtonIconSize),"px !important;\n }\n \n .chat-header {\n padding: 1.4rem;\n }\n }\n\n @media screen and (min-width: 1930px) {\n .chat-window {\n width: 450px;\n height: 600px;\n }\n }\n\n .hubspot-form-container {\n transition: opacity 0.3s ease, transform 0.3s ease;\n }\n\n .chat-input-container.disabled {\n opacity: 0.7;\n pointer-events: none;\n }\n\n .chat-input-container.disabled::after {\n content: 'Please complete the form above';\n position: absolute;\n top: -20px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 12px;\n color: var(--chat-primary-color);\n opacity: 0.8;\n }\n\n .hubspot-form-success {\n transition: opacity 0.3s ease, transform 0.3s ease;\n padding: 20px;\n background: #d4edda;\n border-radius: 8px;\n text-align: center;\n }\n\n .chip {\n transition: opacity 0.3s ease, pointer-events 0.3s ease;\n }\n\n .chat-input input,\n .send-button {\n transition: opacity 0.3s ease, background-color 0.3s ease;\n }\n\n /* Safe Area Insets for Modern Mobile Devices */\n @supports (padding: max(0px)) {\n .chat-window {\n padding-bottom: max(1rem, env(safe-area-inset-bottom));\n // padding-right: max(1rem, env(safe-area-inset-right));\n // padding-left: max(1rem, env(safe-area-inset-left));\n }\n\n .chat-input-container {\n padding-bottom: max(1rem, env(safe-area-inset-bottom));\n }\n }\n\n /* High Contrast Mode */\n @media (prefers-contrast: high) {\n .chat-widget {\n --chat-primary-color: #000000;\n --chat-secondary-color: #ffffff;\n }\n\n .message {\n border: 2px solid #000000;\n }\n }\n\n /* Reduced Motion */\n @media (prefers-reduced-motion: reduce) {\n .chat-toggle,\n .chat-window {\n transition: none;\n }\n }\n\n /* Print Styles */\n @media print {\n .chat-widget {\n display: none;\n }\n }\n ").concat(this.config.customStyles,"\n\n /* Image Preview Styles */\n .image-container {\n position: relative;\n margin: 8px 0;\n border-radius: 8px;\n }\n\n .image-container img {\n max-width: 100%;\n height: auto;\n display: block;\n border-radius: 8px;\n }\n\n .image-container svg {\n opacity: 0.7;\n }\n\n .fullscreen-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.9);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2147483647;\n padding: 20px;\n }\n\n .preview-container {\n position: relative;\n max-width: 90vw;\n max-height: 90vh;\n }\n\n .preview-image {\n max-width: 100%;\n max-height: 90vh;\n object-fit: contain;\n }\n\n .close-preview {\n position: absolute;\n top: -40px;\n right: -40px;\n background: none;\n border: none;\n color: white;\n font-size: 32px;\n cursor: pointer;\n padding: 10px;\n line-height: 1;\n }\n\n .close-preview:hover {\n color: #ddd;\n }\n\n @media (max-width: 768px) {\n .close-preview {\n top: -40px;\n right: 0;\n }\n }\n\n /* Amazon Product Link Styles */\n .amazon-product-link {\n margin: 10px 0;\n }\n\n .amazon-button {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border: 1px solid #007bff;\n border-radius: 5px;\n color: #007bff;\n text-decoration: none;\n transition: background-color 0.3s ease;\n }\n\n .amazon-button:hover {\n background-color: #007bff;\n color: #ffffff;\n }\n\n .amazon-icon {\n width: 20px;\n height: 20px;\n }\n\n .chat-input input.waiting {\n background-color: #ffffff !important; /* Keep background white when waiting */\n cursor: text !important; /* Keep text cursor */\n }\n\n .chat-input input:disabled {\n background-color: #f5f5f5;\n cursor: not-allowed;\n }\n\n .send-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .chat-input-container.waiting::after {\n content: 'Processing...';\n position: absolute;\n top: -20px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 12px;\n color: var(--chat-primary-color);\n opacity: 0.7;\n }\n\n /* Keep default font size for chat input */\n .chat-input input {\n font-size: 14px; /* Fixed size */\n padding: 0.8rem 1rem;\n border: 1px solid #e4e6eb;\n border-radius: 20px;\n outline: none;\n }\n\n /* Apply custom font size only to messages */\n .message.user-message,\n .message.bot-message {\n font-size: var(--chat-message-font-size);\n }\n\n /* Keep all other elements at their default size */\n .chat-header,\n .chat-header-title h2,\n .chat-input-container,\n .suggestion-chips,\n .chip,\n .send-button,\n .close-chat,\n .erase-chat {\n font-size: 14px; /* Fixed size */\n }\n\n /* Ensure markdown content inside bot messages uses the custom font size */\n .bot-message p,\n .bot-message ul,\n .bot-message ol,\n .bot-message li {\n font-size: var(--chat-message-font-size);\n }\n\n /* Keep code blocks slightly smaller than message text */\n .bot-message code {\n font-size: calc(var(--chat-message-font-size) * 0.9);\n }\n\n /* Keep headers in markdown proportional to message size */\n .bot-message h1 { font-size: calc(var(--chat-message-font-size) * 1.5); }\n .bot-message h2 { font-size: calc(var(--chat-message-font-size) * 1.3); }\n .bot-message h3 { font-size: calc(var(--chat-message-font-size) * 1.1); }\n\n .message-actions {\n display: none;\n gap: 8px;\n margin-top: 8px;\n }\n\n .bot-message-container:hover .message-actions,\n .bot-message-container.last .message-actions {\n display: flex;\n }\n\n .message-action-btn {\n background: none;\n border: 1px solid #e4e6eb;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n }\n\n .message-action-btn:hover {\n background: #f0f2f5;\n }\n\n .message-action-btn.active {\n background: var(--chat-primary-color);\n color: white;\n border-color: var(--chat-primary-color);\n }\n\n .message-action-btn img {\n width: 16px;\n height: 16px;\n }\n\n .bot-message-container {\n display: flex;\n flex-direction: column;\n }\n\n /* Message Actions Container */\n .message-actions {\n display: none; /* Hidden by default */\n gap: 8px;\n margin-top: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n /* Show actions on container hover */\n .bot-message-container:hover .message-actions {\n display: flex;\n opacity: 1;\n }\n\n /* Always show actions for last message */\n .bot-message-container.last .message-actions {\n display: flex !important;\n opacity: 1;\n }\n\n .message-action-btn {\n background: #ffffff;\n border: 1px solid #e4e6eb;\n border-radius: 4px;\n padding: 6px 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n font-size: 12px;\n color: #666;\n }\n\n .message-action-btn:hover {\n background: #f0f2f5;\n border-color: #d4d4d4;\n }\n\n .message-action-btn.active {\n background: var(--chat-primary-color);\n color: white;\n border-color: var(--chat-primary-color);\n }\n\n .message-action-btn.active img {\n filter: brightness(0) invert(1);\n }\n\n .message-action-btn img {\n width: 16px;\n height: 16px;\n opacity: 0.7;\n }\n\n .bot-message-container {\n display: flex;\n flex-direction: column;\n }\n\n /* Copied tooltip */\n .copy-btn.copied::after {\n content: 'Copied!';\n position: absolute;\n top: -25px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.7);\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n pointer-events: none;\n }\n\n .message-actions {\n display: none;\n gap: 4px;\n margin-top: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n .bot-message-container:hover .message-actions {\n display: flex;\n opacity: 1;\n }\n\n .bot-message-container.last .message-actions {\n display: flex !important;\n opacity: 1;\n }\n\n .message-action-btn {\n background: #ffffff;\n border: 1px solid #e4e6eb;\n border-radius: 4px;\n padding: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n width: 28px;\n height: 28px;\n }\n\n .message-action-btn:hover {\n background: #f0f2f5;\n border-color: #d4d4d4;\n }\n\n .message-action-btn img {\n width: 16px;\n height: 16px;\n opacity: 0.7;\n }\n\n .message-action-btn.active {\n background: var(--chat-primary-color) !important;\n border-color: var(--chat-primary-color) !important;\n color: white !important;\n }\n\n .message-action-btn.active img {\n opacity: 1;\n filter: brightness(0) invert(1);\n }\n \n /* Specific styling for copy button when active/copied */\n .copy-btn.active,\n .copy-btn.copied {\n background: var(--chat-primary-color) !important;\n border-color: var(--chat-primary-color) !important;\n color: white !important;\n }\n \n .copy-btn.active img,\n .copy-btn.copied img {\n filter: brightness(0) invert(1) !important;\n }\n\n /* Copied tooltip */\n .copy-btn.copied::after {\n content: 'Copied!';\n position: absolute;\n top: -25px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.7);\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n pointer-events: none;\n }\n\n /* Greeting actions specific styles */\n .greeting-actions {\n transition: opacity 0.3s ease, transform 0.3s ease;\n }\n\n .greeting-actions.hiding {\n opacity: 0;\n transform: translateY(-5px);\n }\n\n /* Add powered by link styles */\n .powered-by {\n text-align: center;\n padding: 0px;\n font-size: 12px;\n color: #666;\n // border-top: 1px solid #e4e6eb;\n }\n\n .powered-by a {\n color: var(--chat-primary-color);\n text-decoration: none;\n font-weight: 500;\n }\n\n .powered-by a:hover {\n text-decoration: underline;\n }\n\n /* Base chat widget positioning */\n .chat-widget {\n position: fixed;\n z-index: 2147483647;\n }\n\n /* Position-specific styles for toggle and window with advanced spacing */\n .chat-widget.bottom-right .chat-toggle {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing));\n right: var(--chat-toggle-right-margin);\n }\n .chat-widget.bottom-right .chat-window {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing) + var(--chat-toggle-size) + 20px);\n right: var(--chat-toggle-right-margin);\n }\n\n .chat-widget.bottom-left .chat-toggle {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing));\n left: 20px;\n }\n .chat-widget.bottom-left .chat-window {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing) + var(--chat-toggle-size) + 20px);\n left: 20px;\n }\n\n .chat-widget.bottom-center .chat-toggle {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing));\n left: 50%;\n transform: translateX(-50%)\n }\n .chat-widget.bottom-center .chat-window {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing) + var(--chat-toggle-size) + 20px);\n left: 50%;\n transform: translateX(-50%)\n }\n\n .chat-widget.top .chat-toggle {\n top: 20px;\n left: 50%;\n transform: translateX(-50%)\n }\n .chat-widget.top .chat-window {\n top: 100px;\n left: 50%;\n transform: translateX(-50%)\n }\n\n .chat-widget.left .chat-toggle {\n left: 20px;\n top: 50%;\n transform: translateY(-50%)\n }\n .chat-widget.left .chat-window {\n left: 20px;\n top: 50%;\n transform: translateY(-50%)\n }\n\n .chat-widget.right .chat-toggle {\n right: 20px;\n top: 50%;\n transform: translateY(-50%)\n }\n .chat-widget.right .chat-window {\n right: 20px;\n top: 50%;\n transform: translateY(-50%)\n }\n\n .chat-widget.top-right .chat-toggle {\n top: 20px;\n right: 20px;\n }\n .chat-widget.top-right .chat-window {\n top: 100px;\n right: 20px;\n }\n\n .chat-widget.top-left .chat-toggle {\n top: 20px;\n left: 20px;\n }\n .chat-widget.top-left .chat-window {\n top: 100px;\n left: 20px;\n }\n\n /* Position-specific styles for text box - positioned close to toggle button */\n .chat-widget.bottom-right .chat-text-box {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing) + var(--chat-toggle-size) + var(--text-box-spacing-from-toggle));\n right: var(--chat-toggle-right-margin);\n left: auto;\n transform: none;\n max-width: min(280px, calc(100vw - 40px));\n }\n\n .chat-widget.bottom-left .chat-text-box {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing) + var(--chat-toggle-size) + var(--text-box-spacing-from-toggle));\n left: 20px;\n right: auto;\n transform: none;\n max-width: min(280px, calc(100vw - 40px));\n }\n\n .chat-widget.bottom-center .chat-text-box {\n bottom: calc(var(--chat-toggle-bottom-margin) + var(--website-bottom-spacing) + var(--chat-toggle-size) + var(--text-box-spacing-from-toggle));\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n max-width: min(280px, calc(100vw - 40px));\n }\n\n .chat-widget.top .chat-text-box {\n top: 90px;\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n max-width: min(280px, calc(100vw - 40px));\n }\n\n .chat-widget.left .chat-text-box {\n left: 90px;\n right: auto;\n top: 50%;\n transform: translateY(-50%);\n max-width: min(280px, calc(100vw - 130px)); /* Account for left positioning */\n }\n\n .chat-widget.right .chat-text-box {\n right: 20px;\n left: auto;\n top: 50%;\n transform: translateY(-50%);\n max-width: min(280px, calc(100vw - 40px));\n }\n\n .chat-widget.top-right .chat-text-box {\n top: 90px;\n right: 20px;\n left: auto;\n transform: none;\n max-width: min(280px, calc(100vw - 40px));\n }\n\n .chat-widget.top-left .chat-text-box {\n top: 90px;\n left: 20px;\n right: auto;\n transform: none;\n max-width: min(280px, calc(100vw - 40px));\n }\n\n /* Mobile adjustments */\n @media screen and (max-width: 480px) {\n .chat-widget .chat-window {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100vw !important;\n height: var(--chat-mobile-vh, 100dvh) !important;\n min-width: 100vw !important;\n max-width: 100vw !important;\n min-height: var(--chat-mobile-vh, 100dvh) !important;\n max-height: var(--chat-mobile-vh, 100dvh) !important;\n margin: 0 !important;\n padding: 0 !important;\n border: none !important;\n border-radius: 0 !important;\n box-sizing: border-box !important;\n transform: translateY(100%) !important;\n transition: transform 0.3s ease-in-out !important;\n z-index: 2147483647 !important;\n background: white !important;\n overflow: hidden !important;\n }\n\n .chat-widget .chat-window.active {\n transform: translateY(0) !important;\n }\n\n .chat-toggle {\n position: fixed !important;\n bottom: 20px !important;\n right: 20px !important;\n z-index: 2147483650 !important;\n transform: none;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n visibility: visible !important;\n }\n\n .chat-toggle img {\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n margin: 0 auto !important;\n }\n\n .chat-toggle span {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 100% !important;\n height: 100% !important;\n font-size: 24px !important;\n line-height: 1 !important;\n }\n\n .chat-widget.left .chat-toggle {\n left: 20px !important;\n right: auto !important;\n }\n\n /* Hide toggle when chat is active on mobile */\n .chat-widget .chat-window.active ~ .chat-toggle {\n display: none !important;\n }\n\n .chat-text-box {\n max-width: calc(100vw - 30px) !important;\n margin-left: 15px !important;\n margin-right: 15px !important;\n font-size: 14px !important;\n }\n\n .chat-text-box-content {\n padding: 12px !important;\n }\n\n .chat-text-box-message {\n font-size: 14px !important;\n padding-right: 30px !important;\n }\n\n .chat-text-box-submessage {\n font-size: 13px !important;\n }\n\n /* Mobile-specific positioning for text box */\n .chat-widget.bottom-right .chat-text-box,\n .chat-widget.bottom-left .chat-text-box,\n .chat-widget.bottom-center .chat-text-box {\n right: 15px !important;\n left: auto !important;\n transform: none !important;\n max-width: calc(100vw - 30px) !important;\n }\n }\n\n /* Tablet and large mobile adjustments */\n @media screen and (max-width: 768px) and (min-width: 481px) {\n .chat-text-box {\n max-width: min(300px, calc(100vw - 60px)) !important;\n margin-left: 30px !important;\n margin-right: 30px !important;\n }\n\n .chat-widget.bottom-right .chat-text-box,\n .chat-widget.top-right .chat-text-box {\n right: 30px !important;\n }\n\n .chat-widget.bottom-left .chat-text-box,\n .chat-widget.top-left .chat-text-box {\n left: 30px !important;\n }\n }\n\n /* Ensure text box never goes beyond viewport bounds */\n @media screen and (max-width: 320px) {\n .chat-text-box {\n max-width: calc(100vw - 20px) !important;\n margin-left: 10px !important;\n margin-right: 10px !important;\n }\n\n .chat-text-box-content {\n padding: 10px !important;\n }\n\n .chat-text-box-message {\n font-size: 13px !important;\n }\n\n .chat-text-box-submessage {\n font-size: 12px !important;\n }\n }\n\n /* Only show cursor when input is specifically activated */\n .chat-input input.cursor-active {\n user-select: text;\n -webkit-user-select: text;\n }\n ");var n=document.getElementById("chat-widget-styles");n&&n.remove(),document.head.appendChild(t)}},{key:"createWidget",value:function(){var t=this,n=document.createElement("div");n.className="chat-widget ".concat(this.config.theme," ").concat(this.config.position);var e=C[this.config.position],i=Object.entries(e.toggle).map((function(t){var n=a(t,2),e=n[0],i=n[1];return"".concat(e,": ").concat(i,";")})).join(" "),o='\n <div class="chat-toggle" style="position: fixed; '.concat(i,'">\n ').concat(function(){if(!t.config.toggleButtonIcon)return"<img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z'/%3E%3C/svg%3E\" alt=\"Chat\">";var n=t.config.toggleButtonIcon;return n.length<=4&&/(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEDC-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9\uDEF0-\uDEF8])/.test(n)?'<span style="font-size: 24px; line-height: 1; display: flex; align-items: center; justify-content: center;">'.concat(n,"</span>"):n.startsWith("http")||n.startsWith("data:image")||n.startsWith("/")?'<img src="'.concat(n,'" alt="Chat" style="width: 24px; height: 24px; object-fit: contain;">'):n.trim().startsWith("<svg")?n:"<img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z'/%3E%3C/svg%3E\" alt=\"Chat\">"}(),"\n </div>\n "),r=this.config.showTextBox?'\n <div class="chat-text-box" style="position: fixed;">\n <div class="chat-text-box-content">\n '.concat(this.config.showTextBoxCloseButton?'\n <button class="chat-text-box-close">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">\n <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>\n </svg>\n </button>\n ':"",'\n <div class="chat-text-box-message" ').concat("primary"===this.config.textBoxTextColor&&this.isGradient(this.config.primaryColor)?'data-gradient="true"':"",">").concat(this.config.textBoxMessage,'</div>\n <div class="chat-text-box-separator"></div>\n <div class="chat-text-box-submessage" ').concat("primary"===this.config.textBoxTextColor&&this.isGradient(this.config.primaryColor)?'data-gradient="true"':"",">").concat(this.config.textBoxSubMessage,"</div>\n </div>\n </div>\n "):"",s=Object.entries(e.window).map((function(t){var n=a(t,2),e=n[0],i=n[1];return"".concat(e,": ").concat(i,";")})).join(" "),c='\n <div class="chat-window" style="position: fixed; '.concat(s,'">\n <div class="chat-header">\n <div class="chat-header-title">\n <div class="chat-header-avatar">\n <img src="').concat(this.config.botImage,'" alt="').concat(this.config.botName,'" class="bot-avatar">\n </div>\n <div class="chat-header-text">\n <h2 style="font-weight: bold; font-size: 20px; margin: 0;">').concat(this.config.botName,"</h2>\n ").concat(this.config.showBotSubname&&this.config.botSubname?'<div class="chat-header-subname">'.concat(this.config.botSubname,"</div>"):"",'\n </div>\n </div>\n <div class="chat-header-actions">\n ').concat(this.config.enableDeleteButton?'\n <button class="erase-chat">\n <img src="https://i.ibb.co.com/9YP3swm/erase.png" alt="Erase" title="Clear chat history">\n </button>\n ':"",'\n <button class="close-chat">\n <img src="data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 24 24\' fill=\'white\'%3E%3Cpath d=\'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\'/%3E%3C/svg%3E" alt="Close" title="Close chat">\n </button>\n </div>\n </div>\n\n <div class="chat-messages">\n <div class="message-row" id="greeting-row">\n <div class="message bot-message greeting-message">\n ').concat(this.config.greeting,'\n </div>\n </div>\n <div class="typing-indicator">\n <div class="typing-text">Thinking<div class="typing-spinner" aria-hidden="true"></div></div>\n </div>\n <div class="chat-spacer"></div>\n </div>\n\n ').concat(this.config.chips.length>0?'\n <div class="suggestion-chips">\n '.concat(this.config.chips.map((function(t){return'\n <div class="chip">'.concat(t,"</div>\n ")})).join(""),"\n </div>\n "):"",'\n\n <div class="chat-input-container">\n <div class="chat-input">\n <textarea class="chat-textarea" rows="1" placeholder="').concat(this.config.placeholder,'" aria-label="Chat input"></textarea>\n ').concat(this.config.enableFileUpload?'\n <input type="file" class="file-input" multiple accept="image/*,.pdf,.doc,.docx,.txt" style="display: none;">\n <button class="file-button" title="Attach files">\n <img src="data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 24 24\' fill=\'%23666\'%3E%3Cpath d=\'M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\'/%3E%3C/svg%3E" alt="Attach">\n </button>\n ':"",'\n <button class="send-button">\n <img src="').concat("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M2.01 21L23 12 2.01 3 2 10l15 2-15 2z'/%3E%3C/svg%3E",'" alt="Send">\n </button>\n </div>\n ').concat(this.config.enableFileUpload?'<div class="file-preview" style="display: none;"></div>':"","\n </div>\n ").concat(this.config.showBranding?'\n <div class="chat-branding">\n Powered by <a href="'.concat(this.config.brandingUrl,'" target="_blank" rel="noopener noreferrer"><strong>').concat(this.config.brandingText.replace(/^Powered by\s*/i,""),"</strong></a>\n </div>\n "):"","\n </div>\n ");n.innerHTML=r+o+c,document.body.appendChild(n),this.widget=n}},{key:"initializeWidget",value:function(){var t=this;this.createWidget(),this.setupSuggestionChips(),this.setupResponsiveHandling(),this.setupScrollContainment(),setTimeout((function(){t.ensureGreetingMessageWithAvatar()}),200),setTimeout((function(){t.ensureSendButtonIconSize()}),300),setTimeout((function(){t.applyToggleButtonAnimation()}),100),setTimeout((function(){t.forceStyleReapplication()}),500),setInterval((function(){t.ensureTypingIndicatorAnimation()}),2e3),setTimeout((function(){t.setupTextBoxEventListeners()}),100),this.setupClickOutsideToClose(),console.log("Chat widget initialized.")}},{key:"setupEventListeners",value:function(){var t=this,n=this.widget.querySelector(".chat-toggle"),e=this.widget.querySelector(".chat-window"),i=this.widget.querySelector(".close-chat"),o=(this.widget.querySelector(".erase-chat"),this.widget.querySelector(".chat-messages")),a=this.widget.querySelector(".chat-input .chat-textarea"),r=this.widget.querySelector(".send-button"),s=this.widget.querySelector(".file-button"),c=this.widget.querySelector(".file-input"),l=this.widget.querySelector(".file-preview");this.widget.querySelector(".typing-indicator"),this.setupMobileFullscreenEnforcement();var u=[];this.config.enableFileUpload&&s&&c&&l&&(s.addEventListener("click",(function(){c.click()})),c.addEventListener("change",(function(n){var e=Array.from(n.target.files);u=u.concat(e),t.updateFilePreview(u,l)})),l.addEventListener("click",(function(n){if(n.target.classList.contains("remove-file")){var e=parseInt(n.target.dataset.index);u.splice(e,1),t.updateFilePreview(u,l)}}))),n.addEventListener("click",(function(){t.toggleChat()})),i.addEventListener("click",(function(){t.closeChat()})),r.disabled=!1,r.style.opacity="1",r.style.pointerEvents="auto";var p=function(n){n&&(n.preventDefault(),n.stopPropagation());var e=(a.value||"").replace(/\r\n/g,"\n");if(e.trim().length>0||t.config.enableFileUpload&&0!==u.length){if(!t.isWaitingForResponse&&!t.isTypewriterActive){a.value="";try{a.style.height="auto"}catch(t){}t.config.enableFileUpload&&u.length>0?(t.sendMessageWithFiles(e,u),u=[],l&&t.updateFilePreview(u,l),c&&(c.value="")):t.sendMessage(e)}}else a.focus()};try{r.style.touchAction="manipulation"}catch(t){}var d=!1;r.addEventListener("pointerdown",(function(t){t&&t.stopPropagation(),r.classList.add("is-pressing")}),{passive:!0}),r.addEventListener("pointerup",(function(t){r.classList.remove("is-pressing"),t&&t.stopPropagation(),t&&t.pointerType&&"mouse"!==t.pointerType&&(d=!0,setTimeout((function(){d=!1}),400),p(t))}),{passive:!1}),r.addEventListener("pointercancel",(function(){r.classList.remove("is-pressing")}),{passive:!0}),r.addEventListener("click",(function(t){t&&t.stopPropagation(),d?t&&t.preventDefault():p(t)})),a.addEventListener("keydown",(function(n){if("Enter"===n.key)return n.ctrlKey||n.metaKey?(n.preventDefault(),void p(n)):void(t.isMobileBrowser()||n.shiftKey||(n.preventDefault(),p(n)))})),a.addEventListener("input",(function(){if(t.isMobileBrowser())r.style.opacity="1";else{var n=!(a.value.trim()||t.config.enableFileUpload&&0!==u.length),e=t.isWaitingForResponse||t.isTypewriterActive;r.style.opacity=e?"0.6":n?"0.7":"1"}}));var h=function(){try{a.style.height="auto";var t=Math.min(a.scrollHeight,140);a.style.height="".concat(t,"px")}catch(t){}};h(),a.addEventListener("input",h),this.isMobileBrowser()&&this.config.enableEnhancedMobileInput?this.setupCleanMobileInput(a):this.setupDesktopInput(a),document.addEventListener("click",(function(t){e.contains(t.target)||n.contains(t.target)||e.classList.contains("active")})),e.addEventListener("click",(function(t){t.stopPropagation()})),"ontouchstart"in window&&(o.style.webkitOverflowScrolling="touch",o.style.overscrollBehavior="contain");var m=function(){window.innerWidth<=480?e.style.setProperty("--chat-mobile-vh","".concat(Math.round(function(){try{var t=window.visualViewport;return t&&t.height?t.height:window.innerHeight}catch(t){return window.innerHeight}}()),"px")):e.style.removeProperty("--chat-mobile-vh")};window.addEventListener("resize",m),window.visualViewport&&(window.visualViewport.addEventListener("resize",m),window.visualViewport.addEventListener("scroll",m)),window.addEventListener("orientationchange",(function(){setTimeout((function(){m(),o.scrollTop=o.scrollHeight}),150)})),m();var g=document.createElement("style");g.textContent="\n .chat-input input:disabled {\n background-color: #f5f5f5;\n cursor: not-allowed;\n }\n \n .send-button:disabled {\n cursor: not-allowed;\n }\n \n .chat-input-container.waiting {\n position: relative;\n }\n \n .chat-input-container.waiting::after {\n content: 'Waiting for response...';\n position: absolute;\n top: -20px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 12px;\n color: #666;\n }\n ",document.head.appendChild(g)}},{key:"setupSuggestionChips",value:function(){var t=this;this.widget.querySelectorAll(".chip").forEach((function(n){n.addEventListener("click",(function(){if(!t.isWaitingForResponse){var e=n.textContent;t.sendMessage(e),t.disableChips()}}))}));var n=document.createElement("style");n.textContent="\n .chip {\n transition: opacity 0.3s ease, background-color 0.3s ease;\n }\n \n .chip.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n background-color: #e0e0e0;\n }\n ",document.head.appendChild(n)}},{key:"disableChips",value:function(){this.widget.querySelectorAll(".chip").forEach((function(t){t.classList.add("disabled")}))}},{key:"enableChips",value:function(){this.widget.querySelectorAll(".chip").forEach((function(t){t.classList.remove("disabled")}))}},{key:"typeWriter",value:function(t,n,e){var i=this;this.isTypewriterActive=!0,this.disableSendingFunctionality();var o=this.widget.querySelector(".chat-messages"),a=function(){i.isMobileBrowser()||(o.scrollTop,o.scrollTop)};this.isMobileBrowser()||o.addEventListener("scroll",a),t.innerHTML="";var r="",s=function(t){for(var n=[],e="",i=!1,o=!1,a=0;a<t.length;a++){var r=t[a];"<"!==r||o?">"===r&&i?(e+=r,n.push(e),e="",i=!1):i?e+=r:"*"===r&&"*"===t[a+1]?(e&&n.push(e),n.push("**"),a++,e=""):"["===r||"!"===r&&"["===t[a+1]?(e&&n.push(e),e=r,o=!0):o&&"]"===r&&"("===t[a+1]?(e+=r+"(",a++):o&&")"===r?(e+=r,n.push(e),e="",o=!1):" "===r||"\n"===r?(e&&n.push(e),n.push(r),e=""):(e+=r,o||i||a!==t.length-1&&" "!==t[a+1]&&"\n"!==t[a+1]||(n.push(e),e="")):(e&&n.push(e),e=r,i=!0)}return e&&n.push(e),n}(n),c=0,l=function(){if(c>=s.length)return i.isMobileBrowser()||o.removeEventListener("scroll",a),i.isTypewriterActive=!1,i.enableSendingFunctionality(),void(e&&e());var u,p=s[c],d=p.startsWith("<")&&p.endsWith(">"),h=p.startsWith("**")||p.startsWith("[")||p.startsWith("![");r+=p,t.innerHTML=r,i.config.typewritewithscroll&&(!i.config.typewritewithscroll&&i.isTypewriterActive||o.scrollTo({top:o.scrollHeight,behavior:"smooth"})),c++,0==(u=d||h?0:" "===p?20:"\n"===p?50:40*Math.random()+30)?requestAnimationFrame(l):setTimeout((function(){try{l()}catch(o){console.error("Typewriter error:",o),t.innerHTML=n,i.isTypewriterActive=!1,i.enableSendingFunctionality(),i.forceEnableInput(),e&&e()}}),u)};l()}},{key:"disableSendingFunctionality",value:function(){var t=this.widget.querySelector(".chat-input .chat-textarea"),n=this.widget.querySelector(".send-button");t.readOnly=!1,n.style.opacity=this.isMobileBrowser()?"1":"0.6",n.style.pointerEvents="auto",this.disableChips(),t.classList.add("waiting")}},{key:"enableSendingFunctionality",value:function(){if(!this.isWaitingForResponse&&!this.isTypewriterActive){var t=this.widget.querySelector(".chat-input .chat-textarea"),n=this.widget.querySelector(".send-button");t.readOnly=!1,n.style.opacity="1",n.style.pointerEvents="auto",this.enableChips(),t.classList.remove("waiting")}}},{key:"forceEnableInput",value:function(){var t=this.widget.querySelector(".chat-input .chat-textarea"),n=this.widget.querySelector(".send-button");t&&(t.readOnly=!1,t.disabled=!1,t.style.opacity="1",t.style.pointerEvents="auto",t.classList.remove("waiting")),n&&(n.style.opacity="1",n.style.pointerEvents="auto"),this.enableChips(),this.isWaitingForResponse=!1,this.isTypewriterActive=!1;var e=this.widget.querySelector(".typing-indicator");e&&(e.classList.remove("active"),this.stopJavaScriptTypingAnimation())}},{key:"ensureTypingIndicatorAnimation",value:function(){var t=this.widget.querySelectorAll(".typing-indicator span");if(3===t.length){var n=!1;t.forEach((function(t,e){var i=window.getComputedStyle(t).animationName;"none"!==i&&i&&"initial"!==i||(n=!0)})),n&&this.repairTypingAnimation()}}},{key:"repairTypingAnimation",value:function(){this.widget.querySelectorAll(".typing-indicator span").forEach((function(t,n){t.style.animation="none",t.style.webkitAnimation="none",t.offsetHeight})),this.startJavaScriptTypingAnimation()}},{key:"setupMobileFullscreenEnforcement",value:function(){var t=this,n=function(){var n,e=null===(n=t.widget)||void 0===n?void 0:n.querySelector(".chat-window");e&&e.classList.contains("active")&&window.innerWidth<=480&&(e.style.setProperty("position","fixed","important"),e.style.setProperty("top","0","important"),e.style.setProperty("left","0","important"),e.style.setProperty("right","0","important"),e.style.setProperty("bottom","0","important"),e.style.setProperty("width","100vw","important"),e.style.setProperty("height","var(--chat-mobile-vh, 100dvh)","important"),e.style.setProperty("min-width","100vw","important"),e.style.setProperty("max-width","100vw","important"),e.style.setProperty("min-height","var(--chat-mobile-vh, 100dvh)","important"),e.style.setProperty("max-height","var(--chat-mobile-vh, 100dvh)","important"),e.style.setProperty("margin","0","important"),e.style.setProperty("padding","0","important"),e.style.setProperty("border","none","important"),e.style.setProperty("border-radius","0","important"),e.style.setProperty("box-sizing","border-box","important"),e.style.setProperty("z-index","2147483647","important"),e.style.setProperty("background","white","important"),e.style.setProperty("overflow","hidden","important"),e.style.setProperty("transform","translateY(0)","important"))};window.addEventListener("resize",n),window.addEventListener("orientationchange",n),this._mobileFullscreenCleanup=function(){window.removeEventListener("resize",n),window.removeEventListener("orientationchange",n)}}},{key:"startJavaScriptTypingAnimation",value:function(){this.typingAnimationInterval&&clearInterval(this.typingAnimationInterval);var t=this.widget.querySelectorAll(".typing-indicator span");if(3===t.length){var n=0,e=[0,20,40];this.typingAnimationInterval=setInterval((function(){t.forEach((function(t,i){var o=(n+e[i])%60/15,a=.4+.8*Math.abs(Math.sin(o*Math.PI)),r=.3+.7*Math.abs(Math.sin(o*Math.PI));t.style.setProperty("transform","scale(".concat(a,")"),"important"),t.style.setProperty("-webkit-transform","scale(".concat(a,")"),"important"),t.style.setProperty("opacity",r.toString(),"important")})),n=(n+1)%60}),50)}}},{key:"stopJavaScriptTypingAnimation",value:function(){this.typingAnimationInterval&&(clearInterval(this.typingAnimationInterval),this.typingAnimationInterval=null,this.widget.querySelectorAll(".typing-indicator span").forEach((function(t){t.style.setProperty("transform","scale(1)","important"),t.style.setProperty("opacity","1","important")})))}},{key:"addMessage",value:function(t,n){var e=this,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=this.widget.querySelector(".chat-messages"),a=(this.widget.querySelector(".typing-indicator"),document.createElement("div"));if(a.className="message-row","bot"===n){var r=document.createElement("div");r.className="bot-message-container";var s=document.createElement("div");s.className="message ".concat(n,"-message");var c=this.generateAiAvatar();s.innerHTML=c;var l=null;if(this.config.showMessageActions&&((l=document.createElement("div")).className="message-actions",l.style.display="none",l.innerHTML="\n <button class=\"message-action-btn copy-btn\" title=\"Copy to clipboard\">\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z'/%3E%3C/svg%3E\" alt=\"Copy\">\n </button>\n <button class=\"message-action-btn like-btn\" title=\"Helpful\">\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z'/%3E%3C/svg%3E\" alt=\"Like\">\n </button>\n <button class=\"message-action-btn dislike-btn\" title=\"Not helpful\">\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z'/%3E%3C/svg%3E\" alt=\"Dislike\">\n </button>\n <button class=\"message-action-btn regenerate-btn\" title=\"Regenerate response\">\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z'/%3E%3C/svg%3E\" alt=\"Regenerate\">\n </button>\n "),this.config.enableMarkdown&&"bot"===n)if(i&&this.config.enableTypewriter){var u=document.createElement("div");u.className="message-content",s.appendChild(u),this.typeWriter(u,marked.parse(t),(function(){l&&e.config.showMessageActions&&(l.style.display="flex"),e.setupMessageLinks(u),e.updateLastBotMessage()}))}else{var p=document.createElement("div");p.className="message-content",p.innerHTML=marked.parse(t),s.appendChild(p),l&&this.config.showMessageActions&&(l.style.display="flex"),this.setupMessageLinks(p)}else{var d=document.createElement("div");d.className="message-content",d.textContent=t,s.appendChild(d),l&&this.config.showMessageActions&&(l.style.display="flex")}r.appendChild(s),l&&r.appendChild(l),a.appendChild(r),this.config.showMessageActions&&this.setupMessageActions(r,t),this.hideGreetingActions()}else{var h=document.createElement("div");h.className="message ".concat(n,"-message"),h.textContent=t,a.appendChild(h)}var m=o.querySelector(".chat-spacer");o.insertBefore(a,m);var g=o.querySelector(".typing-indicator");g&&m&&g.classList.contains("active")&&o.insertBefore(g,m),"user"===n&&this.scrollToShowNewMessage(a),this.updateLastBotMessage()}},{key:"setupMessageLinks",value:function(t){t.querySelectorAll("a").forEach((function(t){t.setAttribute("target","_blank"),t.setAttribute("rel","noopener noreferrer")})),t.querySelectorAll("img").forEach((function(t){var n=document.createElement("div");n.className="image-container",t.parentNode.insertBefore(n,t),n.appendChild(t),t.addEventListener("error",(function(){n.innerHTML='\n <svg width="50" height="50" viewBox="0 0 24 24" fill="#999">\n <path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/>\n </svg>',n.style.padding="20px",n.style.textAlign="center"}))}))}},{key:"sendMessage",value:(u=v(s().mark((function t(n){var e,i,a,r,c,l,u,p,d,h=this,m=arguments;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=m.length>1&&void 0!==m[1]&&m[1],!this.isWaitingForResponse&&!this.isTypewriterActive){t.next=3;break}return t.abrupt("return");case 3:return i=this.widget.querySelector(".chat-input .chat-textarea"),a=this.widget.querySelector(".typing-indicator"),this.widget.querySelector(".chat-window"),r=function(){i.value="",h.isMobileBrowser()&&h.config.enableEnhancedMobileInput?i.removeAttribute("readonly"):i.setAttribute("readonly","true"),i.classList.remove("cursor-active"),h.isMobileBrowser()?setTimeout((function(){h.enableMobileInputInteraction(i)}),100):i.focus()},c=function(){h.isWaitingForResponse=!0,h.disableSendingFunctionality(),a.classList.add("active"),setTimeout((function(){return h.startJavaScriptTypingAnimation()}),100)},l=function(){h.isWaitingForResponse=!1,h.enableSendingFunctionality(),a.classList.remove("active"),h.stopJavaScriptTypingAnimation()},t.prev=9,c(),e||(this.addMessage(n,"user"),this.storageManager.saveMessage(n,"user")),u=this.formatRequestData(n),t.next=15,this.makeApiCall(u);case 15:if(p=t.sent,t.prev=16,(d=this.config.transformResponse?this.config.transformResponse(p):"string"==typeof p?p:p&&"object"===o(p)?p.response?p.response:p.message?p.message:p.text?p.text:p.content?p.content:p.answer?p.answer:p[this.config.apiResponseFormat.response]||JSON.stringify(p,null,2):String(p))&&""!==d.trim()){t.next=20;break}throw new Error("Empty response received from server");case 20:t.next=26;break;case 22:t.prev=22,t.t0=t.catch(16),console.error("Error processing API response:",t.t0),d="Sorry, there was an error processing the response. Please try again.";case 26:this.addMessage(d,"bot",!0),this.storageManager.saveMessage(d,"bot",e),t.next=34;break;case 30:t.prev=30,t.t1=t.catch(9),console.error("API Error:",t.t1),this.addMessage("Sorry, there was an error processing your request.","bot",!1);case 34:return t.prev=34,l(),r(),this.forceEnableInput(),t.finish(34);case 39:case"end":return t.stop()}}),t,this,[[9,30,34,39],[16,22]])}))),function(t){return u.apply(this,arguments)})},{key:"isMobileBrowser",value:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}},{key:"toggleChat",value:function(){var t=this.widget.querySelector(".chat-window");this.widget.querySelector(".chat-toggle"),this.widget.querySelector(".chat-input .chat-textarea"),t.classList.contains("active")?this.closeChat():this.openChat()}},{key:"closeChat",value:function(){var t=this,n=this.widget.querySelector(".chat-window"),e=(this.widget.querySelector(".chat-toggle"),this.widget.querySelector(".chat-input .chat-textarea"));e&&(e.classList.remove("cursor-active","mobile-focused"),e.blur(),e.style.caretColor="transparent",this._mobileInputCleanup&&(this._mobileInputCleanup(),this._mobileInputCleanup=null)),this.activeModal&&this.removeActiveForm(),document.body.style.setProperty("overflow","","important"),document.body.style.setProperty("position","","important"),document.body.style.setProperty("width","","important"),document.documentElement.style.setProperty("overflow","","important");var i=this.widget.querySelector(".chat-messages");i&&(i.style.overflow="",i.style.overscrollBehavior=""),n.classList.remove("active"),this.updateToggleIcon(!1),setTimeout((function(){n.style.display="none";var e=t.widget.querySelector(".chat-text-box");e&&t.config.showTextBox&&!t._textBoxManuallyClosed&&(e.style.display="block",e.style.opacity="1",e.style.transform="translateY(0)"),t.enableToggleButtonAnimation()}),300)}},{key:"openChat",value:function(){var t=this,n=this.widget.querySelector(".chat-window"),e=this.widget.querySelector(".chat-input .chat-textarea"),i=this.widget.querySelector(".chat-text-box");i&&this.config.showTextBox&&!this._textBoxManuallyClosed&&(i.style.display="none"),n.style.display="flex",this.updateToggleIcon(!0),this.disableToggleButtonAnimation(),requestAnimationFrame((function(){var i;n.classList.add("active"),window.innerWidth<=480&&(n.style.setProperty("position","fixed","important"),n.style.setProperty("top","0","important"),n.style.setProperty("left","0","important"),n.style.setProperty("right","0","important"),n.style.setProperty("bottom","0","important"),n.style.setProperty("width","100vw","important"),n.style.setProperty("height","var(--chat-mobile-vh, 100dvh)","important"),n.style.setProperty("min-width","100vw","important"),n.style.setProperty("max-width","100vw","important"),n.style.setProperty("min-height","var(--chat-mobile-vh, 100dvh)","important"),n.style.setProperty("max-height","var(--chat-mobile-vh, 100dvh)","important"),n.style.setProperty("margin","0","important"),n.style.setProperty("padding","0","important"),n.style.setProperty("border","none","important"),n.style.setProperty("border-radius","0","important"),n.style.setProperty("box-sizing","border-box","important"),n.style.setProperty("z-index","2147483647","important"),n.style.setProperty("background","white","important"),n.style.setProperty("overflow","hidden","important"),n.style.setProperty("transform","translateY(0)","important"),document.body.style.setProperty("overflow","hidden","important"),document.documentElement.style.setProperty("overflow","hidden","important")),t.isMobileBrowser()&&t.config.enableEnhancedMobileInput&&e&&!t._mobileInputSetup&&(t.setupCleanMobileInput(e),t._mobileInputSetup=!0),e&&(e.style.caretColor="transparent",e.classList.remove("mobile-focused")),setTimeout((function(){t.scrollToBottom()}),100),t.config.showFormOnStart&&null!==(i=t.config.hubspot)&&void 0!==i&&i.enabled&&!t.userManager.hasSubmittedForm()&&setTimeout((function(){t.showHubSpotForm()}),500)}))}},{key:"updateToggleIcon",value:function(t){var n=this.widget.querySelector(".chat-toggle");if(n)if(t)n.innerHTML="<img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z'/%3E%3C/svg%3E\" alt=\"Close\">";else if(this.config.toggleButtonIcon){var e=this.config.toggleButtonIcon;e.length<=4&&/(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEDC-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9\uDEF0-\uDEF8])/.test(e)?n.innerHTML='<span style="font-size: 24px;">'.concat(e,"</span>"):e.startsWith("http")||e.startsWith("data:image")||e.startsWith("/")?n.innerHTML='<img src="'.concat(e,'" alt="Chat" style="width: 24px; height: 24px;">'):e.trim().startsWith("<svg")?n.innerHTML=e:n.innerHTML="<img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z'/%3E%3C/svg%3E\" alt=\"Chat\">"}else n.innerHTML="<img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z'/%3E%3C/svg%3E\" alt=\"Chat\">"}},{key:"setupCleanMobileInput",value:function(t){var n=this,e=!1,i=function(){t.removeAttribute("readonly"),t.removeAttribute("disabled"),t.style.userSelect="text",t.style.webkitUserSelect="text",t.style.pointerEvents="auto",t.style.fontSize="16px",t.style.webkitAppearance="none",t.style.appearance="none"},o=function(){if(i(),e=!0,t.focus(),t.click(),/iPhone|iPad|iPod/i.test(navigator.userAgent)){var n=document.createElement("input");n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="16px",n.style.opacity="0",document.body.appendChild(n),n.focus(),setTimeout((function(){t.focus(),e&&t.setSelectionRange(t.value.length,t.value.length),document.body.removeChild(n)}),50)}else setTimeout((function(){e&&t.setSelectionRange(t.value.length,t.value.length)}),100)};t.addEventListener("focus",(function(n){e=!0,t.classList.add("mobile-focused"),t.style.caretColor="auto",t.style.cursor="text"})),t.addEventListener("blur",(function(i){setTimeout((function(){var i=document.activeElement;n.widget.querySelector(".chat-window").contains(i)||(e=!1,t.classList.remove("mobile-focused"),t.style.caretColor="transparent")}),100)})),t.addEventListener("click",(function(t){t.preventDefault(),t.stopPropagation(),o()})),t.addEventListener("touchstart",(function(t){t.preventDefault(),t.stopPropagation(),o()})),t.addEventListener("touchend",(function(t){t.preventDefault(),t.stopPropagation(),o()}));var a=t.closest(".chat-input");if(a){var r=document.createElement("div");r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.right="0",r.style.bottom="0",r.style.zIndex="0",r.style.background="transparent",r.style.cursor="text",r.style.pointerEvents="none",a.style.position="relative",a.appendChild(r);var s=function(t,n){t&&t.target&&t.target.closest&&t.target.closest(".send-button, .file-button")||(t.preventDefault(),t.stopPropagation(),o())};a.addEventListener("click",(function(t){return s(t)})),a.addEventListener("touchstart",(function(t){return s(t)})),a.addEventListener("touchend",(function(t){return s(t)}))}var c=function(i){var o=n.widget.querySelector(".chat-window");e&&!o.contains(i.target)&&(e=!1,t.blur(),t.classList.remove("mobile-focused"),t.style.caretColor="transparent")};document.addEventListener("click",c),document.addEventListener("touchstart",c),this._mobileInputCleanup=function(){document.removeEventListener("click",c),document.removeEventListener("touchstart",c)},i(),this.isMobileBrowser()?t.style.caretColor="transparent":t.style.caretColor="auto"}},{key:"enableMobileInputInteraction",value:function(t){if(t)try{t.removeAttribute("readonly"),t.disabled=!1,t.readOnly=!1,t.style.pointerEvents="auto",t.style.userSelect="text",t.style.webkitUserSelect="text",t.style.caretColor="auto"}catch(t){}}},{key:"setupDesktopInput",value:function(t){t.removeAttribute("readonly"),t.removeAttribute("disabled"),t.style.userSelect="text",t.style.pointerEvents="auto",t.style.cursor="text",t.style.caretColor="auto",t.addEventListener("focus",(function(){t.style.caretColor="auto",t.style.cursor="text",t.classList.add("cursor-active")})),t.addEventListener("blur",(function(){t.style.caretColor="auto",t.style.cursor="text"})),t.addEventListener("click",(function(){t.style.caretColor="auto",t.style.cursor="text",t.classList.add("cursor-active")}))}},{key:"scrollToTypingIndicator",value:function(){var t=this.widget.querySelector(".chat-messages"),n=this.widget.querySelector(".typing-indicator");t&&n&&requestAnimationFrame((function(){var e={top:t.scrollHeight,behavior:"smooth"};t.scrollTo(e),n.scrollIntoView({behavior:"smooth",block:"end"})}))}},{key:"formatRequestData",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],e=i(i(i({},this.config.apiRequestFormat.query,t),this.config.apiRequestFormat.userId,this.userManager.currentUser),this.config.apiRequestFormat.domain,this.userManager.domain);return n&&n.length>0&&("form-data"===this.config.apiDataFormat&&1===n.length?e.image=n[0]:(n.forEach((function(t,n){e["file_".concat(n)]=t})),e.fileCount=n.length)),this.config.transformRequest?this.config.transformRequest(e):e}},{key:"updateFilePreview",value:function(t,n){var e=this;if(0===t.length)return n.style.display="none",void(n.innerHTML="");n.style.display="block",n.innerHTML=t.map((function(t,n){var i=e.formatFileSize(t.size);return'\n <div class="file-preview-item">\n <div class="file-info">\n <span class="file-name">'.concat(t.name,'</span>\n <span class="file-size">').concat(i,'</span>\n </div>\n <button class="remove-file" data-index="').concat(n,'">×</button>\n </div>\n ')})).join("")}},{key:"formatFileSize",value:function(t){if(0===t)return"0 Bytes";var n=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,n)).toFixed(2))+" "+["Bytes","KB","MB","GB"][n]}},{key:"sendMessageWithFiles",value:(l=v(s().mark((function t(n){var i,a,r,c,l,u,p,d=this,h=arguments;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=h.length>1&&void 0!==h[1]?h[1]:[],!this.isWaitingForResponse&&!this.isTypewriterActive){t.next=3;break}return t.abrupt("return");case 3:return a=this.widget.querySelector(".chat-input .chat-textarea"),r=this.widget.querySelector(".typing-indicator"),t.prev=5,this.isWaitingForResponse=!0,this.disableSendingFunctionality(),r.classList.add("active"),setTimeout((function(){return d.startJavaScriptTypingAnimation()}),100),this.addMessage(n,"user"),this.storageManager.saveMessage(n,"user"),c=this.formatRequestData(n,i),l=e({},this.config.apiHeaders),this.config.apiHeaders["Content-Type"]="multipart/form-data",t.next=17,this.makeApiCall(c);case 17:if(u=t.sent,this.config.apiHeaders=l,t.prev=19,(p=this.config.transformResponse?this.config.transformResponse(u):"string"==typeof u?u:u&&"object"===o(u)?u.response?u.response:u.message?u.message:u.text?u.text:u.content?u.content:u.answer?u.answer:u[this.config.apiResponseFormat.response]||JSON.stringify(u,null,2):String(u))&&""!==p.trim()){t.next=23;break}throw new Error("Empty response received from server");case 23:t.next=29;break;case 25:t.prev=25,t.t0=t.catch(19),console.error("Error processing API response:",t.t0),p="Sorry, there was an error processing the response. Please try again.";case 29:this.addMessage(p,"bot",!0),this.storageManager.saveMessage(p,"bot"),t.next=37;break;case 33:t.prev=33,t.t1=t.catch(5),console.error("API Error:",t.t1),this.addMessage("Sorry, there was an error processing your request.","bot",!1);case 37:return t.prev=37,this.isWaitingForResponse=!1,this.enableSendingFunctionality(),r.classList.remove("active"),this.stopJavaScriptTypingAnimation(),this.forceEnableInput(),a.value="",this.isMobileBrowser()&&this.config.enableEnhancedMobileInput?a.removeAttribute("readonly"):a.setAttribute("readonly","true"),a.classList.remove("cursor-active"),this.isMobileBrowser()?setTimeout((function(){d.enableMobileInputInteraction(a)}),100):a.focus(),t.finish(37);case 48:case"end":return t.stop()}}),t,this,[[5,33,37,48],[19,25]])}))),function(t){return l.apply(this,arguments)})},{key:"makeApiCall",value:(c=v(s().mark((function t(n){var i,a,r,c,l,u,p,d,h,m,g,f,v;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=e({},this.config.apiHeaders),this.config.apiKey&&(a.Authorization="Bearer ".concat(this.config.apiKey)),r=this.config.useMultipartFormData||(null===(i=this.config.apiHeaders["Content-Type"])||void 0===i?void 0:i.includes("multipart/form-data"))||"POST"===this.config.apiMethod&&this.config.apiEndpoint.includes("upload")||"form-data"===this.config.apiDataFormat,l=e({},a),r?(u=new FormData,Object.keys(n).forEach((function(t){var e=n[t];e instanceof File||e instanceof Blob?u.append(t,e):"object"===o(e)&&null!==e?u.append(t,JSON.stringify(e)):u.append(t,String(e))})),c=u,delete l["Content-Type"]):(c=JSON.stringify(n),l["Content-Type"]="application/json"),p=new AbortController,d=setTimeout((function(){return p.abort()}),this.config.apiTimeout),t.prev=7,t.next=10,fetch(this.config.apiEndpoint,{method:this.config.apiMethod,headers:l,body:c,signal:p.signal});case 10:if((h=t.sent).ok){t.next=13;break}throw new Error("HTTP error! status: ".concat(h.status," - ").concat(h.statusText));case 13:if(!(m=h.headers.get("content-type"))||!m.includes("application/json")){t.next=21;break}return t.next=17,h.json();case 17:return g=t.sent,t.abrupt("return",g);case 21:if(!m||!m.includes("text/")){t.next=28;break}return t.next=24,h.text();case 24:return f=t.sent,t.abrupt("return",{response:f});case 28:return t.next=30,h.blob();case 30:return v=t.sent,t.abrupt("return",{response:URL.createObjectURL(v)});case 32:t.next=49;break;case 34:if(t.prev=34,t.t0=t.catch(7),"AbortError"!==t.t0.name){t.next=40;break}throw new Error("Request timed out. Please try again.");case 40:if(!t.t0.message.includes("Failed to fetch")){t.next=44;break}throw new Error("Network error. Please check your internet connection.");case 44:if(!t.t0.message.includes("SSL_PROTOCOL_ERROR")){t.next=48;break}throw new Error("Secure connection error. Please ensure the server supports HTTPS.");case 48:throw t.t0;case 49:return t.prev=49,clearTimeout(d),t.finish(49);case 52:case"end":return t.stop()}}),t,this,[[7,34,49,52]])}))),function(t){return c.apply(this,arguments)})},{key:"processApiResponse",value:function(t,n){var e;n.classList.remove("active"),this.stopJavaScriptTypingAnimation();try{if(!(e=this.config.transformResponse?this.config.transformResponse(t):"string"==typeof t?t:t&&"object"===o(t)?t.response?t.response:t.message?t.message:t.text?t.text:t.content?t.content:t.answer?t.answer:t[this.config.apiResponseFormat.response]||JSON.stringify(t,null,2):String(t))||""===e.trim())throw new Error("Empty response received from server")}catch(t){console.error("Error processing API response:",t),e="Sorry, there was an error processing the response. Please try again."}this.widget.querySelector(".chat-window").classList.add("active"),this.addMessage(e,"bot",!0),this.storageManager.saveMessage(e,"bot")}},{key:"handleApiError",value:function(t,n){console.error("API Error:",t),n.classList.remove("active"),this.stopJavaScriptTypingAnimation();var e="Sorry, there was an error processing your request.";"AbortError"===t.name?e="Request timed out. Please try again.":t.message.includes("SSL_PROTOCOL_ERROR")?e="There was a secure connection error. Please ensure the server supports HTTPS.":t.message.includes("Failed to fetch")&&(e="Unable to connect to the server. Please check your internet connection and try again."),this.addMessage(e,"bot",!0),this.storageManager.saveMessage(e,"bot"),this.isWaitingForResponse=!1,this.enableSendingFunctionality(),this.forceEnableInput(),this.config.onError&&this.config.onError(t)}},{key:"updateUIForSending",value:function(t,n){var e=this;this.addMessage(n.value.trim(),"user"),this.storageManager.saveMessage(n.value.trim(),"user"),n.value="",t.classList.add("active"),setTimeout((function(){return e.startJavaScriptTypingAnimation()}),100),this.isWaitingForResponse=!0,this.disableSendingFunctionality()}},{key:"resetUIAfterSending",value:function(t){this.isWaitingForResponse=!1,this.isTypewriterActive||this.enableSendingFunctionality(),t.classList.remove("active"),this.stopJavaScriptTypingAnimation()}},{key:"loadChatHistory",value:function(){var t=this;if(this.widget){var n=this.widget.querySelector(".chat-messages"),e=n.querySelectorAll(".message-row"),i=n.querySelector("#greeting-row");e.forEach((function(t){t!==i&&t.remove()})),this.storageManager.getChatHistory().reduce((function(t,n){if("user"===n.sender)t.push(n);else if("bot"===n.sender){var e=t.findLastIndex((function(t){return"user"===t.sender}));-1!==e&&(t=t.filter((function(t,n){return n<=e||"user"===t.sender}))),t.push(n)}return t}),[]).forEach((function(n){t.addMessage(n.message,n.sender,!1)}))}}},{key:"updateConfig",value:function(t){this.initConfig(e(e({},this.config),t)),this.destroy(),this.createWidget(),this.setupEventListeners(),this.loadChatHistory()}},{key:"destroy",value:function(){this._mobileInputCleanup&&(this._mobileInputCleanup(),this._mobileInputCleanup=null),this._mobileFullscreenCleanup&&(this._mobileFullscreenCleanup(),this._mobileFullscreenCleanup=null),this._mobileInputSetup=!1,this.removeActiveForm(),document.body.style.overflow="",document.body.style.position="",document.body.style.width="",document.documentElement.style.overflow="",this.widget&&(this.widget.remove(),this.widget=null)}},{key:"setupEraseButton",value:function(){var t=this.widget.querySelector(".erase-chat");t&&(t.removeEventListener("click",this.eraseChat.bind(this)),t.addEventListener("click",this.eraseChat.bind(this)))}},{key:"eraseChat",value:function(){if(confirm("Are you sure you want to clear the chat history? This action cannot be undone.")){var t=this.widget.querySelector(".erase-chat");t.style.opacity="0.5",t.disabled=!0;try{var n=this.widget.querySelector(".chat-messages"),e=n.querySelectorAll(".message-row");n.querySelector("#greeting-row"),n.querySelector(".hubspot-form-row"),e.forEach((function(t){"greeting-row"===t.id||t.classList.contains("hubspot-form-row")||t.remove()})),this.storageManager.clearHistory(),!0===this.config.enableServerHistoryDelete&&this.config.deleteEndpoint&&this.deleteBackendHistory().then((function(){})).catch((function(t){console.error("Failed to delete backend history:",t)}));var i=n.querySelector("#greeting-row");i?i.querySelector(".ai-avatar")||(i.remove(),this.addGreetingMessage()):this.addGreetingMessage();var o=this.widget.querySelector(".chat-input .chat-textarea");o&&(o.value="")}catch(t){console.error("Error during chat erasure:",t),this.addMessage("Failed to clear chat history. Please try again.","bot",!1)}finally{t.style.opacity="1",t.disabled=!1}}}},{key:"addGreetingMessage",value:function(){var t=this,n=this.widget.querySelector(".chat-messages");if(!n.querySelector("#greeting-row")){var e=document.createElement("div");e.className="message-row",e.id="greeting-row";var i=document.createElement("div");i.className="bot-message-container";var o=document.createElement("div");o.className="message bot-message";var a=this.generateGreetingAvatar();o.innerHTML=a;var r=document.createElement("div");r.className="message-content",r.textContent=this.config.greeting,o.appendChild(r),i.appendChild(o),e.appendChild(i),n.insertBefore(e,n.firstChild),this.synchronizeGreetingWidth(e),setTimeout((function(){t.synchronizeGreetingWidth(e)}),100),setTimeout((function(){t.synchronizeGreetingWidth(e)}),300)}}},{key:"synchronizeGreetingWidth",value:function(t){var n=this;requestAnimationFrame((function(){var e=t.querySelector(".bot-message"),i=t.querySelector(".bot-message-container");if(e&&i){e.offsetHeight,i.offsetHeight;var o=n.widget.querySelector(".chat-messages").querySelectorAll(".bot-message:not(#greeting-row .bot-message)");if(o.length>0){var a=o[0],r=a.closest(".bot-message-container"),s=window.getComputedStyle(a),c=r?window.getComputedStyle(r):null;e.style.setProperty("max-width",s.maxWidth,"important"),e.style.setProperty("width",s.width,"important"),e.style.setProperty("min-width",s.minWidth,"important"),c?(i.style.setProperty("max-width",c.maxWidth,"important"),i.style.setProperty("width",c.width,"important"),i.style.setProperty("min-width",c.minWidth,"important")):(i.style.setProperty("max-width","80%","important"),i.style.setProperty("width","80%","important"))}else i.style.setProperty("max-width","80%","important"),i.style.setProperty("width","80%","important"),e.style.setProperty("max-width","100%","important"),e.style.setProperty("width","100%","important");e.offsetHeight,i.offsetHeight,setTimeout((function(){e.style.setProperty("max-width","100%","important"),e.style.setProperty("width","100%","important"),i.style.setProperty("max-width","80%","important"),i.style.setProperty("width","80%","important")}),50)}}))}},{key:"ensureGreetingMessageWithAvatar",value:function(){var t=this.widget.querySelector(".chat-messages").querySelector("#greeting-row");t?t.querySelector(".ai-avatar")?this.synchronizeGreetingWidth(t):(t.remove(),this.addGreetingMessage()):this.addGreetingMessage()}},{key:"ensureSendButtonIconSize",value:function(){var t=this.widget.querySelector(".send-button"),n=this.widget.querySelector(".send-button img");if(t&&n){var e=this.config.sendButtonIconSize;t.style.width="".concat(e+16,"px"),t.style.height="".concat(e+16,"px"),t.style.minWidth="".concat(e+16,"px"),t.style.minHeight="".concat(e+16,"px"),n.style.width="".concat(e,"px"),n.style.height="".concat(e,"px"),n.style.minWidth="".concat(e,"px"),n.style.minHeight="".concat(e,"px"),n.style.maxWidth="".concat(e,"px"),n.style.maxHeight="".concat(e,"px"),n.style.objectFit="contain",n.style.display="block",n.style.flexShrink="0"}}},{key:"applyToggleButtonAnimation",value:function(){var t=this.widget.querySelector(".chat-toggle");t&&this.config.toggleButtonAnimation>0&&(t.classList.remove("animation-1","animation-2","animation-3","animation-4","animation-5"),t.classList.add("animation-".concat(this.config.toggleButtonAnimation)))}},{key:"forceStyleReapplication",value:function(){var t=this;this.widget.querySelectorAll(".ai-avatar-icon:not(.emoji-avatar):not(.image-avatar)").forEach((function(n){n.style.backgroundColor||n.style.setProperty("background-color",t.config.primaryColor||"#0084ff","important")})),this.widget.querySelectorAll("#greeting-row .ai-avatar-icon:not(.emoji-avatar):not(.image-avatar)").forEach((function(n){n.style.setProperty("background-color",t.config.primaryColor||"#0084ff","important")})),this.widget.querySelectorAll(".typing-indicator span").forEach((function(t,n){t.style.setProperty("background","#666","important"),t.style.setProperty("background-color","#666","important"),t.style.setProperty("display","inline-block","important"),t.style.setProperty("visibility","visible","important"),t.style.setProperty("width","10px","important"),t.style.setProperty("height","10px","important"),t.style.setProperty("border-radius","50%","important"),t.style.setProperty("margin","0 3px","important"),t.style.setProperty("box-shadow","none","important"),t.style.animation="none",t.style.webkitAnimation="none"})),setTimeout((function(){t.startJavaScriptTypingAnimation()}),100);var n=this.widget.querySelector(".typing-indicator");if(n&&(n.style.setProperty("padding","16px 20px","important"),n.style.setProperty("height","50px","important"),n.style.setProperty("min-width","85px","important"),n.style.setProperty("max-width","100px","important"),n.style.setProperty("border-radius","24px","important"),n.style.setProperty("background","#f0f2f5","important"),n.style.setProperty("box-shadow","none","important")),this.widget.querySelectorAll(".bot-message, .ai-message").forEach((function(t){t.style.setProperty("box-shadow","none","important")})),window.innerWidth<=480){var e=this.widget.querySelector(".chat-window");e&&e.classList.contains("active")&&(e.style.setProperty("position","fixed","important"),e.style.setProperty("top","0","important"),e.style.setProperty("left","0","important"),e.style.setProperty("right","0","important"),e.style.setProperty("bottom","0","important"),e.style.setProperty("width","100vw","important"),e.style.setProperty("height","var(--chat-mobile-vh, 100dvh)","important"),e.style.setProperty("min-width","100vw","important"),e.style.setProperty("max-width","100vw","important"),e.style.setProperty("min-height","var(--chat-mobile-vh, 100dvh)","important"),e.style.setProperty("max-height","var(--chat-mobile-vh, 100dvh)","important"),e.style.setProperty("margin","0","important"),e.style.setProperty("padding","0","important"),e.style.setProperty("border","none","important"),e.style.setProperty("border-radius","0","important"),e.style.setProperty("box-sizing","border-box","important"),e.style.setProperty("z-index","2147483647","important"),e.style.setProperty("background","white","important"),e.style.setProperty("overflow","hidden","important"),e.style.setProperty("transform","translateY(0)","important"))}}},{key:"disableToggleButtonAnimation",value:function(){var t=this.widget.querySelector(".chat-toggle");t&&t.classList.remove("animation-1","animation-2","animation-3","animation-4","animation-5")}},{key:"enableToggleButtonAnimation",value:function(){var t=this.widget.querySelector(".chat-toggle");t&&this.config.toggleButtonAnimation>0&&t.classList.add("animation-".concat(this.config.toggleButtonAnimation))}},{key:"setupTextBoxEventListeners",value:function(){var t=this,n=this.widget.querySelector(".chat-text-box-close"),e=this.widget.querySelector(".chat-text-box");e&&(this.config.showTextBox&&(e.setAttribute("data-persistent","true"),e.style.pointerEvents="auto",e.style.visibility="visible",e.style.opacity="1",new MutationObserver((function(n){n.forEach((function(n){"childList"===n.type&&n.removedNodes.forEach((function(n){n===e&&t.config.showTextBox&&!t._textBoxManuallyClosed&&(console.warn("🛡️ Text box removal prevented - showTextBox is true"),t.widget.querySelector(".chat-text-box")||t.widget.insertBefore(e,t.widget.firstChild))}))}))})).observe(this.widget,{childList:!0,subtree:!0})),n&&this.config.showTextBoxCloseButton&&n.addEventListener("click",(function(n){n.preventDefault(),n.stopPropagation(),t.config.showTextBoxCloseButton&&(t._textBoxManuallyClosed=!0,e.style.display="none")})))}},{key:"setupClickOutsideToClose",value:function(){var t=this;document.addEventListener("click",(function(n){var e=t.widget.querySelector(".chat-window");t.widget.querySelector(".chat-toggle"),e&&e.classList.contains("active")&&(t.widget.contains(n.target)||t.closeChat())}))}},{key:"setupResponsiveHandling",value:function(){var t,n=this,e=function(){var t=n.widget.querySelector(".chat-window"),e=n.widget.querySelector(".chat-toggle");if(t&&e){var i=function(){var t=window.innerHeight,n=window.innerWidth,e=Math.min(Math.max(.3*n,320),600),i=Math.min(Math.max(.7*t,400),800);n<=480?(e=n,i=t,i=t-parseInt(getComputedStyle(document.documentElement).getPropertyValue("--sab")||"0")):n<=768?(e=Math.min(.8*n,400),i=Math.min(.8*t,600)):n<=1024?(e=Math.min(.35*n,420),i=Math.min(.7*t,580)):n<=1366?(e=Math.min(.3*n,450),i=Math.min(.75*t,600)):n<=1920?(e=Math.min(.25*n,500),i=Math.min(.8*t,700)):(e=Math.min(.2*n,600),i=Math.min(.8*t,800)),e=Math.max(e,320),i=Math.max(i,400);var o=t-(n<=480?0:120);return{width:e,height:i=Math.min(i,o)}}(),o=i.width,r=i.height,s=(window.innerHeight,window.innerWidth);if(t.style.width="".concat(o,"px"),t.style.height="".concat(r,"px"),s<=480)t.style.bottom="0",t.style.right="0",t.style.left="0",t.style.top="0",t.style.width="100%",t.style.height="100%",t.style.borderRadius="0",t.style.maxHeight="100%",t.style.transform="none";else{var c=C[n.config.position];Object.entries(c.window).forEach((function(n){var e=a(n,2),i=e[0],o=e[1];t.style[i]=o}))}var l=Math.min(Math.max(.04*o,14),16);t.style.fontSize="".concat(l,"px");var u=t.querySelector(".chat-messages"),p=t.querySelector(".chat-input-container");if(u){var d=Math.min(Math.max(.03*o,8),16);u.style.padding="".concat(d,"px");var h=t.querySelector(".chat-header").offsetHeight,m=p?p.offsetHeight:0;u.style.height="calc(100% - ".concat(h+m,"px)")}if(p){var g=Math.min(Math.max(.03*o,8),16);p.style.padding="".concat(g,"px")}}};(t=document.createElement("style")).innerHTML="\n :root {\n --sab: env(safe-area-inset-bottom);\n --sat: env(safe-area-inset-top);\n --sal: env(safe-area-inset-left);\n --sar: env(safe-area-inset-right);\n }\n ",document.head.appendChild(t),e(),window.addEventListener("resize",S(e,250)),window.addEventListener("orientationchange",(function(){setTimeout(e,100)}));var i=new ResizeObserver(S((function(){var t=n.widget.querySelector(".chat-messages");t&&(t.scrollTop=t.scrollHeight)}),100)),o=this.widget.querySelector(".chat-window");o&&i.observe(o)}},{key:"scrollChatToBottom",value:function(){var t=this.widget.querySelector(".chat-messages");if(t){var n,e,i,o,a=t.scrollTop;t.scrollHeight-t.clientHeight-a<100&&(requestAnimationFrame((function(){t.scrollTo({top:t.scrollHeight,behavior:"smooth"})})),null===(n=event)||void 0===n||null===(e=n.preventDefault)||void 0===e||e.call(n),null===(i=event)||void 0===i||null===(o=i.stopPropagation)||void 0===o||o.call(i))}}},{key:"scrollToShowNewMessage",value:function(t){var n=this.widget.querySelector(".chat-messages");n&&t&&requestAnimationFrame((function(){var e=t.offsetTop,i=Math.max(0,e-20);n.scrollTo({top:i,behavior:"smooth"})}))}},{key:"scrollToBottom",value:function(){var t=this.widget.querySelector(".chat-messages");t&&requestAnimationFrame((function(){t.scrollTo({top:t.scrollHeight,behavior:"smooth"})}))}},{key:"scrollToLastUserMessage",value:function(){var t=this.widget.querySelector(".chat-messages");if(t){var n=t.querySelectorAll(".message-row"),e=Array.from(n).filter((function(t){return t.querySelector(".user-message")}));if(0!==e.length){var i=e[e.length-1];requestAnimationFrame((function(){var n=i.offsetTop,e=Math.max(0,n-20);t.scrollTo({top:e,behavior:"smooth"})}))}}}},{key:"scrollToLatestMessage",value:function(){var t=this.widget.querySelector(".chat-messages");t&&(this.isTypewriterActive||requestAnimationFrame((function(){var n=t.querySelectorAll(".message-row:not(#greeting-row)");if(0!==n.length){var e=n[n.length-1];if(e){var i=t.clientHeight,o=t.scrollTop,a=e.offsetTop,r=e.offsetTop+e.offsetHeight;if(a<o||r>o+i){var s=Math.max(0,a-50);t.scrollTo({top:s,behavior:"smooth"})}}}})))}},{key:"setupScrollContainment",value:function(){var t=this.widget.querySelector(".chat-messages");if(t){t.addEventListener("wheel",(function(n){if(t.scrollHeight>t.clientHeight){n.stopPropagation();var e=n.deltaY<0,i=n.deltaY>0,o=0===t.scrollTop,a=t.scrollTop+t.clientHeight>=t.scrollHeight;(e&&o||i&&a)&&n.preventDefault()}}),{passive:!1});var n=0;t.addEventListener("touchstart",(function(t){n=t.touches[0].clientY}),{passive:!0}),t.addEventListener("touchmove",(function(e){var i=e.touches[0].clientY>n,o=t.scrollTop<=0,a=t.scrollTop+t.clientHeight>=t.scrollHeight;(i&&o||!i&&a)&&e.preventDefault()}),{passive:!1})}}},{key:"deleteBackendHistory",value:function(){var t=this.userManager.currentUser,n=this.userManager.domain;return fetch(this.config.deleteEndpoint,{method:"DELETE",headers:e(e({},this.config.apiHeaders),{},{"Content-Type":"application/json"}),body:JSON.stringify({userId:t,domain:n})}).then((function(t){if(!t.ok)throw new Error("HTTP error! status: ".concat(t.status));return t.json()}))}},{key:"setupMessageActions",value:function(t,n){var e=this;if(this.config.showMessageActions){var i=t.querySelector(".copy-btn"),o=t.querySelector(".like-btn"),a=t.querySelector(".dislike-btn"),r=t.querySelector(".regenerate-btn"),c=t.querySelector(".bot-message");i.addEventListener("click",(function(){navigator.clipboard.writeText(c.textContent).then((function(){i.classList.add("copied","active"),i.innerHTML="\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E\" alt=\"✓\">\n ",setTimeout((function(){i.classList.remove("copied","active"),i.innerHTML="\n <img src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23666'%3E%3Cpath d='M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z'/%3E%3C/svg%3E\" alt=\"Copy\">\n "}),2e3)}))})),o.addEventListener("click",(function(){var t=o.classList.contains("active");o.classList.remove("active"),a.classList.remove("active"),t?e.sendFeedback("remove",n):(o.classList.add("active"),e.sendFeedback("like",n))})),a.addEventListener("click",(function(){var t=a.classList.contains("active");o.classList.remove("active"),a.classList.remove("active"),t?e.sendFeedback("remove",n):(a.classList.add("active"),e.sendFeedback("dislike",n))})),r.addEventListener("click",v(s().mark((function n(){var i,o,a,r,c,l,u;return s().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(e.isWaitingForResponse){n.next=21;break}i=Array.from(e.widget.querySelectorAll(".message-row")),o=i.findIndex((function(n){return n.contains(t)})),a="",r=-1,c=o-1;case 6:if(!(c>=0)){n.next=15;break}if(!(l=i[c].querySelector(".user-message"))){n.next=12;break}return a=l.textContent,r=c,n.abrupt("break",15);case 12:c--,n.next=6;break;case 15:if(!a||-1===r){n.next=21;break}for(u=i.length-1;u>r;u--)i[u].remove();return n.next=19,e.updateStorageAfterRegeneration(r,a);case 19:return n.next=21,e.sendMessage(a,!0);case 21:case"end":return n.stop()}}),n)}))))}else{var l=t.querySelector(".message-actions");l&&(l.style.display="none")}}},{key:"updateLastBotMessage",value:function(){var t=this.widget.querySelectorAll(".bot-message-container");t.forEach((function(n,e){n.classList.remove("last"),e===t.length-1&&n.classList.add("last")}))}},{key:"hideGreetingActions",value:function(){var t=this.widget.querySelector("#greeting-row .greeting-actions");t&&(t.style.transition="opacity 0.3s ease, transform 0.3s ease",t.style.opacity="0",t.style.transform="translateY(-5px)",setTimeout((function(){t.style.display="none"}),300))}},{key:"updateStorageAfterRegeneration",value:(r=v(s().mark((function t(n,e){var i,o,a,r,c;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=this.userManager.getHistoryKey(),o=this.storageManager.getChatHistory(),a=-1,r=-1,c=0;case 5:if(!(c<o.length)){t.next=14;break}if("user"!==o[c].sender){t.next=11;break}if(++r!==n){t.next=11;break}return a=c,t.abrupt("break",14);case 11:c++,t.next=5;break;case 14:-1!==a&&((o=o.slice(0,a+1))[a].regenerated=!0,localStorage.setItem(i,JSON.stringify(o)));case 15:case"end":return t.stop()}}),t,this)}))),function(t,n){return r.apply(this,arguments)})},{key:"sendFeedback",value:(n=v(s().mark((function t(n,i){var o;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,o={type:n,response:i,feedback:null,timestamp:(new Date).toISOString(),userId:this.userManager.currentUser,domain:this.userManager.domain},t.next=4,fetch(this.config.feedbackEndpoint,{method:"POST",headers:e({"Content-Type":"application/json"},this.config.apiHeaders),body:JSON.stringify(o)});case 4:if(t.sent.ok){t.next=7;break}throw new Error("Failed to send feedback");case 7:this.saveFeedbackState(i,n),t.next=13;break;case 10:t.prev=10,t.t0=t.catch(0),console.error("Error sending feedback:",t.t0);case 13:case"end":return t.stop()}}),t,this,[[0,10]])}))),function(t,e){return n.apply(this,arguments)})},{key:"saveFeedbackState",value:function(t,n){var e="feedback_".concat(this.userManager.currentUser),i=JSON.parse(localStorage.getItem(e)||"{}");"remove"===n?delete i[t]:i[t]=n,localStorage.setItem(e,JSON.stringify(i))}},{key:"restoreFeedbackState",value:function(t,n){var e="feedback_".concat(this.userManager.currentUser),i=JSON.parse(localStorage.getItem(e)||"{}")[n];if(i){var o=t.querySelector(".like-btn"),a=t.querySelector(".dislike-btn");"like"===i?(o.classList.add("active"),a.classList.remove("active")):"dislike"===i&&(a.classList.add("active"),o.classList.remove("active"))}}},{key:"checkForTriggerWords",value:function(t){var n;if(null===(n=this.config.hubspot)||void 0===n||!n.enabled)return!1;if(this.userManager.hasSubmittedForm())return!1;if(this.isFormActive())return!1;var e=t.toLowerCase().split(/\s+/);return this.config.hubspot.triggerKeywords.some((function(t){return e.includes(t.toLowerCase())}))}},{key:"isFormActive",value:function(){return!!this.activeForm||!!this.widget.querySelector(".hubspot-form-modal-overlay")}},{key:"showHubSpotForm",value:function(){var t;if(null!==(t=this.config.hubspot)&&void 0!==t&&t.enabled&&!this.userManager.hasSubmittedForm()&&!this.isFormActive()){this.disableChatFunctionality(),this.widget.querySelectorAll(".hubspot-form-modal-overlay").forEach((function(t){return t.remove()}));var n=this.widget.querySelector(".chat-window");n.classList.add("form-active");var e=document.createElement("div");e.className="hubspot-form-modal-overlay",e.innerHTML='\n <div class="hubspot-form-modal-backdrop"></div>\n <div class="hubspot-form-modal-container">\n <div class="hubspot-form-modal-content">\n <div class="form-header">\n <h3>'.concat(this.config.formTitle,"</h3>\n <p>").concat(this.config.formSubtitle,'</p>\n </div>\n <form id="hubspotForm" class="hubspot-form">\n <div class="form-group">\n <label for="fullname">Full Name *</label>\n <input type="text" id="fullname" name="fullname" required \n placeholder="Enter your full name">\n <div id="fullname-error" class="error-message"></div>\n </div>\n <div class="form-group">\n <label for="email">Email Address *</label>\n <input type="email" id="email" name="email" required \n placeholder="Enter your email">\n <div id="email-error" class="error-message"></div>\n </div>\n <div class="form-group">\n <label for="phone">Phone Number *</label>\n <input type="tel" id="phone" name="phone" required \n placeholder="Enter your phone number">\n <div id="phone-error" class="error-message"></div>\n </div>\n <button type="submit" id="submitButton">Submit</button>\n </form>\n </div>\n </div>\n '),n.appendChild(e),this.activeForm=e;var i=document.createElement("style");i.textContent="\n /* Modal Overlay Styles - Within Chat Window */\n .hubspot-form-modal-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 50000;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: modalFadeIn 0.3s ease-out;\n pointer-events: auto;\n overflow: hidden;\n overscroll-behavior: contain;\n }\n\n /* While form is open, hide chat input/chips/branding behind it */\n .chat-window.form-active .chat-input-container,\n .chat-window.form-active .suggestion-chips,\n .chat-window.form-active .chat-branding {\n display: none !important;\n }\n\n .hubspot-form-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n filter: none !important;\n }\n\n .hubspot-form-modal-container {\n position: relative;\n z-index: 1001;\n width: 90%;\n max-width: 320px;\n max-height: 70%;\n overflow-y: auto;\n animation: modalSlideIn 0.3s ease-out;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n scrollbar-color: #c1c1c1 #f1f1f1;\n }\n\n .hubspot-form-modal-container::-webkit-scrollbar {\n width: 6px;\n }\n\n .hubspot-form-modal-container::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n }\n\n .hubspot-form-modal-container::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n }\n\n .hubspot-form-modal-container::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n }\n\n .hubspot-form-modal-content {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n padding: 20px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n position: relative;\n overflow: hidden;\n }\n\n /* Mobile-specific modal adjustments */\n @media (max-width: 768px) {\n .hubspot-form-modal-container {\n width: 95%;\n max-width: 300px;\n margin: 8px;\n max-height: 80%;\n }\n \n .hubspot-form-modal-content {\n padding: 16px;\n border-radius: 10px;\n }\n \n .form-header h3 {\n font-size: 16px;\n }\n \n .form-header p {\n font-size: 12px;\n }\n \n .hubspot-form .form-group {\n margin-bottom: 14px;\n }\n \n .hubspot-form input {\n padding: 8px 10px;\n font-size: 13px;\n -webkit-appearance: none;\n border-radius: 6px;\n }\n \n .hubspot-form button {\n padding: 10px 16px;\n font-size: 13px;\n -webkit-appearance: none;\n border-radius: 6px;\n }\n }\n\n /* Prevent iOS zoom on input focus */\n @media screen and (-webkit-min-device-pixel-ratio: 0) {\n .hubspot-form input {\n font-size: 16px;\n }\n }\n\n /* Modal animations */\n @keyframes modalFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes modalSlideIn {\n from {\n opacity: 0;\n transform: translateY(-20px) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n /* Form header styles */\n .form-header {\n margin-bottom: 16px;\n text-align: center;\n }\n \n .form-header h3 {\n margin: 0 0 6px 0;\n color: #333;\n font-size: 18px;\n font-weight: 600;\n }\n \n .form-header p {\n margin: 0;\n color: #666;\n font-size: 13px;\n line-height: 1.3;\n }\n \n /* Form styles */\n .hubspot-form .form-group {\n margin-bottom: 16px;\n }\n \n .hubspot-form label {\n display: block;\n margin-bottom: 6px;\n font-weight: 500;\n color: #333;\n font-size: 13px;\n }\n \n .hubspot-form input {\n width: 100%;\n padding: 10px 12px;\n border: 2px solid #e1e5e9;\n border-radius: 6px;\n font-size: 14px;\n transition: all 0.3s ease;\n background: #ffffff;\n box-sizing: border-box;\n }\n \n .hubspot-form input:focus {\n outline: none !important;\n border-color: #cbd5e1 !important; /* ash */\n box-shadow: 0 0 0 3px rgba(203, 213, 225, 0.45) !important;\n background: #ffffff !important;\n }\n \n .hubspot-form input::placeholder {\n color: #999;\n }\n \n .hubspot-form .error-message {\n color: #dc3545;\n font-size: 12px;\n margin-top: 4px;\n min-height: 20px;\n }\n \n .hubspot-form button {\n background: var(--chat-primary-color, #0084ff);\n color: white;\n border: none;\n padding: 12px 20px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n width: 100%;\n transition: all 0.3s ease;\n margin-top: 6px;\n }\n \n .hubspot-form button:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 132, 255, 0.3);\n }\n\n .hubspot-form button:active {\n transform: translateY(0);\n }\n \n .hubspot-form button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n box-shadow: none;\n }\n\n /* Chat messages disabled when modal is active - no blur */\n .chat-messages.modal-active {\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n opacity: 0.7;\n }\n\n .chat-messages.modal-active * {\n pointer-events: none !important;\n }\n\n /* Ensure header is always interactive */\n .chat-header {\n filter: none !important;\n pointer-events: auto !important;\n }\n\n .chat-header * {\n filter: none !important;\n pointer-events: auto !important;\n }\n\n\n\n /* Success message styles */\n .hubspot-form-success {\n text-align: center;\n padding: 20px;\n background: #d4edda;\n border-radius: 8px;\n color: #155724;\n margin: 10px 0;\n border: 1px solid #c3e6cb;\n }\n\n .success-countdown {\n margin-top: 15px;\n font-size: 12px;\n color: #6c757d;\n opacity: 0.8;\n }\n\n .countdown-number {\n font-weight: bold;\n color: #155724;\n }\n ",document.head.appendChild(i);var o=this.widget.querySelector(".chat-messages");o&&o.classList.add("modal-active"),requestAnimationFrame((function(){e.style.opacity="1"})),this.preventScroll=function(t){var n=t.currentTarget.querySelector(".hubspot-form-modal-container");if(n){n.scrollTop,n.scrollHeight;return n.clientHeight,!!t.target.closest(".hubspot-form-modal-container")||(t.preventDefault(),t.stopPropagation(),!1)}return!0};try{e.addEventListener("wheel",this.preventScroll,{passive:!1}),e.addEventListener("touchmove",this.preventScroll,{passive:!1})}catch(t){console.warn("⚠️ Could not add scroll prevention listeners:",t)}var a=e.querySelector("#hubspotForm");a&&this.setupHubSpotFormHandlers(a),this.activeModal=e}}},{key:"setupHubSpotFormHandlers",value:function(t){var n=this,e=function(t){return/^[A-Za-z]+\s+[A-Za-z]+(\s+[A-Za-z]+)?$/.test(t.trim())},i=function(t){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(t.trim())},o=function(t){var n=t.replace(/\D/g,"");return n.length>=7&&n.length<=20};t.querySelector("#fullname").addEventListener("input",(function(){t.querySelector("#fullname-error").textContent=e(this.value)?"":"Please enter your full name"})),t.querySelector("#email").addEventListener("input",(function(){t.querySelector("#email-error").textContent=i(this.value)?"":"Please enter a valid email"})),t.querySelector("#phone").addEventListener("input",(function(){t.querySelector("#phone-error").textContent=o(this.value)?"":"Please enter a valid phone number"})),t.addEventListener("submit",function(){var a=v(s().mark((function a(r){var c,l,u,p,d,h,m,g,f;return s().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(r.preventDefault(),(c=t.querySelector("#submitButton")).disabled=!0,c.textContent="Submitting...",l=t.querySelector("#fullname").value,u=t.querySelector("#email").value,p=t.querySelector("#phone").value,e(l)&&i(u)&&o(p)){a.next=11;break}return c.disabled=!1,c.textContent="Submit",a.abrupt("return");case 11:return a.prev=11,a.next=14,n.submitToHubSpot({firstName:l.split(" ")[0],lastName:l.split(" ").slice(1).join(" "),email:u,phone:p.replace(/\D/g,"")});case 14:if(!a.sent.ok){a.next=23;break}n.config.useEmailAsUserId&&n.userManager.updateUserIdWithEmail(u),n.userManager.recordFormSubmission({firstName:l.split(" ")[0],lastName:l.split(" ").slice(1).join(" "),email:u,phone:p.replace(/\D/g,"")}),n.userManager.markFormAsShown(),(d=n.widget.querySelector(".hubspot-form-modal-content"))&&(d.innerHTML='\n <div class="hubspot-form-success" style="opacity: 0; transform: translateY(10px)">\n <h3>Thank you for your submission!</h3>\n <p>We\'ll get back to you shortly.</p>\n <div class="success-countdown">Closing in <span class="countdown-number">2</span> seconds...</div>\n </div>\n ',requestAnimationFrame((function(){var t=d.querySelector(".hubspot-form-success");t.style.transition="opacity 0.3s ease, transform 0.3s ease",t.style.opacity="1",t.style.transform="translateY(0)"})),h=2,m=d.querySelector(".countdown-number"),g=setInterval((function(){h--,m&&(m.textContent=h),h<=0&&clearInterval(g)}),1e3),setTimeout((function(){clearInterval(g),n.removeActiveForm()}),1500),setTimeout((function(){clearInterval(g),n.activeForm&&(console.log("🔄 Force closing form after timeout"),n.activeForm.remove(),n.activeForm=null,n.activeModal=null,n.enableChatFunctionality())}),2e3)),a.next=24;break;case 23:throw new Error("Submission failed");case 24:a.next=35;break;case 26:a.prev=26,a.t0=a.catch(11),console.error("HubSpot submission error:",a.t0),c.textContent="Error - Try Again",c.disabled=!1,(f=document.createElement("div")).className="error-message",f.textContent="Failed to submit form. Please try again.",t.appendChild(f);case 35:case"end":return a.stop()}}),a,null,[[11,26]])})));return function(t){return a.apply(this,arguments)}}())}},{key:"submitToHubSpot",value:(t=v(s().mark((function t(n){var e,i,o,a,r;return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=this.config.hubspot,i=e.portalId,o=e.formGuid,a="https://api.hsforms.com/submissions/v3/integration/submit/".concat(i,"/").concat(o),r={submittedAt:Date.now(),fields:[{name:"firstname",value:n.firstName},{name:"lastname",value:n.lastName},{name:"email",value:n.email},{name:"phone",value:n.phone}],context:{pageUri:window.location.href,pageName:document.title}},t.abrupt("return",fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}));case 4:case"end":return t.stop()}}),t,this)}))),function(n){return t.apply(this,arguments)})},{key:"disableChatFunctionality",value:function(){var t=this.widget.querySelector(".chat-input .chat-textarea"),n=this.widget.querySelector(".send-button"),e=this.widget.querySelectorAll(".chip");t.disabled=!0,n.style.opacity=this.isMobileBrowser()?"1":"0.6",n.style.pointerEvents="auto",e.forEach((function(t){t.style.opacity="0.5",t.style.pointerEvents="none"})),t.closest(".chat-input-container").classList.add("disabled")}},{key:"enableChatFunctionality",value:function(){var t=this.widget.querySelector(".chat-input .chat-textarea"),n=this.widget.querySelector(".send-button"),e=this.widget.querySelectorAll(".chip");setTimeout((function(){t.disabled=!1,t.style.opacity="1",t.style.pointerEvents="auto"}),0),setTimeout((function(){n.style.opacity="1",n.style.pointerEvents="auto"}),100),e.forEach((function(t,n){setTimeout((function(){t.style.opacity="1",t.style.pointerEvents="auto"}),200+100*n)})),t.closest(".chat-input-container").classList.remove("disabled")}},{key:"removeActiveForm",value:function(){var t=this;if(this.activeForm)try{console.log("🔄 Removing active form...");var n=this.widget.querySelector(".chat-messages");if(n&&n.classList.remove("modal-active"),this.activeModal&&this.preventScroll)try{this.activeModal.removeEventListener("wheel",this.preventScroll),this.activeModal.removeEventListener("touchmove",this.preventScroll)}catch(t){console.warn("⚠️ Could not remove scroll prevention listeners:",t)}this.activeForm.style.transition="opacity 0.3s ease",this.activeForm.style.opacity="0",setTimeout((function(){try{t.activeForm&&t.activeForm.parentNode&&(t.activeForm.remove(),console.log("✅ Form removed successfully")),t.activeForm=null,t.activeModal=null;var n=t.widget.querySelector(".chat-window");n&&n.classList.remove("form-active"),t.enableChatFunctionality()}catch(n){console.error("❌ Error during form cleanup:",n),t.activeForm=null,t.activeModal=null;var e=t.widget.querySelector(".chat-window");e&&e.classList.remove("form-active"),t.enableChatFunctionality()}}),300)}catch(t){console.error("❌ Error in removeActiveForm:",t),this.activeForm=null,this.activeModal=null;var e=this.widget.querySelector(".chat-window");e&&e.classList.remove("form-active"),this.enableChatFunctionality()}else console.log("⚠️ No active form to remove")}}]);var t,n,r,c,l,u,p}(),k=function(){return x((function t(n){b(this,t),this.config=n,this.domain=this.getCurrentDomain(),this.path=this.getCurrentPath(),this.currentUser=this.generateUserId(),this.initializeUser(),this.formSubmissionsKey="chatFormSubmissions_".concat(this.domain),this.initializeFormSubmissions()}),[{key:"getCurrentDomain",value:function(){return window.location.hostname}},{key:"getCurrentPath",value:function(){return window.location.pathname}},{key:"generateUserId",value:function(){var t=this.config.separateSubpageHistory?"currentChatUser_".concat(this.domain).concat(this.path):"currentChatUser_".concat(this.domain),n=localStorage.getItem(t);if(!n){var e="user_".concat(this.domain).concat(Date.now(),"_").concat(Math.random().toString(36).substr(2,5));return localStorage.setItem(t,e),e}return n}},{key:"getHistoryKey",value:function(){return this.config.separateSubpageHistory?"chatHistory_".concat(this.domain).concat(this.path):"chatHistory_".concat(this.domain)}},{key:"initializeUser",value:function(){var t=this.getHistoryKey();localStorage.getItem(t)||localStorage.setItem(t,JSON.stringify([]))}},{key:"initializeFormSubmissions",value:function(){localStorage.getItem(this.formSubmissionsKey)||localStorage.setItem(this.formSubmissionsKey,JSON.stringify([]))}},{key:"hasSubmittedForm",value:function(){return JSON.parse(localStorage.getItem(this.formSubmissionsKey)||"[]").includes(this.currentUser)}},{key:"hasFormBeenShown",value:function(){var t="chatFormShown_".concat(this.currentUser);return"true"===localStorage.getItem(t)}},{key:"markFormAsShown",value:function(){var t="chatFormShown_".concat(this.currentUser);localStorage.setItem(t,"true")}},{key:"resetFormShownStatus",value:function(){var t="chatFormShown_".concat(this.currentUser);localStorage.removeItem(t)}},{key:"recordFormSubmission",value:function(t){var n=JSON.parse(localStorage.getItem(this.formSubmissionsKey)||"[]");if(!n.includes(this.currentUser)){n.push(this.currentUser),localStorage.setItem(this.formSubmissionsKey,JSON.stringify(n));var i="chatFormData_".concat(this.currentUser);localStorage.setItem(i,JSON.stringify(e(e({},t),{},{submittedAt:(new Date).toISOString()})))}}},{key:"loadUserData",value:function(){var t=this.getHistoryKey();return{userId:this.currentUser,domain:this.domain,path:this.path,chatHistory:JSON.parse(localStorage.getItem(t))||[]}}},{key:"updateUserIdWithEmail",value:function(t){var n=this.config.separateSubpageHistory?"currentChatUser_".concat(this.domain).concat(this.path):"currentChatUser_".concat(this.domain);localStorage.setItem(n,t),this.currentUser=t}}])}(),E=function(){return x((function t(n,e){b(this,t),this.userManager=n,this.config=e,this.maxHistoryLength=100,this.widget=null,this.domain=n.domain,this.path=n.path}),[{key:"setWidget",value:function(t){this.widget=t}},{key:"getChatHistory",value:function(){var t=this,n=this.userManager.getHistoryKey(),e=localStorage.getItem(n),i=e?JSON.parse(e):[];return this.config.separateSubpageHistory?i.filter((function(n){return!(n.domain&&n.domain!==t.domain||n.path&&n.path!==t.path)})):i.filter((function(n){return!n.domain||n.domain===t.domain}))}},{key:"saveMessage",value:function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this.userManager.getHistoryKey(),o=this.getChatHistory();if(e&&"bot"===n){var a=o.findLastIndex((function(t){return"user"===t.sender}));-1!==a&&(o=o.slice(0,a+1))}var r={message:t,sender:n,timestamp:(new Date).toISOString(),domain:this.domain,isRegenerated:e};this.config.separateSubpageHistory&&(r.path=this.path),o.push(r),o.length>this.maxHistoryLength&&(o=o.slice(-this.maxHistoryLength)),localStorage.setItem(i,JSON.stringify(o))}},{key:"loadChatHistory",value:function(){var t=this;if(this.widget){var n=this.widget.widget.querySelector(".chat-messages"),e=n.querySelectorAll(".message-row"),i=n.querySelector("#greeting-row");e.forEach((function(t){t!==i&&t.remove()})),this.getChatHistory().forEach((function(n){t.widget.addMessage(n.message,n.sender,!1)}))}}},{key:"clearHistory",value:function(){var t=this.userManager.getHistoryKey();try{localStorage.removeItem(t),localStorage.setItem(t,JSON.stringify([]))}catch(t){console.error("Error clearing local storage:",t)}}}])}();function S(t,n){var e;return function(){for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];clearTimeout(e),e=setTimeout((function(){clearTimeout(e),t.apply(void 0,o)}),n)}}t.exports?t.exports=D:window.EasyChatWidget=D;var C={"bottom-right":{toggle:{bottom:"20px",right:"20px",left:"auto",transform:"none"},window:{bottom:"100px",right:"20px",left:"auto",transform:"none"}},"bottom-left":{toggle:{bottom:"20px",left:"20px",right:"auto",transform:"none"},window:{bottom:"100px",left:"20px",right:"auto",transform:"none"}},"bottom-center":{toggle:{bottom:"20px",left:"50%",right:"auto",transform:"translateX(-50%)"},window:{bottom:"100px",left:"50%",right:"auto",transform:"translateX(-50%)"}}}}},n={},function e(i){var o=n[i];if(void 0!==o)return o.exports;var a=n[i]={exports:{}};return t[i](a,a.exports,e),a.exports}(877);var t,n}));
|
|
File without changes
|