UNPKG

supporttor

Version:

A generic React chat widget component that supports any app with a knowledge base

1 lines 33.4 kB
(()=>{"use strict";var e={36:(e,n,t)=>{t.d(n,{A:()=>s});var a=t(601),o=t.n(a),r=t(314),i=t.n(r)()(o());i.push([e.id,".message-bubble {\n position: relative;\n margin: 8px 0;\n padding: 12px 16px;\n border-radius: 12px;\n max-width: 80%;\n word-wrap: break-word;\n}\n\n/* User messages */\n.message-bubble.user {\n background-color: #F5F5F5;\n color: #000000;\n align-self: flex-end;\n border-bottom-right-radius: 4px;\n}\n\n/* Assistant messages */\n.message-bubble.assistant {\n background-color: #424242;\n color: white;\n align-self: flex-start;\n border-bottom-left-radius: 4px;\n}\n\n/* Support team messages */\n.message-bubble.support-team {\n background-color: #424242;\n color: white;\n align-self: flex-start;\n border-bottom-left-radius: 4px;\n}\n\n.message-content {\n position: relative;\n}\n\n.message-content p {\n margin: 0;\n padding: 0;\n font-size: 0.9rem;\n line-height: 1.3;\n}\n\n.loading-indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 8px;\n}\n\n.loading-dots {\n display: flex;\n gap: 4px;\n}\n\n.loading-dots span {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: currentColor;\n opacity: 0.6;\n animation: loading 1.4s infinite ease-in-out;\n}\n\n.loading-dots span:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.loading-dots span:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n@keyframes loading {\n 0%, 80%, 100% { \n transform: scale(0);\n }\n 40% { \n transform: scale(1);\n }\n}\n\n.message-timestamp {\n font-size: 0.75rem;\n opacity: 0.7;\n margin-top: 4px;\n text-align: right;\n}\n\n.retry-button {\n background-color: rgba(255, 255, 255, 0.2);\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n margin-top: 8px;\n cursor: pointer;\n color: inherit;\n font-size: 0.875rem;\n}\n\n.retry-button:hover {\n background-color: rgba(255, 255, 255, 0.3);\n} ",""]);const s=i},47:function(e,n,t){var a=this&&this.__createBinding||(Object.create?function(e,n,t,a){void 0===a&&(a=t);var o=Object.getOwnPropertyDescriptor(n,t);o&&!("get"in o?!n.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return n[t]}}),Object.defineProperty(e,a,o)}:function(e,n,t,a){void 0===a&&(a=t),e[a]=n[t]}),o=this&&this.__setModuleDefault||(Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&a(n,e,t);return o(n,e),n},i=this&&this.__awaiter||function(e,n,t,a){return new(t||(t=Promise))((function(o,r){function i(e){try{l(a.next(e))}catch(e){r(e)}}function s(e){try{l(a.throw(e))}catch(e){r(e)}}function l(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}))};Object.defineProperty(n,"__esModule",{value:!0}),n.ChatWidget=void 0;const s=r(t(94)),l=t(288),c=t(334);t(476),t(499),t(643),t(728),t(327),t(109),n.ChatWidget=({domain_name:e,userEmail:n,position:t="bottom-right",language:a="en",theme:o={primaryColor:"#007AFF",backgroundColor:"#FFFFFF",textColor:"#000000",loadingColor:"#007AFF",errorColor:"#FF3B30"},loadingIndicator:r={type:"dots",color:"#007AFF",size:8}})=>{console.log("ChatWidget rendered with props:",{domain_name:e,userEmail:n,position:t,language:a});const[d,u]=(0,s.useState)(!1),[f,p]=(0,s.useState)([]),[g,m]=(0,s.useState)(!1),[h,b]=(0,s.useState)(null),[v,x]=(0,s.useState)(!1),[y,w]=(0,s.useState)(null),_=(0,s.useRef)(null),[E,k]=(0,s.useState)(!1),[j,A]=(0,s.useState)(""),[S,O]=(0,s.useState)(!0),[q,C]=(0,s.useState)(null),[F,M]=(0,s.useState)(""),N=(0,s.useRef)(null);(0,s.useEffect)((()=>{N.current&&N.current!==n&&(p([]),b(null),x(!1),w(null),_.current&&(clearInterval(_.current),_.current=null)),N.current=n||null}),[n]),(0,s.useEffect)((()=>{i(void 0,void 0,void 0,(function*(){try{const n=yield fetch(`https://fjwedosbyjiuumffkecc.supabase.co/storage/v1/object/public/published/500471dd-e0a9-4471-aff8-1bcf0788d821/${e}/static-data.json`);if(!n.ok)throw new Error("Failed to fetch static data");const t=yield n.json();C(t),M(`https://fjwedosbyjiuumffkecc.supabase.co/storage/v1/object/public/published/500471dd-e0a9-4471-aff8-1bcf0788d821/${e}/faq-${a}.json`)}catch(e){console.error("Error fetching static data:",e),A("Failed to load chat configuration")}}))}),[e,a]);const P=(0,s.useRef)(new Map),I=e=>i(void 0,void 0,void 0,(function*(){if(q)try{const n=yield fetch(`${q.conversationHistoryUrl}/${e}`);if(!n.ok)throw new Error("Failed to fetch conversation history");const t=(yield n.json()).messages.map((e=>{const n=P.current.get(e.id);if(n)return n;const t=(e=>{const n=e.sender_type.toLowerCase().trim();return{id:e.id,text:e.content,sender:{assistant:"assistant","support-team":"support-team",user:"user"}[n]||"assistant",timestamp:new Date(e.created_at).toISOString(),conversationId:e.conversation_id,status:"sent"}})(e);return P.current.set(e.id,t),t}));p(t)}catch(e){console.error("Error fetching conversation history:",e);const n={id:Date.now().toString(),text:"Failed to load conversation history. Please try again later.",sender:"assistant",timestamp:(new Date).toISOString(),status:"failed",error:"Network error"};p((e=>[...e,n]))}}));(0,s.useEffect)((()=>{i(void 0,void 0,void 0,(function*(){if(d&&q){m(!0);try{const e=yield i(void 0,void 0,void 0,(function*(){if(!q||!n)return null;try{const e=yield fetch(`https://transkriptor.app.n8n.cloud/webhook/get-user-conversation-id?app_name=${q.app_name}&user_email=${encodeURIComponent(n)}`);if(!e.ok)throw new Error("Failed to fetch conversation ID");return(yield e.json()).conversation_id}catch(e){return console.error("Error fetching conversation ID:",e),null}}));b(e),e?yield I(e):p([])}catch(e){console.error("Error loading initial conversation:",e)}finally{m(!1)}}}))}),[d,q]),(0,s.useEffect)((()=>()=>{_.current&&clearInterval(_.current)}),[]);const z=e=>{_.current&&clearInterval(_.current),_.current=setInterval((()=>{I(e)}),12e4)};return(0,s.useEffect)((()=>{q&&i(void 0,void 0,void 0,(function*(){if(q)try{const e=yield fetch(`https://transkriptor.app.n8n.cloud/webhook/is-app-available?app_name=${q.app_name}`),n=yield e.json();if(!n.is_app_exist)return k(!1),void A(n.message||"App is not available");k(!0)}catch(e){console.error("App availability check failed:",e),A("Failed to check app availability"),k(!1)}finally{O(!1)}}))}),[q]),S||!q?s.default.createElement("div",null,"Loading chat configuration..."):E?s.default.createElement("div",{className:`chat-widget ${t}`},s.default.createElement(l.ChatIcon,{onClick:()=>u(!d)}),d&&s.default.createElement(c.ChatInterface,{isOpen:d,onClose:()=>u(!1),messages:n?f:[],onSendMessage:e=>i(void 0,void 0,void 0,(function*(){if(!q)return;const t={id:Date.now().toString(),text:e,sender:"user",timestamp:(new Date).toISOString(),conversationId:h||void 0,status:"sending"};p((e=>[...e,t])),m(!0);try{const o=yield fetch(q.apiUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({app:q.app_name,assistant_indicator:"primary",query:e,user_email:n,conversation_id:h,language:a})});if(!o.ok)throw new Error("Failed to send message");const r=yield o.json();!h&&r.conversation_id&&b(r.conversation_id);const i={id:Date.now().toString(),text:r.will_replied_with_email?"You will be replied via email. Please check your email. We will notify you when we receive a response.":r.content,sender:"assistant",timestamp:(new Date).toISOString(),conversationId:r.conversation_id,status:"sent"};p((e=>e.map((e=>e.id===t.id?Object.assign(Object.assign({},e),{status:"sent"}):e)).concat(i))),r.will_replied_with_email&&r.conversation_id&&(x(!0),w(i.id),z(r.conversation_id))}catch(e){console.error("Error sending message:",e),p((e=>e.map((e=>e.id===t.id?Object.assign(Object.assign({},e),{status:"failed",error:"Failed to send message. Please try again."}):e))))}finally{m(!1)}})),onRetryMessage:e=>i(void 0,void 0,void 0,(function*(){if(!q)return;const t=f.find((n=>n.id===e));if(t){p((n=>n.map((n=>n.id===e?Object.assign(Object.assign({},n),{status:"sending",error:void 0}):n)))),m(!0);try{const o=yield fetch(q.apiUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({app:q.app_name,assistant_indicator:"primary",query:t.text,user_email:n,conversation_id:h,language:a})});if(!o.ok)throw new Error("Failed to send message");const r=yield o.json();!h&&r.conversation_id&&b(r.conversation_id);const i={id:Date.now().toString(),text:r.will_replied_with_email?"You will be replied via email. Please check your email. We will notify you when we receive a response.":r.content,sender:"assistant",timestamp:(new Date).toISOString(),conversationId:r.conversation_id,status:"sent"};p((n=>n.map((n=>n.id===e?Object.assign(Object.assign({},n),{status:"sent"}):n)).concat(i))),r.will_replied_with_email&&r.conversation_id&&(x(!0),w(i.id),z(r.conversation_id))}catch(n){console.error("Error retrying message:",n),p((n=>n.map((n=>n.id===e?Object.assign(Object.assign({},n),{status:"failed",error:"Failed to send message. Please try again."}):n))))}finally{m(!1)}}})),onNewChat:()=>{p([]),b(null)},isLoading:g,appName:q.app_name,faqUrl:F,userEmail:n,onSignIn:()=>{window.location.href=`${window.location.origin}/signin`},language:a})):s.default.createElement("div",{className:"error-container",style:{padding:"20px",backgroundColor:"#f8d7da",color:"#721c24",borderRadius:"4px",margin:"10px"}},s.default.createElement("p",null,j))}},56:(e,n,t)=>{e.exports=function(e){var n=t.nc;n&&e.setAttribute("nonce",n)}},72:e=>{var n=[];function t(e){for(var t=-1,a=0;a<n.length;a++)if(n[a].identifier===e){t=a;break}return t}function a(e,a){for(var r={},i=[],s=0;s<e.length;s++){var l=e[s],c=a.base?l[0]+a.base:l[0],d=r[c]||0,u="".concat(c," ").concat(d);r[c]=d+1;var f=t(u),p={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==f)n[f].references++,n[f].updater(p);else{var g=o(p,a);a.byIndex=s,n.splice(s,0,{identifier:u,updater:g,references:1})}i.push(u)}return i}function o(e,n){var t=n.domAPI(n);return t.update(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap&&n.supports===e.supports&&n.layer===e.layer)return;t.update(e=n)}else t.remove()}}e.exports=function(e,o){var r=a(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<r.length;i++){var s=t(r[i]);n[s].references--}for(var l=a(e,o),c=0;c<r.length;c++){var d=t(r[c]);0===n[d].references&&(n[d].updater(),n.splice(d,1))}r=l}}},94:e=>{e.exports=require("react")},97:(e,n,t)=>{t.d(n,{A:()=>s});var a=t(601),o=t.n(a),r=t(314),i=t.n(r)()(o());i.push([e.id,".chat-widget {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9998;\n}\n\n/* Add position variants */\n.chat-widget.bottom-right {\n bottom: 20px;\n right: 20px;\n}\n\n.chat-widget.bottom-left {\n bottom: 20px;\n left: 20px;\n}\n\n.chat-widget.top-right {\n top: 20px;\n right: 20px;\n}\n\n.chat-widget.top-left {\n top: 20px;\n left: 20px;\n}\n\n.chat-interface {\n position: fixed;\n bottom: 100px;\n right: 20px;\n width: 350px;\n height: 500px;\n background-color: #fff;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.chat-header {\n padding: 16px;\n background-color: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.chat-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #212529;\n}\n\n.close-button {\n background: none;\n border: none;\n font-size: 24px;\n cursor: pointer;\n color: #6c757d;\n padding: 0;\n line-height: 1;\n}\n\n.messages-container {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.message-input {\n padding: 16px;\n border-top: 1px solid #e9ecef;\n display: flex;\n gap: 8px;\n}\n\n.message-input input {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n font-size: 14px;\n}\n\n.message-input button {\n padding: 8px 16px;\n background-color: #007AFF;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n}\n\n.loading-indicator {\n display: flex;\n justify-content: center;\n padding: 16px;\n}\n\n.loading-dots {\n display: flex;\n gap: 4px;\n}\n\n.loading-dots span {\n width: 8px;\n height: 8px;\n background-color: #007AFF;\n border-radius: 50%;\n animation: bounce 1.4s infinite ease-in-out;\n}\n\n.loading-dots span:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.loading-dots span:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n@keyframes bounce {\n 0%, 80%, 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1);\n }\n} ",""]);const s=i},109:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var a=t(72),o=t.n(a),r=t(284),i=t.n(r),s=t(659),l=t.n(s),c=t(56),d=t.n(c),u=t(540),f=t.n(u),p=t(676),g={};g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=f(),o()(p.A,g);const m=p.A&&p.A.locals?p.A.locals:void 0},262:(e,n,t)=>{t.d(n,{A:()=>s});var a=t(601),o=t.n(a),r=t(314),i=t.n(r)()(o());i.push([e.id,".chat-icon {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background-color: #000;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n z-index: 9999;\n}\n\n.chat-icon:hover {\n transform: scale(1.05);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n}\n\n.chat-icon svg {\n color: #fff;\n width: 24px;\n height: 24px;\n}\n\n.chat-icon.bottom-right {\n bottom: 20px;\n right: 20px;\n}\n\n.chat-icon.bottom-left {\n bottom: 20px;\n left: 20px;\n}\n\n.chat-icon.top-right {\n top: 20px;\n right: 20px;\n}\n\n.chat-icon.top-left {\n top: 20px;\n left: 20px;\n} ",""]);const s=i},284:e=>{var n,t=(n=[],function(e,t){return n[e]=t,n.filter(Boolean).join("\n")});function a(e,n,a,o){var r;if(a)r="";else{r="",o.supports&&(r+="@supports (".concat(o.supports,") {")),o.media&&(r+="@media ".concat(o.media," {"));var i=void 0!==o.layer;i&&(r+="@layer".concat(o.layer.length>0?" ".concat(o.layer):""," {")),r+=o.css,i&&(r+="}"),o.media&&(r+="}"),o.supports&&(r+="}")}if(e.styleSheet)e.styleSheet.cssText=t(n,r);else{var s=document.createTextNode(r),l=e.childNodes;l[n]&&e.removeChild(l[n]),l.length?e.insertBefore(s,l[n]):e.appendChild(s)}}var o={singleton:null,singletonCounter:0};e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=o.singletonCounter++,t=o.singleton||(o.singleton=e.insertStyleElement(e));return{update:function(e){a(t,n,!1,e)},remove:function(e){a(t,n,!0,e)}}}},288:function(e,n,t){var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.ChatIcon=void 0;const o=a(t(94));t(499),n.ChatIcon=({onClick:e})=>o.default.createElement("div",{className:"chat-icon",onClick:e},o.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o.default.createElement("path",{d:"M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2ZM20 16H5.17L4 17.17V4H20V16Z",fill:"currentColor"}),o.default.createElement("path",{d:"M7 9H17V11H7V9ZM7 12H14V14H7V12Z",fill:"currentColor"})))},314:e=>{e.exports=function(e){var n=[];return n.toString=function(){return this.map((function(n){var t="",a=void 0!==n[5];return n[4]&&(t+="@supports (".concat(n[4],") {")),n[2]&&(t+="@media ".concat(n[2]," {")),a&&(t+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),t+=e(n),a&&(t+="}"),n[2]&&(t+="}"),n[4]&&(t+="}"),t})).join("")},n.i=function(e,t,a,o,r){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(a)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(i[l]=!0)}for(var c=0;c<e.length;c++){var d=[].concat(e[c]);a&&i[d[0]]||(void 0!==r&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=r),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),n.push(d))}},n}},327:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var a=t(72),o=t.n(a),r=t(284),i=t.n(r),s=t(659),l=t.n(s),c=t(56),d=t.n(c),u=t(540),f=t.n(u),p=t(36),g={};g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=f(),o()(p.A,g);const m=p.A&&p.A.locals?p.A.locals:void 0},334:function(e,n,t){var a=this&&this.__createBinding||(Object.create?function(e,n,t,a){void 0===a&&(a=t);var o=Object.getOwnPropertyDescriptor(n,t);o&&!("get"in o?!n.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return n[t]}}),Object.defineProperty(e,a,o)}:function(e,n,t,a){void 0===a&&(a=t),e[a]=n[t]}),o=this&&this.__setModuleDefault||(Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&a(n,e,t);return o(n,e),n},i=this&&this.__awaiter||function(e,n,t,a){return new(t||(t=Promise))((function(o,r){function i(e){try{l(a.next(e))}catch(e){r(e)}}function s(e){try{l(a.throw(e))}catch(e){r(e)}}function l(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}))};Object.defineProperty(n,"__esModule",{value:!0}),n.ChatInterface=void 0;const s=r(t(94)),l=t(818),c=t(830),d=t(805);t(643),n.ChatInterface=({isOpen:e,onClose:n,messages:t,onSendMessage:a,onRetryMessage:o,onNewChat:r,isLoading:u,appName:f,faqUrl:p,userEmail:g,onSignIn:m,language:h})=>{const[b,v]=(0,s.useState)(""),x=(0,s.useRef)(null),[y,w]=(0,s.useState)("chat");return(0,s.useEffect)((()=>{var e;null===(e=x.current)||void 0===e||e.scrollIntoView({behavior:"smooth"})}),[t]),e?s.default.createElement("div",{className:"chat-interface"},s.default.createElement("div",{className:"chat-header"},s.default.createElement("div",{className:"header-left"},s.default.createElement("h3",null,"Chat Support")),s.default.createElement("div",{className:"header-right"},s.default.createElement("button",{className:"tab-button "+("chat"===y?"active":""),onClick:()=>w("chat")},"Chat"),s.default.createElement("button",{className:"tab-button "+("faq"===y?"active":""),onClick:()=>w("faq")},"FAQ"),s.default.createElement("button",{className:"close-button",onClick:n},"×"))),"chat"===y?s.default.createElement(s.default.Fragment,null,g?s.default.createElement(s.default.Fragment,null,s.default.createElement("div",{className:"chat-messages"},t.map((e=>s.default.createElement(l.MessageBubble,{key:e.id,message:e,onRetry:o}))),s.default.createElement("div",{ref:x})),s.default.createElement(c.MessageInput,{value:b,onChange:v,onSend:()=>i(void 0,void 0,void 0,(function*(){b.trim()&&(yield a(b),v(""))})),isLoading:u})):s.default.createElement("div",{className:"sign-in-prompt"},s.default.createElement("p",null,"Please sign in to use live chat functionality"),s.default.createElement("button",{className:"sign-in-button",onClick:m},"Sign In"))):s.default.createElement(d.FAQ,{appName:f,faqUrl:p,language:h})):null}},476:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var a=t(72),o=t.n(a),r=t(284),i=t.n(r),s=t(659),l=t.n(s),c=t(56),d=t.n(c),u=t(540),f=t.n(u),p=t(97),g={};g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=f(),o()(p.A,g);const m=p.A&&p.A.locals?p.A.locals:void 0},499:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var a=t(72),o=t.n(a),r=t(284),i=t.n(r),s=t(659),l=t.n(s),c=t(56),d=t.n(c),u=t(540),f=t.n(u),p=t(262),g={};g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=f(),o()(p.A,g);const m=p.A&&p.A.locals?p.A.locals:void 0},540:e=>{e.exports=function(e){var n=document.createElement("style");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},601:e=>{e.exports=function(e){return e[1]}},643:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var a=t(72),o=t.n(a),r=t(284),i=t.n(r),s=t(659),l=t.n(s),c=t(56),d=t.n(c),u=t(540),f=t.n(u),p=t(788),g={};g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=f(),o()(p.A,g);const m=p.A&&p.A.locals?p.A.locals:void 0},659:e=>{var n={};e.exports=function(e,t){var a=function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}(e);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}},676:(e,n,t)=>{t.d(n,{A:()=>s});var a=t(601),o=t.n(a),r=t(314),i=t.n(r)()(o());i.push([e.id,".message-input-container {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background-color: #fff;\n border-top: 1px solid #e0e0e0;\n}\n\n.message-input {\n flex: 1;\n min-height: 40px;\n max-height: 80px;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 20px;\n font-size: 14px;\n line-height: 1.4;\n resize: none;\n outline: none;\n transition: border-color 0.2s;\n display: flex;\n align-items: center;\n}\n\n.message-input:focus {\n border-color: #007AFF;\n}\n\n.send-button {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: #000;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: background-color 0.2s;\n flex-shrink: 0;\n}\n\n.send-button:disabled {\n background-color: #ccc;\n cursor: not-allowed;\n}\n\n.send-button svg {\n color: white;\n transition: transform 0.3s ease;\n}\n\n.send-button .send-icon-loading {\n animation: send-icon-spin 1s linear infinite;\n}\n\n@keyframes send-icon-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n} ",""]);const s=i},728:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var a=t(72),o=t.n(a),r=t(284),i=t.n(r),s=t(659),l=t.n(s),c=t(56),d=t.n(c),u=t(540),f=t.n(u),p=t(880),g={};g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=f(),o()(p.A,g);const m=p.A&&p.A.locals?p.A.locals:void 0},788:(e,n,t)=>{t.d(n,{A:()=>s});var a=t(601),o=t.n(a),r=t(314),i=t.n(r)()(o());i.push([e.id,".chat-interface {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 400px;\n height: 600px;\n background-color: #fff;\n border-radius: 12px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n z-index: 1000;\n overflow: hidden;\n}\n\n.chat-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background-color: #f5f5f5;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.header-left h3 {\n margin: 0;\n font-size: 16px;\n color: #333;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.tab-button {\n padding: 6px 12px;\n border: none;\n background: none;\n color: #666;\n cursor: pointer;\n font-size: 14px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.tab-button.active {\n background-color: #333;\n color: white;\n}\n\n.close-button {\n background: none;\n border: none;\n font-size: 24px;\n color: #666;\n cursor: pointer;\n padding: 0;\n line-height: 1;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.close-button:hover {\n background-color: #e0e0e0;\n color: #333;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.faq-container {\n flex: 1;\n background-color: white;\n padding: 16px;\n overflow-y: auto;\n}\n\n.chat-actions {\n display: flex;\n gap: 8px;\n}\n\n.new-chat-button {\n background: none;\n border: 1px solid #007AFF;\n color: #007AFF;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.new-chat-button:hover {\n background-color: #007AFF;\n color: white;\n}\n\n.sign-in-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 2rem;\n text-align: center;\n height: 100%;\n}\n\n.sign-in-prompt p {\n margin-bottom: 1.5rem;\n color: #666;\n font-size: 1rem;\n}\n\n.sign-in-button {\n background-color: #000;\n color: white;\n border: none;\n padding: 0.75rem 1.5rem;\n border-radius: 4px;\n font-size: 1rem;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.sign-in-button:hover {\n background-color: #333;\n}\n\n/* ... rest of the existing styles ... */ ",""]);const s=i},794:(e,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.formatTimeAgo=void 0,n.formatTimeAgo=e=>{const n=new Date(e),t=new Date,a=Math.floor((t.getTime()-n.getTime())/1e3);if(a<60)return"just now";const o=Math.floor(a/60);if(o<60)return`${o} minute${1===o?"":"s"} ago`;const r=Math.floor(o/60);if(r<24)return`${r} hour${1===r?"":"s"} ago`;const i=Math.floor(r/24);return i<7?`${i} day${1===i?"":"s"} ago`:n.toLocaleDateString("en-US",{month:"short",day:"numeric",year:n.getFullYear()!==t.getFullYear()?"numeric":void 0})}},805:function(e,n,t){var a=this&&this.__createBinding||(Object.create?function(e,n,t,a){void 0===a&&(a=t);var o=Object.getOwnPropertyDescriptor(n,t);o&&!("get"in o?!n.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return n[t]}}),Object.defineProperty(e,a,o)}:function(e,n,t,a){void 0===a&&(a=t),e[a]=n[t]}),o=this&&this.__setModuleDefault||(Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&a(n,e,t);return o(n,e),n},i=this&&this.__awaiter||function(e,n,t,a){return new(t||(t=Promise))((function(o,r){function i(e){try{l(a.next(e))}catch(e){r(e)}}function s(e){try{l(a.throw(e))}catch(e){r(e)}}function l(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,s)}l((a=a.apply(e,n||[])).next())}))};Object.defineProperty(n,"__esModule",{value:!0}),n.FAQ=void 0;const s=r(t(94));t(728),n.FAQ=({appName:e,faqUrl:n,language:t})=>{const[a,o]=(0,s.useState)(null),[r,l]=(0,s.useState)(null),[c,d]=(0,s.useState)(null),[u,f]=(0,s.useState)(!0),[p,g]=(0,s.useState)(null);return(0,s.useEffect)((()=>{i(void 0,void 0,void 0,(function*(){try{const e=yield fetch(n);if(!e.ok)throw new Error("Failed to fetch FAQs");const t=yield e.json();o({categories:t.categories})}catch(e){g("Failed to load FAQs. Please try again later."),console.error("Error fetching FAQs:",e)}finally{f(!1)}}))}),[n]),u?s.default.createElement("div",{className:"faq-loading"},"Loading FAQs..."):p?s.default.createElement("div",{className:"faq-error"},p):a?s.default.createElement("div",{className:"faq-container"},s.default.createElement("div",{className:"faq-categories"},a.categories.map((e=>s.default.createElement("div",{key:e.name,className:"faq-category"},s.default.createElement("div",{className:"faq-category-header",onClick:()=>{return n=e.name,l(r===n?null:n),void d(null);var n}},s.default.createElement("h3",null,e.name),s.default.createElement("span",{className:"faq-arrow"},r===e.name?"▼":"▶")),r===e.name&&s.default.createElement("div",{className:"faq-category-content"},s.default.createElement("div",{className:"faq-questions"},e.items.map(((n,t)=>s.default.createElement("div",{key:`${e.name}-${t}`,className:"faq-question"},s.default.createElement("div",{className:"faq-question-header",onClick:()=>{return e=n.question,void d(c===e?null:e);var e}},s.default.createElement("h4",null,n.question),s.default.createElement("span",{className:"faq-arrow"},c===n.question?"▼":"▶")),c===n.question&&s.default.createElement("div",{className:"faq-answer"},n.answer))))))))))):s.default.createElement("div",{className:"faq-error"},"No FAQ data available")}},818:function(e,n,t){var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.MessageBubble=void 0;const o=a(t(94)),r=t(794);t(327),n.MessageBubble=({message:e,onRetry:n})=>o.default.createElement("div",{className:`message-bubble ${e.sender}`,"data-sender":e.sender},o.default.createElement("div",{className:"message-content"},o.default.createElement("p",null,e.text),"sending"===e.status&&o.default.createElement("div",{className:"loading-indicator"},o.default.createElement("div",{className:"loading-dots"},o.default.createElement("span",null),o.default.createElement("span",null),o.default.createElement("span",null))),"failed"===e.status&&n&&o.default.createElement("button",{className:"retry-button",onClick:()=>n(e.id)},"Retry")),o.default.createElement("div",{className:"message-timestamp"},(0,r.formatTimeAgo)(e.timestamp)))},830:function(e,n,t){var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.MessageInput=void 0;const o=a(t(94));t(109),n.MessageInput=({value:e,onChange:n,onSend:t,isLoading:a})=>o.default.createElement("div",{className:"message-input-container"},o.default.createElement("textarea",{className:"message-input",value:e,onChange:e=>n(e.target.value),onKeyPress:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),t())},placeholder:"Type your message...",rows:2}),o.default.createElement("button",{className:"send-button",onClick:t,disabled:a||!e.trim()},o.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:a?"send-icon-loading":""},o.default.createElement("path",{d:"M22 2L11 13",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),o.default.createElement("path",{d:"M22 2L15 22L11 13L2 9L22 2Z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}))))},880:(e,n,t)=>{t.d(n,{A:()=>s});var a=t(601),o=t.n(a),r=t(314),i=t.n(r)()(o());i.push([e.id,".faq-container {\n padding: 16px;\n height: 100%;\n overflow-y: auto;\n text-align: left;\n}\n\n.faq-title {\n font-size: 20px;\n margin-bottom: 20px;\n color: #333;\n text-align: left;\n}\n\n.faq-categories {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: left;\n}\n\n.faq-category {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n text-align: left;\n}\n\n.faq-category-header {\n background-color: #f5f5f5;\n padding: 16px;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: center;\n transition: background-color 0.2s ease;\n text-align: left;\n}\n\n.faq-category-header:hover {\n background-color: #e0e0e0;\n}\n\n.faq-category-header h3 {\n margin: 0;\n color: #333;\n font-size: 16px;\n text-align: left;\n}\n\n.faq-arrow {\n color: #666;\n font-size: 12px;\n}\n\n.faq-category-content {\n padding: 16px;\n background-color: white;\n text-align: left;\n}\n\n.faq-category-description {\n margin: 0 0 16px 0;\n color: #666;\n font-size: 14px;\n text-align: left;\n}\n\n.faq-questions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: left;\n}\n\n.faq-question {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n text-align: left;\n}\n\n.faq-question-header {\n padding: 12px 16px;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background-color: #f9f9f9;\n transition: background-color 0.2s ease;\n text-align: left;\n}\n\n.faq-question-header:hover {\n background-color: #f0f0f0;\n}\n\n.faq-question-header h4 {\n margin: 0;\n color: #333;\n font-size: 14px;\n font-weight: 500;\n text-align: left;\n}\n\n.faq-answer {\n padding: 12px 16px;\n background-color: white;\n color: #666;\n line-height: 1.5;\n font-size: 14px;\n border-top: 1px solid #e0e0e0;\n text-align: left;\n}\n\n.faq-loading,\n.faq-error {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #666;\n text-align: left;\n} ",""]);const s=i}},n={};function t(a){var o=n[a];if(void 0!==o)return o.exports;var r=n[a]={id:a,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.exports}t.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},t.d=(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.nc=void 0;var a={};(()=>{var e=a;Object.defineProperty(e,"__esModule",{value:!0}),e.ChatWidget=void 0;var n=t(47);Object.defineProperty(e,"ChatWidget",{enumerable:!0,get:function(){return n.ChatWidget}})})(),module.exports=a})();