@ihoomanai/chat-widget 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +6 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +6 -5
- 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 +6 -5
- 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/widget.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/widget.ts +5 -4
package/dist/index.umd.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IhoomanChat={})}(this,function(e){"use strict";const t={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},o='<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>',i='<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>',a='<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>',s='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></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>',d='<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>',c='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>',p='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>';let h={widgetId:"",...t},m={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},u="chat",g=!1,f={};const b={};let y=null,x=null,w=0;let v=!1;function V(e=""){return e+Math.random().toString(36).slice(2,14)+Date.now().toString(36)}function k(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function A(e,t){const o="ihooman_chat_"+e;try{if(void 0===t){const e=localStorage.getItem(o);return e?JSON.parse(e):null}return null===t?(localStorage.removeItem(o),null):(localStorage.setItem(o,JSON.stringify(t)),t)}catch{return null}}function $(e,t){(b[e]||[]).forEach(o=>{try{o(t)}catch(t){console.error(`Error in ${e} event handler:`,t)}});const o=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`,n=h[o];if("function"==typeof n)try{n(t)}catch(e){console.error(`Error in ${o} callback:`,e)}}function S(){const e=document.createElement("style");e.id="ihooman-widget-styles",e.textContent=function(){const{primaryColor:e,gradientFrom:t,gradientTo:o,fontFamily:n,borderRadius:i,zIndex:a,width:s,height:r,buttonSize:d}=h,l="dark"===h.theme,c=l?"#1a1a2e":"#ffffff",p=l?"#e4e4e7":"#1f2937",m=l?"#71717a":"#6b7280",u=l?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.08)",g=l?"#16162a":"#f9fafb",f=`linear-gradient(135deg, ${t}, ${o})`,b=l?"#252542":"#f1f5f9",y=h.position?.includes("right")??!0,x=h.position?.includes("bottom")??!0;return`\n .ihooman-widget * { box-sizing: border-box; margin: 0; padding: 0; }\n .ihooman-widget { font-family: ${n}; font-size: 14px; line-height: 1.5; color: ${p}; -webkit-font-smoothing: antialiased; }\n .ihooman-toggle { position: fixed; ${y?"right: 20px":"left: 20px"}; ${x?"bottom: 20px":"top: 20px"}; width: ${d}px; height: ${d}px; border-radius: 50%; background: linear-gradient(135deg, ${t}, ${o}); 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 .chat-icon { display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease, opacity 0.2s ease; }\n .ihooman-toggle .close-icon { position: absolute; display: flex; align-items: center; justify-content: center; transform: rotate(-90deg) scale(0); opacity: 0; transition: transform 0.3s ease, opacity 0.2s ease; }\n .ihooman-toggle.open .chat-icon { transform: rotate(90deg) scale(0); opacity: 0; }\n .ihooman-toggle.open .close-icon { transform: rotate(0) scale(1); opacity: 1; }\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; ${y?"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: ${c}; opacity: 0.97; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: ${i}px; border: 1px solid ${u}; 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}, ${o}); 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 !important; 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: ${c}; }\n .ihooman-messages::-webkit-scrollbar { width: 6px; }\n .ihooman-messages::-webkit-scrollbar-track { background: transparent; }\n .ihooman-messages::-webkit-scrollbar-thumb { background: ${u}; 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: ${p}; 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: ${m}; 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: ${m}; 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: ${c}; border-top: 1px solid ${u}; flex-shrink: 0; }\n .ihooman-input-wrapper { display: flex; align-items: flex-end; gap: 8px; background: ${g}; border: 1px solid ${u}; 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: ${p}; resize: none; max-height: 100px; outline: none; line-height: 1.4; }\n .ihooman-input::placeholder { color: ${m}; }\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: ${m}; }\n .ihooman-input-btn:hover { background: ${u}; color: ${p}; }\n .ihooman-input-btn.send { background: linear-gradient(135deg, ${t}, ${o}); 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: ${m}; background: ${c}; }\n .ihooman-powered a { color: ${e}; text-decoration: none; }\n .ihooman-error { padding: 16px; text-align: center; color: #ef4444; background: ${c}; }\n .ihooman-escalation-actions { display: flex; gap: 10px; margin-top: 12px; flex-wrap: wrap; }\n .ihooman-widget .ihooman-escalation-btn { display: inline-flex !important; align-items: center !important; gap: 8px !important; padding: 10px 18px !important; border-radius: 8px !important; border: none !important; cursor: pointer !important; font-family: inherit !important; font-size: 13px !important; font-weight: 500 !important; transition: all 0.2s ease !important; width: auto !important; height: auto !important; min-width: 120px !important; }\n .ihooman-widget .ihooman-escalation-btn svg { width: 16px !important; height: 16px !important; flex-shrink: 0 !important; }\n .ihooman-widget .ihooman-escalation-btn.primary { background: linear-gradient(135deg, ${t}, ${o}) !important; color: white !important; }\n .ihooman-widget .ihooman-escalation-btn.primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 174, 255, 0.3); }\n .ihooman-widget .ihooman-escalation-btn.secondary { background: ${l?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.05)"} !important; color: ${p} !important; border: 1px solid ${u} !important; }\n .ihooman-widget .ihooman-escalation-btn.secondary:hover { background: ${l?"rgba(255,255,255,0.15)":"rgba(0,0,0,0.08)"} !important; }\n .ihooman-widget .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: ${c}; flex: 1; overflow-y: auto; }\n .ihooman-ticket-view.show { display: flex; }\n .ihooman-ticket-title { font-size: 18px; font-weight: 600; color: ${p}; margin: 0; display: flex; align-items: center; gap: 8px; }\n .ihooman-ticket-subtitle { font-size: 13px; color: ${m}; margin: 0; }\n .ihooman-ticket-input { padding: 12px 14px; border: 1px solid ${u}; border-radius: 10px; font-size: 14px; font-family: inherit; background: ${g}; color: ${p}; outline: none; transition: border-color 0.2s; }\n .ihooman-ticket-input:focus { border-color: ${e}; }\n .ihooman-ticket-input::placeholder { color: ${m}; }\n .ihooman-ticket-textarea { min-height: 100px; resize: vertical; }\n .ihooman-ticket-submit { padding: 14px; background: linear-gradient(135deg, ${t}, ${o}); 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: ${m}; border: 1px solid ${u}; 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-history-view { display: none; flex-direction: column; flex: 1; overflow: hidden; background: ${c}; }\n .ihooman-history-view.show { display: flex; }\n .ihooman-history-header { padding: 12px 16px; border-bottom: 1px solid ${u}; display: flex; justify-content: space-between; align-items: center; }\n .ihooman-history-title { font-size: 14px; font-weight: 600; color: ${p}; margin: 0; }\n .ihooman-history-new { display: inline-flex; align-items: center; gap: 4px; background: linear-gradient(135deg, ${t}, ${o}); color: white; border: none; padding: 8px 16px; border-radius: 8px !important; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s; }\n .ihooman-history-new:hover { transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0, 174, 255, 0.3); }\n .ihooman-history-new svg { width: 14px; height: 14px; flex-shrink: 0; }\n .ihooman-history-list { flex: 1; overflow-y: auto; padding: 8px; }\n .ihooman-history-item { padding: 12px; border: 1px solid ${u}; border-radius: 8px; margin-bottom: 6px; cursor: pointer; transition: all 0.2s; background: ${c}; }\n .ihooman-history-item:hover { background: ${l?"rgba(255,255,255,0.05)":"#f8fafc"}; }\n .ihooman-history-item.active { background: ${l?"rgba(0, 174, 255, 0.1)":"#eff6ff"}; border-color: ${e}; }\n .ihooman-history-preview { font-size: 13px; color: ${p}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .ihooman-history-meta { font-size: 11px; color: ${m}; margin-top: 4px; display: flex; justify-content: space-between; }\n .ihooman-history-empty { padding: 40px; text-align: center; color: ${m}; font-size: 14px; }\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 { ${y?"right: 16px":"left: 16px"}; bottom: 16px; } }\n `}(),document.head.appendChild(e);const t=document.createElement("div");t.className="ihooman-widget",t.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">${o}</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">${h.avatarUrl?`<img src="${k(h.avatarUrl)}" alt="Support">`:r}</div>\n <div class="ihooman-header-info">\n <div class="ihooman-header-title">${k(h.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="history" title="Chat history">${c}</button>\n <button class="ihooman-header-btn" data-action="refresh" title="New conversation">${p}</button>\n <button class="ihooman-header-btn" data-action="minimize" title="Minimize">${s}</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-input-area">\n <div class="ihooman-input-wrapper">\n ${h.enableFileUpload?`<button class="ihooman-input-btn attach" title="Attach file">${a}</button><input type="file" class="ihooman-file-input">`:""}\n <textarea class="ihooman-input" placeholder="${k(h.placeholder||"Type a message...")}" rows="1" aria-label="Message input"></textarea>\n <button class="ihooman-input-btn send" title="Send message" disabled>${i}</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 \x3c!-- History View --\x3e\n <div class="ihooman-history-view">\n <div class="ihooman-history-header">\n <span class="ihooman-history-title">Your Conversations</span>\n <button class="ihooman-history-new">${p} New Chat</button>\n </div>\n <div class="ihooman-history-list"></div>\n </div>\n \n ${h.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(t),f={widget:t,toggle:t.querySelector(".ihooman-toggle"),badge:t.querySelector(".ihooman-badge"),window:t.querySelector(".ihooman-window"),chatView:t.querySelector(".ihooman-chat-view"),ticketView:t.querySelector(".ihooman-ticket-view"),historyView:t.querySelector(".ihooman-history-view"),historyList:t.querySelector(".ihooman-history-list"),historyNewBtn:t.querySelector(".ihooman-history-new"),messages:t.querySelector(".ihooman-messages"),input:t.querySelector(".ihooman-input"),sendBtn:t.querySelector(".ihooman-input-btn.send"),attachBtn:t.querySelector(".ihooman-input-btn.attach"),fileInput:t.querySelector(".ihooman-file-input"),statusDot:t.querySelector(".ihooman-status-dot"),statusText:t.querySelector(".ihooman-status-text"),statusBar:t.querySelector(".ihooman-status-bar"),ticketName:t.querySelector("#ihooman-ticket-name"),ticketEmail:t.querySelector("#ihooman-ticket-email"),ticketIssue:t.querySelector("#ihooman-ticket-issue"),ticketSubmitBtn:t.querySelector("#ihooman-ticket-submit"),ticketBackBtn:t.querySelector("#ihooman-ticket-back")},function(){if(!f.toggle||!f.sendBtn||!f.input)return;f.toggle.addEventListener("click",Y),f.sendBtn.addEventListener("click",O),f.input.addEventListener("input",()=>{f.sendBtn&&(f.sendBtn.disabled=!f.input?.value.trim()),f.input&&(f.input.style.height="auto",f.input.style.height=Math.min(f.input.scrollHeight,100)+"px")}),f.input.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),f.sendBtn?.disabled||O())}),f.attachBtn&&f.fileInput&&(f.attachBtn.addEventListener("click",()=>f.fileInput?.click()),f.fileInput.addEventListener("change",j));f.widget?.querySelector('[data-action="refresh"]')?.addEventListener("click",R),f.widget?.querySelector('[data-action="minimize"]')?.addEventListener("click",D),f.widget?.querySelector('[data-action="history"]')?.addEventListener("click",T),f.ticketSubmitBtn&&f.ticketSubmitBtn.addEventListener("click",L);f.ticketBackBtn&&f.ticketBackBtn.addEventListener("click",()=>C("chat"));f.historyNewBtn&&f.historyNewBtn.addEventListener("click",()=>{R(),C("chat")})}()}function I(e,t="bot",o={}){const n={id:V("msg_"),content:e,sender:t,timestamp:new Date,metadata:o};if(m.messages.push(n),!f.messages)return n;const i=document.createElement("div");i.className=`ihooman-message ${t}`;const a="bot"===t&&!0===o?.escalation_offered;let s="";var r,c;if(a&&(s=`\n <div class="ihooman-escalation-actions">\n <button class="ihooman-escalation-btn primary" data-action="live-agent">\n ${d}\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">${c=e,c?k(c).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/\n/g,"<br>"):""}</div>\n ${s}\n ${h.showTimestamps?`<div class="ihooman-message-time">${r=n.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",()=>_("live-agent")),t&&t.addEventListener("click",()=>_("create-ticket"))}const p=f.messages.querySelector(".ihooman-typing");return p&&p.remove(),f.messages.appendChild(i),f.messages.scrollTop=f.messages.scrollHeight,"bot"!==t||m.isOpen||(m.unreadCount++,f.badge&&(f.badge.textContent=String(m.unreadCount)),h.enableSounds&&function(){try{const e=new Audio("data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYNBrP/AAAAAAAAAAAAAAAAAAAAAP/7UMQAA8AAAaQAAAAgAAA0gAAABExBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tQxBKDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=");e.volume=.3,e.play().catch(()=>{})}catch{}}()),$("message",n),n}function _(e){document.querySelectorAll(".ihooman-escalation-btn").forEach(e=>e.disabled=!0),"live-agent"===e?async function(){if(!m.sessionId)return void I("Please send a message first to start a conversation.","bot",{is_system_message:!0});const e=f.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(`${h.serverUrl}/api/widget/live-agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({widget_id:h.widgetId,session_id:m.sessionId,visitor_id:m.visitorId})}),t=await e.json();g=!0,t.position_in_queue&&t.position_in_queue>1?B("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):B("waiting","⏳ Connecting to live support..."),z()}catch(e){console.error("Error requesting live agent:",e),I("❌ 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')}():"create-ticket"===e&&(C("ticket"),setTimeout(()=>f.ticketName?.focus(),100))}function C(e){u=e,f.chatView&&f.chatView.classList.toggle("hidden","chat"!==e),f.ticketView&&f.ticketView.classList.toggle("show","ticket"===e),f.historyView&&f.historyView.classList.toggle("show","history"===e),"history"===e&&async function(){if(!f.historyList||!m.visitorId)return;f.historyList.innerHTML='<div class="ihooman-history-empty">Loading...</div>';try{const e=await fetch(`${h.serverUrl}/api/widget/conversations?widget_id=${h.widgetId}&visitor_id=${m.visitorId}&limit=20`);if(!e.ok)throw new Error("Failed to load history");const t=await e.json();if(!t.length)return void(f.historyList.innerHTML='<div class="ihooman-history-empty">No conversations yet</div>');f.historyList.innerHTML=t.map(e=>`\n <div class="ihooman-history-item ${e.session_id===m.sessionId?"active":""}" data-session-id="${e.session_id}">\n <div class="ihooman-history-preview">${k(e.preview||"New conversation")}</div>\n <div class="ihooman-history-meta">\n <span>${e.message_count} msgs</span>\n <span>${"pending"===e.status?"🟡 Pending":"closed"===e.status?"✓ Closed":""} ${function(e){const t=Date.now()-new Date(e).getTime();return t<6e4?"now":t<36e5?Math.floor(t/6e4)+"m":t<864e5?Math.floor(t/36e5)+"h":Math.floor(t/864e5)+"d"}(e.updated_at)}</span>\n </div>\n </div>\n `).join(""),f.historyList.querySelectorAll(".ihooman-history-item").forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.sessionId;t&&async function(e){m.sessionId=e,h.persistSession&&A("session_id",e);f.messages&&(f.messages.innerHTML="");g=!1,M(),B("hidden"),v=!0,y&&(y.close(),y=null);N(),C("chat"),await async function(e){try{const t=await fetch(`${h.serverUrl}/api/widget/transcript/${e}?widget_id=${h.widgetId}`);if(!t.ok)throw new Error("Failed to load messages");const o=await t.json();f.messages&&(f.messages.innerHTML=""),o.messages&&o.messages.length>0?o.messages.forEach(e=>{const t="user"===e.sender_type?"user":"bot";I(e.content,t,e.extra_data||{})}):h.welcomeMessage&&I(h.welcomeMessage,"bot"),"pending"===o.status?(g=!0,z(),B("waiting","⏳ Waiting for agent...")):"closed"===o.status&&B("hidden")}catch(e){console.error("Error loading conversation messages:",e),h.welcomeMessage&&I(h.welcomeMessage,"bot")}}(e)}(t)})})}catch(e){console.error("Error loading conversation history:",e),f.historyList.innerHTML='<div class="ihooman-history-empty">Failed to load history</div>'}}()}function T(){C("history"===u?"chat":"history")}function B(e,t){f.statusBar&&("hidden"!==e?(f.statusBar.classList.add("show"),f.statusBar.classList.remove("waiting","connected"),f.statusBar.classList.add(e),t&&(f.statusBar.textContent=t)):f.statusBar.classList.remove("show"))}async function L(){const e=f.ticketName?.value.trim(),t=f.ticketEmail?.value.trim(),o=f.ticketIssue?.value.trim();if(e&&t){f.ticketSubmitBtn&&(f.ticketSubmitBtn.disabled=!0,f.ticketSubmitBtn.textContent="Submitting...");try{const n=await fetch(`${h.serverUrl}/api/widget/submit-ticket`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({widget_id:h.widgetId,session_id:m.sessionId,user_name:e,user_email:t,issue:o||"No description provided"})}),i=await n.json();f.ticketName&&(f.ticketName.value=""),f.ticketEmail&&(f.ticketEmail.value=""),f.ticketIssue&&(f.ticketIssue.value=""),C("chat");I(`✅ 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),I("❌ Error submitting ticket. Please try again.","bot",{is_system_message:!0})}f.ticketSubmitBtn&&(f.ticketSubmitBtn.disabled=!1,f.ticketSubmitBtn.textContent="Submit Ticket")}else alert("Please fill in your name and email")}let E=null;function z(){E||(E=setInterval(async()=>{if(m.sessionId&&g)try{try{const e=await fetch(`${h.serverUrl}/api/widget/escalation-status/${m.sessionId}?widget_id=${h.widgetId}`);if(e.ok){const t=await e.json();t.escalated&&("in_progress"===t.ticket_status?B("connected","🟢 Connected to live agent"):"open"===t.ticket_status?t.position_in_queue&&t.position_in_queue>1?B("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):B("waiting","⏳ Waiting for agent..."):"closed"!==t.ticket_status&&"resolved"!==t.ticket_status||(g=!1,M(),B("hidden"),I("This conversation has been closed. Thank you for contacting us!","bot",{is_system_message:!0})))}}catch{}}catch(e){console.error("Error polling for messages:",e)}else M()},3e3))}function M(){E&&(clearInterval(E),E=null)}function q(){if(!h.showTypingIndicator||!f.messages)return;if(f.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>',f.messages.appendChild(e),f.messages.scrollTop=f.messages.scrollHeight}function U(){const e=f.messages?.querySelector(".ihooman-typing");e&&e.remove()}function O(){const e=f.input?.value.trim();e&&(f.input&&(f.input.value="",f.input.style.height="auto"),f.sendBtn&&(f.sendBtn.disabled=!0),I(e,"user"),q(),async function(e){if(y&&y.readyState===WebSocket.OPEN)return void y.send(JSON.stringify({type:"message",content:e}));try{const t=await fetch(`${h.serverUrl}/api/v1/public/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:e,session_id:m.sessionId,visitor_id:m.visitorId,widget_id:h.widgetId})}),o=await t.json();U(),o.session_id&&(m.sessionId=o.session_id,h.persistSession&&A("session_id",m.sessionId)),o.response&&I(o.response,"bot",{sources:o.sources,confidence:o.confidence})}catch(e){U(),I("Sorry, something went wrong. Please try again.","bot"),$("error",e)}}(e))}function j(e){const t=e.target,o=t.files?.[0];if(!o)return;I(`📎 Uploading: ${o.name}...`,"user"),q();const n=new FormData;n.append("file",o),n.append("session_id",m.sessionId||""),n.append("visitor_id",m.visitorId||""),n.append("widget_id",h.widgetId),fetch(`${h.serverUrl}/api/upload`,{method:"POST",body:n}).then(e=>e.json()).then(e=>{U(),e.message&&I(e.message,"bot")}).catch(()=>{U(),I("Failed to upload file.","bot")}),t.value=""}function N(e){if(!h.serverUrl&&!e)return;let t;if(h.widgetId){const e=h.serverUrl?.replace(/^http/,"ws"),o=new URLSearchParams({widget_id:h.widgetId});m.visitorId&&o.append("visitor_id",m.visitorId),m.sessionId&&o.append("session_id",m.sessionId),t=`${e}/public/ws?${o.toString()}`}else t=e||h.serverUrl?.replace(/^http/,"ws")+"/ws";try{y=new WebSocket(t),y.onopen=()=>{m.isConnected=!0,w=0,P(!0),$("connected")},y.onclose=()=>{if(m.isConnected=!1,P(!1),$("disconnected"),v)v=!1;else if(w<5){w++;const t=Math.min(1e3*Math.pow(2,w),3e4);setTimeout(()=>N(e),t)}else console.warn("WebSocket reconnection failed, falling back to polling"),H()},y.onerror=e=>{console.error("WebSocket error:",e)},y.onmessage=e=>{try{const t=JSON.parse(e.data);if("connected"===t.type)t.session_id&&(m.sessionId=t.session_id,h.persistSession&&A("session_id",m.sessionId)),t.visitor_id&&(m.visitorId=t.visitor_id,h.persistSession&&A("visitor_id",m.visitorId)),t.welcome_message&&0===m.messages.length&&I(t.welcome_message,"bot");else if("message"===t.type){U();const e="user"===t.sender?"user":"bot";I(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?q():U():"pong"===t.type||"error"===t.type&&(console.error("WebSocket server error:",t.message),$("error",{message:t.message}))}catch{}},function(){if(F)return;F=setInterval(()=>{y&&y.readyState===WebSocket.OPEN&&y.send(JSON.stringify({type:"ping"}))},3e4)}()}catch{console.warn("WebSocket not supported, using polling"),H()}}let F=null;function H(){x||(x=setInterval(async()=>{if(m.sessionId)try{const e=await fetch(`${h.serverUrl}/api/messages?session_id=${m.sessionId}&since=${Date.now()-5e3}&widget_id=${h.widgetId}`),t=await e.json();t.messages&&t.messages.forEach(e=>{m.messages.find(t=>t.id===e.id)||I(e.content,e.sender_type,e.metadata)})}catch{}},5e3))}function P(e){f.statusDot&&f.statusDot.classList.toggle("offline",!e),f.statusText&&(f.statusText.textContent=e?"Online":"Offline")}function W(){m.isOpen||(m.isOpen=!0,m.unreadCount=0,f.badge&&(f.badge.textContent=""),f.toggle&&f.toggle.classList.add("open"),f.window&&f.window.classList.add("open"),setTimeout(()=>f.input?.focus(),300),$("open"))}function D(){m.isOpen&&(m.isOpen=!1,f.toggle&&f.toggle.classList.remove("open"),f.window&&f.window.classList.remove("open"),$("close"))}function Y(){m.isOpen?D():W()}function R(){m.sessionId=null,m.visitorId=null,m.messages=[],g=!1,A("session_id",null),m.visitorId=V("v_"),A("visitor_id",m.visitorId),f.messages&&(f.messages.innerHTML=""),B("hidden"),M(),w=0,y&&(v=!0,y.close(),y=null),N(),h.welcomeMessage&&I(h.welcomeMessage,"bot"),$("newConversation")}async function J(e){if(!e.widgetId)return console.error("IhoomanChat: widgetId is required"),null;h={...t,...e},m.visitorId=A("visitor_id")||V("v_"),A("visitor_id",m.visitorId),h.persistSession&&(m.sessionId=A("session_id"));const o=h.serverUrl||"https://api.ihooman.ai",n=await async function(e,t){try{const o=await fetch(`${t}/api/widget/config?widget_id=${encodeURIComponent(e)}`);return o.ok?await o.json():{success:!1,error:(await o.json().catch(()=>({}))).error||`HTTP ${o.status}`}}catch(e){return{success:!1,error:"Unable to connect. Please check your internet connection."}}}(h.widgetId,o);let i;var a;return n.success&&n.config?(a=n.config,h.title=a.title||h.title,h.subtitle=a.subtitle||h.subtitle,h.welcomeMessage=a.welcomeMessage||h.welcomeMessage,h.placeholder=a.placeholder||h.placeholder,h.position=a.position||h.position,a.theme&&(h.primaryColor=a.theme.primaryColor||h.primaryColor,h.gradientFrom=a.theme.gradientFrom||h.gradientFrom,h.gradientTo=a.theme.gradientTo||h.gradientTo,h.fontFamily=a.theme.fontFamily||h.fontFamily,a.theme.borderRadius&&(h.borderRadius=parseInt(a.theme.borderRadius,10)||h.borderRadius)),a.behavior&&(h.startOpen=a.behavior.startOpen??h.startOpen,h.showTypingIndicator=a.behavior.showTypingIndicator??h.showTypingIndicator,h.showTimestamps=a.behavior.showTimestamps??h.showTimestamps,h.enableSounds=a.behavior.enableSounds??h.enableSounds,h.enableFileUpload=a.behavior.enableFileUpload??h.enableFileUpload,h.persistSession=a.behavior.persistSession??h.persistSession),a.branding&&(h.avatarUrl=a.branding.avatarUrl||h.avatarUrl,h.poweredBy=a.branding.poweredBy??h.poweredBy),i=n.chatEndpoint):n.error&&(console.warn("IhoomanChat: Could not fetch server config:",n.error),"Widget not authorized for this domain"===n.error&&console.error("IhoomanChat: Widget configuration error. Please contact support.")),S(),m.messages.forEach(e=>I(e.content,e.sender,e.metadata)),0===m.messages.length&&h.welcomeMessage&&I(h.welcomeMessage,"bot"),N(i),h.startOpen&&setTimeout(W,500),$("ready"),Q}const Q={init:J,open:W,close:D,toggle:Y,destroy:function(){F&&(clearInterval(F),F=null),M(),v=!0,y&&(y.close(),y=null),x&&(clearInterval(x),x=null),f.widget&&f.widget.remove();const e=document.getElementById("ihooman-widget-styles");e&&e.remove(),m={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},f={},w=0,v=!1},sendMessage:function(e){e.trim()&&(f.input&&(f.input.value=e),O())},setUser:function(e){e.name&&A("user_name",e.name),e.email&&A("user_email",e.email),e.metadata&&A("user_metadata",e.metadata)},clearHistory:function(){R()},on:function(e,t){b[e]||(b[e]=[]),b[e].push(t)},off:function(e,t){b[e]&&(b[e]=b[e].filter(e=>e!==t))},getState:function(){return{...m}},version:"2.0.0"},G=Q;!function(){if("undefined"==typeof document)return;let e=document.currentScript;if(!e){const t=document.getElementsByTagName("script");for(let o=0;o<t.length;o++)if(t[o].src&&t[o].src.includes("ihooman")){e=t[o];break}}if(!e)return;const t=e.getAttribute("data-widget-id");if(t){const o={widgetId:t},n=e.getAttribute("data-server-url");n&&(o.serverUrl=n);const i=e.getAttribute("data-theme");"light"!==i&&"dark"!==i||(o.theme=i);const a=e.getAttribute("data-position");a&&(o.position=a);"true"===e.getAttribute("data-start-open")&&(o.startOpen=!0),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>J(o)):J(o)}}(),"undefined"!=typeof window&&(window.IhoomanChat=G),e.IhoomanChat=G,e.createWidgetInstance=function(){return{...Q}},e.default=G,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IhoomanChat={})}(this,function(e){"use strict";const t={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},o='<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>',i='<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>',a='<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>',s='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></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>',d='<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>',c='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>',p='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>';let h={widgetId:"",...t},m={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},u="chat",g=!1,f={};const b={};let y=null,x=null,w=0;let v=!1;function V(e=""){return e+Math.random().toString(36).slice(2,14)+Date.now().toString(36)}function k(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function A(e,t){const o="ihooman_chat_"+e;try{if(void 0===t){const e=localStorage.getItem(o);return e?JSON.parse(e):null}return null===t?(localStorage.removeItem(o),null):(localStorage.setItem(o,JSON.stringify(t)),t)}catch{return null}}function $(e,t){(b[e]||[]).forEach(o=>{try{o(t)}catch(t){console.error(`Error in ${e} event handler:`,t)}});const o=`on${e.charAt(0).toUpperCase()}${e.slice(1)}`,n=h[o];if("function"==typeof n)try{n(t)}catch(e){console.error(`Error in ${o} callback:`,e)}}function S(){const e=document.createElement("style");e.id="ihooman-widget-styles",e.textContent=function(){const{primaryColor:e,gradientFrom:t,gradientTo:o,fontFamily:n,borderRadius:i,zIndex:a,width:s,height:r,buttonSize:d}=h,l="dark"===h.theme,c=l?"#1a1a2e":"#ffffff",p=l?"#e4e4e7":"#1f2937",m=l?"#71717a":"#6b7280",u=l?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.08)",g=l?"#16162a":"#f9fafb",f=`linear-gradient(135deg, ${t}, ${o})`,b=l?"#252542":"#f1f5f9",y=h.position?.includes("right")??!0,x=h.position?.includes("bottom")??!0;return`\n .ihooman-widget * { box-sizing: border-box; margin: 0; padding: 0; }\n .ihooman-widget { font-family: ${n}; font-size: 14px; line-height: 1.5; color: ${p}; -webkit-font-smoothing: antialiased; }\n .ihooman-widget button { border-radius: 8px; }\n .ihooman-toggle { position: fixed; ${y?"right: 20px":"left: 20px"}; ${x?"bottom: 20px":"top: 20px"}; width: ${d}px; height: ${d}px; border-radius: 50% !important; background: linear-gradient(135deg, ${t}, ${o}); 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 .chat-icon { display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease, opacity 0.2s ease; }\n .ihooman-toggle .close-icon { position: absolute; display: flex; align-items: center; justify-content: center; transform: rotate(-90deg) scale(0); opacity: 0; transition: transform 0.3s ease, opacity 0.2s ease; }\n .ihooman-toggle.open .chat-icon { transform: rotate(90deg) scale(0); opacity: 0; }\n .ihooman-toggle.open .close-icon { transform: rotate(0) scale(1); opacity: 1; }\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; ${y?"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); overscroll-behavior: contain; }\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: ${c}; opacity: 0.97; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: ${i}px; border: 1px solid ${u}; 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}, ${o}); 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 !important; 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: ${c}; overscroll-behavior: contain; }\n .ihooman-messages::-webkit-scrollbar { width: 6px; }\n .ihooman-messages::-webkit-scrollbar-track { background: transparent; }\n .ihooman-messages::-webkit-scrollbar-thumb { background: ${u}; 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: ${p}; 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: ${m}; 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: ${m}; 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: ${c}; border-top: 1px solid ${u}; flex-shrink: 0; }\n .ihooman-input-wrapper { display: flex; align-items: flex-end; gap: 8px; background: ${g}; border: 1px solid ${u}; 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: ${p}; resize: none; max-height: 100px; outline: none; line-height: 1.4; }\n .ihooman-input::placeholder { color: ${m}; }\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: ${m}; }\n .ihooman-input-btn:hover { background: ${u}; color: ${p}; }\n .ihooman-input-btn.send { background: linear-gradient(135deg, ${t}, ${o}); 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: ${m}; background: ${c}; }\n .ihooman-powered a { color: ${e}; text-decoration: none; }\n .ihooman-error { padding: 16px; text-align: center; color: #ef4444; background: ${c}; }\n .ihooman-escalation-actions { display: flex; gap: 10px; margin-top: 12px; flex-wrap: wrap; }\n .ihooman-widget .ihooman-escalation-btn { display: inline-flex !important; align-items: center !important; gap: 8px !important; padding: 10px 18px !important; border-radius: 8px !important; border: none !important; cursor: pointer !important; font-family: inherit !important; font-size: 13px !important; font-weight: 500 !important; transition: all 0.2s ease !important; width: auto !important; height: auto !important; min-width: 120px !important; }\n .ihooman-widget .ihooman-escalation-btn svg { width: 16px !important; height: 16px !important; flex-shrink: 0 !important; }\n .ihooman-widget .ihooman-escalation-btn.primary { background: linear-gradient(135deg, ${t}, ${o}) !important; color: white !important; }\n .ihooman-widget .ihooman-escalation-btn.primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 174, 255, 0.3); }\n .ihooman-widget .ihooman-escalation-btn.secondary { background: ${l?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.05)"} !important; color: ${p} !important; border: 1px solid ${u} !important; }\n .ihooman-widget .ihooman-escalation-btn.secondary:hover { background: ${l?"rgba(255,255,255,0.15)":"rgba(0,0,0,0.08)"} !important; }\n .ihooman-widget .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: ${c}; flex: 1; overflow-y: auto; }\n .ihooman-ticket-view.show { display: flex; }\n .ihooman-ticket-title { font-size: 18px; font-weight: 600; color: ${p}; margin: 0; display: flex; align-items: center; gap: 8px; }\n .ihooman-ticket-subtitle { font-size: 13px; color: ${m}; margin: 0; }\n .ihooman-ticket-input { padding: 12px 14px; border: 1px solid ${u}; border-radius: 10px; font-size: 14px; font-family: inherit; background: ${g}; color: ${p}; outline: none; transition: border-color 0.2s; }\n .ihooman-ticket-input:focus { border-color: ${e}; }\n .ihooman-ticket-input::placeholder { color: ${m}; }\n .ihooman-ticket-textarea { min-height: 100px; resize: vertical; }\n .ihooman-ticket-submit { padding: 14px; background: linear-gradient(135deg, ${t}, ${o}); 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: ${m}; border: 1px solid ${u}; 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-history-view { display: none; flex-direction: column; flex: 1; overflow: hidden; background: ${c}; }\n .ihooman-history-view.show { display: flex; }\n .ihooman-history-header { padding: 12px 16px; border-bottom: 1px solid ${u}; display: flex; justify-content: space-between; align-items: center; }\n .ihooman-history-title { font-size: 14px; font-weight: 600; color: ${p}; margin: 0; }\n .ihooman-history-new { display: inline-flex; align-items: center; gap: 4px; background: linear-gradient(135deg, ${t}, ${o}); color: white; border: none; padding: 8px 16px; border-radius: 8px !important; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s; }\n .ihooman-history-new:hover { transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0, 174, 255, 0.3); }\n .ihooman-history-new svg { width: 14px; height: 14px; flex-shrink: 0; }\n .ihooman-history-list { flex: 1; overflow-y: auto; padding: 8px; overscroll-behavior: contain; }\n .ihooman-history-item { padding: 12px; border: 1px solid ${u}; border-radius: 8px; margin-bottom: 6px; cursor: pointer; transition: all 0.2s; background: ${c}; }\n .ihooman-history-item:hover { background: ${l?"rgba(255,255,255,0.05)":"#f8fafc"}; }\n .ihooman-history-item.active { background: ${l?"rgba(0, 174, 255, 0.1)":"#eff6ff"}; border-color: ${e}; }\n .ihooman-history-preview { font-size: 13px; color: ${p}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .ihooman-history-meta { font-size: 11px; color: ${m}; margin-top: 4px; display: flex; justify-content: space-between; }\n .ihooman-history-empty { padding: 40px; text-align: center; color: ${m}; font-size: 14px; }\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 { ${y?"right: 16px":"left: 16px"}; bottom: 16px; } }\n `}(),document.head.appendChild(e);const t=document.createElement("div");t.className="ihooman-widget",t.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">${o}</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">${h.avatarUrl?`<img src="${k(h.avatarUrl)}" alt="Support">`:r}</div>\n <div class="ihooman-header-info">\n <div class="ihooman-header-title">${k(h.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="history" title="Chat history">${c}</button>\n <button class="ihooman-header-btn" data-action="refresh" title="New conversation">${p}</button>\n <button class="ihooman-header-btn" data-action="minimize" title="Minimize">${s}</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-input-area">\n <div class="ihooman-input-wrapper">\n ${h.enableFileUpload?`<button class="ihooman-input-btn attach" title="Attach file">${a}</button><input type="file" class="ihooman-file-input">`:""}\n <textarea class="ihooman-input" placeholder="${k(h.placeholder||"Type a message...")}" rows="1" aria-label="Message input"></textarea>\n <button class="ihooman-input-btn send" title="Send message" disabled>${i}</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 \x3c!-- History View --\x3e\n <div class="ihooman-history-view">\n <div class="ihooman-history-header">\n <span class="ihooman-history-title">Your Conversations</span>\n <button class="ihooman-history-new">${p} New Chat</button>\n </div>\n <div class="ihooman-history-list"></div>\n </div>\n \n ${h.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(t),f={widget:t,toggle:t.querySelector(".ihooman-toggle"),badge:t.querySelector(".ihooman-badge"),window:t.querySelector(".ihooman-window"),chatView:t.querySelector(".ihooman-chat-view"),ticketView:t.querySelector(".ihooman-ticket-view"),historyView:t.querySelector(".ihooman-history-view"),historyList:t.querySelector(".ihooman-history-list"),historyNewBtn:t.querySelector(".ihooman-history-new"),messages:t.querySelector(".ihooman-messages"),input:t.querySelector(".ihooman-input"),sendBtn:t.querySelector(".ihooman-input-btn.send"),attachBtn:t.querySelector(".ihooman-input-btn.attach"),fileInput:t.querySelector(".ihooman-file-input"),statusDot:t.querySelector(".ihooman-status-dot"),statusText:t.querySelector(".ihooman-status-text"),statusBar:t.querySelector(".ihooman-status-bar"),ticketName:t.querySelector("#ihooman-ticket-name"),ticketEmail:t.querySelector("#ihooman-ticket-email"),ticketIssue:t.querySelector("#ihooman-ticket-issue"),ticketSubmitBtn:t.querySelector("#ihooman-ticket-submit"),ticketBackBtn:t.querySelector("#ihooman-ticket-back")},function(){if(!f.toggle||!f.sendBtn||!f.input)return;f.toggle.addEventListener("click",Y),f.sendBtn.addEventListener("click",O),f.input.addEventListener("input",()=>{f.sendBtn&&(f.sendBtn.disabled=!f.input?.value.trim()),f.input&&(f.input.style.height="auto",f.input.style.height=Math.min(f.input.scrollHeight,100)+"px")}),f.input.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),f.sendBtn?.disabled||O())}),f.attachBtn&&f.fileInput&&(f.attachBtn.addEventListener("click",()=>f.fileInput?.click()),f.fileInput.addEventListener("change",j));f.widget?.querySelector('[data-action="refresh"]')?.addEventListener("click",R),f.widget?.querySelector('[data-action="minimize"]')?.addEventListener("click",D),f.widget?.querySelector('[data-action="history"]')?.addEventListener("click",T),f.ticketSubmitBtn&&f.ticketSubmitBtn.addEventListener("click",L);f.ticketBackBtn&&f.ticketBackBtn.addEventListener("click",()=>C("chat"));f.historyNewBtn&&f.historyNewBtn.addEventListener("click",()=>{R(),C("chat")})}()}function I(e,t="bot",o={}){const n={id:V("msg_"),content:e,sender:t,timestamp:new Date,metadata:o};if(m.messages.push(n),!f.messages)return n;const i=document.createElement("div");i.className=`ihooman-message ${t}`;const a="bot"===t&&!0===o?.escalation_offered;let s="";var r,c;if(a&&(s=`\n <div class="ihooman-escalation-actions">\n <button class="ihooman-escalation-btn primary" data-action="live-agent">\n ${d}\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">${c=e,c?k(c).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/\n/g,"<br>"):""}</div>\n ${s}\n ${h.showTimestamps?`<div class="ihooman-message-time">${r=n.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",()=>_("live-agent")),t&&t.addEventListener("click",()=>_("create-ticket"))}const p=f.messages.querySelector(".ihooman-typing");return p&&p.remove(),f.messages.appendChild(i),f.messages.scrollTop=f.messages.scrollHeight,"bot"!==t||m.isOpen||(m.unreadCount++,f.badge&&(f.badge.textContent=String(m.unreadCount)),h.enableSounds&&function(){try{const e=new Audio("data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYNBrP/AAAAAAAAAAAAAAAAAAAAAP/7UMQAA8AAAaQAAAAgAAA0gAAABExBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tQxBKDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=");e.volume=.3,e.play().catch(()=>{})}catch{}}()),$("message",n),n}function _(e){document.querySelectorAll(".ihooman-escalation-btn").forEach(e=>e.disabled=!0),"live-agent"===e?async function(){if(!m.sessionId)return void I("Please send a message first to start a conversation.","bot",{is_system_message:!0});const e=f.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(`${h.serverUrl}/api/widget/live-agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({widget_id:h.widgetId,session_id:m.sessionId,visitor_id:m.visitorId})}),t=await e.json();g=!0,t.position_in_queue&&t.position_in_queue>1?B("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):B("waiting","⏳ Connecting to live support..."),z()}catch(e){console.error("Error requesting live agent:",e),I("❌ 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')}():"create-ticket"===e&&(C("ticket"),setTimeout(()=>f.ticketName?.focus(),100))}function C(e){u=e,f.chatView&&f.chatView.classList.toggle("hidden","chat"!==e),f.ticketView&&f.ticketView.classList.toggle("show","ticket"===e),f.historyView&&f.historyView.classList.toggle("show","history"===e),"history"===e&&async function(){if(!f.historyList||!m.visitorId)return;f.historyList.innerHTML='<div class="ihooman-history-empty">Loading...</div>';try{const e=await fetch(`${h.serverUrl}/api/widget/conversations?widget_id=${h.widgetId}&visitor_id=${m.visitorId}&limit=20`);if(!e.ok)throw new Error("Failed to load history");const t=await e.json();if(!t.length)return void(f.historyList.innerHTML='<div class="ihooman-history-empty">No conversations yet</div>');f.historyList.innerHTML=t.map(e=>`\n <div class="ihooman-history-item ${e.session_id===m.sessionId?"active":""}" data-session-id="${e.session_id}">\n <div class="ihooman-history-preview">${k(e.preview||"New conversation")}</div>\n <div class="ihooman-history-meta">\n <span>${e.message_count} msgs</span>\n <span>${"pending"===e.status?"🟡 Pending":"closed"===e.status?"✓ Closed":""} ${function(e){const t=Date.now()-new Date(e).getTime();return t<6e4?"now":t<36e5?Math.floor(t/6e4)+"m":t<864e5?Math.floor(t/36e5)+"h":Math.floor(t/864e5)+"d"}(e.updated_at)}</span>\n </div>\n </div>\n `).join(""),f.historyList.querySelectorAll(".ihooman-history-item").forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.sessionId;t&&async function(e){m.sessionId=e,h.persistSession&&A("session_id",e);f.messages&&(f.messages.innerHTML="");g=!1,M(),B("hidden"),v=!0,y&&(y.close(),y=null);N(),C("chat"),await async function(e){try{const t=await fetch(`${h.serverUrl}/api/widget/transcript/${e}?widget_id=${h.widgetId}`);if(!t.ok)throw new Error("Failed to load messages");const o=await t.json();f.messages&&(f.messages.innerHTML=""),o.messages&&o.messages.length>0?o.messages.forEach(e=>{const t="user"===e.sender_type?"user":"bot";I(e.content,t,e.extra_data||{})}):h.welcomeMessage&&I(h.welcomeMessage,"bot"),"pending"===o.status?(g=!0,z(),B("waiting","⏳ Waiting for agent...")):"closed"===o.status&&B("hidden")}catch(e){console.error("Error loading conversation messages:",e),h.welcomeMessage&&I(h.welcomeMessage,"bot")}}(e)}(t)})})}catch(e){console.error("Error loading conversation history:",e),f.historyList.innerHTML='<div class="ihooman-history-empty">Failed to load history</div>'}}()}function T(){C("history"===u?"chat":"history")}function B(e,t){f.statusBar&&("hidden"!==e?(f.statusBar.classList.add("show"),f.statusBar.classList.remove("waiting","connected"),f.statusBar.classList.add(e),t&&(f.statusBar.textContent=t)):f.statusBar.classList.remove("show"))}async function L(){const e=f.ticketName?.value.trim(),t=f.ticketEmail?.value.trim(),o=f.ticketIssue?.value.trim();if(e&&t){f.ticketSubmitBtn&&(f.ticketSubmitBtn.disabled=!0,f.ticketSubmitBtn.textContent="Submitting...");try{const n=await fetch(`${h.serverUrl}/api/widget/submit-ticket`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({widget_id:h.widgetId,session_id:m.sessionId,user_name:e,user_email:t,issue:o||"No description provided"})}),i=await n.json();f.ticketName&&(f.ticketName.value=""),f.ticketEmail&&(f.ticketEmail.value=""),f.ticketIssue&&(f.ticketIssue.value=""),C("chat");I(`✅ 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),I("❌ Error submitting ticket. Please try again.","bot",{is_system_message:!0})}f.ticketSubmitBtn&&(f.ticketSubmitBtn.disabled=!1,f.ticketSubmitBtn.textContent="Submit Ticket")}else alert("Please fill in your name and email")}let E=null;function z(){E||(E=setInterval(async()=>{if(m.sessionId&&g)try{try{const e=await fetch(`${h.serverUrl}/api/widget/escalation-status/${m.sessionId}?widget_id=${h.widgetId}`);if(e.ok){const t=await e.json();t.escalated&&("in_progress"===t.ticket_status?B("connected","🟢 Connected to live agent"):"open"===t.ticket_status?t.position_in_queue&&t.position_in_queue>1?B("waiting",`⏳ Waiting for agent (Position: #${t.position_in_queue})`):B("waiting","⏳ Waiting for agent..."):"closed"!==t.ticket_status&&"resolved"!==t.ticket_status||(g=!1,M(),B("hidden"),I("This conversation has been closed. Thank you for contacting us!","bot",{is_system_message:!0})))}}catch{}}catch(e){console.error("Error polling for messages:",e)}else M()},3e3))}function M(){E&&(clearInterval(E),E=null)}function q(){if(!h.showTypingIndicator||!f.messages)return;if(f.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>',f.messages.appendChild(e),f.messages.scrollTop=f.messages.scrollHeight}function U(){const e=f.messages?.querySelector(".ihooman-typing");e&&e.remove()}function O(){const e=f.input?.value.trim();e&&(f.input&&(f.input.value="",f.input.style.height="auto"),f.sendBtn&&(f.sendBtn.disabled=!0),I(e,"user"),q(),async function(e){if(y&&y.readyState===WebSocket.OPEN)return void y.send(JSON.stringify({type:"message",content:e}));try{const t=await fetch(`${h.serverUrl}/api/v1/public/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:e,session_id:m.sessionId,visitor_id:m.visitorId,widget_id:h.widgetId})}),o=await t.json();U(),o.session_id&&(m.sessionId=o.session_id,h.persistSession&&A("session_id",m.sessionId)),o.response&&I(o.response,"bot",{sources:o.sources,confidence:o.confidence})}catch(e){U(),I("Sorry, something went wrong. Please try again.","bot"),$("error",e)}}(e))}function j(e){const t=e.target,o=t.files?.[0];if(!o)return;I(`📎 Uploading: ${o.name}...`,"user"),q();const n=new FormData;n.append("file",o),n.append("session_id",m.sessionId||""),n.append("visitor_id",m.visitorId||""),n.append("widget_id",h.widgetId),fetch(`${h.serverUrl}/api/upload`,{method:"POST",body:n}).then(e=>e.json()).then(e=>{U(),e.message&&I(e.message,"bot")}).catch(()=>{U(),I("Failed to upload file.","bot")}),t.value=""}function N(e){if(!h.serverUrl&&!e)return;let t;if(h.widgetId){const e=h.serverUrl?.replace(/^http/,"ws"),o=new URLSearchParams({widget_id:h.widgetId});m.visitorId&&o.append("visitor_id",m.visitorId),m.sessionId&&o.append("session_id",m.sessionId),t=`${e}/public/ws?${o.toString()}`}else t=e||h.serverUrl?.replace(/^http/,"ws")+"/ws";try{y=new WebSocket(t),y.onopen=()=>{m.isConnected=!0,w=0,P(!0),$("connected")},y.onclose=()=>{if(m.isConnected=!1,P(!1),$("disconnected"),v)v=!1;else if(w<5){w++;const t=Math.min(1e3*Math.pow(2,w),3e4);setTimeout(()=>N(e),t)}else console.warn("WebSocket reconnection failed, falling back to polling"),H()},y.onerror=e=>{console.error("WebSocket error:",e)},y.onmessage=e=>{try{const t=JSON.parse(e.data);if("connected"===t.type)t.session_id&&(m.sessionId=t.session_id,h.persistSession&&A("session_id",m.sessionId)),t.visitor_id&&(m.visitorId=t.visitor_id,h.persistSession&&A("visitor_id",m.visitorId)),t.welcome_message&&0===m.messages.length&&I(t.welcome_message,"bot");else if("message"===t.type){U();const e="user"===t.sender?"user":"bot";I(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?q():U():"pong"===t.type||"error"===t.type&&(console.error("WebSocket server error:",t.message),$("error",{message:t.message}))}catch{}},function(){if(F)return;F=setInterval(()=>{y&&y.readyState===WebSocket.OPEN&&y.send(JSON.stringify({type:"ping"}))},3e4)}()}catch{console.warn("WebSocket not supported, using polling"),H()}}let F=null;function H(){x||(x=setInterval(async()=>{if(m.sessionId)try{const e=await fetch(`${h.serverUrl}/api/messages?session_id=${m.sessionId}&since=${Date.now()-5e3}&widget_id=${h.widgetId}`),t=await e.json();t.messages&&t.messages.forEach(e=>{m.messages.find(t=>t.id===e.id)||I(e.content,e.sender_type,e.metadata)})}catch{}},5e3))}function P(e){f.statusDot&&f.statusDot.classList.toggle("offline",!e),f.statusText&&(f.statusText.textContent=e?"Online":"Offline")}function W(){m.isOpen||(m.isOpen=!0,m.unreadCount=0,f.badge&&(f.badge.textContent=""),f.toggle&&f.toggle.classList.add("open"),f.window&&f.window.classList.add("open"),setTimeout(()=>f.input?.focus(),300),$("open"))}function D(){m.isOpen&&(m.isOpen=!1,f.toggle&&f.toggle.classList.remove("open"),f.window&&f.window.classList.remove("open"),$("close"))}function Y(){m.isOpen?D():W()}function R(){m.sessionId=null,m.visitorId=null,m.messages=[],g=!1,A("session_id",null),m.visitorId=V("v_"),A("visitor_id",m.visitorId),f.messages&&(f.messages.innerHTML=""),B("hidden"),M(),w=0,y&&(v=!0,y.close(),y=null),N(),h.welcomeMessage&&I(h.welcomeMessage,"bot"),$("newConversation")}async function J(e){if(!e.widgetId)return console.error("IhoomanChat: widgetId is required"),null;h={...t,...e},m.visitorId=A("visitor_id")||V("v_"),A("visitor_id",m.visitorId),h.persistSession&&(m.sessionId=A("session_id"));const o=h.serverUrl||"https://api.ihooman.ai",n=await async function(e,t){try{const o=await fetch(`${t}/api/widget/config?widget_id=${encodeURIComponent(e)}`);return o.ok?await o.json():{success:!1,error:(await o.json().catch(()=>({}))).error||`HTTP ${o.status}`}}catch(e){return{success:!1,error:"Unable to connect. Please check your internet connection."}}}(h.widgetId,o);let i;var a;return n.success&&n.config?(a=n.config,h.title=a.title||h.title,h.subtitle=a.subtitle||h.subtitle,h.welcomeMessage=a.welcomeMessage||h.welcomeMessage,h.placeholder=a.placeholder||h.placeholder,h.position=a.position||h.position,a.theme&&(h.primaryColor=a.theme.primaryColor||h.primaryColor,h.gradientFrom=a.theme.gradientFrom||h.gradientFrom,h.gradientTo=a.theme.gradientTo||h.gradientTo,h.fontFamily=a.theme.fontFamily||h.fontFamily,a.theme.borderRadius&&(h.borderRadius=parseInt(a.theme.borderRadius,10)||h.borderRadius)),a.behavior&&(h.startOpen=a.behavior.startOpen??h.startOpen,h.showTypingIndicator=a.behavior.showTypingIndicator??h.showTypingIndicator,h.showTimestamps=a.behavior.showTimestamps??h.showTimestamps,h.enableSounds=a.behavior.enableSounds??h.enableSounds,h.enableFileUpload=a.behavior.enableFileUpload??h.enableFileUpload,h.persistSession=a.behavior.persistSession??h.persistSession),a.branding&&(h.avatarUrl=a.branding.avatarUrl||h.avatarUrl,h.poweredBy=a.branding.poweredBy??h.poweredBy),i=n.chatEndpoint):n.error&&(console.warn("IhoomanChat: Could not fetch server config:",n.error),"Widget not authorized for this domain"===n.error&&console.error("IhoomanChat: Widget configuration error. Please contact support.")),S(),m.messages.forEach(e=>I(e.content,e.sender,e.metadata)),0===m.messages.length&&h.welcomeMessage&&I(h.welcomeMessage,"bot"),N(i),h.startOpen&&setTimeout(W,500),$("ready"),Q}const Q={init:J,open:W,close:D,toggle:Y,destroy:function(){F&&(clearInterval(F),F=null),M(),v=!0,y&&(y.close(),y=null),x&&(clearInterval(x),x=null),f.widget&&f.widget.remove();const e=document.getElementById("ihooman-widget-styles");e&&e.remove(),m={isOpen:!1,isConnected:!1,messages:[],sessionId:null,visitorId:null,unreadCount:0},f={},w=0,v=!1},sendMessage:function(e){e.trim()&&(f.input&&(f.input.value=e),O())},setUser:function(e){e.name&&A("user_name",e.name),e.email&&A("user_email",e.email),e.metadata&&A("user_metadata",e.metadata)},clearHistory:function(){R()},on:function(e,t){b[e]||(b[e]=[]),b[e].push(t)},off:function(e,t){b[e]&&(b[e]=b[e].filter(e=>e!==t))},getState:function(){return{...m}},version:"2.0.0"},G=Q;!function(){if("undefined"==typeof document)return;let e=document.currentScript;if(!e){const t=document.getElementsByTagName("script");for(let o=0;o<t.length;o++)if(t[o].src&&t[o].src.includes("ihooman")){e=t[o];break}}if(!e)return;const t=e.getAttribute("data-widget-id");if(t){const o={widgetId:t},n=e.getAttribute("data-server-url");n&&(o.serverUrl=n);const i=e.getAttribute("data-theme");"light"!==i&&"dark"!==i||(o.theme=i);const a=e.getAttribute("data-position");a&&(o.position=a);"true"===e.getAttribute("data-start-open")&&(o.startOpen=!0),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>J(o)):J(o)}}(),"undefined"!=typeof window&&(window.IhoomanChat=G),e.IhoomanChat=G,e.createWidgetInstance=function(){return{...Q}},e.default=G,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
2
|
//# sourceMappingURL=index.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.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","currentView","isLiveAgentMode","elements","eventListeners","ws","pollInterval","reconnectAttempts","intentionalDisconnect","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","historyView","historyList","historyNewBtn","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","toggleHistoryView","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","async","is_system_message","liveBtn","response","fetch","method","headers","widget_id","session_id","visitor_id","json","position_in_queue","updateStatusBar","startLiveAgentPolling","handleRequestLiveAgent","setTimeout","focus","view","classList","ok","Error","conversations","length","map","conv","preview","message_count","status","diff","getTime","floor","timeAgo","updated_at","join","dataset","stopLiveAgentPolling","connectWebSocket","msg","sender_type","extra_data","loadConversationMessages","switchToConversation","loadConversationHistory","add","name","email","issue","user_name","user_email","ticket_id","alert","liveAgentPollInterval","setInterval","escResponse","escData","escalated","ticket_status","clearInterval","showTyping","hideTyping","readyState","WebSocket","OPEN","send","type","sources","confidence","sendMessageToServer","target","file","files","formData","FormData","append","then","r","chatEndpoint","wsUrl","baseWsUrl","params","URLSearchParams","onopen","updateStatus","onclose","delay","pow","warn","startPolling","onerror","onmessage","welcome_message","agent_name","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","script","currentScript","scripts","getElementsByTagName","i","src","getAttribute","autoConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.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","currentView","isLiveAgentMode","elements","eventListeners","ws","pollInterval","reconnectAttempts","intentionalDisconnect","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","historyView","historyList","historyNewBtn","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","toggleHistoryView","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","async","is_system_message","liveBtn","response","fetch","method","headers","widget_id","session_id","visitor_id","json","position_in_queue","updateStatusBar","startLiveAgentPolling","handleRequestLiveAgent","setTimeout","focus","view","classList","ok","Error","conversations","length","map","conv","preview","message_count","status","diff","getTime","floor","timeAgo","updated_at","join","dataset","stopLiveAgentPolling","connectWebSocket","msg","sender_type","extra_data","loadConversationMessages","switchToConversation","loadConversationHistory","add","name","email","issue","user_name","user_email","ticket_id","alert","liveAgentPollInterval","setInterval","escResponse","escData","escalated","ticket_status","clearInterval","showTyping","hideTyping","readyState","WebSocket","OPEN","send","type","sources","confidence","sendMessageToServer","target","file","files","formData","FormData","append","then","r","chatEndpoint","wsUrl","baseWsUrl","params","URLSearchParams","onopen","updateStatus","onclose","delay","pow","warn","startPolling","onerror","onmessage","welcome_message","agent_name","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","script","currentScript","scripts","getElementsByTagName","i","src","getAttribute","autoConfig"],"mappings":"kPA2BA,MAMMA,EAAuC,CAC3CC,UAAW,yBACXC,MAAO,QACPC,SAAU,eACVC,MAAO,eACPC,SAAU,oCACVC,eAAgB,0CAChBC,YAAa,oBACbC,aAAc,UACdC,aAAc,UACdC,WAAY,UACZC,gBAAgB,EAChBC,qBAAqB,EACrBC,cAAc,EACdC,kBAAkB,EAClBC,WAAW,EACXC,gBAAgB,EAChBC,OAAQ,KACRC,MAAO,IACPC,OAAQ,IACRC,WAAY,GACZC,aAAc,GACdC,WAAY,oEACZC,UAAW,GACXC,WAAW,GAOPC,EACE,oKADFA,EAEG,2KAFHA,EAGE,uLAHFA,EAII,wNAJJA,EAKM,iIALNA,EAOC,4MAPDA,EAQG,sLARHA,EASI,2VATJA,EAUK,4KAVLA,EAYE,6KAMR,IAAIC,EAAuB,CAAEC,SAAU,MAAO3B,GAC1C4B,EAAqB,CACvBC,QAAQ,EACRC,aAAa,EACbC,SAAU,GACVC,UAAW,KACXC,UAAW,KACXC,YAAa,GAOXC,EAA0B,OAC1BC,GAAkB,EA8BlBC,EAA2B,CAAA,EAC/B,MAAMC,EAAkD,CAAA,EAKxD,IAAIC,EAAuB,KACvBC,EAAsD,KACtDC,EAAoB,EAExB,IAAIC,GAAwB,EAU5B,SAASC,EAAWC,EAAS,IAC3B,OAAOA,EAASC,KAAKC,SAASC,SAAS,IAAIC,MAAM,EAAG,IAAMC,KAAKC,MAAMH,SAAS,GAChF,CAYA,SAASI,EAAWC,GAClB,MAAMC,EAAMC,SAASC,cAAc,OAEnC,OADAF,EAAIG,YAAcJ,EACXC,EAAII,SACb,CAiBA,SAASC,EAAWC,EAAaC,GAC/B,MAAMC,EA3Je,gBA2JYF,EACjC,IACE,QAAcG,IAAVF,EAAqB,CACvB,MAAMG,EAAOC,aAAaC,QAAQJ,GAClC,OAAOE,EAAOG,KAAKC,MAAMJ,GAAQ,IACnC,CAAO,OAAc,OAAVH,GACTI,aAAaI,WAAWP,GACjB,OAEPG,aAAaK,QAAQR,EAASK,KAAKI,UAAUV,IACtCA,EAEX,CAAE,MACA,OAAO,IACT,CACF,CAKA,SAASW,EAAKC,EAAoBC,IACdnC,EAAekC,IAAU,IACjCE,QAASC,IACjB,IACEA,EAAGF,EACL,CAAE,MAAOG,GACPC,QAAQC,MAAM,YAAYN,mBAAwBI,EACpD,IAIF,MAAMG,EAAe,KAAKP,EAAMQ,OAAO,GAAGC,gBAAgBT,EAAMxB,MAAM,KAChEkC,EAAWxD,EAAOqD,GACxB,GAAwB,mBAAbG,EACT,IACGA,EAA2BT,EAC9B,CAAE,MAAOG,GACPC,QAAQC,MAAM,YAAYC,cAA0BH,EACtD,CAEJ,CA8JA,SAASO,IAEP,MAAMC,EAAU9B,SAASC,cAAc,SACvC6B,EAAQC,GAAK,wBACbD,EAAQ5B,YAxJV,WACE,MAAMhD,aACJA,EAAYC,aACZA,EAAYC,WACZA,EAAUY,WACVA,EAAUD,aACVA,EAAYJ,OACZA,EAAMC,MACNA,EAAKC,OACLA,EAAMC,WACNA,GACEM,EAEE4D,EAA0B,SAAjB5D,EAAOxB,MAChBqF,EAAUD,EAAS,UAAY,UAC/BE,EAAYF,EAAS,UAAY,UACjCG,EAAaH,EAAS,UAAY,UAClCI,EAAcJ,EAAS,wBAA0B,mBACjDK,EAAUL,EAAS,UAAY,UAC/BM,EAAgB,2BAA2BnF,MAAiBC,KAC5DmF,EAAeP,EAAS,UAAY,UAEpCQ,EAAgBpE,EAAOvB,UAAU4F,SAAS,WAAY,EACtDC,EAAiBtE,EAAOvB,UAAU4F,SAAS,YAAa,EAE9D,MAAO,kHAE4BzE,gDAAyDkE,yIAErDM,EAAgB,cAAgB,iBAAiBE,EAAiB,eAAiB,uBAAuB5E,gBAAyBA,2EAAoFX,MAAiBC,+CAAwDO,+wCASpPT,ulBAK5CsF,EAAgB,cAAgB,iBAAiBE,EAAiB,eAAiB,uBAAuB9E,gBAAoBC,mDAAwDF,GAAU,MAAQ,0aAEjHI,qHACtCkE,sGAA4GlE,0BAAqCqE,0MAE3JjF,MAAiBC,24CAaiC6E,2OAGnEG,mlBAMIE,wHACDC,aAAwBL,gPAEpCC,8IACgDI,6NAErCJ,gZAILF,4BAAkCG,kHACHC,wBAA8BD,yJAC/DlF,0KAC2DgF,oHAC1EC,oOACkLA,oDAChLC,aAAuBF,2EACA/E,MAAiBC,4ZAKF+E,kBAA2BF,yCAC5E/E,oHACoD+E,8wBAIM9E,MAAiBC,6PAEvC4E,EAAS,wBAA0B,yCAAyCE,mCAA2CE,8FACjHJ,EAAS,yBAA2B,wrBAQNC,4JAElCC,yHACfC,sFACWC,8EAAwFC,aAAmBH,uGAC7HhF,yDACAiF,gKAEgChF,MAAiBC,8ZAGvB+E,wBAAiCC,mIAC9DJ,EAAS,yBAA2B,oIACyBC,uIAE/BG,oJACJF,wIAC6C/E,MAAiBC,igBAIxEgF,iGAA2GH,uDAC1HD,EAAS,yBAA2B,gEACnCA,EAAS,yBAA2B,4BAA4B9E,gEACxDgF,6HACHC,gJACmBA,iNACgHK,EAAgB,cAAgB,qCAEzN,CAcwBG,GACtB3C,SAAS4C,KAAKC,YAAYf,GAG1B,MAAMgB,EAAS9C,SAASC,cAAc,OACtC6C,EAAOC,UAAY,iBACnBD,EAAO3C,UAAY,qLAIWhC,4CACCA,+NAKcC,EAAOH,UAAY,aAAa4B,EAAWzB,EAAOH,6BAA+BE,uGAEhF0B,EAAWzB,EAAOtB,OAAS,oUAIiBqB,6GACIA,sGACPA,iXAUzEC,EAAOZ,iBAAmB,gEAAgEW,2DAAwE,kEACrH0B,EAAWzB,EAAOnB,aAAe,6JACTkB,0oCAoBnCA,gIAKxCC,EAAOF,UAAY,2HAA6H,mCAKxJ8B,SAASgD,KAAKH,YAAYC,GAG1B/D,EAAW,CACT+D,SACAG,OAAQH,EAAOI,cAAc,mBAC7BC,MAAOL,EAAOI,cAAc,kBAC5BE,OAAQN,EAAOI,cAAc,mBAC7BG,SAAUP,EAAOI,cAAc,sBAC/BI,WAAYR,EAAOI,cAAc,wBACjCK,YAAaT,EAAOI,cAAc,yBAClCM,YAAaV,EAAOI,cAAc,yBAClCO,cAAeX,EAAOI,cAAc,wBACpCzE,SAAUqE,EAAOI,cAAc,qBAC/BQ,MAAOZ,EAAOI,cAAc,kBAC5BS,QAASb,EAAOI,cAAc,2BAC9BU,UAAWd,EAAOI,cAAc,6BAChCW,UAAWf,EAAOI,cAAc,uBAChCY,UAAWhB,EAAOI,cAAc,uBAChCa,WAAYjB,EAAOI,cAAc,wBACjCc,UAAWlB,EAAOI,cAAc,uBAChCe,WAAYnB,EAAOI,cAAc,wBACjCgB,YAAapB,EAAOI,cAAc,yBAClCiB,YAAarB,EAAOI,cAAc,yBAClCkB,gBAAiBtB,EAAOI,cAAc,0BACtCmB,cAAevB,EAAOI,cAAc,yBAUxC,WACE,IAAKnE,EAASkE,SAAWlE,EAAS4E,UAAY5E,EAAS2E,MAAO,OAE9D3E,EAASkE,OAAOqB,iBAAiB,QAASrB,GAC1ClE,EAAS4E,QAAQW,iBAAiB,QAASC,GAE3CxF,EAAS2E,MAAMY,iBAAiB,QAAS,KACnCvF,EAAS4E,UACX5E,EAAS4E,QAAQa,UAAYzF,EAAS2E,OAAOpD,MAAMmE,QAEjD1F,EAAS2E,QACX3E,EAAS2E,MAAMgB,MAAM7G,OAAS,OAC9BkB,EAAS2E,MAAMgB,MAAM7G,OAAS0B,KAAKoF,IAAI5F,EAAS2E,MAAMkB,aAAc,KAAO,QAI/E7F,EAAS2E,MAAMY,iBAAiB,UAAYhD,IAC5B,UAAVA,EAAEjB,KAAoBiB,EAAEuD,WAC1BvD,EAAEwD,iBACG/F,EAAS4E,SAASa,UAAUD,OAIjCxF,EAAS6E,WAAa7E,EAAS8E,YACjC9E,EAAS6E,UAAUU,iBAAiB,QAAS,IAAMvF,EAAS8E,WAAWkB,SACvEhG,EAAS8E,UAAUS,iBAAiB,SAAUU,IAGhDjG,EAAS+D,QAAQI,cAAc,4BAA4BoB,iBAAiB,QAASW,GACrFlG,EAAS+D,QAAQI,cAAc,6BAA6BoB,iBAAiB,QAASY,GACtFnG,EAAS+D,QAAQI,cAAc,4BAA4BoB,iBAAiB,QAASa,GAGjFpG,EAASqF,iBACXrF,EAASqF,gBAAgBE,iBAAiB,QAASc,GAEjDrG,EAASsF,eACXtF,EAASsF,cAAcC,iBAAiB,QAAS,IAAMe,EAAS,SAI9DtG,EAAS0E,eACX1E,EAAS0E,cAAca,iBAAiB,QAAS,KAC/CW,IACAI,EAAS,SAGf,CArDEC,EACF,CA8DA,SAASC,EAAWC,EAAiBC,EAAyB,MAAOC,EAAgC,CAAA,GACnG,MAAMC,EAAmB,CACvB5D,GAAI1C,EAAW,QACfmG,UACAC,SACAG,UAAW,IAAIjG,KACf+F,YAIF,GAFApH,EAAMG,SAASoH,KAAKF,IAEf5G,EAASN,SAAU,OAAOkH,EAE/B,MAAMG,EAAK9F,SAASC,cAAc,OAClC6F,EAAG/C,UAAY,mBAAmB0C,IAGlC,MAAMM,EAAmC,QAAXN,IAAqD,IAAjCC,GAAUM,mBAE5D,IAAIC,EAAwB,GAvZ9B,IAAoBC,EAgBGpG,EA8ZrB,GAtBIiG,IACFE,EAAwB,iJAGhB9H,gKAIAA,kFAOV2H,EAAG3F,UAAY,8CAvZML,EAwZkC0F,EAvZlD1F,EACED,EAAWC,GACfqG,QAAQ,iBAAkB,uBAC1BA,QAAQ,aAAc,eACtBA,QAAQ,WAAY,mBACpBA,QAAQ,MAAO,QALA,iBAwZdF,UACA7H,EAAOf,eAAiB,qCA1aV6I,EA0a0DP,EAAQC,UAza7E,IAAIjG,KAAKuG,GAAME,mBAAmB,GAAI,CAAEC,KAAM,UAAWC,OAAQ,oBAyaiC,SAIrGP,EAAuB,CACzB,MAAMQ,EAAeT,EAAG5C,cAAc,8BAChCsD,EAAYV,EAAG5C,cAAc,iCAE/BqD,GACFA,EAAajC,iBAAiB,QAAS,IAAMmC,EAAuB,eAElED,GACFA,EAAUlC,iBAAiB,QAAS,IAAMmC,EAAuB,iBAErE,CAGA,MAAMC,EAAS3H,EAASN,SAASyE,cAAc,mBAgB/C,OAfIwD,GAAQA,EAAOC,SAEnB5H,EAASN,SAASoE,YAAYiD,GAC9B/G,EAASN,SAASmI,UAAY7H,EAASN,SAASmG,aAGjC,QAAXa,GAAqBnH,EAAMC,SAC7BD,EAAMM,cACFG,EAASoE,QACXpE,EAASoE,MAAMjD,YAAc2G,OAAOvI,EAAMM,cAExCR,EAAOb,cAyhBf,WACE,IACE,MAAMuJ,EAAQ,IAAIC,MAChB,soBAEFD,EAAME,OAAS,GACfF,EAAMG,OAAOC,MAAM,OACrB,CAAE,MAEF,CACF,CAniB6BC,IAG3BlG,EAAK,UAAW0E,GACTA,CACT,CAKA,SAASc,EAAuBW,GAEdpH,SAASqH,iBAAiB,2BAClCjG,QAAQkG,GAAQA,EAA0B9C,UAAW,GAE9C,eAAX4C,EAyRNG,iBACE,IAAKjJ,EAAMI,UAET,YADA6G,EAAW,uDAAwD,MAAO,CAAEiC,mBAAmB,IAKjG,MAAMC,EAAU1I,EAAS+D,QAAQI,cAAc,8BAC3CuE,IACFA,EAAQjD,UAAW,EACnBiD,EAAQtH,UAAY,8LAGtB,IAEE,MAAMuH,QAAiBC,MAAM,GAAGvJ,EAAOzB,kCAAmC,CACxEiL,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3B7E,KAAMpC,KAAKI,UAAU,CACnB8G,UAAW1J,EAAOC,SAClB0J,WAAYzJ,EAAMI,UAClBsJ,WAAY1J,EAAMK,cAIhBwC,QAAauG,EAASO,OAE5BnJ,GAAkB,EAGdqC,EAAK+G,mBAAqB/G,EAAK+G,kBAAoB,EACrDC,EAAgB,UAAW,mCAAmChH,EAAK+G,sBAEnEC,EAAgB,UAAW,mCAI7BC,GAEF,CAAE,MAAO5G,GACPD,QAAQC,MAAM,+BAAgCA,GAC9C+D,EAAW,yDAA0D,MAAO,CAAEiC,mBAAmB,GACnG,CAGIC,IACFA,EAAQjD,UAAW,EACnBiD,EAAQtH,UAAY,0LAExB,CAzUIkI,GACoB,kBAAXjB,IAkMX/B,EAAS,UAETiD,WAAW,IAAMvJ,EAASkF,YAAYsE,QAAS,KAjMjD,CAKA,SAASlD,EAASmD,GAChB3J,EAAc2J,EAEVzJ,EAASsE,UACXtE,EAASsE,SAASoF,UAAUxF,OAAO,SAAmB,SAATuF,GAE3CzJ,EAASuE,YACXvE,EAASuE,WAAWmF,UAAUxF,OAAO,OAAiB,WAATuF,GAE3CzJ,EAASwE,aACXxE,EAASwE,YAAYkF,UAAUxF,OAAO,OAAiB,YAATuF,GAInC,YAATA,GAyCNjB,iBACE,IAAKxI,EAASyE,cAAgBlF,EAAMK,UAAW,OAE/CI,EAASyE,YAAYrD,UAAY,sDAEjC,IACE,MAAMuH,QAAiBC,MACrB,GAAGvJ,EAAOzB,gDAAgDyB,EAAOC,uBAAuBC,EAAMK,sBAGhG,IAAK+I,EAASgB,GACZ,MAAM,IAAIC,MAAM,0BAGlB,MAAMC,QAAiDlB,EAASO,OAEhE,IAAKW,EAAcC,OAEjB,YADA9J,EAASyE,YAAYrD,UAAY,iEAInCpB,EAASyE,YAAYrD,UAAYyI,EAAcE,IAAIC,GAAQ,4CACtBA,EAAKhB,aAAezJ,EAAMI,UAAY,SAAW,wBAAwBqK,EAAKhB,8DACxElI,EAAWkJ,EAAKC,SAAW,0FAExDD,EAAKE,8CACW,YAAhBF,EAAKG,OAAuB,aAA+B,WAAhBH,EAAKG,OAAsB,WAAa,MAhDrG,SAAiBhD,GACf,MAAMiD,EAAOxJ,KAAKC,MAAQ,IAAID,KAAKuG,GAAMkD,UACzC,OAAID,EAAO,IAAc,MACrBA,EAAO,KAAgB5J,KAAK8J,MAAMF,EAAO,KAAS,IAClDA,EAAO,MAAiB5J,KAAK8J,MAAMF,EAAO,MAAW,IAClD5J,KAAK8J,MAAMF,EAAO,OAAY,GACvC,CA0C2GG,CAAQP,EAAKQ,0DAGjHC,KAAK,IAGRzK,EAASyE,YAAY6D,iBAAiB,yBAAyBjG,QAAQX,IACrEA,EAAK6D,iBAAiB,QAAS,KAC7B,MAAM5F,EAAa+B,EAAqBgJ,QAAQ/K,UAC5CA,GAeZ6I,eAAoC7I,GAClCJ,EAAMI,UAAYA,EACdN,EAAOV,gBACT0C,EAAQ,aAAc1B,GAIpBK,EAASN,WACXM,EAASN,SAAS0B,UAAY,IAIhCrB,GAAkB,EAClB4K,IACAvB,EAAgB,UAGhB/I,GAAwB,EACpBH,IACFA,EAAGiG,QACHjG,EAAK,MAEP0K,IAGAtE,EAAS,cASXkC,eAAwC7I,GACtC,IACE,MAAMgJ,QAAiBC,MACrB,GAAGvJ,EAAOzB,mCAAmC+B,eAAuBN,EAAOC,YAG7E,IAAKqJ,EAASgB,GACZ,MAAM,IAAIC,MAAM,2BAGlB,MAAMxH,QAAauG,EAASO,OAExBlJ,EAASN,WACXM,EAASN,SAAS0B,UAAY,IAI5BgB,EAAK1C,UAAY0C,EAAK1C,SAASoK,OAAS,EAC1C1H,EAAK1C,SAAS2C,QAASwI,IACrB,MAAMnE,EAA6B,SAApBmE,EAAIC,YAAyB,OAAS,MACrDtE,EAAWqE,EAAIpE,QAASC,EAAQmE,EAAIE,YAAc,MAE3C1L,EAAOpB,gBAChBuI,EAAWnH,EAAOpB,eAAgB,OAIhB,YAAhBmE,EAAK+H,QACPpK,GAAkB,EAClBsJ,IACAD,EAAgB,UAAW,2BACF,WAAhBhH,EAAK+H,QACdf,EAAgB,SAGpB,CAAE,MAAO3G,GACPD,QAAQC,MAAM,uCAAwCA,GAClDpD,EAAOpB,gBACTuI,EAAWnH,EAAOpB,eAAgB,MAEtC,CACF,CA/CQ+M,CAAyBrL,EACjC,CA3CUsL,CAAqBtL,MAK7B,CAAE,MAAO8C,GACPD,QAAQC,MAAM,sCAAuCA,GACrDzC,EAASyE,YAAYrD,UAAY,iEACnC,CACF,CArFI8J,EAEJ,CAKA,SAAS9E,IAELE,EADkB,YAAhBxG,EACO,OAEA,UAEb,CAsKA,SAASsJ,EAAgBe,EAA4CvD,GAC9D5G,EAASiF,YAEC,WAAXkF,GAKJnK,EAASiF,UAAUyE,UAAUyB,IAAI,QACjCnL,EAASiF,UAAUyE,UAAU9B,OAAO,UAAW,aAC/C5H,EAASiF,UAAUyE,UAAUyB,IAAIhB,GAE7BvD,IACF5G,EAASiF,UAAU9D,YAAcyF,IATjC5G,EAASiF,UAAUyE,UAAU9B,OAAO,QAWxC,CAKAY,eAAenC,IACb,MAAM+E,EAAOpL,EAASkF,YAAY3D,MAAMmE,OAClC2F,EAAQrL,EAASmF,aAAa5D,MAAMmE,OACpC4F,EAAQtL,EAASoF,aAAa7D,MAAMmE,OAE1C,GAAK0F,GAASC,EAAd,CAKIrL,EAASqF,kBACXrF,EAASqF,gBAAgBI,UAAW,EACpCzF,EAASqF,gBAAgBlE,YAAc,iBAGzC,IAEE,MAAMwH,QAAiBC,MAAM,GAAGvJ,EAAOzB,qCAAsC,CAC3EiL,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3B7E,KAAMpC,KAAKI,UAAU,CACnB8G,UAAW1J,EAAOC,SAClB0J,WAAYzJ,EAAMI,UAClB4L,UAAWH,EACXI,WAAYH,EACZC,MAAOA,GAAS,8BAIdlJ,QAAauG,EAASO,OAGxBlJ,EAASkF,aAAYlF,EAASkF,WAAW3D,MAAQ,IACjDvB,EAASmF,cAAanF,EAASmF,YAAY5D,MAAQ,IACnDvB,EAASoF,cAAapF,EAASoF,YAAY7D,MAAQ,IAGvD+E,EAAS,QAITE,EAAW,4CAA4C6E,kBADrCjJ,EAAKqJ,UAAYrJ,EAAKqJ,UAAU9K,MAAM,EAAG,GAAK,cAC0B,MAAO,CAAE8H,mBAAmB,GAExH,CAAE,MAAOhG,GACPD,QAAQC,MAAM,2BAA4BA,GAC1C+D,EAAW,+CAAgD,MAAO,CAAEiC,mBAAmB,GACzF,CAEIzI,EAASqF,kBACXrF,EAASqF,gBAAgBI,UAAW,EACpCzF,EAASqF,gBAAgBlE,YAAc,gBA1CzC,MAFEuK,MAAM,qCA8CV,CA2DA,IAAIC,EAA+D,KAMnE,SAAStC,IACHsC,IAEJA,EAAwBC,YAAYpD,UAClC,GAAKjJ,EAAMI,WAAcI,EAKzB,IAKE,IACE,MAAM8L,QAAoBjD,MACxB,GAAGvJ,EAAOzB,0CAA0C2B,EAAMI,uBAAuBN,EAAOC,YAE1F,GAAIuM,EAAYlC,GAAI,CAClB,MAAMmC,QAAgBD,EAAY3C,OAC9B4C,EAAQC,YACoB,gBAA1BD,EAAQE,cAEV5C,EAAgB,YAAa,8BACM,SAA1B0C,EAAQE,cAEbF,EAAQ3C,mBAAqB2C,EAAQ3C,kBAAoB,EAC3DC,EAAgB,UAAW,mCAAmC0C,EAAQ3C,sBAEtEC,EAAgB,UAAW,0BAEM,WAA1B0C,EAAQE,eAAwD,aAA1BF,EAAQE,gBAEvDjM,GAAkB,EAClB4K,IACAvB,EAAgB,UAChB5C,EAAW,kEAAmE,MAAO,CAAEiC,mBAAmB,KAGhH,CACF,CAAE,MAEF,CAEF,CAAE,MAAOhG,GACPD,QAAQC,MAAM,8BAA+BA,EAC/C,MAzCEkI,KA0CD,KACL,CAKA,SAASA,IACHgB,IACFM,cAAcN,GACdA,EAAwB,KAE5B,CAKA,SAASO,IACP,IAAK7M,EAAOd,sBAAwByB,EAASN,SAAU,OACvD,GAAIM,EAASN,SAASyE,cAAc,mBAAoB,OAExD,MAAMwD,EAAS1G,SAASC,cAAc,OACtCyG,EAAO3D,UAAY,iBACnB2D,EAAOvG,UAAY,kKACnBpB,EAASN,SAASoE,YAAY6D,GAC9B3H,EAASN,SAASmI,UAAY7H,EAASN,SAASmG,YAClD,CAKA,SAASsG,IACP,MAAMxE,EAAS3H,EAASN,UAAUyE,cAAc,mBAC5CwD,GAAQA,EAAOC,QACrB,CAKA,SAASpC,IACP,MAAMiB,EAAUzG,EAAS2E,OAAOpD,MAAMmE,OACjCe,IAEDzG,EAAS2E,QACX3E,EAAS2E,MAAMpD,MAAQ,GACvBvB,EAAS2E,MAAMgB,MAAM7G,OAAS,QAE5BkB,EAAS4E,UACX5E,EAAS4E,QAAQa,UAAW,GAG9Be,EAAWC,EAAS,QACpByF,IAQF1D,eAAmC/B,GAEjC,GAAIvG,GAAMA,EAAGkM,aAAeC,UAAUC,KAKpC,YAJApM,EAAGqM,KAAK1K,KAAKI,UAAU,CACrBuK,KAAM,UACN/F,QAASA,KAMb,IACE,MAAMkC,QAAiBC,MAAM,GAAGvJ,EAAOzB,+BAAgC,CACrEiL,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3B7E,KAAMpC,KAAKI,UAAU,CACnB2E,QAASH,EACTuC,WAAYzJ,EAAMI,UAClBsJ,WAAY1J,EAAMK,UAClBmJ,UAAW1J,EAAOC,aAIhB8C,QAAauG,EAASO,OAC5BiD,IAEI/J,EAAK4G,aACPzJ,EAAMI,UAAYyC,EAAK4G,WACnB3J,EAAOV,gBAAgB0C,EAAQ,aAAc9B,EAAMI,YAGrDyC,EAAKuG,UACPnC,EAAWpE,EAAKuG,SAAU,MAAO,CAAE8D,QAASrK,EAAKqK,QAASC,WAAYtK,EAAKsK,YAE/E,CAAE,MAAOjK,GACP0J,IACA3F,EAAW,iDAAkD,OAC7DtE,EAAK,QAASO,EAChB,CACF,CA9CEkK,CAAoBlG,GACtB,CAkDA,SAASR,EAAiB1D,GACxB,MAAMqK,EAASrK,EAAEqK,OACXC,EAAOD,EAAOE,QAAQ,GAC5B,IAAKD,EAAM,OAEXrG,EAAW,iBAAiBqG,EAAKzB,UAAW,QAC5Cc,IAEA,MAAMa,EAAW,IAAIC,SACrBD,EAASE,OAAO,OAAQJ,GACxBE,EAASE,OAAO,aAAc1N,EAAMI,WAAa,IACjDoN,EAASE,OAAO,aAAc1N,EAAMK,WAAa,IACjDmN,EAASE,OAAO,YAAa5N,EAAOC,UAEpCsJ,MAAM,GAAGvJ,EAAOzB,uBAAwB,CAAEiL,OAAQ,OAAQ5E,KAAM8I,IAC7DG,KAAMC,GAAMA,EAAEjE,QACdgE,KAAM9K,IACL+J,IACI/J,EAAKwE,SAASJ,EAAWpE,EAAKwE,QAAS,SAE5CuB,MAAM,KACLgE,IACA3F,EAAW,yBAA0B,SAGzCoG,EAAOrL,MAAQ,EACjB,CA8BA,SAASqJ,EAAiBwC,GACxB,IAAK/N,EAAOzB,YAAcwP,EAAc,OAExC,IAAIC,EAEJ,GAAIhO,EAAOC,SAAU,CAEnB,MAAMgO,EAAYjO,EAAOzB,WAAWwJ,QAAQ,QAAS,MAC/CmG,EAAS,IAAIC,gBAAgB,CACjCzE,UAAW1J,EAAOC,WAEhBC,EAAMK,WACR2N,EAAON,OAAO,aAAc1N,EAAMK,WAEhCL,EAAMI,WACR4N,EAAON,OAAO,aAAc1N,EAAMI,WAEpC0N,EAAQ,GAAGC,eAAuBC,EAAO7M,YAC3C,MAEE2M,EAAQD,GAAgB/N,EAAOzB,WAAWwJ,QAAQ,QAAS,MAAQ,MAGrE,IACElH,EAAK,IAAImM,UAAUgB,GAEnBnN,EAAGuN,OAAS,KACVlO,EAAME,aAAc,EACpBW,EAAoB,EACpBsN,GAAa,GACbxL,EAAK,cAGPhC,EAAGyN,QAAU,KAMX,GALApO,EAAME,aAAc,EACpBiO,GAAa,GACbxL,EAAK,gBAGD7B,EACFA,GAAwB,OAK1B,GAAID,EAxjCmB,EAwjCuB,CAC5CA,IACA,MAAMwN,EAAQpN,KAAKoF,IAAI,IAAOpF,KAAKqN,IAAI,EAAGzN,GAAoB,KAC9DmJ,WAAW,IAAMqB,EAAiBwC,GAAeQ,EACnD,MAEEpL,QAAQsL,KAAK,0DACbC,KAIJ7N,EAAG8N,QAAWvL,IACZD,QAAQC,MAAM,mBAAoBA,IAIpCvC,EAAG+N,UAAa1L,IACd,IACE,MAAMH,EAAOP,KAAKC,MAAMS,EAAEH,MAE1B,GAAkB,cAAdA,EAAKoK,KAEHpK,EAAK4G,aACPzJ,EAAMI,UAAYyC,EAAK4G,WACnB3J,EAAOV,gBAAgB0C,EAAQ,aAAc9B,EAAMI,YAErDyC,EAAK6G,aACP1J,EAAMK,UAAYwC,EAAK6G,WACnB5J,EAAOV,gBAAgB0C,EAAQ,aAAc9B,EAAMK,YAGrDwC,EAAK8L,iBAA6C,IAA1B3O,EAAMG,SAASoK,QACzCtD,EAAWpE,EAAK8L,gBAAiB,YAE9B,GAAkB,YAAd9L,EAAKoK,KAAoB,CAClCL,IACA,MAAMzF,EAAyB,SAAhBtE,EAAKsE,OAAoB,OAAS,MACjDF,EAAWpE,EAAKqE,QAASC,EAAQ,CAC/BgG,WAAYtK,EAAKsK,WACjByB,WAAY/L,EAAK+L,WACjBlH,mBAAoB7E,EAAK6E,mBACzB8E,UAAW3J,EAAK2J,WAEpB,KAAyB,WAAd3J,EAAKoK,KACdpK,EAAKgM,UAAYlC,IAAeC,IACT,SAAd/J,EAAKoK,MAES,UAAdpK,EAAKoK,OACdhK,QAAQC,MAAM,0BAA2BL,EAAKwE,SAC9C1E,EAAK,QAAS,CAAE0E,QAASxE,EAAKwE,UAElC,CAAE,MAEF,GAqBN,WACE,GAAIyH,EAAmB,OAEvBA,EAAoBzC,YAAY,KAC1B1L,GAAMA,EAAGkM,aAAeC,UAAUC,MACpCpM,EAAGqM,KAAK1K,KAAKI,UAAU,CAAEuK,KAAM,WAEhC,IACL,CAzBI8B,EAEF,CAAE,MAEA9L,QAAQsL,KAAK,0CACbC,GACF,CACF,CAKA,IAAIM,EAA2D,KA4B/D,SAASN,IACH5N,IAEJA,EAAeyL,YAAYpD,UACzB,GAAKjJ,EAAMI,UAEX,IACE,MAAMgJ,QAAiBC,MACrB,GAAGvJ,EAAOzB,qCAAqC2B,EAAMI,mBAAmBiB,KAAKC,MAAQ,iBAAkBxB,EAAOC,YAE1G8C,QAAauG,EAASO,OAExB9G,EAAK1C,UACP0C,EAAK1C,SAAS2C,QAASwI,IAChBtL,EAAMG,SAAS6O,KAAMC,GAAMA,EAAExL,KAAO6H,EAAI7H,KAC3CwD,EAAWqE,EAAIpE,QAASoE,EAAIC,YAAaD,EAAIlE,WAIrD,CAAE,MAEF,GACC,KACL,CAKA,SAAS+G,EAAae,GAChBzO,EAAS+E,WACX/E,EAAS+E,UAAU2E,UAAUxF,OAAO,WAAYuK,GAE9CzO,EAASgF,aACXhF,EAASgF,WAAW7D,YAAcsN,EAAS,SAAW,UAE1D,CAUA,SAASC,IACHnP,EAAMC,SACVD,EAAMC,QAAS,EACfD,EAAMM,YAAc,EAEhBG,EAASoE,QACXpE,EAASoE,MAAMjD,YAAc,IAE3BnB,EAASkE,QACXlE,EAASkE,OAAOwF,UAAUyB,IAAI,QAE5BnL,EAASqE,QACXrE,EAASqE,OAAOqF,UAAUyB,IAAI,QAGhC5B,WAAW,IAAMvJ,EAAS2E,OAAO6E,QAAS,KAC1CtH,EAAK,QACP,CAKA,SAASiE,IACF5G,EAAMC,SACXD,EAAMC,QAAS,EAEXQ,EAASkE,QACXlE,EAASkE,OAAOwF,UAAU9B,OAAO,QAE/B5H,EAASqE,QACXrE,EAASqE,OAAOqF,UAAU9B,OAAO,QAGnC1F,EAAK,SACP,CAKA,SAASgC,IACP3E,EAAMC,OAAS2G,IAAUuI,GAC3B,CAKA,SAASxI,IAEP3G,EAAMI,UAAY,KAClBJ,EAAMK,UAAY,KAClBL,EAAMG,SAAW,GACjBK,GAAkB,EAGlBsB,EAAQ,aAAc,MAEtB9B,EAAMK,UAAYU,EAAW,MAC7Be,EAAQ,aAAc9B,EAAMK,WAGxBI,EAASN,WACXM,EAASN,SAAS0B,UAAY,IAIhCgI,EAAgB,UAGhBuB,IAGAvK,EAAoB,EAGhBF,IACFG,GAAwB,EACxBH,EAAGiG,QACHjG,EAAK,MAIP0K,IAGIvL,EAAOpB,gBACTuI,EAAWnH,EAAOpB,eAAgB,OAGpCiE,EAAK,kBACP,CA+MAsG,eAAemG,EAAKC,GAElB,IAAKA,EAAWtP,SAEd,OADAkD,QAAQC,MAAM,qCACP,KAITpD,EAAS,IAAK1B,KAAkBiR,GAGhCrP,EAAMK,UAAYyB,EAAgB,eAAiBf,EAAW,MAC9De,EAAQ,aAAc9B,EAAMK,WAGxBP,EAAOV,iBACTY,EAAMI,UAAY0B,EAAgB,eAKpC,MAAMzD,EAAYyB,EAAOzB,WAAa,yBAChCiR,QAlHRrG,eAAiClJ,EAAkB1B,GAejD,IACE,MAAM+K,QAAiBC,MAAM,GAAGhL,iCAAyCkR,mBAAmBxP,MAE5F,OAAKqJ,EAASgB,SAQDhB,EAASO,OANb,CACL6F,SAAS,EACTtM,aAHsBkG,EAASO,OAAOf,MAAM,KAAA,CAAS,KAGpC1F,OAAS,QAAQkG,EAASwB,SAKjD,CAAE,MAAO1H,GACP,MAAO,CACLsM,SAAS,EACTtM,MAAO,4DAEX,CACF,CAiF+BuM,CAAkB3P,EAAOC,SAAU1B,GAEhE,IAAIwP,EA9EN,IAA2B6B,EAmHzB,OAnCIJ,EAAeE,SAAWF,EAAexP,QAhFpB4P,EAkFLJ,EAAexP,OAvEnCA,EAAOtB,MAAQkR,EAAalR,OAASsB,EAAOtB,MAC5CsB,EAAOrB,SAAWiR,EAAajR,UAAYqB,EAAOrB,SAClDqB,EAAOpB,eAAiBgR,EAAahR,gBAAkBoB,EAAOpB,eAC9DoB,EAAOnB,YAAc+Q,EAAa/Q,aAAemB,EAAOnB,YACxDmB,EAAOvB,SAAYmR,EAAanR,UAAyCuB,EAAOvB,SAG5EmR,EAAapR,QACfwB,EAAOlB,aAAe8Q,EAAapR,MAAMM,cAAgBkB,EAAOlB,aAChEkB,EAAOjB,aAAe6Q,EAAapR,MAAMO,cAAgBiB,EAAOjB,aAChEiB,EAAOhB,WAAa4Q,EAAapR,MAAMQ,YAAcgB,EAAOhB,WAC5DgB,EAAOJ,WAAagQ,EAAapR,MAAMoB,YAAcI,EAAOJ,WACxDgQ,EAAapR,MAAMmB,eACrBK,EAAOL,aAAekQ,SAASD,EAAapR,MAAMmB,aAAc,KAAOK,EAAOL,eAK9EiQ,EAAaE,WACf9P,EAAOX,UAAYuQ,EAAaE,SAASzQ,WAAaW,EAAOX,UAC7DW,EAAOd,oBAAsB0Q,EAAaE,SAAS5Q,qBAAuBc,EAAOd,oBACjFc,EAAOf,eAAiB2Q,EAAaE,SAAS7Q,gBAAkBe,EAAOf,eACvEe,EAAOb,aAAeyQ,EAAaE,SAAS3Q,cAAgBa,EAAOb,aACnEa,EAAOZ,iBAAmBwQ,EAAaE,SAAS1Q,kBAAoBY,EAAOZ,iBAC3EY,EAAOV,eAAiBsQ,EAAaE,SAASxQ,gBAAkBU,EAAOV,gBAIrEsQ,EAAaG,WACf/P,EAAOH,UAAa+P,EAAaG,SAASlQ,WAAwBG,EAAOH,UACzEG,EAAOF,UAAY8P,EAAaG,SAASjQ,WAAwBE,EAAOF,WA0CxEiO,EAAeyB,EAAezB,cACrByB,EAAepM,QAExBD,QAAQsL,KAAK,8CAA+Ce,EAAepM,OAG9C,0CAAzBoM,EAAepM,OACjBD,QAAQC,MAAM,qEAMlBK,IAGAvD,EAAMG,SAAS2C,QAASwI,GAAQrE,EAAWqE,EAAIpE,QAASoE,EAAInE,OAAQmE,EAAIlE,WAG1C,IAA1BpH,EAAMG,SAASoK,QAAgBzK,EAAOpB,gBACxCuI,EAAWnH,EAAOpB,eAAgB,OAIpC2M,EAAiBwC,GAGb/N,EAAOX,WACT6K,WAAWmF,EAAM,KAGnBxM,EAAK,SACEmN,CACT,CAaA,MAAMA,EAA4B,CAChCV,OACAD,OACAvI,QACAjC,SACAoL,QA1RF,WApJMjB,IACFpC,cAAcoC,GACdA,EAAoB,MAuJtB1D,IAGAtK,GAAwB,EACpBH,IACFA,EAAGiG,QACHjG,EAAK,MAIHC,IACF8L,cAAc9L,GACdA,EAAe,MAIbH,EAAS+D,QACX/D,EAAS+D,OAAO6D,SAGlB,MAAM2H,EAAStO,SAASuO,eAAe,yBACnCD,GACFA,EAAO3H,SAITrI,EAAQ,CACNC,QAAQ,EACRC,aAAa,EACbC,SAAU,GACVC,UAAW,KACXC,UAAW,KACXC,YAAa,GAEfG,EAAW,CAAA,EACXI,EAAoB,EACpBC,GAAwB,CAC1B,EAiPEoP,YA5OF,SAAqBhJ,GACdA,EAAQf,SAET1F,EAAS2E,QACX3E,EAAS2E,MAAMpD,MAAQkF,GAEzBjB,IACF,EAsOEkK,QAjOF,SAAiBC,GACXA,EAAKvE,MAAM/J,EAAQ,YAAasO,EAAKvE,MACrCuE,EAAKtE,OAAOhK,EAAQ,aAAcsO,EAAKtE,OACvCsE,EAAKhJ,UAAUtF,EAAQ,gBAAiBsO,EAAKhJ,SACnD,EA8NEiJ,aAzNF,WACE1J,GACF,EAwNE2J,GAnNF,SAAY1N,EAAoBU,GACzB5C,EAAekC,KAClBlC,EAAekC,GAAS,IAE1BlC,EAAekC,GAAO2E,KAAKjE,EAC7B,EA+MEiN,IA1MF,SAAa3N,EAAoBU,GAC3B5C,EAAekC,KACjBlC,EAAekC,GAASlC,EAAekC,GAAO4N,OAAQzN,GAAOA,IAAOO,GAExE,EAuMEmN,SAlMF,WACE,MAAO,IAAKzQ,EACd,EAiME0Q,QAlrDc,SAwrDHC,EAA8Bb,GAiB3C,WACE,GAAwB,oBAAbpO,SAA0B,OAErC,IAAIkP,EAAmClP,SAASmP,cAEhD,IAAKD,EAAQ,CACX,MAAME,EAAUpP,SAASqP,qBAAqB,UAC9C,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAQvG,OAAQyG,IAClC,GAAIF,EAAQE,GAAGC,KAAOH,EAAQE,GAAGC,IAAI9M,SAAS,WAAY,CACxDyM,EAASE,EAAQE,GACjB,KACF,CAEJ,CAEA,IAAKJ,EAAQ,OAEb,MAAM7Q,EAAW6Q,EAAOM,aAAa,kBACrC,GAAInR,EAAU,CACZ,MAAMoR,EAA2D,CAAEpR,YAG7D1B,EAAYuS,EAAOM,aAAa,mBAClC7S,IAAW8S,EAAW9S,UAAYA,GAEtC,MAAMC,EAAQsS,EAAOM,aAAa,cACpB,UAAV5S,GAA+B,SAAVA,IAAkB6S,EAAW7S,MAAQA,GAE9D,MAAMC,EAAWqS,EAAOM,aAAa,iBACjC3S,IAAU4S,EAAW5S,SAAWA,GAGlB,SADAqS,EAAOM,aAAa,qBACZC,EAAWhS,WAAY,GAGrB,YAAxBuC,SAASmL,WACXnL,SAASsE,iBAAiB,mBAAoB,IAAMoJ,EAAK+B,IAEzD/B,EAAK+B,EAET,CACD,CAzCD,GA4CsB,oBAAXrM,SACRA,OAA8C6L,YAAcA,qDAxD7D,MAAO,IAAKb,EACd"}
|
package/dist/widget.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAMV,cAAc,EAEf,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAMV,cAAc,EAEf,MAAM,SAAS,CAAC;AAurDjB;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,cAA0B,CAAC;AAErD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|
package/package.json
CHANGED
package/src/widget.ts
CHANGED
|
@@ -259,7 +259,8 @@ function generateStyles(): string {
|
|
|
259
259
|
return `
|
|
260
260
|
.ihooman-widget * { box-sizing: border-box; margin: 0; padding: 0; }
|
|
261
261
|
.ihooman-widget { font-family: ${fontFamily}; font-size: 14px; line-height: 1.5; color: ${textColor}; -webkit-font-smoothing: antialiased; }
|
|
262
|
-
.ihooman-
|
|
262
|
+
.ihooman-widget button { border-radius: 8px; }
|
|
263
|
+
.ihooman-toggle { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 20px' : 'top: 20px'}; width: ${buttonSize}px; height: ${buttonSize}px; border-radius: 50% !important; background: linear-gradient(135deg, ${gradientFrom}, ${gradientTo}); border: none; cursor: pointer; z-index: ${zIndex}; 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; }
|
|
263
264
|
.ihooman-toggle:hover { transform: scale(1.08); box-shadow: 0 6px 28px rgba(0, 174, 255, 0.45); }
|
|
264
265
|
.ihooman-toggle:active { transform: scale(0.95); }
|
|
265
266
|
.ihooman-toggle::before { content: ''; position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(255,255,255,0.2), transparent); border-radius: 50%; }
|
|
@@ -273,7 +274,7 @@ function generateStyles(): string {
|
|
|
273
274
|
.ihooman-toggle.open .ihooman-pulse { display: none; }
|
|
274
275
|
.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; }
|
|
275
276
|
.ihooman-badge:empty { display: none; }
|
|
276
|
-
.ihooman-window { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 90px' : 'top: 90px'}; width: ${width}px; height: ${height}px; max-height: calc(100vh - 120px); z-index: ${(zIndex ?? 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); }
|
|
277
|
+
.ihooman-window { position: fixed; ${positionRight ? 'right: 20px' : 'left: 20px'}; ${positionBottom ? 'bottom: 90px' : 'top: 90px'}; width: ${width}px; height: ${height}px; max-height: calc(100vh - 120px); z-index: ${(zIndex ?? 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); overscroll-behavior: contain; }
|
|
277
278
|
.ihooman-window.open { opacity: 1; visibility: visible; transform: translateY(0) scale(1); }
|
|
278
279
|
.ihooman-container { position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; border-radius: ${borderRadius}px; overflow: hidden; }
|
|
279
280
|
.ihooman-container::before { content: ''; position: absolute; inset: 0; background: ${bgColor}; opacity: 0.97; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: ${borderRadius}px; border: 1px solid ${borderColor}; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); }
|
|
@@ -291,7 +292,7 @@ function generateStyles(): string {
|
|
|
291
292
|
.ihooman-header-btn { width: 32px; height: 32px; border-radius: 8px !important; 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; }
|
|
292
293
|
.ihooman-header-btn:hover { background: rgba(255,255,255,0.25); }
|
|
293
294
|
.ihooman-header-btn svg { width: 16px; height: 16px; }
|
|
294
|
-
.ihooman-messages { flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; background: ${bgColor}; }
|
|
295
|
+
.ihooman-messages { flex: 1; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; background: ${bgColor}; overscroll-behavior: contain; }
|
|
295
296
|
.ihooman-messages::-webkit-scrollbar { width: 6px; }
|
|
296
297
|
.ihooman-messages::-webkit-scrollbar-track { background: transparent; }
|
|
297
298
|
.ihooman-messages::-webkit-scrollbar-thumb { background: ${borderColor}; border-radius: 3px; }
|
|
@@ -359,7 +360,7 @@ function generateStyles(): string {
|
|
|
359
360
|
.ihooman-history-new { display: inline-flex; align-items: center; gap: 4px; background: linear-gradient(135deg, ${gradientFrom}, ${gradientTo}); color: white; border: none; padding: 8px 16px; border-radius: 8px !important; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s; }
|
|
360
361
|
.ihooman-history-new:hover { transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0, 174, 255, 0.3); }
|
|
361
362
|
.ihooman-history-new svg { width: 14px; height: 14px; flex-shrink: 0; }
|
|
362
|
-
.ihooman-history-list { flex: 1; overflow-y: auto; padding: 8px; }
|
|
363
|
+
.ihooman-history-list { flex: 1; overflow-y: auto; padding: 8px; overscroll-behavior: contain; }
|
|
363
364
|
.ihooman-history-item { padding: 12px; border: 1px solid ${borderColor}; border-radius: 8px; margin-bottom: 6px; cursor: pointer; transition: all 0.2s; background: ${bgColor}; }
|
|
364
365
|
.ihooman-history-item:hover { background: ${isDark ? 'rgba(255,255,255,0.05)' : '#f8fafc'}; }
|
|
365
366
|
.ihooman-history-item.active { background: ${isDark ? 'rgba(0, 174, 255, 0.1)' : '#eff6ff'}; border-color: ${primaryColor}; }
|