@ihoomanai/chat-widget 2.1.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/SRI_HASHES.md +8 -8
- package/cdn/health.json +2 -2
- package/cdn/latest/chat.js +360 -7
- package/cdn/latest/chat.js.map +1 -1
- package/cdn/latest/chat.min.js +1 -1
- package/cdn/latest/chat.min.js.map +1 -1
- package/cdn/manifest.json +9 -9
- package/cdn/v2/chat.js +360 -7
- package/cdn/v2/chat.js.map +1 -1
- package/cdn/v2/chat.min.js +1 -1
- package/cdn/v2/chat.min.js.map +1 -1
- package/cdn/{v2.0.2 → v2.2.0}/chat.js +360 -7
- package/cdn/v2.2.0/chat.js.map +1 -0
- package/cdn/v2.2.0/chat.min.js +2 -0
- package/cdn/v2.2.0/chat.min.js.map +1 -0
- package/dist/index.cjs.js +314 -15
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +314 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.umd.js +314 -15
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/widget.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/types.ts +2 -0
- package/src/widget.ts +356 -14
- package/cdn/v2.0.2/chat.js.map +0 -1
- package/cdn/v2.0.2/chat.min.js +0 -2
- package/cdn/v2.0.2/chat.min.js.map +0 -1
package/dist/index.esm.min.js
CHANGED
|
@@ -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>',l='<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>',d='<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 c={widgetId:"",...e},p={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},h={};const g={};let m=null,u=null,f=0;function b(e=""){return e+Math.random().toString(36).slice(2,14)+Date.now().toString(36)}function x(e){const n=document.createElement("div");return n.textContent=e,n.innerHTML}function V(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 y(e,n){(g[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=c[t];if("function"==typeof o)try{o(n)}catch(e){console.error(`Error in ${t} callback:`,e)}}function w(){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}=c,d="dark"===c.theme,p=d?"#1a1a2e":"#ffffff",h=d?"#e4e4e7":"#1f2937",g=d?"#71717a":"#6b7280",m=d?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.08)",u=d?"#16162a":"#f9fafb",f=`linear-gradient(135deg, ${n}, ${t})`,b=d?"#252542":"#f1f5f9",x=c.position?.includes("right")??!0,V=c.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; ${x?"right: 20px":"left: 20px"}; ${V?"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; ${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, ${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 .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, ${n}, ${t}); 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: ${d?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.05)"}; color: ${h}; border: 1px solid ${m}; }\n .ihooman-escalation-btn.secondary:hover { background: ${d?"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 @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 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">${c.avatarUrl?`<img src="${x(c.avatarUrl)}" alt="Support">`:r}</div>\n <div class="ihooman-header-info">\n <div class="ihooman-header-title">${x(c.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 ${c.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="${x(c.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 ${c.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),h={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(!h.toggle||!h.sendBtn||!h.input)return;h.toggle.addEventListener("click",M),h.sendBtn.addEventListener("click",S),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||S())}),h.attachBtn&&h.fileInput&&(h.attachBtn.addEventListener("click",()=>h.fileInput?.click()),h.fileInput.addEventListener("change",C));h.widget?.querySelector('[data-action="refresh"]')?.addEventListener("click",L),h.widget?.querySelector('[data-action="minimize"]')?.addEventListener("click",z)}()}function v(e,n="bot",t={}){const o={id:b("msg_"),content:e,sender:n,timestamp:new Date,metadata:t};if(p.messages.push(o),!h.messages)return o;const i=document.createElement("div");i.className=`ihooman-message ${n}`;const a="bot"===n&&!0===t?.escalation_offered;let s="";var r,g;if(a&&(s=`\n <div class="ihooman-escalation-actions">\n <button class="ihooman-escalation-btn primary" data-action="live-agent">\n ${l}\n <span>Talk to Agent</span>\n </button>\n <button class="ihooman-escalation-btn secondary" data-action="create-ticket">\n ${d}\n <span>Create Ticket</span>\n </button>\n </div>\n `),i.innerHTML=`\n <div class="ihooman-message-content">${g=e,g?x(g).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/\n/g,"<br>"):""}</div>\n ${s}\n ${c.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"]'),n=i.querySelector('[data-action="create-ticket"]');e&&e.addEventListener("click",()=>A("live-agent")),n&&n.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"!==n||p.isOpen||(p.unreadCount++,h.badge&&(h.badge.textContent=String(p.unreadCount)),c.enableSounds&&function(){try{const e=new Audio("data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYNBrP/AAAAAAAAAAAAAAAAAAAAAP/7UMQAA8AAAaQAAAAgAAA0gAAABExBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tQxBKDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=");e.volume=.3,e.play().catch(()=>{})}catch{}}()),y("message",o),o}function A(e){document.querySelectorAll(".ihooman-escalation-btn").forEach(e=>e.disabled=!0),"live-agent"===e?(v("Connect me with a live agent","user"),k(),I("Connect me with a live agent")):"create-ticket"===e&&(v("I would like to create a support ticket","user"),k(),I("I would like to create a support ticket"))}function k(){if(!c.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 $(){const e=h.messages?.querySelector(".ihooman-typing");e&&e.remove()}function S(){const e=h.input?.value.trim();e&&(h.input&&(h.input.value="",h.input.style.height="auto"),h.sendBtn&&(h.sendBtn.disabled=!0),v(e,"user"),k(),I(e))}async function I(e){if(m&&m.readyState===WebSocket.OPEN)m.send(JSON.stringify({type:"message",content:e}));else try{const n=await fetch(`${c.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:c.widgetId})}),t=await n.json();$(),t.session_id&&(p.sessionId=t.session_id,c.persistSession&&V("session_id",p.sessionId)),t.response&&v(t.response,"bot",{sources:t.sources,confidence:t.confidence})}catch(e){$(),v("Sorry, something went wrong. Please try again.","bot"),y("error",e)}}function C(e){const n=e.target,t=n.files?.[0];if(!t)return;v(`📎 Uploading: ${t.name}...`,"user"),k();const o=new FormData;o.append("file",t),o.append("session_id",p.sessionId||""),o.append("visitor_id",p.visitorId||""),o.append("widget_id",c.widgetId),fetch(`${c.serverUrl}/api/upload`,{method:"POST",body:o}).then(e=>e.json()).then(e=>{$(),e.message&&v(e.message,"bot")}).catch(()=>{$(),v("Failed to upload file.","bot")}),n.value=""}function T(e){if(!c.serverUrl&&!e)return;let n;if(c.widgetId){const e=c.serverUrl?.replace(/^http/,"ws"),t=new URLSearchParams({widget_id:c.widgetId});p.visitorId&&t.append("visitor_id",p.visitorId),p.sessionId&&t.append("session_id",p.sessionId),n=`${e}/public/ws?${t.toString()}`}else n=e||c.serverUrl?.replace(/^http/,"ws")+"/ws";try{m=new WebSocket(n),m.onopen=()=>{p.isConnected=!0,f=0,B(!0),y("connected")},m.onclose=()=>{if(p.isConnected=!1,B(!1),y("disconnected"),f<5){f++;const n=Math.min(1e3*Math.pow(2,f),3e4);setTimeout(()=>T(e),n)}else console.warn("WebSocket reconnection failed, falling back to polling"),U()},m.onerror=e=>{console.error("WebSocket error:",e)},m.onmessage=e=>{try{const n=JSON.parse(e.data);if("connected"===n.type)n.session_id&&(p.sessionId=n.session_id,c.persistSession&&V("session_id",p.sessionId)),n.visitor_id&&(p.visitorId=n.visitor_id,c.persistSession&&V("visitor_id",p.visitorId)),n.welcome_message&&0===p.messages.length&&v(n.welcome_message,"bot");else if("message"===n.type){$();const e="user"===n.sender?"user":"bot";v(n.content,e,{confidence:n.confidence,agent_name:n.agent_name,escalation_offered:n.escalation_offered,escalated:n.escalated})}else"typing"===n.type?n.is_typing?k():$():"pong"===n.type||"error"===n.type&&(console.error("WebSocket server error:",n.message),y("error",{message:n.message}))}catch{}},function(){if(_)return;_=setInterval(()=>{m&&m.readyState===WebSocket.OPEN&&m.send(JSON.stringify({type:"ping"}))},3e4)}()}catch{console.warn("WebSocket not supported, using polling"),U()}}let _=null;function U(){u||(u=setInterval(async()=>{if(p.sessionId)try{const e=await fetch(`${c.serverUrl}/api/messages?session_id=${p.sessionId}&since=${Date.now()-5e3}&widget_id=${c.widgetId}`),n=await e.json();n.messages&&n.messages.forEach(e=>{p.messages.find(n=>n.id===e.id)||v(e.content,e.sender_type,e.metadata)})}catch{}},5e3))}function B(e){h.statusDot&&h.statusDot.classList.toggle("offline",!e),h.statusText&&(h.statusText.textContent=e?"Online":"Offline")}function E(){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),y("open"))}function z(){p.isOpen&&(p.isOpen=!1,h.toggle&&h.toggle.classList.remove("open"),h.window&&h.window.classList.remove("open"),y("close"))}function M(){p.isOpen?z():E()}function L(){p.sessionId=null,p.messages=[],V("session_id",null),h.messages&&(h.messages.innerHTML=""),c.welcomeMessage&&v(c.welcomeMessage,"bot")}async function O(n){if(!n.widgetId)return console.error("IhoomanChat: widgetId is required"),null;c={...e,...n},p.visitorId=V("visitor_id")||b("v_"),V("visitor_id",p.visitorId),c.persistSession&&(p.sessionId=V("session_id"));const t=c.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."}}}(c.widgetId,t);let i;var a;return o.success&&o.config?(a=o.config,c.title=a.title||c.title,c.subtitle=a.subtitle||c.subtitle,c.welcomeMessage=a.welcomeMessage||c.welcomeMessage,c.placeholder=a.placeholder||c.placeholder,c.position=a.position||c.position,a.theme&&(c.primaryColor=a.theme.primaryColor||c.primaryColor,c.gradientFrom=a.theme.gradientFrom||c.gradientFrom,c.gradientTo=a.theme.gradientTo||c.gradientTo,c.fontFamily=a.theme.fontFamily||c.fontFamily,a.theme.borderRadius&&(c.borderRadius=parseInt(a.theme.borderRadius,10)||c.borderRadius)),a.behavior&&(c.startOpen=a.behavior.startOpen??c.startOpen,c.showTypingIndicator=a.behavior.showTypingIndicator??c.showTypingIndicator,c.showTimestamps=a.behavior.showTimestamps??c.showTimestamps,c.enableSounds=a.behavior.enableSounds??c.enableSounds,c.enableFileUpload=a.behavior.enableFileUpload??c.enableFileUpload,c.persistSession=a.behavior.persistSession??c.persistSession),a.branding&&(c.avatarUrl=a.branding.avatarUrl||c.avatarUrl,c.poweredBy=a.branding.poweredBy??c.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.")),w(),p.messages.forEach(e=>v(e.content,e.sender,e.metadata)),0===p.messages.length&&c.welcomeMessage&&v(c.welcomeMessage,"bot"),T(i),c.startOpen&&setTimeout(E,500),y("ready"),F}const F={init:O,open:E,close:z,toggle:M,destroy:function(){_&&(clearInterval(_),_=null),m&&(m.close(),m=null),u&&(clearInterval(u),u=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),S())},setUser:function(e){e.name&&V("user_name",e.name),e.email&&V("user_email",e.email),e.metadata&&V("user_metadata",e.metadata)},clearHistory:function(){L()},on:function(e,n){g[e]||(g[e]=[]),g[e].push(n)},off:function(e,n){g[e]&&(g[e]=g[e].filter(e=>e!==n))},getState:function(){return{...p}},version:"2.0.0"},q=F;function j(){return{...F}}!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",()=>O(t)):O(t)}}(),"undefined"!=typeof window&&(window.IhoomanChat=q);export{q as IhoomanChat,j as createWidgetInstance,q 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",q),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||q())}),h.attachBtn&&h.fileInput&&(h.attachBtn.addEventListener("click",()=>h.fileInput?.click()),h.fileInput.addEventListener("change",U));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",I);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 _(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 I(){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?_("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):_("waiting","⏳ Connecting 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(),_("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?_("connected","🟢 Connected to live agent"):"open"===t.ticket_status&&(t.position_in_queue&&t.position_in_queue>1?_("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):_("waiting","⏳ Waiting for agent...")))}}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 q(){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 U(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),q())},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","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","showTyping","sendMessageToServer","hideTyping","async","readyState","WebSocket","OPEN","send","type","response","fetch","method","headers","session_id","visitor_id","widget_id","json","sources","confidence","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","escalated","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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"}
|