@ihoomanai/chat-widget 2.0.2 → 2.2.0

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.
@@ -1,2 +1,2 @@
1
- const e={serverUrl:"https://api.ihooman.ai",theme:"light",position:"bottom-right",title:"Chat Support",subtitle:"We typically reply within minutes",welcomeMessage:"Hi there! 👋 How can we help you today?",placeholder:"Type a message...",primaryColor:"#00aeff",gradientFrom:"#00aeff",gradientTo:"#0066ff",showTimestamps:!0,showTypingIndicator:!0,enableSounds:!0,enableFileUpload:!0,startOpen:!1,persistSession:!0,zIndex:9999,width:380,height:560,buttonSize:60,borderRadius:16,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',avatarUrl:"",poweredBy:!0},n='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>',t='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>',o='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg>',i='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg>',a='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg>',s='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>',r='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="10" rx="2"></rect><circle cx="12" cy="5" r="2"></circle><path d="M12 7v4"></path></svg>';let d={widgetId:"",...e},l={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},c={};const p={};let h=null,g=null,m=0;function u(e=""){return e+Math.random().toString(36).slice(2,14)+Date.now().toString(36)}function f(e){const n=document.createElement("div");return n.textContent=e,n.innerHTML}function b(e,n){const t="ihooman_chat_"+e;try{if(void 0===n){const e=localStorage.getItem(t);return e?JSON.parse(e):null}return null===n?(localStorage.removeItem(t),null):(localStorage.setItem(t,JSON.stringify(n)),n)}catch{return null}}function V(e,n){(p[e]||[]).forEach(t=>{try{t(n)}catch(n){console.error(`Error in ${e} event handler:`,n)}});const t=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`,o=d[t];if("function"==typeof o)try{o(n)}catch(e){console.error(`Error in ${t} callback:`,e)}}function x(){const e=document.createElement("style");e.id="ihooman-widget-styles",e.textContent=function(){const{primaryColor:e,gradientFrom:n,gradientTo:t,fontFamily:o,borderRadius:i,zIndex:a,width:s,height:r,buttonSize:l}=d,c="dark"===d.theme,p=c?"#1a1a2e":"#ffffff",h=c?"#e4e4e7":"#1f2937",g=c?"#71717a":"#6b7280",m=c?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.08)",u=c?"#16162a":"#f9fafb",f=`linear-gradient(135deg, ${n}, ${t})`,b=c?"#252542":"#f1f5f9",V=d.position?.includes("right")??!0,x=d.position?.includes("bottom")??!0;return`\n .ihooman-widget * { box-sizing: border-box; margin: 0; padding: 0; }\n .ihooman-widget { font-family: ${o}; font-size: 14px; line-height: 1.5; color: ${h}; -webkit-font-smoothing: antialiased; }\n .ihooman-toggle { position: fixed; ${V?"right: 20px":"left: 20px"}; ${x?"bottom: 20px":"top: 20px"}; width: ${l}px; height: ${l}px; border-radius: 50%; background: linear-gradient(135deg, ${n}, ${t}); border: none; cursor: pointer; z-index: ${a}; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 20px rgba(0, 174, 255, 0.35); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; }\n .ihooman-toggle:hover { transform: scale(1.08); box-shadow: 0 6px 28px rgba(0, 174, 255, 0.45); }\n .ihooman-toggle:active { transform: scale(0.95); }\n .ihooman-toggle::before { content: ''; position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(255,255,255,0.2), transparent); border-radius: 50%; }\n .ihooman-toggle svg { width: 26px; height: 26px; color: white; transition: transform 0.3s ease, opacity 0.2s ease; position: relative; z-index: 1; }\n .ihooman-toggle.open svg.chat-icon { transform: rotate(90deg) scale(0); opacity: 0; }\n .ihooman-toggle.open svg.close-icon { transform: rotate(0) scale(1); opacity: 1; }\n .ihooman-toggle svg.close-icon { position: absolute; transform: rotate(-90deg) scale(0); opacity: 0; }\n .ihooman-pulse { position: absolute; inset: 0; border-radius: 50%; background: ${e}; animation: ihooman-pulse 2s ease-out infinite; }\n @keyframes ihooman-pulse { 0% { transform: scale(1); opacity: 0.5; } 100% { transform: scale(1.6); opacity: 0; } }\n .ihooman-toggle.open .ihooman-pulse { display: none; }\n .ihooman-badge { position: absolute; top: -4px; right: -4px; min-width: 20px; height: 20px; padding: 0 6px; background: #ef4444; color: white; font-size: 11px; font-weight: 600; border-radius: 10px; display: flex; align-items: center; justify-content: center; z-index: 2; }\n .ihooman-badge:empty { display: none; }\n .ihooman-window { position: fixed; ${V?"right: 20px":"left: 20px"}; ${x?"bottom: 90px":"top: 90px"}; width: ${s}px; height: ${r}px; max-height: calc(100vh - 120px); z-index: ${(a??9999)-1}; display: flex; flex-direction: column; opacity: 0; visibility: hidden; transform: translateY(20px) scale(0.95); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); }\n .ihooman-window.open { opacity: 1; visibility: visible; transform: translateY(0) scale(1); }\n .ihooman-container { position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; border-radius: ${i}px; overflow: hidden; }\n .ihooman-container::before { content: ''; position: absolute; inset: 0; background: ${p}; opacity: 0.97; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: ${i}px; border: 1px solid ${m}; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); }\n .ihooman-container > * { position: relative; z-index: 1; }\n .ihooman-header { padding: 16px 20px; background: linear-gradient(135deg, ${n}, ${t}); color: white; display: flex; align-items: center; gap: 12px; flex-shrink: 0; }\n .ihooman-header-avatar { width: 42px; height: 42px; border-radius: 50%; background: rgba(255,255,255,0.2); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n .ihooman-header-avatar img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }\n .ihooman-header-avatar svg { width: 22px; height: 22px; }\n .ihooman-header-info { flex: 1; min-width: 0; }\n .ihooman-header-title { font-size: 16px; font-weight: 600; margin-bottom: 2px; }\n .ihooman-header-status { display: flex; align-items: center; gap: 6px; font-size: 12px; opacity: 0.9; }\n .ihooman-status-dot { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; }\n .ihooman-status-dot.offline { background: #f59e0b; }\n .ihooman-header-actions { display: flex; gap: 8px; }\n .ihooman-header-btn { width: 32px; height: 32px; border-radius: 8px; background: rgba(255,255,255,0.15); border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; color: white; transition: background 0.2s; }\n .ihooman-header-btn:hover { background: rgba(255,255,255,0.25); }\n .ihooman-header-btn svg { width: 16px; height: 16px; }\n .ihooman-messages { flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; background: ${p}; }\n .ihooman-messages::-webkit-scrollbar { width: 6px; }\n .ihooman-messages::-webkit-scrollbar-track { background: transparent; }\n .ihooman-messages::-webkit-scrollbar-thumb { background: ${m}; border-radius: 3px; }\n .ihooman-message { display: flex; flex-direction: column; max-width: 85%; animation: ihooman-fadeIn 0.3s ease; }\n @keyframes ihooman-fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n .ihooman-message.user { align-self: flex-end; align-items: flex-end; }\n .ihooman-message.bot { align-self: flex-start; align-items: flex-start; }\n .ihooman-message-content { padding: 12px 16px; border-radius: 16px; word-wrap: break-word; }\n .ihooman-message.user .ihooman-message-content { background: ${f}; color: white; border-bottom-right-radius: 4px; }\n .ihooman-message.bot .ihooman-message-content { background: ${b}; color: ${h}; border-bottom-left-radius: 4px; }\n .ihooman-message-content code { background: rgba(0,0,0,0.1); padding: 2px 6px; border-radius: 4px; font-family: monospace; font-size: 13px; }\n .ihooman-message-time { font-size: 11px; color: ${g}; margin-top: 4px; padding: 0 4px; }\n .ihooman-typing { display: flex; align-items: center; gap: 8px; padding: 12px 16px; background: ${b}; border-radius: 16px; border-bottom-left-radius: 4px; max-width: 80px; align-self: flex-start; }\n .ihooman-typing-dots { display: flex; gap: 4px; }\n .ihooman-typing-dot { width: 8px; height: 8px; background: ${g}; border-radius: 50%; animation: ihooman-typing 1.4s infinite; }\n .ihooman-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .ihooman-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n @keyframes ihooman-typing { 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } 30% { transform: translateY(-4px); opacity: 1; } }\n .ihooman-input-area { padding: 12px 16px; background: ${p}; border-top: 1px solid ${m}; flex-shrink: 0; }\n .ihooman-input-wrapper { display: flex; align-items: flex-end; gap: 8px; background: ${u}; border: 1px solid ${m}; border-radius: 12px; padding: 8px 12px; transition: border-color 0.2s, box-shadow 0.2s; }\n .ihooman-input-wrapper:focus-within { border-color: ${e}; box-shadow: 0 0 0 3px rgba(0, 174, 255, 0.1); }\n .ihooman-input { flex: 1; border: none; background: transparent; font-family: inherit; font-size: 14px; color: ${h}; resize: none; max-height: 100px; outline: none; line-height: 1.4; }\n .ihooman-input::placeholder { color: ${g}; }\n .ihooman-input-btn { width: 36px; height: 36px; border-radius: 10px; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s; background: transparent; color: ${g}; }\n .ihooman-input-btn:hover { background: ${m}; color: ${h}; }\n .ihooman-input-btn.send { background: linear-gradient(135deg, ${n}, ${t}); color: white; }\n .ihooman-input-btn.send:hover { transform: scale(1.05); box-shadow: 0 4px 12px rgba(0, 174, 255, 0.3); }\n .ihooman-input-btn.send:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }\n .ihooman-input-btn svg { width: 18px; height: 18px; }\n .ihooman-file-input { display: none; }\n .ihooman-powered { text-align: center; padding: 8px; font-size: 11px; color: ${g}; background: ${p}; }\n .ihooman-powered a { color: ${e}; text-decoration: none; }\n .ihooman-error { padding: 16px; text-align: center; color: #ef4444; background: ${p}; }\n @media (max-width: 480px) { .ihooman-window { width: calc(100vw - 20px); height: calc(100vh - 100px); left: 10px; right: 10px; bottom: 80px; max-height: none; } .ihooman-toggle { ${V?"right: 16px":"left: 16px"}; bottom: 16px; } }\n `}(),document.head.appendChild(e);const l=document.createElement("div");l.className="ihooman-widget",l.innerHTML=`\n <button class="ihooman-toggle" aria-label="Open chat">\n <span class="ihooman-pulse"></span>\n <span class="ihooman-badge"></span>\n <span class="chat-icon">${n}</span>\n <span class="close-icon">${t}</span>\n </button>\n <div class="ihooman-window" role="dialog" aria-label="Chat window">\n <div class="ihooman-container">\n <div class="ihooman-header">\n <div class="ihooman-header-avatar">${d.avatarUrl?`<img src="${f(d.avatarUrl)}" alt="Support">`:r}</div>\n <div class="ihooman-header-info">\n <div class="ihooman-header-title">${f(d.title||"Chat Support")}</div>\n <div class="ihooman-header-status"><span class="ihooman-status-dot"></span><span class="ihooman-status-text">Online</span></div>\n </div>\n <div class="ihooman-header-actions">\n <button class="ihooman-header-btn" data-action="refresh" title="New conversation">${s}</button>\n <button class="ihooman-header-btn" data-action="minimize" title="Minimize">${a}</button>\n </div>\n </div>\n <div class="ihooman-messages" role="log" aria-live="polite"></div>\n <div class="ihooman-input-area">\n <div class="ihooman-input-wrapper">\n ${d.enableFileUpload?`<button class="ihooman-input-btn attach" title="Attach file">${i}</button><input type="file" class="ihooman-file-input">`:""}\n <textarea class="ihooman-input" placeholder="${f(d.placeholder||"Type a message...")}" rows="1" aria-label="Message input"></textarea>\n <button class="ihooman-input-btn send" title="Send message" disabled>${o}</button>\n </div>\n </div>\n ${d.poweredBy?'<div class="ihooman-powered">Powered by <a href="https://ihooman.ai" target="_blank" rel="noopener">Ihooman AI</a></div>':""}\n </div>\n </div>\n `,document.body.appendChild(l),c={widget:l,toggle:l.querySelector(".ihooman-toggle"),badge:l.querySelector(".ihooman-badge"),window:l.querySelector(".ihooman-window"),messages:l.querySelector(".ihooman-messages"),input:l.querySelector(".ihooman-input"),sendBtn:l.querySelector(".ihooman-input-btn.send"),attachBtn:l.querySelector(".ihooman-input-btn.attach"),fileInput:l.querySelector(".ihooman-file-input"),statusDot:l.querySelector(".ihooman-status-dot"),statusText:l.querySelector(".ihooman-status-text")},function(){if(!c.toggle||!c.sendBtn||!c.input)return;c.toggle.addEventListener("click",U),c.sendBtn.addEventListener("click",v),c.input.addEventListener("input",()=>{c.sendBtn&&(c.sendBtn.disabled=!c.input?.value.trim()),c.input&&(c.input.style.height="auto",c.input.style.height=Math.min(c.input.scrollHeight,100)+"px")}),c.input.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),c.sendBtn?.disabled||v())}),c.attachBtn&&c.fileInput&&(c.attachBtn.addEventListener("click",()=>c.fileInput?.click()),c.fileInput.addEventListener("change",$));c.widget?.querySelector('[data-action="refresh"]')?.addEventListener("click",B),c.widget?.querySelector('[data-action="minimize"]')?.addEventListener("click",_)}()}function w(e,n="bot",t={}){const o={id:u("msg_"),content:e,sender:n,timestamp:new Date,metadata:t};if(l.messages.push(o),!c.messages)return o;const i=document.createElement("div");var a,s;i.className=`ihooman-message ${n}`,i.innerHTML=`\n <div class="ihooman-message-content">${s=e,s?f(s).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/\n/g,"<br>"):""}</div>\n ${d.showTimestamps?`<div class="ihooman-message-time">${a=o.timestamp,new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}</div>`:""}\n `;const r=c.messages.querySelector(".ihooman-typing");return r&&r.remove(),c.messages.appendChild(i),c.messages.scrollTop=c.messages.scrollHeight,"bot"!==n||l.isOpen||(l.unreadCount++,c.badge&&(c.badge.textContent=String(l.unreadCount)),d.enableSounds&&function(){try{const e=new Audio("data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYNBrP/AAAAAAAAAAAAAAAAAAAAAP/7UMQAA8AAAaQAAAAgAAA0gAAABExBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tQxBKDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=");e.volume=.3,e.play().catch(()=>{})}catch{}}()),V("message",o),o}function y(){if(!d.showTypingIndicator||!c.messages)return;if(c.messages.querySelector(".ihooman-typing"))return;const e=document.createElement("div");e.className="ihooman-typing",e.innerHTML='<div class="ihooman-typing-dots"><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span></div>',c.messages.appendChild(e),c.messages.scrollTop=c.messages.scrollHeight}function A(){const e=c.messages?.querySelector(".ihooman-typing");e&&e.remove()}function v(){const e=c.input?.value.trim();e&&(c.input&&(c.input.value="",c.input.style.height="auto"),c.sendBtn&&(c.sendBtn.disabled=!0),w(e,"user"),y(),async function(e){if(h&&h.readyState===WebSocket.OPEN)return void h.send(JSON.stringify({type:"message",content:e}));try{const n=await fetch(`${d.serverUrl}/api/v1/public/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:e,session_id:l.sessionId,visitor_id:l.visitorId,widget_id:d.widgetId})}),t=await n.json();A(),t.session_id&&(l.sessionId=t.session_id,d.persistSession&&b("session_id",l.sessionId)),t.response&&w(t.response,"bot",{sources:t.sources,confidence:t.confidence})}catch(e){A(),w("Sorry, something went wrong. Please try again.","bot"),V("error",e)}}(e))}function $(e){const n=e.target,t=n.files?.[0];if(!t)return;w(`📎 Uploading: ${t.name}...`,"user"),y();const o=new FormData;o.append("file",t),o.append("session_id",l.sessionId||""),o.append("visitor_id",l.visitorId||""),o.append("widget_id",d.widgetId),fetch(`${d.serverUrl}/api/upload`,{method:"POST",body:o}).then(e=>e.json()).then(e=>{A(),e.message&&w(e.message,"bot")}).catch(()=>{A(),w("Failed to upload file.","bot")}),n.value=""}function k(e){if(!d.serverUrl&&!e)return;let n;if(d.widgetId){const e=d.serverUrl?.replace(/^http/,"ws"),t=new URLSearchParams({widget_id:d.widgetId});l.visitorId&&t.append("visitor_id",l.visitorId),l.sessionId&&t.append("session_id",l.sessionId),n=`${e}/public/ws?${t.toString()}`}else n=e||d.serverUrl?.replace(/^http/,"ws")+"/ws";try{h=new WebSocket(n),h.onopen=()=>{l.isConnected=!0,m=0,C(!0),V("connected")},h.onclose=()=>{if(l.isConnected=!1,C(!1),V("disconnected"),m<5){m++;const n=Math.min(1e3*Math.pow(2,m),3e4);setTimeout(()=>k(e),n)}else console.warn("WebSocket reconnection failed, falling back to polling"),I()},h.onerror=e=>{console.error("WebSocket error:",e)},h.onmessage=e=>{try{const n=JSON.parse(e.data);if("connected"===n.type)n.session_id&&(l.sessionId=n.session_id,d.persistSession&&b("session_id",l.sessionId)),n.visitor_id&&(l.visitorId=n.visitor_id,d.persistSession&&b("visitor_id",l.visitorId)),n.welcome_message&&0===l.messages.length&&w(n.welcome_message,"bot");else if("message"===n.type){A();const e="user"===n.sender?"user":"bot";w(n.content,e,{confidence:n.confidence,agent_name:n.agent_name})}else"typing"===n.type?n.is_typing?y():A():"pong"===n.type||"error"===n.type&&(console.error("WebSocket server error:",n.message),V("error",{message:n.message}))}catch{}},function(){if(S)return;S=setInterval(()=>{h&&h.readyState===WebSocket.OPEN&&h.send(JSON.stringify({type:"ping"}))},3e4)}()}catch{console.warn("WebSocket not supported, using polling"),I()}}let S=null;function I(){g||(g=setInterval(async()=>{if(l.sessionId)try{const e=await fetch(`${d.serverUrl}/api/messages?session_id=${l.sessionId}&since=${Date.now()-5e3}&widget_id=${d.widgetId}`),n=await e.json();n.messages&&n.messages.forEach(e=>{l.messages.find(n=>n.id===e.id)||w(e.content,e.sender_type,e.metadata)})}catch{}},5e3))}function C(e){c.statusDot&&c.statusDot.classList.toggle("offline",!e),c.statusText&&(c.statusText.textContent=e?"Online":"Offline")}function T(){l.isOpen||(l.isOpen=!0,l.unreadCount=0,c.badge&&(c.badge.textContent=""),c.toggle&&c.toggle.classList.add("open"),c.window&&c.window.classList.add("open"),setTimeout(()=>c.input?.focus(),300),V("open"))}function _(){l.isOpen&&(l.isOpen=!1,c.toggle&&c.toggle.classList.remove("open"),c.window&&c.window.classList.remove("open"),V("close"))}function U(){l.isOpen?_():T()}function B(){l.sessionId=null,l.messages=[],b("session_id",null),c.messages&&(c.messages.innerHTML=""),d.welcomeMessage&&w(d.welcomeMessage,"bot")}async function z(n){if(!n.widgetId)return console.error("IhoomanChat: widgetId is required"),null;d={...e,...n},l.visitorId=b("visitor_id")||u("v_"),b("visitor_id",l.visitorId),d.persistSession&&(l.sessionId=b("session_id"));const t=d.serverUrl||"https://api.ihooman.ai",o=await async function(e,n){try{const t=await fetch(`${n}/api/widget/config?widget_id=${encodeURIComponent(e)}`);return t.ok?await t.json():{success:!1,error:(await t.json().catch(()=>({}))).error||`HTTP ${t.status}`}}catch(e){return{success:!1,error:"Unable to connect. Please check your internet connection."}}}(d.widgetId,t);let i;var a;return o.success&&o.config?(a=o.config,d.title=a.title||d.title,d.subtitle=a.subtitle||d.subtitle,d.welcomeMessage=a.welcomeMessage||d.welcomeMessage,d.placeholder=a.placeholder||d.placeholder,d.position=a.position||d.position,a.theme&&(d.primaryColor=a.theme.primaryColor||d.primaryColor,d.gradientFrom=a.theme.gradientFrom||d.gradientFrom,d.gradientTo=a.theme.gradientTo||d.gradientTo,d.fontFamily=a.theme.fontFamily||d.fontFamily,a.theme.borderRadius&&(d.borderRadius=parseInt(a.theme.borderRadius,10)||d.borderRadius)),a.behavior&&(d.startOpen=a.behavior.startOpen??d.startOpen,d.showTypingIndicator=a.behavior.showTypingIndicator??d.showTypingIndicator,d.showTimestamps=a.behavior.showTimestamps??d.showTimestamps,d.enableSounds=a.behavior.enableSounds??d.enableSounds,d.enableFileUpload=a.behavior.enableFileUpload??d.enableFileUpload,d.persistSession=a.behavior.persistSession??d.persistSession),a.branding&&(d.avatarUrl=a.branding.avatarUrl||d.avatarUrl,d.poweredBy=a.branding.poweredBy??d.poweredBy),i=o.chatEndpoint):o.error&&(console.warn("IhoomanChat: Could not fetch server config:",o.error),"Widget not authorized for this domain"===o.error&&console.error("IhoomanChat: Widget configuration error. Please contact support.")),x(),l.messages.forEach(e=>w(e.content,e.sender,e.metadata)),0===l.messages.length&&d.welcomeMessage&&w(d.welcomeMessage,"bot"),k(i),d.startOpen&&setTimeout(T,500),V("ready"),E}const E={init:z,open:T,close:_,toggle:U,destroy:function(){S&&(clearInterval(S),S=null),h&&(h.close(),h=null),g&&(clearInterval(g),g=null),c.widget&&c.widget.remove();const e=document.getElementById("ihooman-widget-styles");e&&e.remove(),l={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},c={},m=0},sendMessage:function(e){e.trim()&&(c.input&&(c.input.value=e),v())},setUser:function(e){e.name&&b("user_name",e.name),e.email&&b("user_email",e.email),e.metadata&&b("user_metadata",e.metadata)},clearHistory:function(){B()},on:function(e,n){p[e]||(p[e]=[]),p[e].push(n)},off:function(e,n){p[e]&&(p[e]=p[e].filter(e=>e!==n))},getState:function(){return{...l}},version:"2.0.0"},M=E;function O(){return{...E}}!function(){if("undefined"==typeof document)return;let e=document.currentScript;if(!e){const n=document.getElementsByTagName("script");for(let t=0;t<n.length;t++)if(n[t].src&&n[t].src.includes("ihooman")){e=n[t];break}}if(!e)return;const n=e.getAttribute("data-widget-id");if(n){const t={widgetId:n},o=e.getAttribute("data-server-url");o&&(t.serverUrl=o);const i=e.getAttribute("data-theme");"light"!==i&&"dark"!==i||(t.theme=i);const a=e.getAttribute("data-position");a&&(t.position=a);"true"===e.getAttribute("data-start-open")&&(t.startOpen=!0),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>z(t)):z(t)}}(),"undefined"!=typeof window&&(window.IhoomanChat=M);export{M as IhoomanChat,O as createWidgetInstance,M as default};
1
+ const e={serverUrl:"https://api.ihooman.ai",theme:"light",position:"bottom-right",title:"Chat Support",subtitle:"We typically reply within minutes",welcomeMessage:"Hi there! 👋 How can we help you today?",placeholder:"Type a message...",primaryColor:"#00aeff",gradientFrom:"#00aeff",gradientTo:"#0066ff",showTimestamps:!0,showTypingIndicator:!0,enableSounds:!0,enableFileUpload:!0,startOpen:!1,persistSession:!0,zIndex:9999,width:380,height:560,buttonSize:60,borderRadius:16,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',avatarUrl:"",poweredBy:!0},t='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>',n='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>',o='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg>',i='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg>',a='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg>',s='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>',r='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="10" rx="2"></rect><circle cx="12" cy="5" r="2"></circle><path d="M12 7v4"></path></svg>',c='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>',l='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><line x1="10" y1="9" x2="8" y2="9"></line></svg>';let d={widgetId:"",...e},p={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},u=!1,h={};const m={};let g=null,b=null,f=0;function x(e=""){return e+Math.random().toString(36).slice(2,14)+Date.now().toString(36)}function v(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function y(e,t){const n="ihooman_chat_"+e;try{if(void 0===t){const e=localStorage.getItem(n);return e?JSON.parse(e):null}return null===t?(localStorage.removeItem(n),null):(localStorage.setItem(n,JSON.stringify(t)),t)}catch{return null}}function w(e,t){(m[e]||[]).forEach(n=>{try{n(t)}catch(t){console.error(`Error in ${e} event handler:`,t)}});const n=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`,o=d[n];if("function"==typeof o)try{o(t)}catch(e){console.error(`Error in ${n} callback:`,e)}}function V(){const e=document.createElement("style");e.id="ihooman-widget-styles",e.textContent=function(){const{primaryColor:e,gradientFrom:t,gradientTo:n,fontFamily:o,borderRadius:i,zIndex:a,width:s,height:r,buttonSize:c}=d,l="dark"===d.theme,p=l?"#1a1a2e":"#ffffff",u=l?"#e4e4e7":"#1f2937",h=l?"#71717a":"#6b7280",m=l?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.08)",g=l?"#16162a":"#f9fafb",b=`linear-gradient(135deg, ${t}, ${n})`,f=l?"#252542":"#f1f5f9",x=d.position?.includes("right")??!0,v=d.position?.includes("bottom")??!0;return`\n .ihooman-widget * { box-sizing: border-box; margin: 0; padding: 0; }\n .ihooman-widget { font-family: ${o}; font-size: 14px; line-height: 1.5; color: ${u}; -webkit-font-smoothing: antialiased; }\n .ihooman-toggle { position: fixed; ${x?"right: 20px":"left: 20px"}; ${v?"bottom: 20px":"top: 20px"}; width: ${c}px; height: ${c}px; border-radius: 50%; background: linear-gradient(135deg, ${t}, ${n}); border: none; cursor: pointer; z-index: ${a}; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 20px rgba(0, 174, 255, 0.35); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; }\n .ihooman-toggle:hover { transform: scale(1.08); box-shadow: 0 6px 28px rgba(0, 174, 255, 0.45); }\n .ihooman-toggle:active { transform: scale(0.95); }\n .ihooman-toggle::before { content: ''; position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(255,255,255,0.2), transparent); border-radius: 50%; }\n .ihooman-toggle svg { width: 26px; height: 26px; color: white; transition: transform 0.3s ease, opacity 0.2s ease; position: relative; z-index: 1; }\n .ihooman-toggle.open svg.chat-icon { transform: rotate(90deg) scale(0); opacity: 0; }\n .ihooman-toggle.open svg.close-icon { transform: rotate(0) scale(1); opacity: 1; }\n .ihooman-toggle svg.close-icon { position: absolute; transform: rotate(-90deg) scale(0); opacity: 0; }\n .ihooman-pulse { position: absolute; inset: 0; border-radius: 50%; background: ${e}; animation: ihooman-pulse 2s ease-out infinite; }\n @keyframes ihooman-pulse { 0% { transform: scale(1); opacity: 0.5; } 100% { transform: scale(1.6); opacity: 0; } }\n .ihooman-toggle.open .ihooman-pulse { display: none; }\n .ihooman-badge { position: absolute; top: -4px; right: -4px; min-width: 20px; height: 20px; padding: 0 6px; background: #ef4444; color: white; font-size: 11px; font-weight: 600; border-radius: 10px; display: flex; align-items: center; justify-content: center; z-index: 2; }\n .ihooman-badge:empty { display: none; }\n .ihooman-window { position: fixed; ${x?"right: 20px":"left: 20px"}; ${v?"bottom: 90px":"top: 90px"}; width: ${s}px; height: ${r}px; max-height: calc(100vh - 120px); z-index: ${(a??9999)-1}; display: flex; flex-direction: column; opacity: 0; visibility: hidden; transform: translateY(20px) scale(0.95); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); }\n .ihooman-window.open { opacity: 1; visibility: visible; transform: translateY(0) scale(1); }\n .ihooman-container { position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; border-radius: ${i}px; overflow: hidden; }\n .ihooman-container::before { content: ''; position: absolute; inset: 0; background: ${p}; opacity: 0.97; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: ${i}px; border: 1px solid ${m}; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); }\n .ihooman-container > * { position: relative; z-index: 1; }\n .ihooman-header { padding: 16px 20px; background: linear-gradient(135deg, ${t}, ${n}); color: white; display: flex; align-items: center; gap: 12px; flex-shrink: 0; }\n .ihooman-header-avatar { width: 42px; height: 42px; border-radius: 50%; background: rgba(255,255,255,0.2); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n .ihooman-header-avatar img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }\n .ihooman-header-avatar svg { width: 22px; height: 22px; }\n .ihooman-header-info { flex: 1; min-width: 0; }\n .ihooman-header-title { font-size: 16px; font-weight: 600; margin-bottom: 2px; }\n .ihooman-header-status { display: flex; align-items: center; gap: 6px; font-size: 12px; opacity: 0.9; }\n .ihooman-status-dot { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; }\n .ihooman-status-dot.offline { background: #f59e0b; }\n .ihooman-header-actions { display: flex; gap: 8px; }\n .ihooman-header-btn { width: 32px; height: 32px; border-radius: 8px; background: rgba(255,255,255,0.15); border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; color: white; transition: background 0.2s; }\n .ihooman-header-btn:hover { background: rgba(255,255,255,0.25); }\n .ihooman-header-btn svg { width: 16px; height: 16px; }\n .ihooman-messages { flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; background: ${p}; }\n .ihooman-messages::-webkit-scrollbar { width: 6px; }\n .ihooman-messages::-webkit-scrollbar-track { background: transparent; }\n .ihooman-messages::-webkit-scrollbar-thumb { background: ${m}; border-radius: 3px; }\n .ihooman-message { display: flex; flex-direction: column; max-width: 85%; animation: ihooman-fadeIn 0.3s ease; }\n @keyframes ihooman-fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n .ihooman-message.user { align-self: flex-end; align-items: flex-end; }\n .ihooman-message.bot { align-self: flex-start; align-items: flex-start; }\n .ihooman-message-content { padding: 12px 16px; border-radius: 16px; word-wrap: break-word; }\n .ihooman-message.user .ihooman-message-content { background: ${b}; color: white; border-bottom-right-radius: 4px; }\n .ihooman-message.bot .ihooman-message-content { background: ${f}; color: ${u}; border-bottom-left-radius: 4px; }\n .ihooman-message-content code { background: rgba(0,0,0,0.1); padding: 2px 6px; border-radius: 4px; font-family: monospace; font-size: 13px; }\n .ihooman-message-time { font-size: 11px; color: ${h}; margin-top: 4px; padding: 0 4px; }\n .ihooman-typing { display: flex; align-items: center; gap: 8px; padding: 12px 16px; background: ${f}; border-radius: 16px; border-bottom-left-radius: 4px; max-width: 80px; align-self: flex-start; }\n .ihooman-typing-dots { display: flex; gap: 4px; }\n .ihooman-typing-dot { width: 8px; height: 8px; background: ${h}; border-radius: 50%; animation: ihooman-typing 1.4s infinite; }\n .ihooman-typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .ihooman-typing-dot:nth-child(3) { animation-delay: 0.4s; }\n @keyframes ihooman-typing { 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } 30% { transform: translateY(-4px); opacity: 1; } }\n .ihooman-input-area { padding: 12px 16px; background: ${p}; border-top: 1px solid ${m}; flex-shrink: 0; }\n .ihooman-input-wrapper { display: flex; align-items: flex-end; gap: 8px; background: ${g}; border: 1px solid ${m}; border-radius: 12px; padding: 8px 12px; transition: border-color 0.2s, box-shadow 0.2s; }\n .ihooman-input-wrapper:focus-within { border-color: ${e}; box-shadow: 0 0 0 3px rgba(0, 174, 255, 0.1); }\n .ihooman-input { flex: 1; border: none; background: transparent; font-family: inherit; font-size: 14px; color: ${u}; resize: none; max-height: 100px; outline: none; line-height: 1.4; }\n .ihooman-input::placeholder { color: ${h}; }\n .ihooman-input-btn { width: 36px; height: 36px; border-radius: 10px; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s; background: transparent; color: ${h}; }\n .ihooman-input-btn:hover { background: ${m}; color: ${u}; }\n .ihooman-input-btn.send { background: linear-gradient(135deg, ${t}, ${n}); color: white; }\n .ihooman-input-btn.send:hover { transform: scale(1.05); box-shadow: 0 4px 12px rgba(0, 174, 255, 0.3); }\n .ihooman-input-btn.send:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }\n .ihooman-input-btn svg { width: 18px; height: 18px; }\n .ihooman-file-input { display: none; }\n .ihooman-powered { text-align: center; padding: 8px; font-size: 11px; color: ${h}; background: ${p}; }\n .ihooman-powered a { color: ${e}; text-decoration: none; }\n .ihooman-error { padding: 16px; text-align: center; color: #ef4444; background: ${p}; }\n .ihooman-escalation-actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }\n .ihooman-escalation-btn { display: inline-flex; align-items: center; gap: 6px; padding: 10px 16px; border-radius: 8px; border: none; cursor: pointer; font-family: inherit; font-size: 13px; font-weight: 500; transition: all 0.2s ease; }\n .ihooman-escalation-btn svg { width: 16px; height: 16px; }\n .ihooman-escalation-btn.primary { background: linear-gradient(135deg, ${t}, ${n}); color: white; }\n .ihooman-escalation-btn.primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 174, 255, 0.3); }\n .ihooman-escalation-btn.secondary { background: ${l?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.05)"}; color: ${u}; border: 1px solid ${m}; }\n .ihooman-escalation-btn.secondary:hover { background: ${l?"rgba(255,255,255,0.15)":"rgba(0,0,0,0.08)"}; }\n .ihooman-escalation-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }\n .ihooman-status-bar { padding: 10px 16px; text-align: center; font-size: 13px; display: none; }\n .ihooman-status-bar.show { display: block; }\n .ihooman-status-bar.waiting { background: #fef3c7; color: #92400e; }\n .ihooman-status-bar.connected { background: #dcfce7; color: #166534; }\n .ihooman-chat-view { display: flex; flex-direction: column; flex: 1; overflow: hidden; }\n .ihooman-chat-view.hidden { display: none; }\n .ihooman-ticket-view { display: none; flex-direction: column; padding: 20px; gap: 16px; background: ${p}; flex: 1; overflow-y: auto; }\n .ihooman-ticket-view.show { display: flex; }\n .ihooman-ticket-title { font-size: 18px; font-weight: 600; color: ${u}; margin: 0; display: flex; align-items: center; gap: 8px; }\n .ihooman-ticket-subtitle { font-size: 13px; color: ${h}; margin: 0; }\n .ihooman-ticket-input { padding: 12px 14px; border: 1px solid ${m}; border-radius: 10px; font-size: 14px; font-family: inherit; background: ${g}; color: ${u}; outline: none; transition: border-color 0.2s; }\n .ihooman-ticket-input:focus { border-color: ${e}; }\n .ihooman-ticket-input::placeholder { color: ${h}; }\n .ihooman-ticket-textarea { min-height: 100px; resize: vertical; }\n .ihooman-ticket-submit { padding: 14px; background: linear-gradient(135deg, ${t}, ${n}); color: white; border: none; border-radius: 10px; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; }\n .ihooman-ticket-submit:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 174, 255, 0.3); }\n .ihooman-ticket-submit:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }\n .ihooman-ticket-back { padding: 10px; background: transparent; color: ${h}; border: 1px solid ${m}; border-radius: 10px; font-size: 13px; cursor: pointer; transition: all 0.2s; }\n .ihooman-ticket-back:hover { background: ${l?"rgba(255,255,255,0.05)":"rgba(0,0,0,0.03)"}; }\n .ihooman-action-buttons { display: flex; gap: 8px; padding: 0 16px 12px; }\n .ihooman-action-btn { flex: 1; padding: 10px; border: none; border-radius: 8px; font-size: 13px; font-weight: 500; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px; transition: all 0.2s; }\n .ihooman-action-btn svg { width: 16px; height: 16px; }\n .ihooman-action-btn.ticket { background: #6366f1; color: white; }\n .ihooman-action-btn.ticket:hover { background: #4f46e5; }\n .ihooman-action-btn.live { background: #10b981; color: white; }\n .ihooman-action-btn.live:hover { background: #059669; }\n .ihooman-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n @media (max-width: 480px) { .ihooman-window { width: calc(100vw - 20px); height: calc(100vh - 100px); left: 10px; right: 10px; bottom: 80px; max-height: none; } .ihooman-toggle { ${x?"right: 16px":"left: 16px"}; bottom: 16px; } }\n `}(),document.head.appendChild(e);const c=document.createElement("div");c.className="ihooman-widget",c.innerHTML=`\n <button class="ihooman-toggle" aria-label="Open chat">\n <span class="ihooman-pulse"></span>\n <span class="ihooman-badge"></span>\n <span class="chat-icon">${t}</span>\n <span class="close-icon">${n}</span>\n </button>\n <div class="ihooman-window" role="dialog" aria-label="Chat window">\n <div class="ihooman-container">\n <div class="ihooman-header">\n <div class="ihooman-header-avatar">${d.avatarUrl?`<img src="${v(d.avatarUrl)}" alt="Support">`:r}</div>\n <div class="ihooman-header-info">\n <div class="ihooman-header-title">${v(d.title||"Chat Support")}</div>\n <div class="ihooman-header-status"><span class="ihooman-status-dot"></span><span class="ihooman-status-text">Online</span></div>\n </div>\n <div class="ihooman-header-actions">\n <button class="ihooman-header-btn" data-action="refresh" title="New conversation">${s}</button>\n <button class="ihooman-header-btn" data-action="minimize" title="Minimize">${a}</button>\n </div>\n </div>\n \n \x3c!-- Chat View --\x3e\n <div class="ihooman-chat-view">\n <div class="ihooman-status-bar"></div>\n <div class="ihooman-messages" role="log" aria-live="polite"></div>\n <div class="ihooman-action-buttons">\n <button class="ihooman-action-btn ticket" data-action="show-ticket">\n <svg viewBox="0 0 24 24" fill="currentColor"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"/></svg>\n Submit Ticket\n </button>\n <button class="ihooman-action-btn live" data-action="live-agent">\n <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>\n Live Agent\n </button>\n </div>\n <div class="ihooman-input-area">\n <div class="ihooman-input-wrapper">\n ${d.enableFileUpload?`<button class="ihooman-input-btn attach" title="Attach file">${i}</button><input type="file" class="ihooman-file-input">`:""}\n <textarea class="ihooman-input" placeholder="${v(d.placeholder||"Type a message...")}" rows="1" aria-label="Message input"></textarea>\n <button class="ihooman-input-btn send" title="Send message" disabled>${o}</button>\n </div>\n </div>\n </div>\n \n \x3c!-- Ticket Form View --\x3e\n <div class="ihooman-ticket-view">\n <h4 class="ihooman-ticket-title">📝 Submit a Ticket</h4>\n <p class="ihooman-ticket-subtitle">We'll get back to you via email</p>\n <input class="ihooman-ticket-input" id="ihooman-ticket-name" placeholder="Your name" required>\n <input class="ihooman-ticket-input" id="ihooman-ticket-email" type="email" placeholder="Your email" required>\n <textarea class="ihooman-ticket-input ihooman-ticket-textarea" id="ihooman-ticket-issue" placeholder="Describe your issue..."></textarea>\n <button class="ihooman-ticket-submit" id="ihooman-ticket-submit">Submit Ticket</button>\n <button class="ihooman-ticket-back" id="ihooman-ticket-back">← Back to Chat</button>\n </div>\n \n ${d.poweredBy?'<div class="ihooman-powered">Powered by <a href="https://ihooman.ai" target="_blank" rel="noopener">Ihooman AI</a></div>':""}\n </div>\n </div>\n `,document.body.appendChild(c),h={widget:c,toggle:c.querySelector(".ihooman-toggle"),badge:c.querySelector(".ihooman-badge"),window:c.querySelector(".ihooman-window"),chatView:c.querySelector(".ihooman-chat-view"),ticketView:c.querySelector(".ihooman-ticket-view"),messages:c.querySelector(".ihooman-messages"),input:c.querySelector(".ihooman-input"),sendBtn:c.querySelector(".ihooman-input-btn.send"),attachBtn:c.querySelector(".ihooman-input-btn.attach"),fileInput:c.querySelector(".ihooman-file-input"),statusDot:c.querySelector(".ihooman-status-dot"),statusText:c.querySelector(".ihooman-status-text"),statusBar:c.querySelector(".ihooman-status-bar"),ticketName:c.querySelector("#ihooman-ticket-name"),ticketEmail:c.querySelector("#ihooman-ticket-email"),ticketIssue:c.querySelector("#ihooman-ticket-issue"),ticketSubmitBtn:c.querySelector("#ihooman-ticket-submit"),ticketBackBtn:c.querySelector("#ihooman-ticket-back")},function(){if(!h.toggle||!h.sendBtn||!h.input)return;h.toggle.addEventListener("click",P),h.sendBtn.addEventListener("click",U),h.input.addEventListener("input",()=>{h.sendBtn&&(h.sendBtn.disabled=!h.input?.value.trim()),h.input&&(h.input.style.height="auto",h.input.style.height=Math.min(h.input.scrollHeight,100)+"px")}),h.input.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),h.sendBtn?.disabled||U())}),h.attachBtn&&h.fileInput&&(h.attachBtn.addEventListener("click",()=>h.fileInput?.click()),h.fileInput.addEventListener("change",q));h.widget?.querySelector('[data-action="refresh"]')?.addEventListener("click",W),h.widget?.querySelector('[data-action="minimize"]')?.addEventListener("click",H),h.widget?.querySelector('[data-action="show-ticket"]')?.addEventListener("click",S),h.widget?.querySelector('[data-action="live-agent"]')?.addEventListener("click",C),h.ticketSubmitBtn&&h.ticketSubmitBtn.addEventListener("click",_);h.ticketBackBtn&&h.ticketBackBtn.addEventListener("click",()=>$("chat"))}()}function k(e,t="bot",n={}){const o={id:x("msg_"),content:e,sender:t,timestamp:new Date,metadata:n};if(p.messages.push(o),!h.messages)return o;const i=document.createElement("div");i.className=`ihooman-message ${t}`;const a="bot"===t&&!0===n?.escalation_offered;let s="";var r,u;if(a&&(s=`\n <div class="ihooman-escalation-actions">\n <button class="ihooman-escalation-btn primary" data-action="live-agent">\n ${c}\n <span>Talk to Agent</span>\n </button>\n <button class="ihooman-escalation-btn secondary" data-action="create-ticket">\n ${l}\n <span>Create Ticket</span>\n </button>\n </div>\n `),i.innerHTML=`\n <div class="ihooman-message-content">${u=e,u?v(u).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/\n/g,"<br>"):""}</div>\n ${s}\n ${d.showTimestamps?`<div class="ihooman-message-time">${r=o.timestamp,new Date(r).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}</div>`:""}\n `,a){const e=i.querySelector('[data-action="live-agent"]'),t=i.querySelector('[data-action="create-ticket"]');e&&e.addEventListener("click",()=>A("live-agent")),t&&t.addEventListener("click",()=>A("create-ticket"))}const m=h.messages.querySelector(".ihooman-typing");return m&&m.remove(),h.messages.appendChild(i),h.messages.scrollTop=h.messages.scrollHeight,"bot"!==t||p.isOpen||(p.unreadCount++,h.badge&&(h.badge.textContent=String(p.unreadCount)),d.enableSounds&&function(){try{const e=new Audio("data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYNBrP/AAAAAAAAAAAAAAAAAAAAAP/7UMQAA8AAAaQAAAAgAAA0gAAABExBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tQxBKDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=");e.volume=.3,e.play().catch(()=>{})}catch{}}()),w("message",o),o}function A(e){document.querySelectorAll(".ihooman-escalation-btn").forEach(e=>e.disabled=!0),"live-agent"===e?C():"create-ticket"===e&&S()}function $(e){h.chatView&&h.chatView.classList.toggle("hidden","chat"!==e),h.ticketView&&h.ticketView.classList.toggle("show","ticket"===e)}function S(){$("ticket"),setTimeout(()=>h.ticketName?.focus(),100)}function I(e,t){h.statusBar&&("hidden"!==e?(h.statusBar.classList.add("show"),h.statusBar.classList.remove("waiting","connected"),h.statusBar.classList.add(e),t&&(h.statusBar.textContent=t)):h.statusBar.classList.remove("show"))}async function _(){const e=h.ticketName?.value.trim(),t=h.ticketEmail?.value.trim(),n=h.ticketIssue?.value.trim();if(e&&t){h.ticketSubmitBtn&&(h.ticketSubmitBtn.disabled=!0,h.ticketSubmitBtn.textContent="Submitting...");try{const o=await fetch(`${d.serverUrl}/api/v1/public/submit-ticket`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:p.sessionId,user_name:e,user_email:t,issue:n||"No description provided",escalation_type:"ticket",widget_id:d.widgetId})}),i=await o.json();h.ticketName&&(h.ticketName.value=""),h.ticketEmail&&(h.ticketEmail.value=""),h.ticketIssue&&(h.ticketIssue.value=""),$("chat");k(`✅ Ticket submitted! We'll contact you at ${t}. Reference: #${i.ticket_id?i.ticket_id.slice(0,8):"submitted"}`,"bot",{is_system_message:!0})}catch(e){console.error("Error submitting ticket:",e),k("❌ Error submitting ticket. Please try again.","bot",{is_system_message:!0})}h.ticketSubmitBtn&&(h.ticketSubmitBtn.disabled=!1,h.ticketSubmitBtn.textContent="Submit Ticket")}else alert("Please fill in your name and email")}async function C(){if(!p.sessionId)return void k("Please send a message first to start a conversation.","bot",{is_system_message:!0});const e=h.widget?.querySelector('[data-action="live-agent"]');e&&(e.disabled=!0,e.innerHTML='<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg> Connecting...');try{const e=await fetch(`${d.serverUrl}/api/v1/public/live-agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:p.sessionId,visitor_id:p.visitorId,widget_id:d.widgetId})}),t=await e.json();u=!0,t.position_in_queue&&t.position_in_queue>1?I("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):I("connected","🟢 Connected to live support");const n=h.widget?.querySelector(".ihooman-action-buttons");n&&(n.style.display="none"),function(){if(B)return;B=setInterval(async()=>{if(p.sessionId&&u)try{const e=await fetch(`${d.serverUrl}/api/v1/public/transcript/${p.sessionId}`,{headers:{"Content-Type":"application/json"}});if(!e.ok)return;const t=await e.json(),n=t.messages?.length||0;if(n>T){t.messages.slice(T).forEach(e=>{"agent"===e.sender_type?k(e.content,"bot",{agent_name:"Agent"}):"ai"===e.sender_type&&e.content.includes("connected to live support")&&k(e.content,"bot",{is_system_message:!0})}),T=n}if("closed"===t.status){u=!1,z(),I("hidden"),k("This conversation has been closed. Thank you for contacting us!","bot",{is_system_message:!0});const e=h.widget?.querySelector(".ihooman-action-buttons");e&&(e.style.display="flex")}try{const e=await fetch(`${d.serverUrl}/api/v1/public/escalation-status/${p.sessionId}`);if(e.ok){const t=await e.json();t.escalated&&("in_progress"===t.ticket_status?I("connected","🟢 Connected to live agent"):"open"===t.ticket_status&&t.position_in_queue>1&&I("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`))}}catch{}}catch(e){console.error("Error polling for messages:",e)}else z()},3e3)}()}catch(e){console.error("Error requesting live agent:",e),k("❌ Unable to connect to live support. Please try again.","bot",{is_system_message:!0})}e&&(e.disabled=!1,e.innerHTML='<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg> Live Agent')}let B=null,T=0;function z(){B&&(clearInterval(B),B=null)}function E(){if(!d.showTypingIndicator||!h.messages)return;if(h.messages.querySelector(".ihooman-typing"))return;const e=document.createElement("div");e.className="ihooman-typing",e.innerHTML='<div class="ihooman-typing-dots"><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span><span class="ihooman-typing-dot"></span></div>',h.messages.appendChild(e),h.messages.scrollTop=h.messages.scrollHeight}function L(){const e=h.messages?.querySelector(".ihooman-typing");e&&e.remove()}function U(){const e=h.input?.value.trim();e&&(h.input&&(h.input.value="",h.input.style.height="auto"),h.sendBtn&&(h.sendBtn.disabled=!0),k(e,"user"),E(),async function(e){if(g&&g.readyState===WebSocket.OPEN)return void g.send(JSON.stringify({type:"message",content:e}));try{const t=await fetch(`${d.serverUrl}/api/v1/public/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:e,session_id:p.sessionId,visitor_id:p.visitorId,widget_id:d.widgetId})}),n=await t.json();L(),n.session_id&&(p.sessionId=n.session_id,d.persistSession&&y("session_id",p.sessionId)),n.response&&k(n.response,"bot",{sources:n.sources,confidence:n.confidence})}catch(e){L(),k("Sorry, something went wrong. Please try again.","bot"),w("error",e)}}(e))}function q(e){const t=e.target,n=t.files?.[0];if(!n)return;k(`📎 Uploading: ${n.name}...`,"user"),E();const o=new FormData;o.append("file",n),o.append("session_id",p.sessionId||""),o.append("visitor_id",p.visitorId||""),o.append("widget_id",d.widgetId),fetch(`${d.serverUrl}/api/upload`,{method:"POST",body:o}).then(e=>e.json()).then(e=>{L(),e.message&&k(e.message,"bot")}).catch(()=>{L(),k("Failed to upload file.","bot")}),t.value=""}function M(e){if(!d.serverUrl&&!e)return;let t;if(d.widgetId){const e=d.serverUrl?.replace(/^http/,"ws"),n=new URLSearchParams({widget_id:d.widgetId});p.visitorId&&n.append("visitor_id",p.visitorId),p.sessionId&&n.append("session_id",p.sessionId),t=`${e}/public/ws?${n.toString()}`}else t=e||d.serverUrl?.replace(/^http/,"ws")+"/ws";try{g=new WebSocket(t),g.onopen=()=>{p.isConnected=!0,f=0,F(!0),w("connected")},g.onclose=()=>{if(p.isConnected=!1,F(!1),w("disconnected"),f<5){f++;const t=Math.min(1e3*Math.pow(2,f),3e4);setTimeout(()=>M(e),t)}else console.warn("WebSocket reconnection failed, falling back to polling"),j()},g.onerror=e=>{console.error("WebSocket error:",e)},g.onmessage=e=>{try{const t=JSON.parse(e.data);if("connected"===t.type)t.session_id&&(p.sessionId=t.session_id,d.persistSession&&y("session_id",p.sessionId)),t.visitor_id&&(p.visitorId=t.visitor_id,d.persistSession&&y("visitor_id",p.visitorId)),t.welcome_message&&0===p.messages.length&&k(t.welcome_message,"bot");else if("message"===t.type){L();const e="user"===t.sender?"user":"bot";k(t.content,e,{confidence:t.confidence,agent_name:t.agent_name,escalation_offered:t.escalation_offered,escalated:t.escalated})}else"typing"===t.type?t.is_typing?E():L():"pong"===t.type||"error"===t.type&&(console.error("WebSocket server error:",t.message),w("error",{message:t.message}))}catch{}},function(){if(O)return;O=setInterval(()=>{g&&g.readyState===WebSocket.OPEN&&g.send(JSON.stringify({type:"ping"}))},3e4)}()}catch{console.warn("WebSocket not supported, using polling"),j()}}let O=null;function j(){b||(b=setInterval(async()=>{if(p.sessionId)try{const e=await fetch(`${d.serverUrl}/api/messages?session_id=${p.sessionId}&since=${Date.now()-5e3}&widget_id=${d.widgetId}`),t=await e.json();t.messages&&t.messages.forEach(e=>{p.messages.find(t=>t.id===e.id)||k(e.content,e.sender_type,e.metadata)})}catch{}},5e3))}function F(e){h.statusDot&&h.statusDot.classList.toggle("offline",!e),h.statusText&&(h.statusText.textContent=e?"Online":"Offline")}function N(){p.isOpen||(p.isOpen=!0,p.unreadCount=0,h.badge&&(h.badge.textContent=""),h.toggle&&h.toggle.classList.add("open"),h.window&&h.window.classList.add("open"),setTimeout(()=>h.input?.focus(),300),w("open"))}function H(){p.isOpen&&(p.isOpen=!1,h.toggle&&h.toggle.classList.remove("open"),h.window&&h.window.classList.remove("open"),w("close"))}function P(){p.isOpen?H():N()}function W(){p.sessionId=null,p.messages=[],y("session_id",null),h.messages&&(h.messages.innerHTML=""),d.welcomeMessage&&k(d.welcomeMessage,"bot")}async function D(t){if(!t.widgetId)return console.error("IhoomanChat: widgetId is required"),null;d={...e,...t},p.visitorId=y("visitor_id")||x("v_"),y("visitor_id",p.visitorId),d.persistSession&&(p.sessionId=y("session_id"));const n=d.serverUrl||"https://api.ihooman.ai",o=await async function(e,t){try{const n=await fetch(`${t}/api/widget/config?widget_id=${encodeURIComponent(e)}`);return n.ok?await n.json():{success:!1,error:(await n.json().catch(()=>({}))).error||`HTTP ${n.status}`}}catch(e){return{success:!1,error:"Unable to connect. Please check your internet connection."}}}(d.widgetId,n);let i;var a;return o.success&&o.config?(a=o.config,d.title=a.title||d.title,d.subtitle=a.subtitle||d.subtitle,d.welcomeMessage=a.welcomeMessage||d.welcomeMessage,d.placeholder=a.placeholder||d.placeholder,d.position=a.position||d.position,a.theme&&(d.primaryColor=a.theme.primaryColor||d.primaryColor,d.gradientFrom=a.theme.gradientFrom||d.gradientFrom,d.gradientTo=a.theme.gradientTo||d.gradientTo,d.fontFamily=a.theme.fontFamily||d.fontFamily,a.theme.borderRadius&&(d.borderRadius=parseInt(a.theme.borderRadius,10)||d.borderRadius)),a.behavior&&(d.startOpen=a.behavior.startOpen??d.startOpen,d.showTypingIndicator=a.behavior.showTypingIndicator??d.showTypingIndicator,d.showTimestamps=a.behavior.showTimestamps??d.showTimestamps,d.enableSounds=a.behavior.enableSounds??d.enableSounds,d.enableFileUpload=a.behavior.enableFileUpload??d.enableFileUpload,d.persistSession=a.behavior.persistSession??d.persistSession),a.branding&&(d.avatarUrl=a.branding.avatarUrl||d.avatarUrl,d.poweredBy=a.branding.poweredBy??d.poweredBy),i=o.chatEndpoint):o.error&&(console.warn("IhoomanChat: Could not fetch server config:",o.error),"Widget not authorized for this domain"===o.error&&console.error("IhoomanChat: Widget configuration error. Please contact support.")),V(),p.messages.forEach(e=>k(e.content,e.sender,e.metadata)),0===p.messages.length&&d.welcomeMessage&&k(d.welcomeMessage,"bot"),M(i),d.startOpen&&setTimeout(N,500),w("ready"),Y}const Y={init:D,open:N,close:H,toggle:P,destroy:function(){O&&(clearInterval(O),O=null),z(),g&&(g.close(),g=null),b&&(clearInterval(b),b=null),h.widget&&h.widget.remove();const e=document.getElementById("ihooman-widget-styles");e&&e.remove(),p={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},h={},f=0},sendMessage:function(e){e.trim()&&(h.input&&(h.input.value=e),U())},setUser:function(e){e.name&&y("user_name",e.name),e.email&&y("user_email",e.email),e.metadata&&y("user_metadata",e.metadata)},clearHistory:function(){W()},on:function(e,t){m[e]||(m[e]=[]),m[e].push(t)},off:function(e,t){m[e]&&(m[e]=m[e].filter(e=>e!==t))},getState:function(){return{...p}},version:"2.0.0"},R=Y;function J(){return{...Y}}!function(){if("undefined"==typeof document)return;let e=document.currentScript;if(!e){const t=document.getElementsByTagName("script");for(let n=0;n<t.length;n++)if(t[n].src&&t[n].src.includes("ihooman")){e=t[n];break}}if(!e)return;const t=e.getAttribute("data-widget-id");if(t){const n={widgetId:t},o=e.getAttribute("data-server-url");o&&(n.serverUrl=o);const i=e.getAttribute("data-theme");"light"!==i&&"dark"!==i||(n.theme=i);const a=e.getAttribute("data-position");a&&(n.position=a);"true"===e.getAttribute("data-start-open")&&(n.startOpen=!0),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>D(n)):D(n)}}(),"undefined"!=typeof window&&(window.IhoomanChat=R);export{R as IhoomanChat,J as createWidgetInstance,R as default};
2
2
  //# sourceMappingURL=index.esm.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.min.js","sources":["../src/widget.ts"],"sourcesContent":[null],"names":["defaultConfig","serverUrl","theme","position","title","subtitle","welcomeMessage","placeholder","primaryColor","gradientFrom","gradientTo","showTimestamps","showTypingIndicator","enableSounds","enableFileUpload","startOpen","persistSession","zIndex","width","height","buttonSize","borderRadius","fontFamily","avatarUrl","poweredBy","icons","config","widgetId","state","isOpen","isConnected","messages","sessionId","visitorId","unreadCount","elements","eventListeners","ws","pollInterval","reconnectAttempts","generateId","prefix","Math","random","toString","slice","Date","now","escapeHtml","text","div","document","createElement","textContent","innerHTML","storage","key","value","fullKey","undefined","item","localStorage","getItem","JSON","parse","removeItem","setItem","stringify","emit","event","data","forEach","fn","e","console","error","callbackName","charAt","toUpperCase","callback","createWidget","styleEl","id","isDark","bgColor","textColor","mutedColor","borderColor","inputBg","messageBgUser","messageBgBot","positionRight","includes","positionBottom","generateStyles","head","appendChild","widget","className","body","toggle","querySelector","badge","window","input","sendBtn","attachBtn","fileInput","statusDot","statusText","addEventListener","handleSendClick","disabled","trim","style","min","scrollHeight","shiftKey","preventDefault","click","handleFileSelect","startNewConversation","close","setupEventListeners","addMessage","content","sender","metadata","message","timestamp","push","el","date","replace","toLocaleTimeString","hour","minute","typing","remove","scrollTop","String","audio","Audio","volume","play","catch","playSound","showTyping","hideTyping","async","readyState","WebSocket","OPEN","send","type","response","fetch","method","headers","session_id","visitor_id","widget_id","json","sources","confidence","sendMessageToServer","target","file","files","name","formData","FormData","append","then","r","connectWebSocket","chatEndpoint","wsUrl","baseWsUrl","params","URLSearchParams","onopen","updateStatus","onclose","delay","pow","setTimeout","warn","startPolling","onerror","onmessage","welcome_message","length","agent_name","is_typing","heartbeatInterval","setInterval","startHeartbeat","msg","find","m","sender_type","online","classList","open","add","focus","init","userConfig","configResponse","encodeURIComponent","ok","success","status","fetchWidgetConfig","serverConfig","parseInt","behavior","branding","publicAPI","destroy","clearInterval","styles","getElementById","sendMessage","setUser","user","email","clearHistory","on","off","filter","getState","version","IhoomanChat","createWidgetInstance","script","currentScript","scripts","getElementsByTagName","i","src","getAttribute","autoConfig"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.min.js","sources":["../src/widget.ts"],"sourcesContent":[null],"names":["defaultConfig","serverUrl","theme","position","title","subtitle","welcomeMessage","placeholder","primaryColor","gradientFrom","gradientTo","showTimestamps","showTypingIndicator","enableSounds","enableFileUpload","startOpen","persistSession","zIndex","width","height","buttonSize","borderRadius","fontFamily","avatarUrl","poweredBy","icons","config","widgetId","state","isOpen","isConnected","messages","sessionId","visitorId","unreadCount","isLiveAgentMode","elements","eventListeners","ws","pollInterval","reconnectAttempts","generateId","prefix","Math","random","toString","slice","Date","now","escapeHtml","text","div","document","createElement","textContent","innerHTML","storage","key","value","fullKey","undefined","item","localStorage","getItem","JSON","parse","removeItem","setItem","stringify","emit","event","data","forEach","fn","e","console","error","callbackName","charAt","toUpperCase","callback","createWidget","styleEl","id","isDark","bgColor","textColor","mutedColor","borderColor","inputBg","messageBgUser","messageBgBot","positionRight","includes","positionBottom","generateStyles","head","appendChild","widget","className","body","toggle","querySelector","badge","window","chatView","ticketView","input","sendBtn","attachBtn","fileInput","statusDot","statusText","statusBar","ticketName","ticketEmail","ticketIssue","ticketSubmitBtn","ticketBackBtn","addEventListener","handleSendClick","disabled","trim","style","min","scrollHeight","shiftKey","preventDefault","click","handleFileSelect","startNewConversation","close","handleShowTicketForm","handleRequestLiveAgent","handleSubmitTicket","showView","setupEventListeners","addMessage","content","sender","metadata","message","timestamp","push","el","showEscalationButtons","escalation_offered","escalationButtonsHtml","date","replace","toLocaleTimeString","hour","minute","liveAgentBtn","ticketBtn","handleEscalationAction","typing","remove","scrollTop","String","audio","Audio","volume","play","catch","playSound","action","querySelectorAll","btn","view","classList","setTimeout","focus","updateStatusBar","status","add","async","name","email","issue","response","fetch","method","headers","session_id","user_name","user_email","escalation_type","widget_id","json","ticket_id","is_system_message","alert","liveBtn","visitor_id","position_in_queue","actionsDiv","display","liveAgentPollInterval","setInterval","ok","msgCount","length","lastMessageCount","msg","sender_type","agent_name","stopLiveAgentPolling","escResponse","escData","escalated","ticket_status","startLiveAgentPolling","clearInterval","showTyping","hideTyping","readyState","WebSocket","OPEN","send","type","sources","confidence","sendMessageToServer","target","file","files","formData","FormData","append","then","r","connectWebSocket","chatEndpoint","wsUrl","baseWsUrl","params","URLSearchParams","onopen","updateStatus","onclose","delay","pow","warn","startPolling","onerror","onmessage","welcome_message","is_typing","heartbeatInterval","startHeartbeat","find","m","online","open","init","userConfig","configResponse","encodeURIComponent","success","fetchWidgetConfig","serverConfig","parseInt","behavior","branding","publicAPI","destroy","styles","getElementById","sendMessage","setUser","user","clearHistory","on","off","filter","getState","version","IhoomanChat","createWidgetInstance","script","currentScript","scripts","getElementsByTagName","i","src","getAttribute","autoConfig"],"mappings":"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"}