@vanira/sdk 0.0.41 → 0.0.43

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.
Files changed (44) hide show
  1. package/dist/VaniraAI-D2KUxJJO.js +682 -0
  2. package/dist/VaniraAI-EFYOmJ2E.cjs +1 -0
  3. package/dist/__tests__/adapters.test.d.ts +14 -0
  4. package/dist/adapters/PeerConnectionAdapter.d.ts +90 -0
  5. package/dist/adapters/browser/BrowserAudioAdapter.d.ts +9 -0
  6. package/dist/adapters/browser/BrowserDataChannelAdapter.d.ts +16 -0
  7. package/dist/adapters/browser/BrowserMediaAdapter.d.ts +10 -0
  8. package/dist/adapters/browser/BrowserPeerAdapter.d.ts +9 -0
  9. package/dist/adapters/browser/index.d.ts +4 -0
  10. package/dist/adapters/interfaces.d.ts +70 -0
  11. package/dist/adapters/react-native/RNAudioAdapter.d.ts +9 -0
  12. package/dist/adapters/react-native/RNDataChannelAdapter.d.ts +16 -0
  13. package/dist/adapters/react-native/RNMediaAdapter.d.ts +17 -0
  14. package/dist/adapters/react-native/RNPeerAdapter.d.ts +19 -0
  15. package/dist/adapters/react-native/index.d.ts +4 -0
  16. package/dist/browser.d.ts +1 -0
  17. package/dist/core/VaniraAI.d.ts +2 -0
  18. package/dist/index.d.ts +21 -3
  19. package/dist/platforms/browser.cjs +8 -0
  20. package/dist/platforms/browser.d.ts +28 -0
  21. package/dist/platforms/browser.js +479 -0
  22. package/dist/platforms/react-native.cjs +1 -0
  23. package/dist/platforms/react-native.d.ts +46 -0
  24. package/dist/platforms/react-native.js +116 -0
  25. package/dist/react/PresetRenderer.d.ts +1 -2
  26. package/dist/react/index.d.ts +0 -4
  27. package/dist/react-native.d.ts +1 -0
  28. package/dist/runtime/browserRuntime.d.ts +17 -0
  29. package/dist/runtime/reactNativeRuntime.d.ts +18 -0
  30. package/dist/runtime/types.d.ts +96 -0
  31. package/dist/types.d.ts +36 -4
  32. package/dist/ui/presets/WidgetPresetRenderer.d.ts +2 -0
  33. package/dist/vanira-sdk.es.js +1788 -231
  34. package/dist/vanira-sdk.js +36 -36
  35. package/dist/vanira-sdk.js.map +1 -1
  36. package/dist/vanira-sdk.umd.js +1538 -0
  37. package/package.json +18 -3
  38. package/dist/react/presets/CalendarPreset.d.ts +0 -4
  39. package/dist/react/presets/CameraPreset.d.ts +0 -16
  40. package/dist/react/presets/FormPreset.d.ts +0 -4
  41. package/dist/react/presets/NavigatePreset.d.ts +0 -16
  42. package/dist/react/presets/UploadPreset.d.ts +0 -17
  43. package/dist/react/registry.d.ts +0 -3
  44. package/dist/react/types.d.ts +0 -21
@@ -1,55 +1,35 @@
1
- (function(O,k){typeof exports=="object"&&typeof module<"u"?k(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],k):(O=typeof globalThis<"u"?globalThis:O||self,k(O.VaniraAI={},O.React))})(this,function(O,k){"use strict";var Ai=Object.defineProperty;var ui=(O,k,re)=>k in O?Ai(O,k,{enumerable:!0,configurable:!0,writable:!0,value:re}):O[k]=re;var h=(O,k,re)=>ui(O,typeof k!="symbol"?k+"":k,re);var re=typeof document<"u"?document.currentScript:null;class Oe{constructor(e){h(this,"serverUrl");h(this,"agentId");h(this,"callId");h(this,"prospectId");h(this,"apiKey");h(this,"backendUrl");h(this,"token");h(this,"onConnected");h(this,"onDisconnected");h(this,"onError");h(this,"onTranscription");h(this,"onLocalStream");h(this,"onRemoteTrack");h(this,"onClientToolCall");h(this,"onSessionStarted");h(this,"sessionStartedEmitted",!1);h(this,"pc",null);h(this,"dataChannel",null);h(this,"audioElement",null);h(this,"localStream",null);h(this,"connected",!1);if(!e.agentId)throw new Error("agentId is required");if(!e.serverUrl&&!e.apiKey)throw new Error("Provide either serverUrl or apiKey (to use createCall())");this.agentId=e.agentId,this.serverUrl=e.serverUrl?e.serverUrl.replace(/\/$/,""):"",this.apiKey=e.apiKey,this.backendUrl=(e.backendUrl||"https://api.vanira.io").replace(/\/$/,"");const t=typeof window<"u";if(this.prospectId=e.prospectId,!this.prospectId&&t)try{this.prospectId=window.sessionStorage&&window.sessionStorage.getItem("vanira_prospect_id")||window.localStorage&&window.localStorage.getItem("vanira_prospect_id")||void 0}catch{}const i=e.sessionBehavior==="continue";if(e.callId)this.callId=e.callId;else if(i&&t)try{this.callId=window.sessionStorage&&window.sessionStorage.getItem("vanira_latest_call_id")||window.localStorage&&window.localStorage.getItem("vanira_latest_call_id")||void 0}catch{}else this.callId=void 0;this.onConnected=e.onConnected||(()=>{}),this.onDisconnected=e.onDisconnected||(()=>{}),this.onError=e.onError||(n=>console.error("[WebRTC]",n)),this.onTranscription=e.onTranscription||(()=>{}),this.onLocalStream=e.onLocalStream||(()=>{}),this.onRemoteTrack=e.onRemoteTrack||(()=>{}),this.onClientToolCall=e.onClientToolCall||(()=>{}),this.onSessionStarted=e.onSessionStarted}async createCall(){var n;if(!this.apiKey)throw new Error("[VaniraAI] apiKey is required to use createCall()");const e={"Content-Type":"application/json","X-API-Key":this.apiKey},t=await fetch(`${this.backendUrl}/calls/create`,{method:"POST",headers:e,body:JSON.stringify({agent_id:this.agentId,type:"web",prospect_id:this.prospectId,call_id:this.callId})});if(!t.ok){const s=await t.json().catch(()=>({}));throw new Error(`[VaniraAI] createCall failed (${t.status}): ${((n=s==null?void 0:s.detail)==null?void 0:n.message)||(s==null?void 0:s.message)||t.statusText}`)}const i=await t.json();if(!i.call_id||!i.worker_url)throw new Error("[VaniraAI] createCall response missing call_id or worker_url");if(this.callId=i.call_id,this.prospectId=i.prospect_id||this.prospectId,this.serverUrl=i.worker_url,typeof window<"u")try{window.sessionStorage&&(window.sessionStorage.setItem("vanira_prospect_id",this.prospectId||""),window.sessionStorage.setItem("vanira_latest_call_id",this.callId||"")),window.localStorage&&(window.localStorage.setItem("vanira_prospect_id",this.prospectId||""),window.localStorage.setItem("vanira_latest_call_id",this.callId||""))}catch(s){console.warn("[WebRTC] Failed to save session variables to storage:",s)}if(this.onSessionStarted&&this.prospectId&&this.callId)try{this.onSessionStarted({prospectId:this.prospectId,callId:this.callId,serverUrl:this.serverUrl}),this.sessionStartedEmitted=!0}catch(s){console.error("[WebRTC] Error in onSessionStarted callback:",s)}await this.connect()}async connect(){var e;if(this.apiKey&&!this.serverUrl){await this.createCall();return}if(!this.serverUrl)throw new Error("[VaniraAI] serverUrl is missing. Provide apiKey or serverUrl.");if(this.callId||(this.callId=this.generateCallId()),this.onSessionStarted&&this.prospectId&&this.callId&&!this.sessionStartedEmitted)try{this.onSessionStarted({prospectId:this.prospectId,callId:this.callId,serverUrl:this.serverUrl}),this.sessionStartedEmitted=!0}catch(t){console.error("[WebRTC] Error in onSessionStarted callback:",t)}console.log("đŸ”ĩ [WebRTC] Starting connection...");try{this.pc=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"},{urls:"stun:global.relay.metered.ca:80"},{urls:["turns:global.relay.metered.ca:443?transport=tcp","turn:global.relay.metered.ca:443?transport=tcp","turn:global.relay.metered.ca:80?transport=tcp"],username:"fa97658be3343d21da3b65e6",credential:"HXHDoqeHbvZrmCuf"}],iceTransportPolicy:"all"}),console.log("using ice servers:",[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}]);let t;try{t=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:{ideal:16e3},channelCount:1}})}catch(p){if(console.error("🎤 [WebRTC] Microphone access failed:",p),p.name==="NotAllowedError"||p.name==="PermissionDeniedError"||(e=p.message)!=null&&e.includes("Permission denied")){const c=navigator.userAgent,g=/iPad|iPhone|iPod/.test(c)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1;let o="Microphone access denied. Please allow microphone access in your browser settings.";g&&(c.includes("CriOS")?o="Microphone access blocked. Please enable it in iOS Settings > Chrome > Microphone, then reload the page.":c.includes("FxiOS")?o="Microphone access blocked. Please enable it in iOS Settings > Firefox > Microphone, then reload the page.":o="Microphone access blocked. Please enable it in iOS Settings > Safari > Microphone (or tap 'aA' > Website Settings > Allow Microphone).");const A=new Error(o);throw A.name=p.name,A}throw p}if(console.log("🎤 [WebRTC] Microphone access granted"),this.localStream=t,!this.pc){console.log("[WebRTC] Connection aborted: peer connection closed during setup"),t.getTracks().forEach(p=>p.stop());return}if(this.onLocalStream(t),t.getTracks().forEach(p=>{var c;(c=this.pc)==null||c.addTrack(p,t)}),!this.pc)throw new Error("RTCPeerConnection was closed unexpectedly");this.dataChannel=this.pc.createDataChannel("control"),this.dataChannel.onopen=()=>console.log("📡 [WebRTC] DataChannel opened"),this.dataChannel.onmessage=p=>{if(typeof p.data=="string")try{this.handleControlEvent(JSON.parse(p.data))}catch{console.warn("[WebRTC] Failed to parse message:",p.data)}else if(p.data instanceof ArrayBuffer)try{const c=new TextDecoder().decode(p.data);try{const g=JSON.parse(c);g&&typeof g=="object"&&g.event==="client_tool_call"?(console.log("[VaniraAI] Safely decoding binary tool_call to JSON:",g),this.handleControlEvent(g)):console.log("[VaniraAI] Decoded JSON from binary (inspect only):",g)}catch{console.log("[VaniraAI] Decoded String from binary:",c)}}catch{console.log("[VaniraAI] Received binary data:",p.data.byteLength,"bytes (not decodable)")}else p.data instanceof Blob&&p.data.text().then(c=>{try{this.handleControlEvent(JSON.parse(c))}catch{console.warn("[WebRTC] Failed to parse blob data:",c)}})},this.dataChannel.onerror=p=>console.error("❌ [WebRTC] DataChannel error:",p),this.pc.ontrack=p=>{const c=p.track,g=p.streams[0];console.log(`đŸ“Ĩ [WebRTC] Received ${c.kind} track`),c.kind==="audio"?(console.log("🔊 [WebRTC] Received audio track from server"),this.audioElement=new Audio,this.audioElement.srcObject=g,this.audioElement.play().catch(o=>console.warn("Audio autoplay blocked:",o)),this.audioElement.onended=()=>{this.sendEvent("playedStream"),console.log("✅ [WebRTC] TTS playback complete")},this.onRemoteTrack(c,g)):c.kind==="video"&&(console.log("📹 [WebRTC] Video track received"),this.onRemoteTrack(c,g))};const i=()=>{var g,o,A,f,m,C,w,b,y,E,S;console.log("🔄 [WebRTC] State:",(g=this.pc)==null?void 0:g.connectionState,"| ICE:",(o=this.pc)==null?void 0:o.iceConnectionState);const p=((A=this.pc)==null?void 0:A.connectionState)==="connected"||((f=this.pc)==null?void 0:f.iceConnectionState)==="connected"||((m=this.pc)==null?void 0:m.iceConnectionState)==="completed",c=((C=this.pc)==null?void 0:C.connectionState)==="failed"||((w=this.pc)==null?void 0:w.iceConnectionState)==="failed"||((b=this.pc)==null?void 0:b.connectionState)==="closed"||((y=this.pc)==null?void 0:y.iceConnectionState)==="closed"||((E=this.pc)==null?void 0:E.connectionState)==="disconnected"||((S=this.pc)==null?void 0:S.iceConnectionState)==="disconnected";p&&!this.connected?(this.connected=!0,this.onConnected()):c&&this.connected&&(this.connected=!1,this.onDisconnected())};this.pc.onconnectionstatechange=i,this.pc.oniceconnectionstatechange=i;const n=await this.pc.createOffer();await this.pc.setLocalDescription(n),console.log("📝 [WebRTC] Created offer, waiting for ICE gathering..."),await this.waitForIceGathering(),console.log("🧊 [WebRTC] ICE gathering complete"),console.log("📤 [WebRTC] Sending offer via HTTP...");const s=this.serverUrl.includes("?")?this.serverUrl:`${this.serverUrl}/webrtc?agent=${this.agentId}_${this.callId}`,a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({offer:this.pc.localDescription,agentId:this.agentId,callId:this.callId})});if(!a.ok){const p=await a.json();throw new Error(p.error||`HTTP ${a.status}`)}const{answer:u}=await a.json();console.log("đŸ“Ĩ [WebRTC] Received answer from server"),await this.pc.setRemoteDescription(u),console.log("✅ [WebRTC] Connection established!")}catch(t){throw console.error("❌ [WebRTC] Connection failed:",t),this.disconnect(),this.onError(t.message||t),t}}waitForIceGathering(){return new Promise(e=>{if(!this.pc)return e();if(this.pc.iceGatheringState==="complete")e();else{const t=()=>{var i,n;((i=this.pc)==null?void 0:i.iceGatheringState)==="complete"&&((n=this.pc)==null||n.removeEventListener("icegatheringstatechange",t),e())};this.pc.addEventListener("icegatheringstatechange",t),setTimeout(()=>{var i;(i=this.pc)==null||i.removeEventListener("icegatheringstatechange",t),console.warn("âš ī¸ [WebRTC] ICE gathering timeout, proceeding anyway"),e()},5e3)}})}sendEvent(e,t={}){var i;if(((i=this.dataChannel)==null?void 0:i.readyState)==="open"){const n={event:e,...t};console.log(`📤 [WebRTC] Sending event: ${e}`,n),this.dataChannel.send(JSON.stringify(n))}else console.warn(`âš ī¸ [WebRTC] Cannot send event ${e} - DataChannel not open`)}handleControlEvent(e){var t;switch(e.event){case"clearAudio":console.log("🛑 [WebRTC] Interrupt: clearAudio received (leaving stream unpaused)");break;case"transcription":console.log("📝 [WebRTC] Transcription:",e.text),this.onTranscription(e.text,e.isFinal);break;case"mark":console.log("đŸˇī¸ [WebRTC] Mark:",e.name);break;case"client_tool_call":{const i=e.tool_call||e.data||e,n=(i==null?void 0:i.tool_call_id)||(i==null?void 0:i.call_id)||e.tool_call_id||"";n&&((t=this.dataChannel)==null?void 0:t.readyState)==="open"?(this.dataChannel.send(JSON.stringify({event:"client_tool_ack",data:{tool_call_id:n}})),console.log("✅ [VaniraAI] Sent client_tool_ack for:",n)):n||console.warn("âš ī¸ [VaniraAI] client_tool_call received without tool_call_id — ack skipped");const s=(i==null?void 0:i.arguments)||(i==null?void 0:i.args)||{},a=(i==null?void 0:i.client_fields)||{},u=(a==null?void 0:a.preset_id)||(s==null?void 0:s.preset_id);if(u){if(console.log(`🎨 [VaniraAI] Preset detected: ${u}`),console.log("🎨 [VaniraAI] Tool args:",s),console.log("🎨 [VaniraAI] Client fields:",a),u==="vanira_highlight_element"){const p=String((s==null?void 0:s.css_selector)||(a==null?void 0:a.css_selector)||(s==null?void 0:s.selector)||(a==null?void 0:a.selector)||""),c=String((s==null?void 0:s.highlight_color)||(a==null?void 0:a.highlight_color)||"#a855f7"),g=Number((s==null?void 0:s.duration_ms)||(a==null?void 0:a.duration_ms)||3e3);if(console.log("đŸ”Ļ [VaniraAI] vanira_highlight_element triggered"),console.log(` → selector: "${p}"`),console.log(` → color: "${c}"`),console.log(` → duration: ${g}ms`),!p){console.warn("âš ī¸ [VaniraAI] No css_selector provided for vanira_highlight_element — aborting");break}const o=document.querySelector(p);if(console.log(`đŸ”Ļ [VaniraAI] querySelector("${p}") →`,o),!o){console.warn(`âš ī¸ [VaniraAI] Element not found for selector: "${p}"`);break}const A=o.style.outline,f=o.style.outlineOffset,m=o.style.boxShadow,C=o.style.transition,w=o.style.scrollMarginTop;o.style.transition="outline 0.2s ease, box-shadow 0.2s ease",o.style.outline=`3px solid ${c}`,o.style.outlineOffset="6px",o.style.boxShadow=`0 0 0 8px ${c}33, 0 0 32px ${c}88`,o.style.scrollMarginTop="100px",console.log("✅ [VaniraAI] Highlight applied to:",o),o.scrollIntoView({behavior:"smooth",block:"center"}),setTimeout(()=>{o.style.outline=A,o.style.outlineOffset=f,o.style.boxShadow=m,o.style.transition=C,o.style.scrollMarginTop=w,console.log(`đŸ”Ļ [VaniraAI] Highlight removed from: "${p}"`)},g);break}console.log(`🎨 [VaniraAI] Visual preset "${u}" — dispatching vanira:preset event`),window.dispatchEvent(new CustomEvent("vanira:preset",{detail:{toolCall:i,client:this}})),this.onClientToolCall(i);break}console.log("đŸ› ī¸ [VaniraAI] Client Tool Call:",e),this.onClientToolCall(i);break}default:console.log("â„šī¸ [WebRTC] Unknown event:",e.event)}}disconnect(){console.log("🔴 [WebRTC] Disconnecting..."),this.audioElement&&(this.audioElement.pause(),this.audioElement.srcObject=null),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=null),this.pc&&(this.pc.getSenders().forEach(e=>{e.track&&e.track.stop()}),this.pc.close(),this.pc=null),this.localStream&&(this.localStream.getTracks().forEach(e=>{try{e.stop()}catch{}}),this.localStream=null),this.connected=!1,this.onDisconnected()}generateCallId(){return"web_"+Date.now()+"_"+Math.random().toString(36).substr(2,8)}sendToolResult(e,t){this.sendEvent("client_tool_result",{call_id:e,result:t})}sendToolAck(e){var t;((t=this.dataChannel)==null?void 0:t.readyState)==="open"?(this.dataChannel.send(JSON.stringify({event:"client_tool_ack",data:{tool_call_id:e}})),console.log("✅ [VaniraAI] Sent client_tool_ack for:",e)):console.warn("âš ī¸ [VaniraAI] Cannot send tool_ack: DataChannel not open")}sendContextUpdate(e){this.sendEvent("client_context_update",{data:{context:e}})}sendActionTrigger(e,t={}){this.sendEvent("client_action_trigger",{data:{action_name:e,data:t}})}triggerActionInterrupt(){this.sendEvent("action_interrupt"),console.log("🛑 [VaniraAI] Triggered client-side action interrupt")}async uploadMedia(e,t="general",i=""){if(!this.serverUrl)throw new Error("Upload failed: serverUrl is not set. Connect the WebRTCClient first.");if(!this.callId)throw new Error("Upload failed: callId is missing.");let n="";try{n=new URL(this.serverUrl).origin}catch{n=this.serverUrl.replace(/\/webrtc.*$/,"").replace(/\/$/,"")}const s=`${n}/media/upload`,a=new FormData;a.append("file",e),a.append("call_id",this.callId),a.append("reason",t),console.log(`[VaniraAI] Uploading media to ${s} (Call: ${this.callId}, Reason: ${t})...`);const u=await fetch(s,{method:"POST",body:a});if(!u.ok){let A=`HTTP ${u.status}`;try{A=(await u.json()).error||A}catch{}throw new Error(`Upload failed: ${A}`)}const p=await u.json(),c=p.media_id,g=p.url,o=p.content_type||e.type;if(!c||!g)throw new Error("Upload failed: server response missing media_id or url");if(console.log(`[VaniraAI] Media uploaded successfully. ID: ${c}, URL: ${g}`),this.dataChannel&&this.dataChannel.readyState==="open"){const A={event:"client_media_update",data:{media_id:c,media_url:g,content_type:o,reason:t,message:i}};this.dataChannel.send(JSON.stringify(A)),console.log("[VaniraAI] Sent client_media_update notification via DataChannel:",A)}else console.warn("[VaniraAI] WebRTC DataChannel is not open. Media uploaded but AI notification skipped.");return{media_id:c,url:g}}static async fetchIceServers(e,t="https://api.vanira.io"){try{const i=await fetch(`${t}/discovery/ice-servers`,{headers:{"X-API-Key":e}});if(!i.ok)throw new Error("Failed to fetch ICE servers");return(await i.json()).ice_servers||[]}catch(i){throw console.error("[WebRTC] Failed to fetch ICE servers:",i),i}}}const xt={};class Ge{constructor(e){h(this,"config");h(this,"_status","idle");h(this,"client",null);h(this,"listeners",new Map);if(!e.agentId)throw new Error("[VaniraAI] agentId is required");this.config=e}get serverUrl(){var e;return(e=this.client)==null?void 0:e.serverUrl}get callId(){var e;return(e=this.client)==null?void 0:e.callId}get prospectId(){var e;return(e=this.client)==null?void 0:e.prospectId}get status(){return this._status}get isConnected(){return this._status==="connected"}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),this}off(e,t){var i;return(i=this.listeners.get(e))==null||i.delete(t),this}emit(e,t){var i;(i=this.listeners.get(e))==null||i.forEach(n=>n(t))}async start(){if(this._status==="connecting"||this._status==="connected")return console.warn("[VaniraAI] Already connecting or connected. Call stop() first."),{callId:this.callId||"",prospectId:this.prospectId||"",serverUrl:this.serverUrl||""};this._setStatus("connecting");const e=this.config.serverUrl||(this.config.apiKey?"":this._inferServerUrl());try{return this.client=new Oe({serverUrl:e,agentId:this.config.agentId,callId:this.config.callId,prospectId:this.config.prospectId,sessionBehavior:this.config.sessionBehavior,token:this.config.token,apiKey:this.config.apiKey,backendUrl:this.config.backendUrl,iceServers:this.config.iceServers,onSessionStarted:t=>{this.emit("session_started",t)},onConnected:()=>{this._setStatus("connected"),this.emit("connected")},onDisconnected:()=>{this._setStatus("disconnected"),this.emit("disconnected")},onError:t=>{this._setStatus("error"),this.emit("error",typeof t=="string"?t:(t==null?void 0:t.message)||"Connection failed")},onTranscription:(t,i)=>{this.emit("transcription",{text:t,isFinal:i})},onClientToolCall:t=>{const i=(t==null?void 0:t.data)||t,n={name:i.name||i.tool_name||"",arguments:i.arguments||i.args||{},tool_call_id:i.tool_call_id||i.call_id||"",execution_mode:i.execution_mode||"fire_and_forget",client_fields:i.client_fields||{}};this.emit("tool_call",n)},onRemoteTrack:(t,i)=>{this.emit("track",{track:t,stream:i})}}),await this.client.connect(),{callId:this.callId||"",prospectId:this.prospectId||"",serverUrl:this.serverUrl||""}}catch(t){throw this._setStatus("error"),this.emit("error",(t==null?void 0:t.message)||"Failed to start call"),t}}stop(){this.client&&(this.client.disconnect(),this.client=null),this._setStatus("disconnected")}sendToolResult(e,t){this._assertConnected("sendToolResult"),this.client.sendToolResult(e,t)}sendToolError(e,t){this._assertConnected("sendToolError"),this.client.sendEvent("client_tool_result",{call_id:e,result:{status:"error",error:t}})}updateContext(e){this._assertConnected("updateContext"),this.client.sendContextUpdate(e)}triggerInterrupt(e,t={}){this._assertConnected("triggerInterrupt"),this.client.triggerActionInterrupt(),this.client.sendActionTrigger(e,t)}interruptAudioOnly(){this._assertConnected("interruptAudioOnly"),this.client.triggerActionInterrupt()}async uploadMedia(e,t="general",i="",n=!1){this._assertConnected("uploadMedia"),n&&this.client.triggerActionInterrupt();const s=50*1024*1024;if(e.size>s)throw new Error(`Upload failed: file is too large (${(e.size/1024/1024).toFixed(1)} MB). Maximum is 50 MB.`);const a=["image/jpeg","image/png","image/gif","image/webp","image/bmp","application/pdf"],u=e.type;if(u&&!a.includes(u))throw new Error(`Upload failed: unsupported file type '${u}'. Supported: JPEG, PNG, GIF, WebP, BMP, PDF.`);return this.client.uploadMedia(e,t,i)}_setStatus(e){this._status=e}_inferServerUrl(){return(typeof{url:typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:re&&re.tagName.toUpperCase()==="SCRIPT"&&re.src||new URL("vanira-sdk.es.js",document.baseURI).href}<"u"&&xt||{}).VITE_WEBRTC_SERVER_URL||"https://in-godspeed.travelr.club"}_assertConnected(e){if(!this.client||!this.isConnected)throw new Error(`[VaniraAI] Cannot call ${e}() when not connected. Call start() first.`)}}const bt="https://api.vanira.io";class Ne{static async fetchWidgetConfig(e,t){var n;const i={"Content-Type":"application/json"};t&&(i["X-API-Key"]=t);try{const s=await fetch(`${bt}/assistant/widget/${e}/config`,{method:"GET",headers:i});if(!s.ok)throw new Error(`Widget config fetch failed: HTTP ${s.status}`);const a=await s.json();return(n=a.agent)!=null&&n.client&&(a.client=a.agent.client),a}catch(s){throw console.error("[VaniraAI] Failed to fetch widget config:",s),s}}}const Ct="https://coredb.travelr.club/v1/graphql";let ve="https://inboxapi.travelr.club";class se{static setChatUrl(e){ve=e}static async createChatProspect(e){var i,n;const t=`
2
- mutation CreateChatProspect($prospectGroupId: uuid!, $name: String!) {
3
- insert_prospects_one(object: {prospect_group_id: $prospectGroupId, name: $name, source: WEBSITE_WIDGET}) {
4
- id
5
- }
6
- }
7
- `;try{const a=await(await fetch(Ct,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,variables:{prospectGroupId:e,name:`Widget Guest ${new Date().toLocaleString()}`}})})).json();return a.errors?(console.warn("[VaniraAI] Prospect creation failed, using anonymous ID",a.errors),`anon_${Date.now()}_${Math.random().toString(36).substr(2,9)}`):((n=(i=a.data)==null?void 0:i.insert_prospects_one)==null?void 0:n.id)||`anon_${Date.now()}`}catch(s){return console.error("[VaniraAI] Failed to create prospect:",s),`anon_${Date.now()}`}}static async fetchWelcomeMessage(e,t,i,n){try{const s={"Content-Type":"application/json"},a=await fetch(`${ve}/widget/chat`,{method:"POST",headers:s,body:JSON.stringify({agent_id:e,...i?{widget_id:i}:{},message:"",prospect_id:t,stream:!1})});if(!a.ok)throw new Error("Failed to fetch welcome message");const u=await a.json();let p=u.response||"Hey! how can I help you ?",c;const g=u.chat_id||u.inbox_id,o=u.conversation_id||null;return u.widget&&(c=u.widget),{role:"assistant",content:p,widget:c,chatId:g,conversationId:o}}catch(s){return console.error("[VaniraAI] Failed to fetch welcome message:",s),{role:"assistant",content:"Hey! how can I help you ?"}}}static async sendChatMessage(e,t,i,n,s,a,u,p,c){var g,o,A,f;try{const m={"Content-Type":"application/json"},C={agent_id:e,message:i,prospect_id:t,stream:!0};n&&(C.inbox_id=n),p&&(C.widget_id=p);const w=await fetch(`${ve}/widget/chat`,{method:"POST",headers:m,body:JSON.stringify(C)});if(!w.ok)throw new Error("Chat request failed");const b=(g=w.body)==null?void 0:g.getReader(),y=new TextDecoder;if(!b)throw new Error("No reader");let E="",S="",I=null,j=null;for(;;){const{done:q,value:D}=await b.read();if(q)break;S+=y.decode(D,{stream:!0});const P=S.split(`
8
- `);S=P.pop()||"";for(const R of P){const Z=R.trim();if(Z&&Z.startsWith("data: ")){const ce=Z.slice(6);if(ce==="[DONE]"){u(I,j);return}try{const L=JSON.parse(ce);if(L.type==="metadata"){(L.chat_id||L.inbox_id)&&(I=L.chat_id||L.inbox_id),L.conversation_id&&(j=L.conversation_id);continue}const F=(f=(A=(o=L.choices)==null?void 0:o[0])==null?void 0:A.delta)==null?void 0:f.content;F&&(E+=F,s(E)),L.widget&&a(L.widget),L.chat_id&&!I&&(I=L.chat_id),L.conversation_id&&!j&&(j=L.conversation_id)}catch{}}}}u(I,j)}catch(m){console.error("[VaniraAI] Chat error:",m),s("Sorry, I encountered an error. Please try again."),u(null,null)}}static listenForAdminReplies(e,t,i){const n=`${ve}/inbox/stream?inbox_id=${e}&sender=${encodeURIComponent(t)}`;let s=null,a=0,u=!1;const p=()=>{u||(s=new EventSource(n),console.log(`[VaniraAI] Subscribed to SSE EventSource at ${s.url}`),s.onopen=()=>{console.log("[VaniraAI] SSE connection opened successfully."),a=0},s.onmessage=c=>{console.log("[VaniraAI] 📡 Raw SSE Event triggered:",c.data);try{const g=JSON.parse(c.data);console.log("[VaniraAI] SSE stream JSON parsed:",g);const o=g.direction==="outgoing",A=!!g.content,f=g.source!=="ai";o&&A&&f&&(console.log("[VaniraAI] đŸŽ¯ Displaying admin message in chat UI:",g.content),i(g.content))}catch(g){console.error("[VaniraAI] SSE parse error",g)}},s.onerror=c=>{if(console.error("[VaniraAI] SSE connection error or disconnect",c),s&&(s.close(),s=null),u)return;const g=Math.min(2e3*Math.pow(2,a),3e4);console.log(`[VaniraAI] Reconnecting SSE in ${g}ms (Attempt ${a+1})...`),a++,setTimeout(p,g)})};return p(),{close:()=>{u=!0,s&&(s.close(),s=null,console.log("[VaniraAI] SSE connection manually closed."))}}}static async createCall(e,t,i,n,s){try{const a="https://api.vanira.io",u={"Content-Type":"application/json"};s&&(u["X-API-Key"]=s);const p=await fetch(`${a}/calls/create`,{method:"POST",headers:u,body:JSON.stringify({agent_id:e,prospect_id:i||void 0,type:"web"})}),c=await p.json();if(!p.ok)throw new Error(`[VaniraAI] Call creation failed HTTP ${p.status}`);if(!c.worker_url)throw new Error("[VaniraAI] Worker URL missing from response. Call cannot proceed.");return{callId:c.call_id||c.id||`web_${Date.now()}`,workerUrl:c.worker_url}}catch(a){throw console.error("[VaniraAI] Failed to create call:",a),a}}static async resolveConversation(e){try{if(!(await fetch(`${ve}/inbox/conversations/resolve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({conversation_id:e})})).ok)throw new Error("Failed to resolve conversation")}catch(t){throw console.error("[VaniraAI] Failed to resolve conversation:",t),t}}}class It{constructor(e){h(this,"config");h(this,"root",null);this.config=e}async initialize(e){this.config=e}}const Ae=class Ae{constructor(e){h(this,"tabId");h(this,"sessionKey");h(this,"channelName");h(this,"channel",null);h(this,"heartbeatTimer",null);h(this,"listeners",new Map);const t=e.replace(/[^a-z0-9_-]/gi,"_");this.sessionKey=`vaniraai_session_${t}`,this.channelName=`vaniraai_channel_${t}`,this.tabId=this._getOrCreateTabId(),this._setupChannel()}getTabId(){return this.tabId}claimSession(){const e=this._loadSession();if(e){const n=Date.now()-e.lastActive,s=e.tabId===this.tabId,a=n>Ae.HEARTBEAT_TIMEOUT_MS;if(s)return this._startHeartbeat(),this._emit("session_restored"),!0;if(!a)return this._emit("tab_conflict"),!1}const t=e?{...e,tabId:this.tabId,lastActive:Date.now()}:{tabId:this.tabId,prospectId:"",chatId:null,conversationId:null,messages:[],lastActive:Date.now()};this._saveSession(t),this._startHeartbeat(),this._broadcast({type:"took_over",tabId:this.tabId});const i=!!(e!=null&&e.prospectId);return this._emit(i?"session_restored":"session_claimed"),!0}forceClaimSession(){const e=this._loadSession(),t=e?{...e,tabId:this.tabId,lastActive:Date.now()}:{tabId:this.tabId,prospectId:"",chatId:null,conversationId:null,messages:[],lastActive:Date.now()};this._saveSession(t),this._startHeartbeat(),this._broadcast({type:"took_over",tabId:this.tabId}),this._emit("session_claimed")}saveIds(e,t,i){const n=this._loadSession()??this._blankSession();this._saveSession({...n,prospectId:e,chatId:t,conversationId:i??n.conversationId??null,tabId:this.tabId,lastActive:Date.now()})}pushMessage(e,t){const i=this._loadSession()??this._blankSession();i.messages.push({role:e,content:t,timestamp:Date.now()}),i.messages.length>100&&(i.messages=i.messages.slice(-100)),this._saveSession({...i,tabId:this.tabId,lastActive:Date.now()})}updateLastAssistantMessage(e){const t=this._loadSession()??this._blankSession(),i=t.messages;let n=!1;for(let s=i.length-1;s>=0;s--)if(i[s].role==="assistant"&&i[s].content===""){i[s].content=e,n=!0;break}if(!n){for(let s=i.length-1;s>=0;s--)if(i[s].role==="assistant"){i[s].content=e,n=!0;break}}n||i.push({role:"assistant",content:e,timestamp:Date.now()}),this._saveSession({...t,tabId:this.tabId,lastActive:Date.now()})}getSession(){return this._loadSession()}clearSession(){localStorage.removeItem(this.sessionKey),this._broadcast({type:"session_cleared",tabId:this.tabId}),this._emit("session_cleared")}clearChatKeepProspect(){const e=this._loadSession();e&&this._saveSession({...e,chatId:null,conversationId:null,messages:[],lastActive:Date.now()})}destroy(){this._stopHeartbeat(),this.channel&&(this.channel.close(),this.channel=null)}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),this}off(e,t){var i;return(i=this.listeners.get(e))==null||i.delete(t),this}_getOrCreateTabId(){let e=sessionStorage.getItem("vaniraai_tab_id");return e||(e=`tab_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,sessionStorage.setItem("vaniraai_tab_id",e)),e}_setupChannel(){typeof BroadcastChannel>"u"||(this.channel=new BroadcastChannel(this.channelName),this.channel.onmessage=e=>{const t=e.data;t.tabId!==this.tabId&&(t.type==="took_over"&&(this._stopHeartbeat(),this._emit("tab_took_over")),t.type,t.type==="session_cleared"&&this._emit("session_cleared"))})}_broadcast(e){var t;(t=this.channel)==null||t.postMessage(e)}_startHeartbeat(){this._stopHeartbeat(),this.heartbeatTimer=setInterval(()=>{const e=this._loadSession();e&&e.tabId===this.tabId&&(this._saveSession({...e,lastActive:Date.now()}),this._broadcast({type:"heartbeat",tabId:this.tabId}))},Ae.HEARTBEAT_INTERVAL_MS)}_stopHeartbeat(){this.heartbeatTimer!==null&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}_loadSession(){try{const e=localStorage.getItem(this.sessionKey);return e?JSON.parse(e):null}catch{return null}}_saveSession(e){try{localStorage.setItem(this.sessionKey,JSON.stringify(e))}catch(t){console.warn("[VaniraAI] SessionManager: failed to save session",t)}}_blankSession(){return{tabId:this.tabId,prospectId:"",chatId:null,conversationId:null,messages:[],lastActive:Date.now()}}_emit(e){var t;(t=this.listeners.get(e))==null||t.forEach(i=>i())}};h(Ae,"HEARTBEAT_INTERVAL_MS",5e3),h(Ae,"HEARTBEAT_TIMEOUT_MS",15e3);let Ce=Ae;const We="data:image/png;base64,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",Ve="data:image/png;base64,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",Je=d=>{d=d.replace(/^#/,"");let e,t,i;return d.length===3?(e=parseInt(d.charAt(0)+d.charAt(0),16),t=parseInt(d.charAt(1)+d.charAt(1),16),i=parseInt(d.charAt(2)+d.charAt(2),16)):(e=parseInt(d.substring(0,2),16),t=parseInt(d.substring(2,4),16),i=parseInt(d.substring(4,6),16)),isNaN(e)||isNaN(t)||isNaN(i)?"0, 0, 0":`${e}, ${t}, ${i}`},Et=(d,e)=>{const t=Je(d),i=Je(e||d);return`
9
- --primary: ${d};
10
- --primary-rgb: ${t};
11
- --primary-hover: ${e||d};
12
- --secondary: ${e||d};
13
- --secondary-rgb: ${i};
14
- `},Bt=`
15
- :host(.vanira-portal) {
16
- position: fixed !important;
17
- bottom: 0 !important;
18
- right: 0 !important;
19
- top: auto !important;
20
- left: auto !important;
21
- width: 0 !important;
22
- height: 0 !important;
23
- pointer-events: none !important;
24
- z-index: 2147483647;
25
- overflow: visible !important;
26
- contain: none !important;
27
- }
28
-
29
- :host {
30
- display: block;
31
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
32
- box-sizing: border-box;
33
-
34
- /* Default Theme Variables */
35
- --primary: #000000;
36
- --primary-hover: #111111;
37
- --primary-rgb: 0, 0, 0;
38
- --secondary: #111111;
39
- --secondary-rgb: 17, 17, 17;
40
- --bg: #ffffff;
41
- --text: #1f2937;
42
- --text-muted: #6b7280;
43
- --border: #e5e7eb;
44
- --shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
45
- --shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.15);
1
+ var X = Object.defineProperty;
2
+ var F = (p, t, e) => t in p ? X(p, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : p[t] = e;
3
+ var a = (p, t, e) => F(p, typeof t != "symbol" ? t + "" : t, e);
4
+ import { V as K } from "./VaniraAI-D2KUxJJO.js";
5
+ import { W as xe } from "./VaniraAI-D2KUxJJO.js";
6
+ import { ChatService as I, SessionManager as q, ConfigService as Z } from "./platforms/browser.js";
7
+ import { BrowserAudioAdapter as Ce, BrowserDataChannelAdapter as Be, BrowserMediaAdapter as Ee, BrowserPeerAdapter as Ie, browserCapabilities as Me, browserRuntime as ke, createBrowserAI as Qe, createBrowserClient as De } from "./platforms/browser.js";
8
+ import { useRef as _, useEffect as z } from "react";
9
+ class $ {
10
+ constructor(t) {
11
+ a(this, "config");
12
+ a(this, "root", null);
13
+ this.config = t;
14
+ }
15
+ async initialize(t) {
16
+ this.config = t;
46
17
  }
47
-
48
- :host * {
49
- box-sizing: border-box;
50
- }
51
-
52
-
18
+ }
19
+ const N = "data:image/png;base64,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", j = "data:image/png;base64,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", Y = (p) => {
20
+ p = p.replace(/^#/, "");
21
+ let t, e, i;
22
+ return p.length === 3 ? (t = parseInt(p.charAt(0) + p.charAt(0), 16), e = parseInt(p.charAt(1) + p.charAt(1), 16), i = parseInt(p.charAt(2) + p.charAt(2), 16)) : (t = parseInt(p.substring(0, 2), 16), e = parseInt(p.substring(2, 4), 16), i = parseInt(p.substring(4, 6), 16)), isNaN(t) || isNaN(e) || isNaN(i) ? "0, 0, 0" : `${t}, ${e}, ${i}`;
23
+ }, ee = (p, t) => {
24
+ const e = Y(p), i = Y(t || p);
25
+ return `
26
+ --primary: ${p};
27
+ --primary-rgb: ${e};
28
+ --primary-hover: ${t || p};
29
+ --secondary: ${t || p};
30
+ --secondary-rgb: ${i};
31
+ `;
32
+ }, te = `
53
33
  @keyframes fadeInScale {
54
34
  from { opacity: 0; transform: scale(0.8); }
55
35
  to { opacity: 1; transform: scale(1); }
@@ -123,7 +103,45 @@
123
103
  0%, 100% { transform: scaleY(1); opacity: 0.7; }
124
104
  50% { transform: scaleY(1.8); opacity: 1; }
125
105
  }
106
+ `, ie = `
107
+ :host(.vanira-portal) {
108
+ position: fixed !important;
109
+ bottom: 0 !important;
110
+ right: 0 !important;
111
+ top: auto !important;
112
+ left: auto !important;
113
+ width: 0 !important;
114
+ height: 0 !important;
115
+ pointer-events: none !important;
116
+ z-index: 2147483647;
117
+ overflow: visible !important;
118
+ contain: none !important;
119
+ }
126
120
 
121
+ :host {
122
+ display: block;
123
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
124
+ box-sizing: border-box;
125
+
126
+ /* Default Theme Variables */
127
+ --primary: #000000;
128
+ --primary-hover: #111111;
129
+ --primary-rgb: 0, 0, 0;
130
+ --secondary: #111111;
131
+ --secondary-rgb: 17, 17, 17;
132
+ --bg: #ffffff;
133
+ --text: #1f2937;
134
+ --text-muted: #6b7280;
135
+ --border: #e5e7eb;
136
+ --shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
137
+ --shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.15);
138
+ }
139
+
140
+ :host * {
141
+ box-sizing: border-box;
142
+ }
143
+
144
+ ${te}
127
145
 
128
146
  .widget-fab {
129
147
  position: fixed;
@@ -804,31 +822,37 @@
804
822
  opacity: 1;
805
823
  color: var(--primary-hover);
806
824
  }
807
- `,W={phone:`
825
+ `, B = {
826
+ phone: `
808
827
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
809
828
  <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
810
829
  </svg>
811
- `,close:`
830
+ `,
831
+ close: `
812
832
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
813
833
  <line x1="18" y1="6" x2="6" y2="18"/>
814
834
  <line x1="6" y1="6" x2="18" y2="18"/>
815
835
  </svg>
816
- `,mic:`
836
+ `,
837
+ mic: `
817
838
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
818
839
  <path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z"/>
819
840
  <path d="M19 10v2a7 7 0 0 1-14 0v-2"/>
820
841
  <line x1="12" y1="19" x2="12" y2="22"/>
821
842
  </svg>
822
- `,send:`
843
+ `,
844
+ send: `
823
845
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
824
846
  <line x1="22" y1="2" x2="11" y2="13"/>
825
847
  <polygon points="22 2 15 22 11 13 2 9 22 2"/>
826
848
  </svg>
827
- `,chat:`
849
+ `,
850
+ chat: `
828
851
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
829
852
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
830
853
  </svg>
831
- `,audioLines:`
854
+ `,
855
+ audioLines: `
832
856
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
833
857
  <path d="M2 10v3"/>
834
858
  <path d="M6 6v11"/>
@@ -837,21 +861,24 @@
837
861
  <path d="M18 5v13"/>
838
862
  <path d="M22 10v3"/>
839
863
  </svg>
840
- `,maximize2:`
864
+ `,
865
+ maximize2: `
841
866
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
842
867
  <polyline points="15 3 21 3 21 9"/>
843
868
  <polyline points="9 21 3 21 3 15"/>
844
869
  <line x1="21" y1="3" x2="14" y2="10"/>
845
870
  <line x1="3" y1="21" x2="10" y2="14"/>
846
871
  </svg>
847
- `,minimize2:`
872
+ `,
873
+ minimize2: `
848
874
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
849
875
  <polyline points="4 14 10 14 10 20"/>
850
876
  <polyline points="20 10 14 10 14 4"/>
851
877
  <line x1="14" y1="10" x2="21" y2="3"/>
852
878
  <line x1="3" y1="21" x2="10" y2="14"/>
853
879
  </svg>
854
- `,voice_orb:`
880
+ `,
881
+ voice_orb: `
855
882
  <div style="display: flex; align-items: center; justify-content: center; gap: 3px; height: 100%; width: 100%;">
856
883
  <div style="width: 3px; height: 10px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0s;"></div>
857
884
  <div style="width: 3px; height: 18px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.2s;"></div>
@@ -859,19 +886,23 @@
859
886
  <div style="width: 3px; height: 22px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.1s;"></div>
860
887
  <div style="width: 3px; height: 12px; background: white; border-radius: 10px; animation: voice-bars-orb 1.2s infinite ease-in-out; animation-delay: 0.3s;"></div>
861
888
  </div>
862
- `},Fe={automotive:`
889
+ `
890
+ }, J = {
891
+ automotive: `
863
892
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
864
893
  <path d="M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2"/>
865
894
  <circle cx="7" cy="17" r="2"/>
866
895
  <path d="M9 17h6"/>
867
896
  <circle cx="17" cy="17" r="2"/>
868
897
  </svg>
869
- `,education:`
898
+ `,
899
+ education: `
870
900
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
871
901
  <path d="M22 10v6M2 10l10-5 10 5-10 5z"/>
872
902
  <path d="M6 12v5c3 3 9 3 12 0v-5"/>
873
903
  </svg>
874
- `,finance:`
904
+ `,
905
+ finance: `
875
906
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
876
907
  <line x1="3" y1="21" x2="21" y2="21"/>
877
908
  <line x1="6" y1="21" x2="6" y2="12"/>
@@ -883,7 +914,8 @@
883
914
  <line x1="10" y1="21" x2="10" y2="12"/>
884
915
  <line x1="14" y1="21" x2="14" y2="12"/>
885
916
  </svg>
886
- `,fitness:`
917
+ `,
918
+ fitness: `
887
919
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
888
920
  <path d="m6.5 6.5 11 11"/>
889
921
  <path d="m21 21-1-1"/>
@@ -893,13 +925,15 @@
893
925
  <path d="m3 10 7-7"/>
894
926
  <path d="m14 21 7-7"/>
895
927
  </svg>
896
- `,food:`
928
+ `,
929
+ food: `
897
930
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
898
931
  <path d="M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"/>
899
932
  <path d="M7 2v20"/>
900
933
  <path d="M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"/>
901
934
  </svg>
902
- `,government:`
935
+ `,
936
+ government: `
903
937
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
904
938
  <rect x="4" y="2" width="16" height="20" rx="2" ry="2"/>
905
939
  <path d="M9 22v-4h6v4"/>
@@ -913,16 +947,19 @@
913
947
  <path d="M8 10h.01"/>
914
948
  <path d="M8 14h.01"/>
915
949
  </svg>
916
- `,healthcare:`
950
+ `,
951
+ healthcare: `
917
952
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
918
953
  <path d="M22 12h-4l-3 9L9 3l-3 9H2"/>
919
954
  </svg>
920
- `,travel:`
955
+ `,
956
+ travel: `
921
957
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
922
958
  <path d="M12 2a5 5 0 0 1 5 5c0 4.5-9 13-9 13S3 11.5 3 7a5 5 0 0 1 10 0Z"/>
923
959
  <circle cx="12" cy="7" r="2"/>
924
960
  </svg>
925
- `,legal:`
961
+ `,
962
+ legal: `
926
963
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
927
964
  <path d="m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1z"/>
928
965
  <path d="m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1z"/>
@@ -930,14 +967,16 @@
930
967
  <path d="M12 3v18"/>
931
968
  <path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"/>
932
969
  </svg>
933
- `,manufacturing:`
970
+ `,
971
+ manufacturing: `
934
972
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
935
973
  <path d="M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"/>
936
974
  <path d="M17 18h1"/>
937
975
  <path d="M12 18h1"/>
938
976
  <path d="M7 18h1"/>
939
977
  </svg>
940
- `,media:`
978
+ `,
979
+ media: `
941
980
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
942
981
  <rect width="20" height="20" x="2" y="2" rx="2.18" ry="2.18"/>
943
982
  <line x1="7" x2="7" y1="2" y2="22"/>
@@ -948,35 +987,50 @@
948
987
  <line x1="17" x2="22" y1="17" y2="17"/>
949
988
  <line x1="17" x2="22" y1="7" y2="7"/>
950
989
  </svg>
951
- `,nonprofit:`
990
+ `,
991
+ nonprofit: `
952
992
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
953
993
  <path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/>
954
994
  </svg>
955
- `,professional:`
995
+ `,
996
+ professional: `
956
997
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
957
998
  <rect width="20" height="14" x="2" y="7" rx="2" ry="2"/>
958
999
  <path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/>
959
1000
  </svg>
960
- `,realestate:`
1001
+ `,
1002
+ realestate: `
961
1003
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
962
1004
  <path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
963
1005
  <polyline points="9 22 9 12 15 12 15 22"/>
964
1006
  </svg>
965
- `,retail:`
1007
+ `,
1008
+ retail: `
966
1009
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
967
1010
  <path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z"/>
968
1011
  <path d="M3 6h18"/>
969
1012
  <path d="M16 10a4 4 0 0 1-8 0"/>
970
1013
  </svg>
971
- `,technology:`
1014
+ `,
1015
+ technology: `
972
1016
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
973
1017
  <rect width="18" height="12" x="3" y="4" rx="2" ry="2"/>
974
1018
  <line x1="2" x2="22" y1="20" y2="20"/>
975
1019
  </svg>
976
- `},Ie={...Fe,default_chat:W.chat,default_voice:W.mic,voice_orb:W.voice_orb,male:`<img src="${We}" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;" />`,female:`<img src="${Ve}" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;" />`};Object.entries(Fe).forEach(([d,e])=>{Ie[`male_${d} `]=`
1020
+ `
1021
+ }, T = {
1022
+ ...J,
1023
+ default_chat: B.chat,
1024
+ default_voice: B.mic,
1025
+ voice_orb: B.voice_orb,
1026
+ male: `<img src="${N}" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;" />`,
1027
+ female: `<img src="${j}" style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block;" />`
1028
+ };
1029
+ Object.entries(J).forEach(([p, t]) => {
1030
+ T[`male_${p} `] = `
977
1031
  < div style = "position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: white; border-radius: 50%;" >
978
1032
  <div style="width: 60%; height: 60%; color: #000000;" >
979
- ${e}
1033
+ ${t}
980
1034
  </div>
981
1035
  < div style = "
982
1036
  position: absolute;
@@ -990,13 +1044,13 @@ border: 2px solid white;
990
1044
  box - shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
991
1045
  overflow: hidden;
992
1046
  ">
993
- < img src = "${We}" style = "width: 100%; height: 100%; object-fit: cover;" />
1047
+ < img src = "${N}" style = "width: 100%; height: 100%; object-fit: cover;" />
994
1048
  </div>
995
1049
  </div>
996
- `,Ie[`female_${d} `]=`
1050
+ `, T[`female_${p} `] = `
997
1051
  < div style = "position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: white; border-radius: 50%;" >
998
1052
  <div style="width: 60%; height: 60%; color: #000000;" >
999
- ${e}
1053
+ ${t}
1000
1054
  </div>
1001
1055
  < div style = "
1002
1056
  position: absolute;
@@ -1010,10 +1064,57 @@ border: 2px solid white;
1010
1064
  box - shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
1011
1065
  overflow: hidden;
1012
1066
  ">
1013
- < img src = "${Ve}" style = "width: 100%; height: 100%; object-fit: cover;" />
1067
+ < img src = "${j}" style = "width: 100%; height: 100%; object-fit: cover;" />
1014
1068
  </div>
1015
1069
  </div>
1016
- `});class Xe{constructor(e,t,i,n=W.chat){h(this,"element");h(this,"iconContainer");h(this,"posX",0);h(this,"posY",0);h(this,"isDragging",!1);h(this,"startX",0);h(this,"startY",0);h(this,"currentX",0);h(this,"currentY",0);h(this,"hasMoved",!1);this.onClick=e,this.onMove=t,this.onMoveEnd=i,this.element=document.createElement("button"),this.element.className="widget-fab",this.element.onpointerdown=this.dragStart.bind(this),this.iconContainer=document.createElement("div"),this.iconContainer.style.cssText="display:flex; align-items:center; justify-content:center; width:100%; height:100%;",this.iconContainer.innerHTML=n,this.element.appendChild(this.iconContainer)}dragStart(e){if(e.button!==0)return;const t=this.element.getBoundingClientRect();this.isDragging=!0,this.hasMoved=!1,this.startX=e.clientX,this.startY=e.clientY,this.currentX=t.left,this.currentY=t.top,this.element.setPointerCapture(e.pointerId),this.element.style.transition="none",this.element.style.cursor="grabbing";const i=s=>{var p;if(!this.isDragging)return;const a=s.clientX-this.startX,u=s.clientY-this.startY;(Math.abs(a)>5||Math.abs(u)>5)&&(this.hasMoved=!0),this.hasMoved&&(this.posX=this.currentX+a,this.posY=this.currentY+u,this.posX=Math.max(0,Math.min(this.posX,window.innerWidth-this.element.offsetWidth)),this.posY=Math.max(0,Math.min(this.posY,window.innerHeight-this.element.offsetHeight)),this.element.style.left=`${this.posX}px`,this.element.style.top=`${this.posY}px`,this.element.style.right="auto",this.element.style.bottom="auto",(p=this.onMove)==null||p.call(this,this.posX,this.posY))},n=s=>{var a;this.isDragging=!1,this.element.hasPointerCapture(s.pointerId)&&this.element.releasePointerCapture(s.pointerId),this.element.style.transition="all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",this.element.style.cursor="pointer",window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",n),this.hasMoved?(a=this.onMoveEnd)==null||a.call(this,this.posX,this.posY):this.onClick()};window.addEventListener("pointermove",i),window.addEventListener("pointerup",n)}getElement(){return this.element}setIcon(e){this.iconContainer.innerHTML=e}setPosition(e){this.element.style.cssText="",e.split(";").filter(i=>i.trim()).forEach(i=>{const[n,s]=i.split(":").map(a=>a.trim());n&&s&&(this.element.style[n]=s)}),this.element.style.position="fixed",this.element.style.zIndex="2147483647"}updateCoordinates(e,t){this.element.style.left=`${e}px`,this.element.style.top=`${t}px`,this.element.style.right="auto",this.element.style.bottom="auto"}static get styles(){return`
1070
+ `;
1071
+ });
1072
+ class L {
1073
+ constructor(t, e, i, s = B.chat) {
1074
+ a(this, "element");
1075
+ a(this, "iconContainer");
1076
+ a(this, "posX", 0);
1077
+ a(this, "posY", 0);
1078
+ a(this, "isDragging", !1);
1079
+ a(this, "startX", 0);
1080
+ a(this, "startY", 0);
1081
+ a(this, "currentX", 0);
1082
+ a(this, "currentY", 0);
1083
+ a(this, "hasMoved", !1);
1084
+ this.onClick = t, this.onMove = e, this.onMoveEnd = i, this.element = document.createElement("button"), this.element.className = "widget-fab", this.element.onpointerdown = this.dragStart.bind(this), this.iconContainer = document.createElement("div"), this.iconContainer.style.cssText = "display:flex; align-items:center; justify-content:center; width:100%; height:100%;", this.iconContainer.innerHTML = s, this.element.appendChild(this.iconContainer);
1085
+ }
1086
+ dragStart(t) {
1087
+ if (t.button !== 0) return;
1088
+ const e = this.element.getBoundingClientRect();
1089
+ this.isDragging = !0, this.hasMoved = !1, this.startX = t.clientX, this.startY = t.clientY, this.currentX = e.left, this.currentY = e.top, this.element.setPointerCapture(t.pointerId), this.element.style.transition = "none", this.element.style.cursor = "grabbing";
1090
+ const i = (n) => {
1091
+ var A;
1092
+ if (!this.isDragging) return;
1093
+ const o = n.clientX - this.startX, d = n.clientY - this.startY;
1094
+ (Math.abs(o) > 5 || Math.abs(d) > 5) && (this.hasMoved = !0), this.hasMoved && (this.posX = this.currentX + o, this.posY = this.currentY + d, this.posX = Math.max(0, Math.min(this.posX, window.innerWidth - this.element.offsetWidth)), this.posY = Math.max(0, Math.min(this.posY, window.innerHeight - this.element.offsetHeight)), this.element.style.left = `${this.posX}px`, this.element.style.top = `${this.posY}px`, this.element.style.right = "auto", this.element.style.bottom = "auto", (A = this.onMove) == null || A.call(this, this.posX, this.posY));
1095
+ }, s = (n) => {
1096
+ var o;
1097
+ this.isDragging = !1, this.element.hasPointerCapture(n.pointerId) && this.element.releasePointerCapture(n.pointerId), this.element.style.transition = "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)", this.element.style.cursor = "pointer", window.removeEventListener("pointermove", i), window.removeEventListener("pointerup", s), this.hasMoved ? (o = this.onMoveEnd) == null || o.call(this, this.posX, this.posY) : this.onClick();
1098
+ };
1099
+ window.addEventListener("pointermove", i), window.addEventListener("pointerup", s);
1100
+ }
1101
+ getElement() {
1102
+ return this.element;
1103
+ }
1104
+ setIcon(t) {
1105
+ this.iconContainer.innerHTML = t;
1106
+ }
1107
+ setPosition(t) {
1108
+ this.element.style.cssText = "", t.split(";").filter((i) => i.trim()).forEach((i) => {
1109
+ const [s, n] = i.split(":").map((o) => o.trim());
1110
+ s && n && (this.element.style[s] = n);
1111
+ }), this.element.style.position = "fixed", this.element.style.zIndex = "2147483647";
1112
+ }
1113
+ updateCoordinates(t, e) {
1114
+ this.element.style.left = `${t}px`, this.element.style.top = `${e}px`, this.element.style.right = "auto", this.element.style.bottom = "auto";
1115
+ }
1116
+ static get styles() {
1117
+ return `
1017
1118
  .widget-fab {
1018
1119
  position: fixed;
1019
1120
  z-index: 9999;
@@ -1048,9 +1149,95 @@ overflow: hidden;
1048
1149
  height: 26px;
1049
1150
  color: white;
1050
1151
  }
1051
- `}}class Ke{constructor(e,t="Assistant"){h(this,"element");h(this,"header");h(this,"titleElement");h(this,"contentArea");h(this,"maximizeBtn");h(this,"closeBtn");h(this,"isMaximized",!1);this.onClose=e,this.title=t,this.element=document.createElement("div"),this.element.className="widget-panel hidden",this.header=document.createElement("div"),this.header.className="widget-header",this.titleElement=document.createElement("h3"),this.titleElement.className="widget-title",this.titleElement.textContent=this.title,this.header.appendChild(this.titleElement);const i=document.createElement("div");i.style.display="flex",i.style.alignItems="center",i.style.gap="8px",i.style.marginLeft="auto",this.maximizeBtn=document.createElement("button"),this.maximizeBtn.className="close-btn maximize-btn",this.maximizeBtn.innerHTML=W.maximize2,this.maximizeBtn.onclick=()=>this.toggleMaximize(),this.closeBtn=document.createElement("button"),this.closeBtn.className="close-btn",this.closeBtn.innerHTML=W.close,this.closeBtn.onclick=this.onClose,i.appendChild(this.maximizeBtn),i.appendChild(this.closeBtn),this.header.appendChild(i),this.contentArea=document.createElement("div"),this.contentArea.className="widget-body",this.contentArea.style.flex="1",this.contentArea.style.display="flex",this.contentArea.style.flexDirection="column",this.contentArea.style.overflow="hidden",this.contentArea.style.padding="0",this.element.appendChild(this.header),this.element.appendChild(this.contentArea)}getElement(){return this.element}setContent(e){this.contentArea.innerHTML="",this.contentArea.appendChild(e)}addToContent(e){this.contentArea.appendChild(e)}setTitle(e){this.titleElement.textContent=e}open(e){this.element.classList.remove("hidden"),this.updatePosition(e)}updatePosition(e){this.element.style.top="auto",this.element.style.bottom="auto",this.element.style.left="auto",this.element.style.right="auto",Object.assign(this.element.style,e),this.element.style.position="fixed",this.element.style.zIndex="2147483647"}close(){this.element.classList.add("hidden")}toggleMaximize(){this.isMaximized=!this.isMaximized,this.isMaximized?(this.element.classList.add("maximized"),this.maximizeBtn.innerHTML=W.minimize2):(this.element.classList.remove("maximized"),this.maximizeBtn.innerHTML=W.maximize2)}static get styles(){return`
1152
+ `;
1153
+ }
1154
+ }
1155
+ class H {
1156
+ constructor(t, e = "Assistant") {
1157
+ a(this, "element");
1158
+ a(this, "header");
1159
+ a(this, "titleElement");
1160
+ a(this, "contentArea");
1161
+ a(this, "maximizeBtn");
1162
+ a(this, "closeBtn");
1163
+ a(this, "isMaximized", !1);
1164
+ this.onClose = t, this.title = e, this.element = document.createElement("div"), this.element.className = "widget-panel hidden", this.header = document.createElement("div"), this.header.className = "widget-header", this.titleElement = document.createElement("h3"), this.titleElement.className = "widget-title", this.titleElement.textContent = this.title, this.header.appendChild(this.titleElement);
1165
+ const i = document.createElement("div");
1166
+ i.style.display = "flex", i.style.alignItems = "center", i.style.gap = "8px", i.style.marginLeft = "auto", this.maximizeBtn = document.createElement("button"), this.maximizeBtn.className = "close-btn maximize-btn", this.maximizeBtn.innerHTML = B.maximize2, this.maximizeBtn.onclick = () => this.toggleMaximize(), this.closeBtn = document.createElement("button"), this.closeBtn.className = "close-btn", this.closeBtn.innerHTML = B.close, this.closeBtn.onclick = this.onClose, i.appendChild(this.maximizeBtn), i.appendChild(this.closeBtn), this.header.appendChild(i), this.contentArea = document.createElement("div"), this.contentArea.className = "widget-body", this.contentArea.style.flex = "1", this.contentArea.style.display = "flex", this.contentArea.style.flexDirection = "column", this.contentArea.style.overflow = "hidden", this.contentArea.style.padding = "0", this.element.appendChild(this.header), this.element.appendChild(this.contentArea);
1167
+ }
1168
+ getElement() {
1169
+ return this.element;
1170
+ }
1171
+ setContent(t) {
1172
+ this.contentArea.innerHTML = "", this.contentArea.appendChild(t);
1173
+ }
1174
+ addToContent(t) {
1175
+ this.contentArea.appendChild(t);
1176
+ }
1177
+ setTitle(t) {
1178
+ this.titleElement.textContent = t;
1179
+ }
1180
+ open(t) {
1181
+ this.element.classList.remove("hidden"), this.updatePosition(t);
1182
+ }
1183
+ updatePosition(t) {
1184
+ this.element.style.top = "auto", this.element.style.bottom = "auto", this.element.style.left = "auto", this.element.style.right = "auto", Object.assign(this.element.style, t), this.element.style.position = "fixed", this.element.style.zIndex = "2147483647";
1185
+ }
1186
+ close() {
1187
+ this.element.classList.add("hidden");
1188
+ }
1189
+ toggleMaximize() {
1190
+ this.isMaximized = !this.isMaximized, this.isMaximized ? (this.element.classList.add("maximized"), this.maximizeBtn.innerHTML = B.minimize2) : (this.element.classList.remove("maximized"), this.maximizeBtn.innerHTML = B.maximize2);
1191
+ }
1192
+ static get styles() {
1193
+ return `
1052
1194
  /* Panel Styles handled in widget.css.ts mostly, specific overrides here */
1053
- `}}class qe{constructor(e,t="#000000",i="#111111",n){h(this,"element");h(this,"contentContainer");h(this,"orbWrapper");h(this,"connectingRing");h(this,"errorRing");h(this,"waveLayers",[]);h(this,"outerGlow");h(this,"wave1");h(this,"wave2");h(this,"wave3");h(this,"centerIcon");h(this,"statusArea");h(this,"connectingLabel");h(this,"connectedBadge");h(this,"errorLabel");h(this,"giveItAMinuteLabel");h(this,"retryBtn");h(this,"timerEl");h(this,"transcriptionEl");h(this,"hangupBtn");h(this,"videoContainer");h(this,"videoElement");h(this,"prepareBadge");h(this,"statusBadge");h(this,"startTime",null);h(this,"timerInterval",null);h(this,"isAvatarMode",!1);h(this,"callStartedAt",null);this.onHangup=e,this.primaryColor=t,this.secondaryColor=i,this.onCallEnded=n,this.element=document.createElement("div"),this.element.id="voice-active-overlay",this.element.style.cssText=`
1195
+ `;
1196
+ }
1197
+ }
1198
+ class R {
1199
+ // wall-clock ms when call started
1200
+ constructor(t, e = "#000000", i = "#111111", s) {
1201
+ a(this, "element");
1202
+ // Layout
1203
+ a(this, "contentContainer");
1204
+ // Orb / visual
1205
+ a(this, "orbWrapper");
1206
+ // w-52 h-52 centered circle area
1207
+ a(this, "connectingRing");
1208
+ // spinning conic-gradient ring (connecting)
1209
+ a(this, "errorRing");
1210
+ // red ring (error)
1211
+ a(this, "waveLayers", []);
1212
+ // active wave layers
1213
+ a(this, "outerGlow");
1214
+ a(this, "wave1");
1215
+ a(this, "wave2");
1216
+ a(this, "wave3");
1217
+ a(this, "centerIcon");
1218
+ // dark circle with phone/spinner
1219
+ // Status area
1220
+ a(this, "statusArea");
1221
+ a(this, "connectingLabel");
1222
+ a(this, "connectedBadge");
1223
+ a(this, "errorLabel");
1224
+ a(this, "giveItAMinuteLabel");
1225
+ a(this, "retryBtn");
1226
+ a(this, "timerEl");
1227
+ // Transcription
1228
+ a(this, "transcriptionEl");
1229
+ // Footer
1230
+ a(this, "hangupBtn");
1231
+ // Avatar
1232
+ a(this, "videoContainer");
1233
+ a(this, "videoElement");
1234
+ a(this, "prepareBadge");
1235
+ a(this, "statusBadge");
1236
+ a(this, "startTime", null);
1237
+ a(this, "timerInterval", null);
1238
+ a(this, "isAvatarMode", !1);
1239
+ a(this, "callStartedAt", null);
1240
+ this.onHangup = t, this.primaryColor = e, this.secondaryColor = i, this.onCallEnded = s, this.element = document.createElement("div"), this.element.id = "voice-active-overlay", this.element.style.cssText = `
1054
1241
  position: absolute; top: 0; left: 0; width: 100%; height: 100%;
1055
1242
  background: #f9fafb;
1056
1243
  pointer-events: auto;
@@ -1058,97 +1245,243 @@ overflow: hidden;
1058
1245
  display: none;
1059
1246
  flex-direction: column;
1060
1247
  align-items: center;
1061
- `,this.contentContainer=document.createElement("div"),this.contentContainer.className="voice-content-container",this.contentContainer.style.cssText=`
1248
+ `, this.contentContainer = document.createElement("div"), this.contentContainer.className = "voice-content-container", this.contentContainer.style.cssText = `
1062
1249
  flex: 1; min-height: 0; display: flex; flex-direction: column;
1063
1250
  align-items: center; justify-content: center;
1064
1251
  width: 100%; padding: 24px 20px 12px;
1065
- `,this.videoContainer=document.createElement("div"),this.videoContainer.className="voice-video-container",this.videoContainer.style.cssText=`
1252
+ `, this.videoContainer = document.createElement("div"), this.videoContainer.className = "voice-video-container", this.videoContainer.style.cssText = `
1066
1253
  display: none; position: relative; width: 100%; max-width: 260px;
1067
1254
  aspect-ratio: 1/1; margin-bottom: 16px; overflow: hidden;
1068
1255
  border-radius: 16px;
1069
1256
  box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25), 0 0 0 1px rgba(17,24,39,0.05);
1070
- `,this.videoElement=document.createElement("video"),this.videoElement.style.cssText="width:100%; height:100%; object-fit:cover; background:black;",this.videoElement.autoplay=!0,this.videoElement.playsInline=!0,this.videoElement.muted=!0,this.videoContainer.appendChild(this.videoElement),this.contentContainer.appendChild(this.videoContainer),this.orbWrapper=document.createElement("div"),this.orbWrapper.className="voice-orb-wrapper",this.orbWrapper.style.cssText=`
1257
+ `, this.videoElement = document.createElement("video"), this.videoElement.style.cssText = "width:100%; height:100%; object-fit:cover; background:black;", this.videoElement.autoplay = !0, this.videoElement.playsInline = !0, this.videoElement.muted = !0, this.videoContainer.appendChild(this.videoElement), this.contentContainer.appendChild(this.videoContainer), this.orbWrapper = document.createElement("div"), this.orbWrapper.className = "voice-orb-wrapper", this.orbWrapper.style.cssText = `
1071
1258
  position: relative; width: 208px; height: 208px;
1072
1259
  display: flex; align-items: center; justify-content: center;
1073
1260
  margin: 8px 0;
1074
- `,this.connectingRing=document.createElement("div"),this.connectingRing.style.cssText=`
1261
+ `, this.connectingRing = document.createElement("div"), this.connectingRing.style.cssText = `
1075
1262
  position: absolute; width: 180px; height: 180px;
1076
1263
  border-radius: 50%;
1077
1264
  background: conic-gradient(from 0deg, #000000, #374151, #000000);
1078
1265
  animation: spin 2s linear infinite;
1079
1266
  display: none;
1080
- `,this.orbWrapper.appendChild(this.connectingRing),this.errorRing=document.createElement("div"),this.errorRing.style.cssText=`
1267
+ `, this.orbWrapper.appendChild(this.connectingRing), this.errorRing = document.createElement("div"), this.errorRing.style.cssText = `
1081
1268
  position: absolute; width: 180px; height: 180px;
1082
1269
  border-radius: 50%;
1083
1270
  background: conic-gradient(from 0deg, #ef4444, #f87171, #fca5a5, #ef4444);
1084
1271
  animation: pulse 1.5s ease-in-out infinite;
1085
1272
  display: none;
1086
- `,this.orbWrapper.appendChild(this.errorRing),this.outerGlow=document.createElement("div"),this.outerGlow.style.cssText=`
1273
+ `, this.orbWrapper.appendChild(this.errorRing), this.outerGlow = document.createElement("div"), this.outerGlow.style.cssText = `
1087
1274
  position: absolute; inset: 0; border-radius: 50%;
1088
1275
  background: radial-gradient(circle, ${this.primaryColor}20 0%, transparent 70%);
1089
1276
  animation: pulse 2s ease-in-out infinite;
1090
1277
  display: none;
1091
- `,this.orbWrapper.appendChild(this.outerGlow),this.wave1=document.createElement("div"),this.wave1.style.cssText=`
1278
+ `, this.orbWrapper.appendChild(this.outerGlow), this.wave1 = document.createElement("div"), this.wave1.style.cssText = `
1092
1279
  position: absolute; width: 200px; height: 200px; border-radius: 50%;
1093
1280
  background: conic-gradient(from 0deg, ${this.primaryColor}, ${this.secondaryColor}, #fcd34d, ${this.primaryColor});
1094
1281
  animation: wave-rotate-1 8s ease-in-out infinite;
1095
1282
  display: none;
1096
- `,this.orbWrapper.appendChild(this.wave1),this.wave2=document.createElement("div"),this.wave2.style.cssText=`
1283
+ `, this.orbWrapper.appendChild(this.wave1), this.wave2 = document.createElement("div"), this.wave2.style.cssText = `
1097
1284
  position: absolute; width: 180px; height: 180px; border-radius: 50%;
1098
1285
  background: conic-gradient(from 60deg, ${this.secondaryColor}, #fcd34d, ${this.primaryColor}, ${this.secondaryColor});
1099
1286
  opacity: 0.8;
1100
1287
  animation: wave-rotate-2 6s ease-in-out infinite;
1101
1288
  display: none;
1102
- `,this.orbWrapper.appendChild(this.wave2),this.wave3=document.createElement("div"),this.wave3.style.cssText=`
1289
+ `, this.orbWrapper.appendChild(this.wave2), this.wave3 = document.createElement("div"), this.wave3.style.cssText = `
1103
1290
  position: absolute; width: 160px; height: 160px; border-radius: 50%;
1104
1291
  background: conic-gradient(from 120deg, #fcd34d, ${this.primaryColor}, ${this.secondaryColor}, #fcd34d);
1105
1292
  opacity: 0.9;
1106
1293
  animation: wave-rotate-3 4s ease-in-out infinite;
1107
1294
  display: none;
1108
- `,this.orbWrapper.appendChild(this.wave3);const s=document.createElement("div");s.style.cssText=`
1295
+ `, this.orbWrapper.appendChild(this.wave3);
1296
+ const n = document.createElement("div");
1297
+ n.style.cssText = `
1109
1298
  position: absolute; width: 140px; height: 140px; border-radius: 50%;
1110
1299
  background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.4) 0%, transparent 60%);
1111
1300
  display: none; pointer-events: none;
1112
- `,s.id="voice-shine",this.orbWrapper.appendChild(s),this.waveLayers=[this.outerGlow,this.wave1,this.wave2,this.wave3,s],this.centerIcon=document.createElement("div"),this.centerIcon.style.cssText=`
1301
+ `, n.id = "voice-shine", this.orbWrapper.appendChild(n), this.waveLayers = [this.outerGlow, this.wave1, this.wave2, this.wave3, n], this.centerIcon = document.createElement("div"), this.centerIcon.style.cssText = `
1113
1302
  position: relative; z-index: 10;
1114
1303
  width: 56px; height: 56px; border-radius: 50%;
1115
1304
  display: flex; align-items: center; justify-content: center;
1116
1305
  background: #374151;
1117
1306
  box-shadow: 0 10px 25px -5px rgba(0,0,0,0.15), 0 8px 10px -6px rgba(0,0,0,0.1);
1118
1307
  color: white;
1119
- `,this.centerIcon.innerHTML=W.phone;const a=this.centerIcon.querySelector("svg");a&&(a.style.width="20px",a.style.height="20px"),this.orbWrapper.appendChild(this.centerIcon),this.contentContainer.appendChild(this.orbWrapper),this.statusArea=document.createElement("div"),this.statusArea.className="voice-status-area",this.statusArea.style.cssText="display:flex; flex-direction:column; align-items:center; gap:8px; margin-top:8px;",this.connectingLabel=document.createElement("p"),this.connectingLabel.textContent="Connecting to Vanira...",this.connectingLabel.style.cssText="font-size:11px; font-weight:700; color:#374151; text-transform:uppercase; letter-spacing:0.1em; margin:0; display:none;",this.statusArea.appendChild(this.connectingLabel),this.giveItAMinuteLabel=document.createElement("p"),this.giveItAMinuteLabel.textContent="Give it a minute",this.giveItAMinuteLabel.style.cssText="font-size:9px; font-weight:500; color:#94a3b8; text-transform:uppercase; letter-spacing:0.15em; margin:0; display:none; animation:pulse 1.5s infinite;",this.statusArea.appendChild(this.giveItAMinuteLabel),this.connectedBadge=document.createElement("div"),this.connectedBadge.style.cssText=`
1308
+ `, this.centerIcon.innerHTML = B.phone;
1309
+ const o = this.centerIcon.querySelector("svg");
1310
+ o && (o.style.width = "20px", o.style.height = "20px"), this.orbWrapper.appendChild(this.centerIcon), this.contentContainer.appendChild(this.orbWrapper), this.statusArea = document.createElement("div"), this.statusArea.className = "voice-status-area", this.statusArea.style.cssText = "display:flex; flex-direction:column; align-items:center; gap:8px; margin-top:8px;", this.connectingLabel = document.createElement("p"), this.connectingLabel.textContent = "Connecting to Vanira...", this.connectingLabel.style.cssText = "font-size:11px; font-weight:700; color:#374151; text-transform:uppercase; letter-spacing:0.1em; margin:0; display:none;", this.statusArea.appendChild(this.connectingLabel), this.giveItAMinuteLabel = document.createElement("p"), this.giveItAMinuteLabel.textContent = "Give it a minute", this.giveItAMinuteLabel.style.cssText = "font-size:9px; font-weight:500; color:#94a3b8; text-transform:uppercase; letter-spacing:0.15em; margin:0; display:none; animation:pulse 1.5s infinite;", this.statusArea.appendChild(this.giveItAMinuteLabel), this.connectedBadge = document.createElement("div"), this.connectedBadge.style.cssText = `
1120
1311
  display: none; align-items: center; gap: 8px;
1121
1312
  padding: 5px 16px; background: #f0fdf4;
1122
1313
  border-radius: 9999px; border: 1px solid #dcfce7;
1123
- `;const u=document.createElement("div");u.style.cssText="width:8px; height:8px; border-radius:50%; background:#22c55e; animation:pulse 2s infinite; box-shadow:0 0 8px rgba(34,197,94,0.6);";const p=document.createElement("span");p.textContent="Connected",p.style.cssText="font-size:11px; font-weight:600; color:#15803d; text-transform:uppercase; letter-spacing:0.1em;",this.connectedBadge.appendChild(u),this.connectedBadge.appendChild(p),this.statusArea.appendChild(this.connectedBadge),this.timerEl=document.createElement("div"),this.timerEl.textContent="00:00",this.timerEl.style.cssText="font-size:13px; color:#6b7280; font-variant-numeric:tabular-nums; display:none;",this.statusArea.appendChild(this.timerEl),this.errorLabel=document.createElement("p"),this.errorLabel.textContent="Connection failed",this.errorLabel.style.cssText="font-size:12px; color:#ef4444; font-weight:500; margin:0; display:none;",this.statusArea.appendChild(this.errorLabel),this.retryBtn=document.createElement("button"),this.retryBtn.textContent="â†ģ Retry Connection",this.retryBtn.style.cssText=`
1314
+ `;
1315
+ const d = document.createElement("div");
1316
+ d.style.cssText = "width:8px; height:8px; border-radius:50%; background:#22c55e; animation:pulse 2s infinite; box-shadow:0 0 8px rgba(34,197,94,0.6);";
1317
+ const A = document.createElement("span");
1318
+ A.textContent = "Connected", A.style.cssText = "font-size:11px; font-weight:600; color:#15803d; text-transform:uppercase; letter-spacing:0.1em;", this.connectedBadge.appendChild(d), this.connectedBadge.appendChild(A), this.statusArea.appendChild(this.connectedBadge), this.timerEl = document.createElement("div"), this.timerEl.textContent = "00:00", this.timerEl.style.cssText = "font-size:13px; color:#6b7280; font-variant-numeric:tabular-nums; display:none;", this.statusArea.appendChild(this.timerEl), this.errorLabel = document.createElement("p"), this.errorLabel.textContent = "Connection failed", this.errorLabel.style.cssText = "font-size:12px; color:#ef4444; font-weight:500; margin:0; display:none;", this.statusArea.appendChild(this.errorLabel), this.retryBtn = document.createElement("button"), this.retryBtn.textContent = "â†ģ Retry Connection", this.retryBtn.style.cssText = `
1124
1319
  display:none; padding:6px 14px; background:#f3f4f6; border:none;
1125
1320
  border-radius:9999px; font-size:12px; font-weight:500; color:#374151;
1126
1321
  cursor:pointer; transition:background 0.2s; pointer-events:auto;
1127
- `,this.retryBtn.onmouseover=()=>this.retryBtn.style.background="#e5e7eb",this.retryBtn.onmouseout=()=>this.retryBtn.style.background="#f3f4f6",this.statusArea.appendChild(this.retryBtn),this.prepareBadge=document.createElement("p"),this.prepareBadge.style.cssText="display:none; font-size:11px; font-weight:600; color:#a855f7; text-transform:uppercase; letter-spacing:0.1em; margin:0; animation:pulse 1.5s infinite;",this.statusArea.appendChild(this.prepareBadge),this.statusBadge=document.createElement("div"),this.statusBadge.style.cssText="display:none; align-items:center; gap:8px; padding:5px 16px; background:#f0fdf4; border-radius:9999px; border:1px solid #dcfce7;";const c=document.createElement("div");c.style.cssText="width:8px; height:8px; border-radius:50%; background:#22c55e; animation:pulse 2s infinite;";const g=document.createElement("span");g.textContent="Connected",g.style.cssText="font-size:11px; font-weight:600; color:#15803d; text-transform:uppercase; letter-spacing:0.1em;",this.statusBadge.appendChild(c),this.statusBadge.appendChild(g),this.statusArea.appendChild(this.statusBadge),this.contentContainer.appendChild(this.statusArea),this.transcriptionEl=document.createElement("div"),this.transcriptionEl.className="voice-transcription",this.transcriptionEl.style.cssText=`
1322
+ `, this.retryBtn.onmouseover = () => this.retryBtn.style.background = "#e5e7eb", this.retryBtn.onmouseout = () => this.retryBtn.style.background = "#f3f4f6", this.statusArea.appendChild(this.retryBtn), this.prepareBadge = document.createElement("p"), this.prepareBadge.style.cssText = "display:none; font-size:11px; font-weight:600; color:#a855f7; text-transform:uppercase; letter-spacing:0.1em; margin:0; animation:pulse 1.5s infinite;", this.statusArea.appendChild(this.prepareBadge), this.statusBadge = document.createElement("div"), this.statusBadge.style.cssText = "display:none; align-items:center; gap:8px; padding:5px 16px; background:#f0fdf4; border-radius:9999px; border:1px solid #dcfce7;";
1323
+ const r = document.createElement("div");
1324
+ r.style.cssText = "width:8px; height:8px; border-radius:50%; background:#22c55e; animation:pulse 2s infinite;";
1325
+ const h = document.createElement("span");
1326
+ h.textContent = "Connected", h.style.cssText = "font-size:11px; font-weight:600; color:#15803d; text-transform:uppercase; letter-spacing:0.1em;", this.statusBadge.appendChild(r), this.statusBadge.appendChild(h), this.statusArea.appendChild(this.statusBadge), this.contentContainer.appendChild(this.statusArea), this.transcriptionEl = document.createElement("div"), this.transcriptionEl.className = "voice-transcription", this.transcriptionEl.style.cssText = `
1128
1327
  margin-top: 14px; padding: 0 20px; text-align: center;
1129
1328
  min-height: 36px; max-height: 72px; overflow-y: auto;
1130
1329
  font-size: 13px; color: #9ca3af; font-style: italic;
1131
- `,this.contentContainer.appendChild(this.transcriptionEl),this.element.appendChild(this.contentContainer);const o=document.createElement("div");o.className="voice-footer",o.style.cssText="width:100%; display:flex; justify-content:center; padding:0 20px 20px; pointer-events:auto;",this.hangupBtn=document.createElement("button"),this.hangupBtn.className="voice-hangup-btn",this.hangupBtn.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="transform:rotate(135deg);flex-shrink:0;"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.6 1.18h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.77a16 16 0 0 0 6.29 6.29l.87-.87a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"/></svg> End Call',this.hangupBtn.style.cssText=`
1330
+ `, this.contentContainer.appendChild(this.transcriptionEl), this.element.appendChild(this.contentContainer);
1331
+ const l = document.createElement("div");
1332
+ l.className = "voice-footer", l.style.cssText = "width:100%; display:flex; justify-content:center; padding:0 20px 20px; pointer-events:auto;", this.hangupBtn = document.createElement("button"), this.hangupBtn.className = "voice-hangup-btn", this.hangupBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="transform:rotate(135deg);flex-shrink:0;"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.6 1.18h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.91 8.77a16 16 0 0 0 6.29 6.29l.87-.87a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"/></svg> End Call', this.hangupBtn.style.cssText = `
1132
1333
  display: flex; align-items: center; gap: 8px;
1133
1334
  padding: 10px 28px; background: #ef4444; color: white;
1134
1335
  border: none; border-radius: 9999px; font-size: 14px; font-weight: 500;
1135
1336
  cursor: pointer; pointer-events: auto;
1136
1337
  transition: background-color 0.2s;
1137
1338
  box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
1138
- `,this.hangupBtn.onmouseover=()=>this.hangupBtn.style.backgroundColor="#dc2626",this.hangupBtn.onmouseout=()=>this.hangupBtn.style.backgroundColor="#ef4444",this.hangupBtn.onclick=()=>{const A=this.callStartedAt?Date.now()-this.callStartedAt:0,f=this.callStartedAt??Date.now();this.onCallEnded&&A>0&&this.onCallEnded(A,f),this.onHangup()},o.appendChild(this.hangupBtn),this.element.appendChild(o)}getElement(){return this.element}setMode(e){this.isAvatarMode=e==="avatar"}setVideoTrack(e){if(this.isAvatarMode=!0,e.kind==="video"&&this.videoElement){const t=new MediaStream([e]);this.videoElement.srcObject=t,this.videoContainer.style.display="block",this.orbWrapper.style.display="none",this.connectingLabel.style.display="none",this.timerEl.style.display="none",this.videoElement.onplaying=()=>{this.prepareBadge.style.display="none",this.statusBadge.style.display="flex"},this.videoElement.play().catch(i=>console.warn("Video play error",i))}}setStatus(e,t){if(e==="connecting")this.centerIcon.style.background="#4b5563",this.centerIcon.innerHTML='<div style="width:18px;height:18px;border:2px solid #ffffff;border-top-color:transparent;border-radius:50%;animation:spin 1s linear infinite;"></div>',this.isAvatarMode?(this.videoContainer.style.display="block",this.orbWrapper.style.display="none",this.prepareBadge.textContent="CONNECTING...",this.prepareBadge.style.display="block",this.statusBadge.style.display="none",this.connectingLabel.style.display="none"):(this.orbWrapper.style.display="flex",this.videoContainer.style.display="none",this.connectingRing.style.display="block",this.errorRing.style.display="none",this.waveLayers.forEach(i=>i.style.display="none"),this.connectingLabel.style.display="block",this.giveItAMinuteLabel.style.display="block",this.connectedBadge.style.display="none",this.timerEl.style.display="none",this.errorLabel.style.display="none",this.retryBtn.style.display="none"),this.stopTimer();else if(e==="connected"){this.centerIcon.style.background="#1f2937",this.centerIcon.innerHTML=W.phone;const i=this.centerIcon.querySelector("svg");i&&(i.style.cssText="width:20px;height:20px;"),this.isAvatarMode?this.videoElement&&!this.videoElement.paused&&this.videoElement.readyState>2?(this.prepareBadge.style.display="none",this.statusBadge.style.display="flex"):(this.prepareBadge.textContent="AGENT IS ON THE WAY...",this.prepareBadge.style.display="block",setTimeout(()=>{this.prepareBadge.style.display!=="none"&&(this.prepareBadge.style.display="none",this.statusBadge.style.display="flex")},5e3)):(this.connectingRing.style.display="none",this.errorRing.style.display="none",this.waveLayers.forEach(n=>n.style.display="flex"),this.connectingLabel.style.display="none",this.giveItAMinuteLabel.style.display="none",this.connectedBadge.style.display="flex",this.timerEl.style.display="block",this.errorLabel.style.display="none",this.retryBtn.style.display="none",this.startTimer())}else e==="error"&&(this.centerIcon.style.background="#dc2626",this.centerIcon.innerHTML=W.phone,this.connectingRing.style.display="none",this.errorRing.style.display="block",this.waveLayers.forEach(i=>i.style.display="none"),this.connectingLabel.style.display="none",this.giveItAMinuteLabel.style.display="none",this.connectedBadge.style.display="none",this.timerEl.style.display="none",this.errorLabel.textContent=t||"Connection failed",this.errorLabel.style.display="block",this.retryBtn.style.display="block",this.stopTimer())}setTranscription(e,t){this.transcriptionEl.textContent=`"${e}"`,this.transcriptionEl.style.color=t?"#1f2937":"#9ca3af",this.transcriptionEl.style.fontStyle=t?"normal":"italic"}show(){this.callStartedAt=Date.now(),this.element.style.display="flex",this.setStatus("connecting")}hide(){this.element.style.display="none",this.reset()}reset(){this.videoElement&&(this.videoElement.srcObject=null),this.isAvatarMode=!1,this.callStartedAt=null,this.stopTimer(),this.transcriptionEl.textContent="",this.videoContainer.style.display="none",this.orbWrapper.style.display="flex",this.connectingRing.style.display="none",this.errorRing.style.display="none",this.waveLayers.forEach(t=>t.style.display="none"),this.connectingLabel.style.display="none",this.connectedBadge.style.display="none",this.timerEl.style.display="none",this.errorLabel.style.display="none",this.retryBtn.style.display="none",this.prepareBadge.style.display="none",this.statusBadge.style.display="none",this.giveItAMinuteLabel.style.display="none",this.centerIcon.style.background="#374151",this.centerIcon.innerHTML=W.phone;const e=this.centerIcon.querySelector("svg");e&&(e.style.cssText="width:20px;height:20px;")}startTimer(){this.timerInterval&&clearInterval(this.timerInterval),this.startTime=Date.now(),this.timerEl.textContent="00:00",this.timerInterval=setInterval(()=>{if(!this.startTime)return;const e=Math.floor((Date.now()-this.startTime)/1e3),t=Math.floor(e/60).toString().padStart(2,"0"),i=(e%60).toString().padStart(2,"0");this.timerEl.textContent=`${t}:${i}`},1e3)}stopTimer(){this.timerInterval&&(clearInterval(this.timerInterval),this.timerInterval=null),this.timerEl.textContent=""}setFullScreen(e){e?(this.videoContainer.style.position="absolute",this.videoContainer.style.top="0",this.videoContainer.style.left="0",this.videoContainer.style.width="100%",this.videoContainer.style.height="100%",this.videoContainer.style.maxWidth="none",this.videoContainer.style.borderRadius="0",this.videoContainer.style.margin="0",this.videoContainer.style.zIndex="0"):(this.videoContainer.style.position="relative",this.videoContainer.style.width="100%",this.videoContainer.style.maxWidth="260px",this.videoContainer.style.height="auto",this.videoContainer.style.aspectRatio="1/1",this.videoContainer.style.borderRadius="16px",this.videoContainer.style.marginBottom="16px")}}class Ze{constructor(e){h(this,"element");h(this,"messageContainer");h(this,"inputArea");h(this,"input");h(this,"sendBtn");h(this,"typingIndicator",null);h(this,"resolveBar",null);this.onSend=e,this.element=document.createElement("div"),this.element.style.display="flex",this.element.style.flexDirection="column",this.element.style.flex="1",this.element.style.overflow="hidden",this.element.style.minHeight="0",this.messageContainer=document.createElement("div"),this.messageContainer.className="chat-messages",this.inputArea=document.createElement("div"),this.inputArea.className="chat-input-area",this.input=document.createElement("input"),this.input.className="chat-input",this.input.placeholder="Type a message...",this.input.addEventListener("keypress",i=>{i.key==="Enter"&&this.handleSend()}),this.sendBtn=document.createElement("button"),this.sendBtn.className="chat-send-btn",this.sendBtn.innerHTML=W.send,this.sendBtn.onclick=()=>this.handleSend(),this.inputArea.appendChild(this.input),this.inputArea.appendChild(this.sendBtn);const t=document.createElement("div");t.className="branding-footer",t.innerHTML="Technology Powered by <b>Vanira AI</b>",this.element.appendChild(this.messageContainer),this.element.appendChild(this.inputArea),this.element.appendChild(t)}getElement(){return this.element}formatTime(e=new Date){return e.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}addMessage(e,t,i){const n=document.createElement("div");n.style.cssText=`
1339
+ `, this.hangupBtn.onmouseover = () => this.hangupBtn.style.backgroundColor = "#dc2626", this.hangupBtn.onmouseout = () => this.hangupBtn.style.backgroundColor = "#ef4444", this.hangupBtn.onclick = () => {
1340
+ const c = this.callStartedAt ? Date.now() - this.callStartedAt : 0, m = this.callStartedAt ?? Date.now();
1341
+ this.onCallEnded && c > 0 && this.onCallEnded(c, m), this.onHangup();
1342
+ }, l.appendChild(this.hangupBtn), this.element.appendChild(l);
1343
+ }
1344
+ getElement() {
1345
+ return this.element;
1346
+ }
1347
+ setMode(t) {
1348
+ this.isAvatarMode = t === "avatar";
1349
+ }
1350
+ setVideoTrack(t) {
1351
+ if (this.isAvatarMode = !0, t.kind === "video" && this.videoElement) {
1352
+ const e = new MediaStream([t]);
1353
+ this.videoElement.srcObject = e, this.videoContainer.style.display = "block", this.orbWrapper.style.display = "none", this.connectingLabel.style.display = "none", this.timerEl.style.display = "none", this.videoElement.onplaying = () => {
1354
+ this.prepareBadge.style.display = "none", this.statusBadge.style.display = "flex";
1355
+ }, this.videoElement.play().catch((i) => console.warn("Video play error", i));
1356
+ }
1357
+ }
1358
+ setStatus(t, e) {
1359
+ if (t === "connecting")
1360
+ this.centerIcon.style.background = "#4b5563", this.centerIcon.innerHTML = '<div style="width:18px;height:18px;border:2px solid #ffffff;border-top-color:transparent;border-radius:50%;animation:spin 1s linear infinite;"></div>', this.isAvatarMode ? (this.videoContainer.style.display = "block", this.orbWrapper.style.display = "none", this.prepareBadge.textContent = "CONNECTING...", this.prepareBadge.style.display = "block", this.statusBadge.style.display = "none", this.connectingLabel.style.display = "none") : (this.orbWrapper.style.display = "flex", this.videoContainer.style.display = "none", this.connectingRing.style.display = "block", this.errorRing.style.display = "none", this.waveLayers.forEach((i) => i.style.display = "none"), this.connectingLabel.style.display = "block", this.giveItAMinuteLabel.style.display = "block", this.connectedBadge.style.display = "none", this.timerEl.style.display = "none", this.errorLabel.style.display = "none", this.retryBtn.style.display = "none"), this.stopTimer();
1361
+ else if (t === "connected") {
1362
+ this.centerIcon.style.background = "#1f2937", this.centerIcon.innerHTML = B.phone;
1363
+ const i = this.centerIcon.querySelector("svg");
1364
+ i && (i.style.cssText = "width:20px;height:20px;"), this.isAvatarMode ? this.videoElement && !this.videoElement.paused && this.videoElement.readyState > 2 ? (this.prepareBadge.style.display = "none", this.statusBadge.style.display = "flex") : (this.prepareBadge.textContent = "AGENT IS ON THE WAY...", this.prepareBadge.style.display = "block", setTimeout(() => {
1365
+ this.prepareBadge.style.display !== "none" && (this.prepareBadge.style.display = "none", this.statusBadge.style.display = "flex");
1366
+ }, 5e3)) : (this.connectingRing.style.display = "none", this.errorRing.style.display = "none", this.waveLayers.forEach((s) => s.style.display = "flex"), this.connectingLabel.style.display = "none", this.giveItAMinuteLabel.style.display = "none", this.connectedBadge.style.display = "flex", this.timerEl.style.display = "block", this.errorLabel.style.display = "none", this.retryBtn.style.display = "none", this.startTimer());
1367
+ } else t === "error" && (this.centerIcon.style.background = "#dc2626", this.centerIcon.innerHTML = B.phone, this.connectingRing.style.display = "none", this.errorRing.style.display = "block", this.waveLayers.forEach((i) => i.style.display = "none"), this.connectingLabel.style.display = "none", this.giveItAMinuteLabel.style.display = "none", this.connectedBadge.style.display = "none", this.timerEl.style.display = "none", this.errorLabel.textContent = e || "Connection failed", this.errorLabel.style.display = "block", this.retryBtn.style.display = "block", this.stopTimer());
1368
+ }
1369
+ setTranscription(t, e) {
1370
+ this.transcriptionEl.textContent = `"${t}"`, this.transcriptionEl.style.color = e ? "#1f2937" : "#9ca3af", this.transcriptionEl.style.fontStyle = e ? "normal" : "italic";
1371
+ }
1372
+ show() {
1373
+ this.callStartedAt = Date.now(), this.element.style.display = "flex", this.setStatus("connecting");
1374
+ }
1375
+ hide() {
1376
+ this.element.style.display = "none", this.reset();
1377
+ }
1378
+ reset() {
1379
+ this.videoElement && (this.videoElement.srcObject = null), this.isAvatarMode = !1, this.callStartedAt = null, this.stopTimer(), this.transcriptionEl.textContent = "", this.videoContainer.style.display = "none", this.orbWrapper.style.display = "flex", this.connectingRing.style.display = "none", this.errorRing.style.display = "none", this.waveLayers.forEach((e) => e.style.display = "none"), this.connectingLabel.style.display = "none", this.connectedBadge.style.display = "none", this.timerEl.style.display = "none", this.errorLabel.style.display = "none", this.retryBtn.style.display = "none", this.prepareBadge.style.display = "none", this.statusBadge.style.display = "none", this.giveItAMinuteLabel.style.display = "none", this.centerIcon.style.background = "#374151", this.centerIcon.innerHTML = B.phone;
1380
+ const t = this.centerIcon.querySelector("svg");
1381
+ t && (t.style.cssText = "width:20px;height:20px;");
1382
+ }
1383
+ startTimer() {
1384
+ this.timerInterval && clearInterval(this.timerInterval), this.startTime = Date.now(), this.timerEl.textContent = "00:00", this.timerInterval = setInterval(() => {
1385
+ if (!this.startTime) return;
1386
+ const t = Math.floor((Date.now() - this.startTime) / 1e3), e = Math.floor(t / 60).toString().padStart(2, "0"), i = (t % 60).toString().padStart(2, "0");
1387
+ this.timerEl.textContent = `${e}:${i}`;
1388
+ }, 1e3);
1389
+ }
1390
+ stopTimer() {
1391
+ this.timerInterval && (clearInterval(this.timerInterval), this.timerInterval = null), this.timerEl.textContent = "";
1392
+ }
1393
+ setFullScreen(t) {
1394
+ t ? (this.videoContainer.style.position = "absolute", this.videoContainer.style.top = "0", this.videoContainer.style.left = "0", this.videoContainer.style.width = "100%", this.videoContainer.style.height = "100%", this.videoContainer.style.maxWidth = "none", this.videoContainer.style.borderRadius = "0", this.videoContainer.style.margin = "0", this.videoContainer.style.zIndex = "0") : (this.videoContainer.style.position = "relative", this.videoContainer.style.width = "100%", this.videoContainer.style.maxWidth = "260px", this.videoContainer.style.height = "auto", this.videoContainer.style.aspectRatio = "1/1", this.videoContainer.style.borderRadius = "16px", this.videoContainer.style.marginBottom = "16px");
1395
+ }
1396
+ }
1397
+ class U {
1398
+ constructor(t) {
1399
+ a(this, "element");
1400
+ a(this, "messageContainer");
1401
+ a(this, "inputArea");
1402
+ a(this, "input");
1403
+ a(this, "sendBtn");
1404
+ a(this, "typingIndicator", null);
1405
+ a(this, "resolveBar", null);
1406
+ this.onSend = t, this.element = document.createElement("div"), this.element.style.display = "flex", this.element.style.flexDirection = "column", this.element.style.flex = "1", this.element.style.overflow = "hidden", this.element.style.minHeight = "0", this.messageContainer = document.createElement("div"), this.messageContainer.className = "chat-messages", this.inputArea = document.createElement("div"), this.inputArea.className = "chat-input-area", this.input = document.createElement("input"), this.input.className = "chat-input", this.input.placeholder = "Type a message...", this.input.addEventListener("keypress", (i) => {
1407
+ i.key === "Enter" && this.handleSend();
1408
+ }), this.sendBtn = document.createElement("button"), this.sendBtn.className = "chat-send-btn", this.sendBtn.innerHTML = B.send, this.sendBtn.onclick = () => this.handleSend(), this.inputArea.appendChild(this.input), this.inputArea.appendChild(this.sendBtn);
1409
+ const e = document.createElement("div");
1410
+ e.className = "branding-footer", e.innerHTML = "Technology Powered by <b>Vanira AI</b>", this.element.appendChild(this.messageContainer), this.element.appendChild(this.inputArea), this.element.appendChild(e);
1411
+ }
1412
+ getElement() {
1413
+ return this.element;
1414
+ }
1415
+ formatTime(t = /* @__PURE__ */ new Date()) {
1416
+ return t.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
1417
+ }
1418
+ addMessage(t, e, i) {
1419
+ const s = document.createElement("div");
1420
+ s.style.cssText = `
1139
1421
  display: flex;
1140
1422
  flex-direction: column;
1141
- align-items: ${e==="user"?"flex-end":"flex-start"};
1423
+ align-items: ${t === "user" ? "flex-end" : "flex-start"};
1142
1424
  margin-bottom: 2px;
1143
- `;const s=document.createElement("div");s.className=`chat-message ${e}`,s.textContent=t,n.appendChild(s);const a=document.createElement("span");a.style.cssText=`
1425
+ `;
1426
+ const n = document.createElement("div");
1427
+ n.className = `chat-message ${t}`, n.textContent = e, s.appendChild(n);
1428
+ const o = document.createElement("span");
1429
+ o.style.cssText = `
1144
1430
  font-size: 10px;
1145
1431
  color: #9ca3af;
1146
1432
  margin: 2px 4px 6px;
1147
1433
  display: block;
1148
- `,a.textContent=this.formatTime(i?new Date(i):void 0),n.appendChild(a),this.messageContainer.appendChild(n),this.scrollToBottom()}updateLastAssistantMessage(e){const t=this.messageContainer.lastElementChild;if(t){const i=t.querySelector(".chat-message.assistant");if(i){i.textContent=e,this.scrollToBottom();return}}this.addMessage("assistant",e)}addButtons(e){const t=document.createElement("div");t.className="chat-buttons-container",t.style.display="flex",t.style.flexWrap="wrap",t.style.gap="8px",t.style.marginTop="8px",t.style.marginBottom="12px",t.style.justifyContent="flex-start",e.forEach(i=>{const n=document.createElement("button");n.className="chat-suggestion-chip",n.textContent=i.title,n.style.padding="6px 12px",n.style.borderRadius="16px",n.style.border="1px solid #e5e7eb",n.style.backgroundColor="white",n.style.fontSize="12px",n.style.color="#4b5563",n.style.cursor="pointer",n.style.transition="all 0.2s",n.onmouseenter=()=>{n.style.backgroundColor="#f3f4f6",n.style.borderColor="#d1d5db"},n.onmouseleave=()=>{n.style.backgroundColor="white",n.style.borderColor="#e5e7eb"},n.onclick=()=>{this.handleSend(i.payload)},t.appendChild(n)}),this.messageContainer.appendChild(t),this.scrollToBottom()}handleSend(e){const t=e||this.input.value.trim();t&&(this.onSend(t),e||(this.input.value=""))}setTyping(e){if(this.typingIndicator&&(this.typingIndicator.remove(),this.typingIndicator=null),e){this.typingIndicator=document.createElement("div"),this.typingIndicator.className="typing-indicator";for(let t=0;t<3;t++){const i=document.createElement("div");i.className="typing-dot",this.typingIndicator.appendChild(i)}this.messageContainer.appendChild(this.typingIndicator),this.scrollToBottom()}}addCallRecord(e,t=Date.now()){const i=Math.floor(e/6e4),n=Math.floor(e%6e4/1e3),s=i>0?`${i}m ${n}s`:`${n}s`,a=document.createElement("div");a.dataset.callTimestamp=String(t),a.style.cssText=`
1434
+ `, o.textContent = this.formatTime(i ? new Date(i) : void 0), s.appendChild(o), this.messageContainer.appendChild(s), this.scrollToBottom();
1435
+ }
1436
+ updateLastAssistantMessage(t) {
1437
+ const e = this.messageContainer.lastElementChild;
1438
+ if (e) {
1439
+ const i = e.querySelector(".chat-message.assistant");
1440
+ if (i) {
1441
+ i.textContent = t, this.scrollToBottom();
1442
+ return;
1443
+ }
1444
+ }
1445
+ this.addMessage("assistant", t);
1446
+ }
1447
+ addButtons(t) {
1448
+ const e = document.createElement("div");
1449
+ e.className = "chat-buttons-container", e.style.display = "flex", e.style.flexWrap = "wrap", e.style.gap = "8px", e.style.marginTop = "8px", e.style.marginBottom = "12px", e.style.justifyContent = "flex-start", t.forEach((i) => {
1450
+ const s = document.createElement("button");
1451
+ s.className = "chat-suggestion-chip", s.textContent = i.title, s.style.padding = "6px 12px", s.style.borderRadius = "16px", s.style.border = "1px solid #e5e7eb", s.style.backgroundColor = "white", s.style.fontSize = "12px", s.style.color = "#4b5563", s.style.cursor = "pointer", s.style.transition = "all 0.2s", s.onmouseenter = () => {
1452
+ s.style.backgroundColor = "#f3f4f6", s.style.borderColor = "#d1d5db";
1453
+ }, s.onmouseleave = () => {
1454
+ s.style.backgroundColor = "white", s.style.borderColor = "#e5e7eb";
1455
+ }, s.onclick = () => {
1456
+ this.handleSend(i.payload);
1457
+ }, e.appendChild(s);
1458
+ }), this.messageContainer.appendChild(e), this.scrollToBottom();
1459
+ }
1460
+ handleSend(t) {
1461
+ const e = t || this.input.value.trim();
1462
+ e && (this.onSend(e), t || (this.input.value = ""));
1463
+ }
1464
+ setTyping(t) {
1465
+ if (this.typingIndicator && (this.typingIndicator.remove(), this.typingIndicator = null), t) {
1466
+ this.typingIndicator = document.createElement("div"), this.typingIndicator.className = "typing-indicator";
1467
+ for (let e = 0; e < 3; e++) {
1468
+ const i = document.createElement("div");
1469
+ i.className = "typing-dot", this.typingIndicator.appendChild(i);
1470
+ }
1471
+ this.messageContainer.appendChild(this.typingIndicator), this.scrollToBottom();
1472
+ }
1473
+ }
1474
+ /**
1475
+ * Inject a "Voice call ended" card into the message list.
1476
+ * @param durationMs call duration in milliseconds
1477
+ * @param timestamp unix ms when the call started (for ordering across restore)
1478
+ */
1479
+ addCallRecord(t, e = Date.now()) {
1480
+ const i = Math.floor(t / 6e4), s = Math.floor(t % 6e4 / 1e3), n = i > 0 ? `${i}m ${s}s` : `${s}s`, o = document.createElement("div");
1481
+ o.dataset.callTimestamp = String(e), o.style.cssText = `
1149
1482
  display: flex; justify-content: center;
1150
1483
  margin: 10px 16px;
1151
- `,a.innerHTML=`
1484
+ `, o.innerHTML = `
1152
1485
  <div style="
1153
1486
  display: flex; align-items: center; gap: 8px;
1154
1487
  background: #f3f4f6; border: 1px solid #e5e7eb;
@@ -1164,20 +1497,66 @@ overflow: hidden;
1164
1497
  <span>
1165
1498
  <span style="font-weight:500; color:#374151;">Voice call ended</span>
1166
1499
  <span style="margin-left:6px; color:#9ca3af;">¡</span>
1167
- <span style="margin-left:6px;">${s}</span>
1500
+ <span style="margin-left:6px;">${n}</span>
1168
1501
  </span>
1169
1502
  </div>
1170
- `,this.messageContainer.appendChild(a),this.scrollToBottom()}clearMessages(){this.messageContainer.innerHTML=""}setResolveCallback(e){this.resolveBar&&this.resolveBar.remove(),this.resolveBar=document.createElement("div"),this.resolveBar.className="chat-resolve-bar";const t=document.createElement("button");t.className="chat-resolve-link",t.textContent="Mark as resolved, start new",t.onclick=()=>{confirm("Are you sure you want to mark this conversation as resolved and start fresh?")&&e()},this.resolveBar.appendChild(t),this.element.insertBefore(this.resolveBar,this.inputArea)}scrollToBottom(){this.messageContainer.scrollTop=this.messageContainer.scrollHeight}}class kt{constructor(e){h(this,"element");h(this,"videoElement");h(this,"placeholderContainer");this.element=document.createElement("div"),this.element.className="avatar-container",this.element.style.position="relative",this.element.style.width="100%",this.element.style.height="100%",this.element.style.background="#ffffff",this.element.style.borderRadius="16px",this.element.style.overflow="hidden",this.placeholderContainer=document.createElement("div"),this.placeholderContainer.style.width="100%",this.placeholderContainer.style.height="100%",this.placeholderContainer.style.display="flex",this.placeholderContainer.style.alignItems="center",this.placeholderContainer.style.justifyContent="center";const t=e||"https://www.simli.com/jenna.mp4",i=t.endsWith(".mp4")||t.endsWith(".webm");let n;if(i){const s=document.createElement("video");s.src=t,s.muted=!0,s.loop=!0,s.autoplay=!0,s.playsInline=!0,n=s}else{const s=document.createElement("img");s.src=t,n=s}n.style.width="140px",n.style.height="140px",n.style.borderRadius="50%",n.style.objectFit="cover",n.style.backgroundColor="#f3f4f6",this.placeholderContainer.appendChild(n),this.element.appendChild(this.placeholderContainer),this.videoElement=document.createElement("video"),this.videoElement.className="avatar-video",this.videoElement.autoplay=!0,this.videoElement.playsInline=!0,this.videoElement.muted=!0,this.videoElement.style.display="none",this.element.appendChild(this.videoElement)}getElement(){return this.element}setStream(e){this.videoElement.srcObject=e,this.videoElement.style.display="block",this.placeholderContainer.style.display="none"}}class St{constructor(e){h(this,"element");h(this,"selectedBehavior","continue");this.onClick=e,this.element=document.createElement("div"),this.element.className="voice-mode-container";const t=typeof window<"u"&&(window.sessionStorage.getItem("vanira_prospect_id")||window.localStorage.getItem("vanira_prospect_id"))&&(window.sessionStorage.getItem("vanira_latest_call_id")||window.localStorage.getItem("vanira_latest_call_id"));this.element.innerHTML=`
1503
+ `, this.messageContainer.appendChild(o), this.scrollToBottom();
1504
+ }
1505
+ clearMessages() {
1506
+ this.messageContainer.innerHTML = "";
1507
+ }
1508
+ setResolveCallback(t) {
1509
+ this.resolveBar && this.resolveBar.remove(), this.resolveBar = document.createElement("div"), this.resolveBar.className = "chat-resolve-bar";
1510
+ const e = document.createElement("button");
1511
+ e.className = "chat-resolve-link", e.textContent = "Mark as resolved, start new", e.onclick = () => {
1512
+ confirm("Are you sure you want to mark this conversation as resolved and start fresh?") && t();
1513
+ }, this.resolveBar.appendChild(e), this.element.insertBefore(this.resolveBar, this.inputArea);
1514
+ }
1515
+ scrollToBottom() {
1516
+ this.messageContainer.scrollTop = this.messageContainer.scrollHeight;
1517
+ }
1518
+ }
1519
+ class se {
1520
+ constructor(t) {
1521
+ a(this, "element");
1522
+ a(this, "videoElement");
1523
+ a(this, "placeholderContainer");
1524
+ this.element = document.createElement("div"), this.element.className = "avatar-container", this.element.style.position = "relative", this.element.style.width = "100%", this.element.style.height = "100%", this.element.style.background = "#ffffff", this.element.style.borderRadius = "16px", this.element.style.overflow = "hidden", this.placeholderContainer = document.createElement("div"), this.placeholderContainer.style.width = "100%", this.placeholderContainer.style.height = "100%", this.placeholderContainer.style.display = "flex", this.placeholderContainer.style.alignItems = "center", this.placeholderContainer.style.justifyContent = "center";
1525
+ const e = t || "https://www.simli.com/jenna.mp4", i = e.endsWith(".mp4") || e.endsWith(".webm");
1526
+ let s;
1527
+ if (i) {
1528
+ const n = document.createElement("video");
1529
+ n.src = e, n.muted = !0, n.loop = !0, n.autoplay = !0, n.playsInline = !0, s = n;
1530
+ } else {
1531
+ const n = document.createElement("img");
1532
+ n.src = e, s = n;
1533
+ }
1534
+ s.style.width = "140px", s.style.height = "140px", s.style.borderRadius = "50%", s.style.objectFit = "cover", s.style.backgroundColor = "#f3f4f6", this.placeholderContainer.appendChild(s), this.element.appendChild(this.placeholderContainer), this.videoElement = document.createElement("video"), this.videoElement.className = "avatar-video", this.videoElement.autoplay = !0, this.videoElement.playsInline = !0, this.videoElement.muted = !0, this.videoElement.style.display = "none", this.element.appendChild(this.videoElement);
1535
+ }
1536
+ getElement() {
1537
+ return this.element;
1538
+ }
1539
+ setStream(t) {
1540
+ this.videoElement.srcObject = t, this.videoElement.style.display = "block", this.placeholderContainer.style.display = "none";
1541
+ }
1542
+ }
1543
+ class ne {
1544
+ constructor(t) {
1545
+ a(this, "element");
1546
+ a(this, "selectedBehavior", "continue");
1547
+ this.onClick = t, this.element = document.createElement("div"), this.element.className = "voice-mode-container";
1548
+ const e = typeof window < "u" && (window.sessionStorage.getItem("vanira_prospect_id") || window.localStorage.getItem("vanira_prospect_id")) && (window.sessionStorage.getItem("vanira_latest_call_id") || window.localStorage.getItem("vanira_latest_call_id"));
1549
+ this.element.innerHTML = `
1171
1550
  <div class="central-orb-container">
1172
1551
  <div class="central-orb idle">
1173
- ${W.voice_orb}
1552
+ ${B.voice_orb}
1174
1553
  </div>
1175
1554
  <div class="central-orb-glow"></div>
1176
1555
  </div>
1177
1556
  <div class="voice-status-text">Tap to speak</div>
1178
1557
  <div class="voice-status-subtext">Start a conversation</div>
1179
1558
 
1180
- ${t?`
1559
+ ${e ? `
1181
1560
  <div class="session-selector-container">
1182
1561
  <div class="session-option active" data-behavior="continue">
1183
1562
  <span class="session-title">Resume Call</span>
@@ -1188,8 +1567,55 @@ overflow: hidden;
1188
1567
  <span class="session-desc">New conversation</span>
1189
1568
  </div>
1190
1569
  </div>
1191
- `:""}
1192
- `;const i=this.element.querySelector(".central-orb-container");i&&(i.onclick=this.onClick);const n=this.element.querySelectorAll(".session-option");n.forEach(s=>{s.addEventListener("click",a=>{a.stopPropagation(),n.forEach(u=>u.classList.remove("active")),s.classList.add("active"),this.selectedBehavior=s.getAttribute("data-behavior")})})}getSessionBehavior(){return this.selectedBehavior}getElement(){return this.element}}class _e{constructor(e){h(this,"element");h(this,"chips",[]);this.onChipClick=e,this.element=document.createElement("div"),this.element.className="welcome-chips-container"}setChips(e){this.chips=e,this.render()}getElement(){return this.element}setPosition(e){this.element.style.cssText="",e.split(";").filter(i=>i.trim()).forEach(i=>{const[n,s]=i.split(":").map(a=>a.trim());n&&s&&(this.element.style[n]=s)}),this.element.style.bottom?this.element.style.bottom=parseInt(this.element.style.bottom)+76+"px":this.element.style.top&&(this.element.style.top=parseInt(this.element.style.top)+76+"px"),this.element.style.position="fixed",this.element.style.zIndex="2147483646",this.element.style.alignItems=this.element.style.left?"flex-start":"flex-end"}updateCoordinates(e,t,i=!0){this.element.style.left=`${e}px`,i?(this.element.style.top="auto",this.element.style.bottom=`${window.innerHeight-t+16}px`):(this.element.style.bottom="auto",this.element.style.top=`${t+76}px`),this.element.style.right="auto"}render(){this.element.innerHTML="",this.chips.forEach((e,t)=>{const i=document.createElement("button");i.className="welcome-chip-btn",i.textContent=e.title,i.onclick=n=>{n.stopPropagation(),this.onChipClick(e.title)},i.style.animationDelay=`${t*.1}s`,this.element.appendChild(i)})}static get styles(){return`
1570
+ ` : ""}
1571
+ `;
1572
+ const i = this.element.querySelector(".central-orb-container");
1573
+ i && (i.onclick = this.onClick);
1574
+ const s = this.element.querySelectorAll(".session-option");
1575
+ s.forEach((n) => {
1576
+ n.addEventListener("click", (o) => {
1577
+ o.stopPropagation(), s.forEach((d) => d.classList.remove("active")), n.classList.add("active"), this.selectedBehavior = n.getAttribute("data-behavior");
1578
+ });
1579
+ });
1580
+ }
1581
+ getSessionBehavior() {
1582
+ return this.selectedBehavior;
1583
+ }
1584
+ getElement() {
1585
+ return this.element;
1586
+ }
1587
+ }
1588
+ class G {
1589
+ constructor(t) {
1590
+ a(this, "element");
1591
+ a(this, "chips", []);
1592
+ this.onChipClick = t, this.element = document.createElement("div"), this.element.className = "welcome-chips-container";
1593
+ }
1594
+ setChips(t) {
1595
+ this.chips = t, this.render();
1596
+ }
1597
+ getElement() {
1598
+ return this.element;
1599
+ }
1600
+ setPosition(t) {
1601
+ this.element.style.cssText = "", t.split(";").filter((i) => i.trim()).forEach((i) => {
1602
+ const [s, n] = i.split(":").map((o) => o.trim());
1603
+ s && n && (this.element.style[s] = n);
1604
+ }), this.element.style.bottom ? this.element.style.bottom = parseInt(this.element.style.bottom) + 76 + "px" : this.element.style.top && (this.element.style.top = parseInt(this.element.style.top) + 76 + "px"), this.element.style.position = "fixed", this.element.style.zIndex = "2147483646", this.element.style.alignItems = this.element.style.left ? "flex-start" : "flex-end";
1605
+ }
1606
+ updateCoordinates(t, e, i = !0) {
1607
+ this.element.style.left = `${t}px`, i ? (this.element.style.top = "auto", this.element.style.bottom = `${window.innerHeight - e + 16}px`) : (this.element.style.bottom = "auto", this.element.style.top = `${e + 76}px`), this.element.style.right = "auto";
1608
+ }
1609
+ render() {
1610
+ this.element.innerHTML = "", this.chips.forEach((t, e) => {
1611
+ const i = document.createElement("button");
1612
+ i.className = "welcome-chip-btn", i.textContent = t.title, i.onclick = (s) => {
1613
+ s.stopPropagation(), this.onChipClick(t.title);
1614
+ }, i.style.animationDelay = `${e * 0.1}s`, this.element.appendChild(i);
1615
+ });
1616
+ }
1617
+ static get styles() {
1618
+ return `
1193
1619
  .welcome-chips-container {
1194
1620
  position: fixed;
1195
1621
  z-index: 9998;
@@ -1245,16 +1671,201 @@ overflow: hidden;
1245
1671
  transform: translateY(0);
1246
1672
  }
1247
1673
  }
1248
- `}}class $e{constructor(e,t,i="#000000",n="#111111",s){h(this,"element");h(this,"overlay");h(this,"onStartCall");h(this,"onHangup");h(this,"primaryColor");h(this,"secondaryColor");h(this,"onCallEnded");this.onStartCall=e,this.onHangup=t,this.primaryColor=i,this.secondaryColor=n,this.onCallEnded=s,this.element=document.createElement("div"),this.element.style.height="100%",this.element.style.position="relative"}initOverlay(){this.overlay=new qe(()=>this.onHangup(),this.primaryColor,this.secondaryColor,this.onCallEnded),this.element.appendChild(this.overlay.getElement())}getElement(){return this.element}setCallActive(e){e?this.overlay.show():this.overlay.hide()}setStatus(e,t){this.overlay.setStatus(e,t)}setTranscription(e,t){this.overlay.setTranscription(e,t)}setVideoTrack(e){this.overlay.setVideoTrack(e)}}class Mt extends $e{constructor(t,i,n="#000000",s="#111111",a){super(t,i,n,s,a);h(this,"voiceOrb");this.element.style.background="#f9fafb",this.voiceOrb=new St(()=>{const u=this.voiceOrb.getSessionBehavior();this.onStartCall(u)}),this.element.appendChild(this.voiceOrb.getElement()),this.initOverlay()}}class Dt{constructor(e){h(this,"element");h(this,"chatWindow");this.onSendMessage=e,this.element=document.createElement("div"),this.element.style.flex="1",this.element.style.width="100%",this.element.style.minHeight="0",this.element.style.display="flex",this.element.style.flexDirection="column",this.chatWindow=new Ze(t=>this.onSendMessage(t)),this.element.appendChild(this.chatWindow.getElement())}getElement(){return this.element}getChatWindow(){return this.chatWindow}}class et{constructor(e,t,i,n="#000000",s="#111111",a){h(this,"element");h(this,"chatWindow");h(this,"overlay");h(this,"voiceTrigger");this.onSendMessage=e,this.onStartCall=t,this.onHangup=i,this.primaryColor=n,this.secondaryColor=s,this.onCallEnded=a,this.element=document.createElement("div"),this.element.style.flex="1",this.element.style.display="flex",this.element.style.flexDirection="column",this.element.style.minHeight="0",this.element.style.position="relative"}setupChat(){this.chatWindow=new Ze(t=>this.onSendMessage(t));const e=this.chatWindow.getElement();e.style.flex="1",this.element.appendChild(e),this.injectVoiceTrigger(),this.overlay=new qe(()=>this.onHangup(),this.primaryColor,this.secondaryColor,this.onCallEnded),this.element.appendChild(this.overlay.getElement())}injectVoiceTrigger(){const e=document.createElement("button");this.voiceTrigger=e,e.className="voice-btn-simple",e.innerHTML=`<div class="voice-btn-icon">${W.audioLines}</div>`,e.onclick=()=>this.onStartCall();const t=this.chatWindow.getElement().querySelector(".chat-input-area");t?t.insertBefore(this.voiceTrigger,t.firstChild):console.warn("VaniraSDK: Failed to inject voice trigger",{inputArea:t})}getElement(){return this.element}getChatWindow(){return this.chatWindow}setCallActive(e){e?(this.overlay.show(),this.chatWindow&&(this.chatWindow.getElement().style.display="none")):(this.overlay.hide(),this.chatWindow&&(this.chatWindow.getElement().style.display="flex"))}setStatus(e,t){this.overlay.setStatus(e,t)}setTranscription(e,t){this.overlay.setTranscription(e,t)}setVideoTrack(e){this.overlay.setVideoTrack(e)}}class Tt extends et{constructor(e,t,i,n="#000000",s="#111111",a){super(e,t,i,n,s,a),this.setupChat()}}class Qt extends $e{constructor(t,i,n="#000000",s="#111111",a){super(t,i,n,s,a);h(this,"avatarView");h(this,"startCallBtn");h(this,"controlsContainer");this.element.style.display="flex",this.element.style.flexDirection="column",this.avatarView=new kt;const u=this.avatarView.getElement();u.style.width="100%",u.style.maxWidth="300px",u.style.aspectRatio="1/1",u.style.borderRadius="16px",u.style.overflow="hidden",u.style.margin="auto",u.style.position="relative",this.element.appendChild(u),this.controlsContainer=document.createElement("div"),this.controlsContainer.className="widget-body",this.controlsContainer.style.position="absolute",this.controlsContainer.style.bottom="20px",this.controlsContainer.style.width="100%",this.controlsContainer.style.zIndex="10";const p=document.createElement("div");p.className="controls",this.startCallBtn=document.createElement("button"),this.startCallBtn.className="control-btn primary",this.startCallBtn.innerHTML=`${W.phone} <span>Start Call</span>`,this.startCallBtn.onclick=()=>this.onStartCall(),p.appendChild(this.startCallBtn),this.controlsContainer.appendChild(p),this.element.appendChild(this.controlsContainer),this.initOverlay(),this.overlay.setMode("avatar")}getAvatarView(){return this.avatarView}setCallActive(t){t&&this.overlay.setMode("avatar"),super.setCallActive(t),t?this.controlsContainer.style.display="none":this.controlsContainer.style.display="block"}}class jt extends et{constructor(e,t,i,n="#000000",s="#111111",a){super(e,t,i,n,s,a),this.setupChat(),this.overlay.setMode("avatar")}injectVoiceTrigger(){const e=document.createElement("button");this.voiceTrigger=e,e.className="voice-btn-simple",e.style.overflow="hidden",e.style.padding="0",e.style.border="1.5px solid #e5e7eb",e.innerHTML=`
1674
+ `;
1675
+ }
1676
+ }
1677
+ class O {
1678
+ constructor(t, e, i = "#000000", s = "#111111", n) {
1679
+ a(this, "element");
1680
+ a(this, "overlay");
1681
+ a(this, "onStartCall");
1682
+ a(this, "onHangup");
1683
+ a(this, "primaryColor");
1684
+ a(this, "secondaryColor");
1685
+ a(this, "onCallEnded");
1686
+ this.onStartCall = t, this.onHangup = e, this.primaryColor = i, this.secondaryColor = s, this.onCallEnded = n, this.element = document.createElement("div"), this.element.style.height = "100%", this.element.style.position = "relative";
1687
+ }
1688
+ initOverlay() {
1689
+ this.overlay = new R(() => this.onHangup(), this.primaryColor, this.secondaryColor, this.onCallEnded), this.element.appendChild(this.overlay.getElement());
1690
+ }
1691
+ getElement() {
1692
+ return this.element;
1693
+ }
1694
+ setCallActive(t) {
1695
+ t ? this.overlay.show() : this.overlay.hide();
1696
+ }
1697
+ setStatus(t, e) {
1698
+ this.overlay.setStatus(t, e);
1699
+ }
1700
+ setTranscription(t, e) {
1701
+ this.overlay.setTranscription(t, e);
1702
+ }
1703
+ setVideoTrack(t) {
1704
+ this.overlay.setVideoTrack(t);
1705
+ }
1706
+ }
1707
+ class oe extends O {
1708
+ constructor(e, i, s = "#000000", n = "#111111", o) {
1709
+ super(e, i, s, n, o);
1710
+ a(this, "voiceOrb");
1711
+ this.element.style.background = "#f9fafb", this.voiceOrb = new ne(() => {
1712
+ const d = this.voiceOrb.getSessionBehavior();
1713
+ this.onStartCall(d);
1714
+ }), this.element.appendChild(this.voiceOrb.getElement()), this.initOverlay();
1715
+ }
1716
+ }
1717
+ class re {
1718
+ constructor(t) {
1719
+ a(this, "element");
1720
+ a(this, "chatWindow");
1721
+ this.onSendMessage = t, this.element = document.createElement("div"), this.element.style.flex = "1", this.element.style.width = "100%", this.element.style.minHeight = "0", this.element.style.display = "flex", this.element.style.flexDirection = "column", this.chatWindow = new U((e) => this.onSendMessage(e)), this.element.appendChild(this.chatWindow.getElement());
1722
+ }
1723
+ getElement() {
1724
+ return this.element;
1725
+ }
1726
+ getChatWindow() {
1727
+ return this.chatWindow;
1728
+ }
1729
+ }
1730
+ class W {
1731
+ constructor(t, e, i, s = "#000000", n = "#111111", o) {
1732
+ a(this, "element");
1733
+ a(this, "chatWindow");
1734
+ a(this, "overlay");
1735
+ a(this, "voiceTrigger");
1736
+ this.onSendMessage = t, this.onStartCall = e, this.onHangup = i, this.primaryColor = s, this.secondaryColor = n, this.onCallEnded = o, this.element = document.createElement("div"), this.element.style.flex = "1", this.element.style.display = "flex", this.element.style.flexDirection = "column", this.element.style.minHeight = "0", this.element.style.position = "relative";
1737
+ }
1738
+ setupChat() {
1739
+ this.chatWindow = new U((e) => this.onSendMessage(e));
1740
+ const t = this.chatWindow.getElement();
1741
+ t.style.flex = "1", this.element.appendChild(t), this.injectVoiceTrigger(), this.overlay = new R(() => this.onHangup(), this.primaryColor, this.secondaryColor, this.onCallEnded), this.element.appendChild(this.overlay.getElement());
1742
+ }
1743
+ injectVoiceTrigger() {
1744
+ const t = document.createElement("button");
1745
+ this.voiceTrigger = t, t.className = "voice-btn-simple", t.innerHTML = `<div class="voice-btn-icon">${B.audioLines}</div>`, t.onclick = () => this.onStartCall();
1746
+ const e = this.chatWindow.getElement().querySelector(".chat-input-area");
1747
+ e ? e.insertBefore(this.voiceTrigger, e.firstChild) : console.warn("VaniraSDK: Failed to inject voice trigger", { inputArea: e });
1748
+ }
1749
+ getElement() {
1750
+ return this.element;
1751
+ }
1752
+ getChatWindow() {
1753
+ return this.chatWindow;
1754
+ }
1755
+ setCallActive(t) {
1756
+ t ? (this.overlay.show(), this.chatWindow && (this.chatWindow.getElement().style.display = "none")) : (this.overlay.hide(), this.chatWindow && (this.chatWindow.getElement().style.display = "flex"));
1757
+ }
1758
+ setStatus(t, e) {
1759
+ this.overlay.setStatus(t, e);
1760
+ }
1761
+ setTranscription(t, e) {
1762
+ this.overlay.setTranscription(t, e);
1763
+ }
1764
+ setVideoTrack(t) {
1765
+ this.overlay.setVideoTrack(t);
1766
+ }
1767
+ }
1768
+ class ae extends W {
1769
+ constructor(t, e, i, s = "#000000", n = "#111111", o) {
1770
+ super(t, e, i, s, n, o), this.setupChat();
1771
+ }
1772
+ }
1773
+ class le extends O {
1774
+ constructor(e, i, s = "#000000", n = "#111111", o) {
1775
+ super(e, i, s, n, o);
1776
+ a(this, "avatarView");
1777
+ a(this, "startCallBtn");
1778
+ a(this, "controlsContainer");
1779
+ this.element.style.display = "flex", this.element.style.flexDirection = "column", this.avatarView = new se();
1780
+ const d = this.avatarView.getElement();
1781
+ d.style.width = "100%", d.style.maxWidth = "300px", d.style.aspectRatio = "1/1", d.style.borderRadius = "16px", d.style.overflow = "hidden", d.style.margin = "auto", d.style.position = "relative", this.element.appendChild(d), this.controlsContainer = document.createElement("div"), this.controlsContainer.className = "widget-body", this.controlsContainer.style.position = "absolute", this.controlsContainer.style.bottom = "20px", this.controlsContainer.style.width = "100%", this.controlsContainer.style.zIndex = "10";
1782
+ const A = document.createElement("div");
1783
+ A.className = "controls", this.startCallBtn = document.createElement("button"), this.startCallBtn.className = "control-btn primary", this.startCallBtn.innerHTML = `${B.phone} <span>Start Call</span>`, this.startCallBtn.onclick = () => this.onStartCall(), A.appendChild(this.startCallBtn), this.controlsContainer.appendChild(A), this.element.appendChild(this.controlsContainer), this.initOverlay(), this.overlay.setMode("avatar");
1784
+ }
1785
+ getAvatarView() {
1786
+ return this.avatarView;
1787
+ }
1788
+ setCallActive(e) {
1789
+ e && this.overlay.setMode("avatar"), super.setCallActive(e), e ? this.controlsContainer.style.display = "none" : this.controlsContainer.style.display = "block";
1790
+ }
1791
+ }
1792
+ class de extends W {
1793
+ constructor(t, e, i, s = "#000000", n = "#111111", o) {
1794
+ super(t, e, i, s, n, o), this.setupChat(), this.overlay.setMode("avatar");
1795
+ }
1796
+ // Override to inject the unique Circular Video Button
1797
+ injectVoiceTrigger() {
1798
+ const t = document.createElement("button");
1799
+ this.voiceTrigger = t, t.className = "voice-btn-simple", t.style.overflow = "hidden", t.style.padding = "0", t.style.border = "1.5px solid #e5e7eb", t.innerHTML = `
1249
1800
  <video
1250
1801
  src="https://www.simli.com/jenna.mp4"
1251
1802
  autoplay loop muted pip="false" playsinline
1252
1803
  style="width: 100%; height: 100%; object-fit: cover; border-radius: 50%;">
1253
1804
  </video>
1254
1805
  <div style="position: absolute; bottom: -2px; right: -2px; background: white; border-radius: 50%; padding: 2px; box-shadow: 0 1px 2px rgba(0,0,0,0.1);">
1255
- ${W.audioLines.replace('width="24"','width="12"').replace('height="24"','height="12"')}
1806
+ ${B.audioLines.replace('width="24"', 'width="12"').replace('height="24"', 'height="12"')}
1256
1807
  </div>
1257
- `;const t=e.querySelector("div");if(t){const s=t.querySelector("svg");s&&(s.style.width="12px",s.style.height="12px")}e.onclick=()=>this.onStartCall();const i=this.chatWindow.getElement().querySelector(".chat-input-area"),n=i==null?void 0:i.querySelector(".chat-send-btn");i&&n?i.insertBefore(this.voiceTrigger,n):console.warn("VaniraSDK: Failed to inject voice trigger",{inputArea:i,sendBtn:n})}}class Pt{async sendMessage(e,t,i,n,s,a,u,p,c){return se.sendChatMessage(t,i,e,n,g=>{a&&a(g)},s,(g,o)=>{u&&g&&u(g,o||void 0)},p,c)}async sendFile(e){throw console.warn("sendFile not implemented for VaniraChatAdapter yet - Incompatible function adapted",e),new Error("Method not implemented.")}async likeDislike(e,t){console.warn("likeDislike not implemented for VaniraChatAdapter yet - Incompatible function adapted",e,t)}}function Qe(d){if(!d)return"";if(typeof d=="string"){if(d.includes("T")||!isNaN(Date.parse(d)))try{return new Date(d).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})}catch{}return d}if(typeof d=="object"){const e=d.start||d.startTime||d.time||d.slot,t=d.end||d.endTime;if(e){let i=String(e),n=t?String(t):"";try{(i.includes("T")||!isNaN(Date.parse(i)))&&(i=new Date(i).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),n&&(n.includes("T")||!isNaN(Date.parse(n)))&&(n=new Date(n).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}))}catch{}return n?`${i} - ${n}`:i}}return String(d)}const Rt=`
1808
+ `;
1809
+ const e = t.querySelector("div");
1810
+ if (e) {
1811
+ const n = e.querySelector("svg");
1812
+ n && (n.style.width = "12px", n.style.height = "12px");
1813
+ }
1814
+ t.onclick = () => this.onStartCall();
1815
+ const i = this.chatWindow.getElement().querySelector(".chat-input-area"), s = i == null ? void 0 : i.querySelector(".chat-send-btn");
1816
+ i && s ? i.insertBefore(this.voiceTrigger, s) : console.warn("VaniraSDK: Failed to inject voice trigger", { inputArea: i, sendBtn: s });
1817
+ }
1818
+ // No getAvatarView method anymore. VaniraInternalProvider should check for capability or cast.
1819
+ }
1820
+ class ce {
1821
+ async sendMessage(t, e, i, s, n, o, d, A, r) {
1822
+ return I.sendChatMessage(
1823
+ e,
1824
+ i,
1825
+ t,
1826
+ s,
1827
+ (h) => {
1828
+ o && o(h);
1829
+ },
1830
+ n,
1831
+ (h, l) => {
1832
+ d && h && d(h, l || void 0);
1833
+ },
1834
+ A,
1835
+ r
1836
+ );
1837
+ }
1838
+ async sendFile(t) {
1839
+ throw console.warn("sendFile not implemented for VaniraChatAdapter yet - Incompatible function adapted", t), new Error("Method not implemented.");
1840
+ }
1841
+ async likeDislike(t, e) {
1842
+ console.warn("likeDislike not implemented for VaniraChatAdapter yet - Incompatible function adapted", t, e);
1843
+ }
1844
+ }
1845
+ function S(p) {
1846
+ if (!p) return "";
1847
+ if (typeof p == "string") {
1848
+ if (p.includes("T") || !isNaN(Date.parse(p)))
1849
+ try {
1850
+ return new Date(p).toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" });
1851
+ } catch {
1852
+ }
1853
+ return p;
1854
+ }
1855
+ if (typeof p == "object") {
1856
+ const t = p.start || p.startTime || p.time || p.slot, e = p.end || p.endTime;
1857
+ if (t) {
1858
+ let i = String(t), s = e ? String(e) : "";
1859
+ try {
1860
+ (i.includes("T") || !isNaN(Date.parse(i))) && (i = new Date(i).toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" })), s && (s.includes("T") || !isNaN(Date.parse(s))) && (s = new Date(s).toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" }));
1861
+ } catch {
1862
+ }
1863
+ return s ? `${i} - ${s}` : i;
1864
+ }
1865
+ }
1866
+ return String(p);
1867
+ }
1868
+ const Ae = `
1258
1869
  .vnr-overlay {
1259
1870
  position: fixed; inset: 0; z-index: 2147483647;
1260
1871
  background: rgba(0,0,0,0.45);
@@ -1350,55 +1961,275 @@ overflow: hidden;
1350
1961
  /* Upload dropzone */
1351
1962
  .vnr-dropzone { border:2px dashed #cbd5e1; border-radius:14px; padding:32px 20px; text-align:center; cursor:pointer; background:#fafafa; transition:border-color 0.2s,background 0.2s; }
1352
1963
  .vnr-dropzone:hover, .vnr-dropzone.drag { border-color:#374151; background:#f3f4f6; }
1353
- `;class zt{constructor(e){h(this,"overlay",null);h(this,"styleInjected",!1);h(this,"calViewYear",0);h(this,"calViewMonth",0);h(this,"calSelectedTs",null);h(this,"calSelectedTime",null)}handle(e,t,i,n){const s=e.data||e;let a={};const u=s.arguments||s.args;if(typeof u=="string")try{a=JSON.parse(u)}catch{a={}}else u&&typeof u=="object"&&(a=u);const p=s.client_fields||{},c=(p==null?void 0:p.preset_id)||(a==null?void 0:a.preset_id);if(console.log("[VaniraPreset] tool_call data:",{name:s.name,client_fields:p,args:a,presetId:c}),!c)return!1;const g={...a,...p},o={toolCallId:s.tool_call_id||s.call_id||"",presetId:c,clientFields:g,args:a,toolCall:s};return this.injectStyles(),this.dismiss(),c==="vanira_calendar"?(this.renderCalendar(o,t,i),!0):c==="vanira_form"?(this.renderForm(o,t,i),!0):c==="vanira_camera"?(this.renderCamera(o,t,i,n),!0):c==="vanira_upload"?(this.renderUpload(o,t,i,n),!0):c==="vanira_navigate"?(this.renderNavigate(o,t,i),!0):!1}dismiss(){this.overlay&&(this.overlay.remove(),this.overlay=null)}injectStyles(){if(this.styleInjected||document.getElementById("vnr-preset-styles"))return;const e=document.createElement("style");e.id="vnr-preset-styles",e.textContent=Rt,document.head.appendChild(e),this.styleInjected=!0}createOverlay(){const e=document.createElement("div");return e.className="vnr-overlay",document.body.appendChild(e),this.overlay=e,e}createModal(e,t,i){const n=document.createElement("div");return n.className="vnr-modal",n.style.position="relative",n.innerHTML=`
1964
+ `;
1965
+ class V {
1966
+ constructor(t) {
1967
+ a(this, "overlay", null);
1968
+ a(this, "styleInjected", !1);
1969
+ // Calendar state
1970
+ a(this, "calViewYear", 0);
1971
+ a(this, "calViewMonth", 0);
1972
+ a(this, "calSelectedTs", null);
1973
+ a(this, "calSelectedTime", null);
1974
+ }
1975
+ /** Returns true if this tool call contains a known preset_id and was handled */
1976
+ handle(t, e, i, s) {
1977
+ const n = t.data || t;
1978
+ let o = {};
1979
+ const d = n.arguments || n.args;
1980
+ if (typeof d == "string")
1981
+ try {
1982
+ o = JSON.parse(d);
1983
+ } catch {
1984
+ o = {};
1985
+ }
1986
+ else d && typeof d == "object" && (o = d);
1987
+ const A = n.client_fields || {}, r = (A == null ? void 0 : A.preset_id) || (o == null ? void 0 : o.preset_id);
1988
+ if (console.log("[VaniraPreset] tool_call data:", {
1989
+ name: n.name,
1990
+ client_fields: A,
1991
+ args: o,
1992
+ presetId: r
1993
+ }), !r) return !1;
1994
+ const h = { ...o, ...A }, l = {
1995
+ toolCallId: n.tool_call_id || n.call_id || "",
1996
+ presetId: r,
1997
+ clientFields: h,
1998
+ args: o,
1999
+ toolCall: n
2000
+ };
2001
+ return this.injectStyles(), this.dismiss(), r === "vanira_calendar" ? (this.renderCalendar(l, e, i), !0) : r === "vanira_form" ? (this.renderForm(l, e, i), !0) : r === "vanira_camera" ? (this.renderCamera(l, e, i, s), !0) : r === "vanira_upload" ? (this.renderUpload(l, e, i, s), !0) : r === "vanira_navigate" ? (this.renderNavigate(l, e, i), !0) : r === "vanira_highlight_element" ? (this.renderHighlight(l, e, i), !0) : r === "vanira_type_text" ? (this.renderTypeText(l, e, i), !0) : !1;
2002
+ }
2003
+ /** Force-dismiss the active preset (call on disconnect) */
2004
+ dismiss() {
2005
+ this.overlay && (this.overlay.remove(), this.overlay = null);
2006
+ }
2007
+ // ─── Styles ──────────────────────────────────────────────────────────────
2008
+ injectStyles() {
2009
+ if (this.styleInjected || document.getElementById("vnr-preset-styles")) return;
2010
+ const t = document.createElement("style");
2011
+ t.id = "vnr-preset-styles", t.textContent = Ae, document.head.appendChild(t), this.styleInjected = !0;
2012
+ }
2013
+ createOverlay() {
2014
+ const t = document.createElement("div");
2015
+ return t.className = "vnr-overlay", document.body.appendChild(t), this.overlay = t, t;
2016
+ }
2017
+ createModal(t, e, i) {
2018
+ const s = document.createElement("div");
2019
+ return s.className = "vnr-modal", s.style.position = "relative", s.innerHTML = `
1354
2020
  <button class="vnr-close-btn" aria-label="Close">
1355
2021
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
1356
2022
  <line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
1357
2023
  </svg>
1358
2024
  </button>
1359
- <h2 class="vnr-title">${t}</h2>
2025
+ <h2 class="vnr-title">${e}</h2>
1360
2026
  <div class="vnr-reason">
1361
2027
  <svg width="14" height="14" style="flex-shrink:0;margin-top:1px" fill="none" stroke="#9ca3af" stroke-width="2" viewBox="0 0 24 24">
1362
2028
  <path stroke-linecap="round" stroke-linejoin="round" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
1363
2029
  </svg>
1364
2030
  <span>${i}</span>
1365
2031
  </div>
1366
- `,e.appendChild(n),n}renderCalendar(e,t,i){const n=new Date;n.setHours(0,0,0,0),this.calViewYear=n.getFullYear(),this.calViewMonth=n.getMonth(),this.calSelectedTs=null,this.calSelectedTime=null;const s=e.clientFields.title||"Select Date & Time",a=e.args.reason||"Please select a preferred time for your appointment.",u=this.createOverlay(),p=this.createModal(u,s,a);p.querySelector(".vnr-close-btn").addEventListener("click",()=>{this.dismiss(),i("User closed the preset")});const c=document.createElement("div");p.appendChild(c);const g=document.createElement("div");g.style.display="none",p.appendChild(g);const o=document.createElement("div");o.className="vnr-actions",o.innerHTML=`
2032
+ `, t.appendChild(s), s;
2033
+ }
2034
+ // ─── Calendar Preset ─────────────────────────────────────────────────────
2035
+ renderCalendar(t, e, i) {
2036
+ const s = /* @__PURE__ */ new Date();
2037
+ s.setHours(0, 0, 0, 0), this.calViewYear = s.getFullYear(), this.calViewMonth = s.getMonth(), this.calSelectedTs = null, this.calSelectedTime = null;
2038
+ const n = t.clientFields.title || "Select Date & Time", o = t.args.reason || "Please select a preferred time for your appointment.", d = this.createOverlay(), A = this.createModal(d, n, o);
2039
+ A.querySelector(".vnr-close-btn").addEventListener("click", () => {
2040
+ this.dismiss(), i("User closed the preset");
2041
+ });
2042
+ const r = document.createElement("div");
2043
+ A.appendChild(r);
2044
+ const h = document.createElement("div");
2045
+ h.style.display = "none", A.appendChild(h);
2046
+ const l = document.createElement("div");
2047
+ l.className = "vnr-actions", l.innerHTML = `
1367
2048
  <button class="vnr-cancel-btn">Cancel</button>
1368
2049
  <button class="vnr-confirm-btn" disabled>
1369
2050
  <svg width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>
1370
2051
  Confirm
1371
2052
  </button>
1372
- `,p.appendChild(o);const A=o.querySelector(".vnr-confirm-btn");o.querySelector(".vnr-cancel-btn").addEventListener("click",()=>{this.dismiss(),i("User cancelled")}),A.addEventListener("click",()=>{if(!this.calSelectedTs||!this.calSelectedTime)return;const m=new Date(this.calSelectedTs),C=Qe(this.calSelectedTime);this.dismiss(),t({date:m.toISOString().split("T")[0],time:C,timestamp:this.calSelectedTs,formatted:`${m.toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"})} at ${C}`,slot_data:typeof this.calSelectedTime=="object"?this.calSelectedTime:void 0})});const f=()=>{const m=new Date;m.setHours(0,0,0,0);const C=new Date(this.calViewYear,this.calViewMonth,1).getDay(),w=new Date(this.calViewYear,this.calViewMonth+1,0).getDate(),b=new Date(this.calViewYear,this.calViewMonth,1).toLocaleDateString("en-US",{month:"long",year:"numeric"}),y=this.calViewYear===m.getFullYear()&&this.calViewMonth===m.getMonth();c.innerHTML=`
2053
+ `, A.appendChild(l);
2054
+ const c = l.querySelector(".vnr-confirm-btn");
2055
+ l.querySelector(".vnr-cancel-btn").addEventListener("click", () => {
2056
+ this.dismiss(), i("User cancelled");
2057
+ }), c.addEventListener("click", () => {
2058
+ if (!this.calSelectedTs || !this.calSelectedTime) return;
2059
+ const g = new Date(this.calSelectedTs), b = S(this.calSelectedTime);
2060
+ this.dismiss(), e({
2061
+ date: g.toISOString().split("T")[0],
2062
+ time: b,
2063
+ timestamp: this.calSelectedTs,
2064
+ formatted: `${g.toLocaleDateString("en-US", { weekday: "long", month: "short", day: "numeric" })} at ${b}`,
2065
+ slot_data: typeof this.calSelectedTime == "object" ? this.calSelectedTime : void 0
2066
+ });
2067
+ });
2068
+ const m = () => {
2069
+ const g = /* @__PURE__ */ new Date();
2070
+ g.setHours(0, 0, 0, 0);
2071
+ const b = new Date(this.calViewYear, this.calViewMonth, 1).getDay(), u = new Date(this.calViewYear, this.calViewMonth + 1, 0).getDate(), v = new Date(this.calViewYear, this.calViewMonth, 1).toLocaleDateString("en-US", { month: "long", year: "numeric" }), f = this.calViewYear === g.getFullYear() && this.calViewMonth === g.getMonth();
2072
+ r.innerHTML = `
1373
2073
  <div class="vnr-month-nav">
1374
- <button class="vnr-nav-btn" id="vnr-prev" ${y?"disabled":""}>
2074
+ <button class="vnr-nav-btn" id="vnr-prev" ${f ? "disabled" : ""}>
1375
2075
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="15 18 9 12 15 6"/></svg>
1376
2076
  </button>
1377
- <span class="vnr-month-label">${b}</span>
2077
+ <span class="vnr-month-label">${v}</span>
1378
2078
  <button class="vnr-nav-btn" id="vnr-next">
1379
2079
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><polyline points="9 18 15 12 9 6"/></svg>
1380
2080
  </button>
1381
2081
  </div>
1382
2082
  <div class="vnr-cal-grid" id="vnr-grid"></div>
1383
- `,c.querySelector("#vnr-prev").addEventListener("click",()=>{this.calViewMonth===0?(this.calViewMonth=11,this.calViewYear--):this.calViewMonth--,f()}),c.querySelector("#vnr-next").addEventListener("click",()=>{this.calViewMonth===11?(this.calViewMonth=0,this.calViewYear++):this.calViewMonth++,f()});const E=c.querySelector("#vnr-grid");["Su","Mo","Tu","We","Th","Fr","Sa"].forEach(S=>{const I=document.createElement("div");I.className="vnr-wd",I.textContent=S,E.appendChild(I)});for(let S=0;S<C;S++){const I=document.createElement("div");E.appendChild(I)}for(let S=1;S<=w;S++){const I=new Date(this.calViewYear,this.calViewMonth,S).getTime(),j=I<m.getTime(),q=I===m.getTime(),D=this.calSelectedTs===I,P=document.createElement("div");P.style.textAlign="center";const R=document.createElement("button");R.className="vnr-day-btn",j&&R.classList.add("vnr-day-past"),q&&!D&&R.classList.add("vnr-day-today"),D&&R.classList.add("vnr-day-sel"),R.disabled=j,R.textContent=String(S),R.addEventListener("click",()=>{this.calSelectedTs=I,this.calSelectedTime=null,A.disabled=!0,f(),this.loadSlots(e,g,A)}),P.appendChild(R),E.appendChild(P)}};f()}loadSlots(e,t,i){const n=e.clientFields.slots_api_url;if(!this.calSelectedTs||!n){this.renderSlots(t,["09:00 AM","10:30 AM","01:00 PM","02:30 PM","04:00 PM"],i);return}const a=new Date(this.calSelectedTs).toISOString().split("T")[0],u=e.clientFields.timezone||"",p=new Date(this.calSelectedTs);p.setUTCHours(0,0,0,0);const c=new Date(this.calSelectedTs);c.setUTCHours(23,59,59,999);const g=w=>typeof w!="string"?w:w.replace(/\{\{date\}\}/g,a).replace(/\{\{timezone\}\}/g,u).replace(/\{\{start_of_day\}\}/g,p.toISOString()).replace(/\{\{end_of_day\}\}/g,c.toISOString()),o=(e.clientFields.slots_api_method||"GET").toUpperCase();let A={"Content-Type":"application/json"};try{Object.entries(JSON.parse(e.clientFields.slots_api_headers||"{}")).forEach(([w,b])=>{A[w]=g(String(b))})}catch{}let f={};try{Object.entries(JSON.parse(e.clientFields.slots_api_body||"{}")).forEach(([w,b])=>{f[w]=g(String(b))})}catch{}let m=g(n);const C={method:o,headers:A};if(o==="GET"){const w=new URLSearchParams(Object.entries(f).map(([b,y])=>[b,String(y)])).toString();w&&(m+=(m.includes("?")?"&":"?")+w)}else C.body=JSON.stringify(f);t.style.display="block",t.innerHTML='<div class="vnr-divider"></div><div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Loading slotsâ€Ļ</div>',fetch(m,C).then(w=>{if(!w.ok)throw new Error(`HTTP ${w.status}`);return w.json()}).then(w=>{let b=[];if(Array.isArray(w))b=w;else if(w&&typeof w=="object"){for(const y of["slots","free_slots","times","data","available_slots"])if(Array.isArray(w[y])){b=w[y];break}}this.renderSlots(t,b,i)}).catch(()=>{t.innerHTML='<div class="vnr-divider"></div><div class="vnr-center" style="color:#ef4444">Failed to load slots. Please try again.</div>'})}renderSlots(e,t,i){const n=this.calSelectedTs?new Date(this.calSelectedTs).toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"}):"Available Times",s=t.some(u=>Qe(u).length>8)?2:3;if(e.style.display="block",e.innerHTML=`
2083
+ `, r.querySelector("#vnr-prev").addEventListener("click", () => {
2084
+ this.calViewMonth === 0 ? (this.calViewMonth = 11, this.calViewYear--) : this.calViewMonth--, m();
2085
+ }), r.querySelector("#vnr-next").addEventListener("click", () => {
2086
+ this.calViewMonth === 11 ? (this.calViewMonth = 0, this.calViewYear++) : this.calViewMonth++, m();
2087
+ });
2088
+ const x = r.querySelector("#vnr-grid");
2089
+ ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].forEach((y) => {
2090
+ const w = document.createElement("div");
2091
+ w.className = "vnr-wd", w.textContent = y, x.appendChild(w);
2092
+ });
2093
+ for (let y = 0; y < b; y++) {
2094
+ const w = document.createElement("div");
2095
+ x.appendChild(w);
2096
+ }
2097
+ for (let y = 1; y <= u; y++) {
2098
+ const w = new Date(this.calViewYear, this.calViewMonth, y).getTime(), C = w < g.getTime(), Q = w === g.getTime(), M = this.calSelectedTs === w, k = document.createElement("div");
2099
+ k.style.textAlign = "center";
2100
+ const E = document.createElement("button");
2101
+ E.className = "vnr-day-btn", C && E.classList.add("vnr-day-past"), Q && !M && E.classList.add("vnr-day-today"), M && E.classList.add("vnr-day-sel"), E.disabled = C, E.textContent = String(y), E.addEventListener("click", () => {
2102
+ this.calSelectedTs = w, this.calSelectedTime = null, c.disabled = !0, m(), this.loadSlots(t, h, c);
2103
+ }), k.appendChild(E), x.appendChild(k);
2104
+ }
2105
+ };
2106
+ m();
2107
+ }
2108
+ loadSlots(t, e, i) {
2109
+ const s = t.clientFields.slots_api_url;
2110
+ if (!this.calSelectedTs || !s) {
2111
+ this.renderSlots(e, ["09:00 AM", "10:30 AM", "01:00 PM", "02:30 PM", "04:00 PM"], i);
2112
+ return;
2113
+ }
2114
+ const o = new Date(this.calSelectedTs).toISOString().split("T")[0], d = t.clientFields.timezone || "", A = new Date(this.calSelectedTs);
2115
+ A.setUTCHours(0, 0, 0, 0);
2116
+ const r = new Date(this.calSelectedTs);
2117
+ r.setUTCHours(23, 59, 59, 999);
2118
+ const h = (u) => {
2119
+ if (typeof u != "string") return u;
2120
+ let v = u.replace(/\{\{date\}\}/g, o).replace(/\{\{timezone\}\}/g, d).replace(/\{\{start_of_day\}\}/g, A.toISOString()).replace(/\{\{end_of_day\}\}/g, r.toISOString());
2121
+ return Object.entries(t.clientFields).forEach(([f, x]) => {
2122
+ if (x != null) {
2123
+ const y = f.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), w = new RegExp(`\\{\\{${y}\\}\\}`, "g");
2124
+ v = v.replace(w, String(x));
2125
+ }
2126
+ }), v;
2127
+ }, l = (t.clientFields.slots_api_method || "GET").toUpperCase();
2128
+ let c = { "Content-Type": "application/json" };
2129
+ try {
2130
+ Object.entries(JSON.parse(t.clientFields.slots_api_headers || "{}")).forEach(([u, v]) => {
2131
+ c[u] = h(String(v));
2132
+ });
2133
+ } catch {
2134
+ }
2135
+ let m = {};
2136
+ try {
2137
+ Object.entries(JSON.parse(t.clientFields.slots_api_body || "{}")).forEach(([u, v]) => {
2138
+ m[u] = h(String(v));
2139
+ });
2140
+ } catch {
2141
+ }
2142
+ let g = h(s);
2143
+ const b = { method: l, headers: c };
2144
+ if (l === "GET") {
2145
+ const u = new URLSearchParams(Object.entries(m).map(([v, f]) => [v, String(f)])).toString();
2146
+ u && (g += (g.includes("?") ? "&" : "?") + u);
2147
+ } else
2148
+ b.body = JSON.stringify(m);
2149
+ e.style.display = "block", e.innerHTML = '<div class="vnr-divider"></div><div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Loading slotsâ€Ļ</div>', fetch(g, b).then((u) => {
2150
+ if (!u.ok) throw new Error(`HTTP ${u.status}`);
2151
+ return u.json();
2152
+ }).then((u) => {
2153
+ let v = [];
2154
+ if (Array.isArray(u)) v = u;
2155
+ else if (u && typeof u == "object") {
2156
+ for (const f of ["slots", "free_slots", "times", "data", "available_slots"])
2157
+ if (Array.isArray(u[f])) {
2158
+ v = u[f];
2159
+ break;
2160
+ }
2161
+ }
2162
+ this.renderSlots(e, v, i);
2163
+ }).catch(() => {
2164
+ e.innerHTML = '<div class="vnr-divider"></div><div class="vnr-center" style="color:#ef4444">Failed to load slots. Please try again.</div>';
2165
+ });
2166
+ }
2167
+ renderSlots(t, e, i) {
2168
+ const s = this.calSelectedTs ? new Date(this.calSelectedTs).toLocaleDateString("en-US", { weekday: "long", month: "short", day: "numeric" }) : "Available Times", n = e.some((d) => S(d).length > 8) ? 2 : 3;
2169
+ if (t.style.display = "block", t.innerHTML = `
1384
2170
  <div class="vnr-divider"></div>
1385
- <div class="vnr-section-label">${n}</div>
1386
- ${t.length===0?'<div class="vnr-center">No slots available for this date.</div>':`<div class="vnr-slots-grid" style="grid-template-columns:repeat(${s},1fr)"></div>`}
1387
- `,t.length===0)return;const a=e.querySelector(".vnr-slots-grid");t.forEach(u=>{const p=document.createElement("button");p.className="vnr-slot-btn",this.calSelectedTime!==null&&(typeof u=="object"&&typeof this.calSelectedTime=="object"?JSON.stringify(u)===JSON.stringify(this.calSelectedTime):u===this.calSelectedTime)&&p.classList.add("vnr-slot-sel"),p.textContent=Qe(u),p.addEventListener("click",()=>{this.calSelectedTime=u,i.disabled=!1,a.querySelectorAll(".vnr-slot-btn").forEach(g=>g.classList.remove("vnr-slot-sel")),p.classList.add("vnr-slot-sel")}),a.appendChild(p)})}renderForm(e,t,i){const n=e.clientFields.title||e.args.title||"Please fill out this form",s=e.args.reason||"Please provide the following information.",a=e.clientFields.fields||e.args.fields,u=Array.isArray(a)?a:typeof a=="string"?a.split(",").map(f=>f.trim()).filter(Boolean):[],p=this.createOverlay(),c=this.createModal(p,n,s);c.querySelector(".vnr-close-btn").addEventListener("click",()=>{this.dismiss(),i("User closed")});const g=document.createElement("div");g.className="vnr-fields",u.forEach(f=>{const m=f.toLowerCase().replace(/[^a-z0-9]/g,"_"),C=m.includes("email"),w=m.includes("phone")||m.includes("number"),b=C?"email":w?"tel":"text",y=document.createElement("div");y.innerHTML=`
1388
- <label class="vnr-field-label" for="vnr_${m}">${f} *</label>
1389
- <input class="vnr-input" type="${b}" id="vnr_${m}" name="${m}" placeholder="Enter your ${f.toLowerCase()}" required />
1390
- `,g.appendChild(y)}),c.appendChild(g);const o=document.createElement("div");o.className="vnr-actions",o.style.marginTop="16px",o.innerHTML=`
2171
+ <div class="vnr-section-label">${s}</div>
2172
+ ${e.length === 0 ? '<div class="vnr-center">No slots available for this date.</div>' : `<div class="vnr-slots-grid" style="grid-template-columns:repeat(${n},1fr)"></div>`}
2173
+ `, e.length === 0) return;
2174
+ const o = t.querySelector(".vnr-slots-grid");
2175
+ e.forEach((d) => {
2176
+ const A = document.createElement("button");
2177
+ A.className = "vnr-slot-btn", this.calSelectedTime !== null && (typeof d == "object" && typeof this.calSelectedTime == "object" ? JSON.stringify(d) === JSON.stringify(this.calSelectedTime) : d === this.calSelectedTime) && A.classList.add("vnr-slot-sel"), A.textContent = S(d), A.addEventListener("click", () => {
2178
+ this.calSelectedTime = d, i.disabled = !1, o.querySelectorAll(".vnr-slot-btn").forEach((h) => h.classList.remove("vnr-slot-sel")), A.classList.add("vnr-slot-sel");
2179
+ }), o.appendChild(A);
2180
+ });
2181
+ }
2182
+ // ─── Form Preset ─────────────────────────────────────────────────────────
2183
+ renderForm(t, e, i) {
2184
+ const s = t.clientFields.title || t.args.title || "Please fill out this form", n = t.args.reason || "Please provide the following information.", o = t.clientFields.fields || t.args.fields, d = Array.isArray(o) ? o : typeof o == "string" ? o.split(",").map((m) => m.trim()).filter(Boolean) : [], A = this.createOverlay(), r = this.createModal(A, s, n);
2185
+ r.querySelector(".vnr-close-btn").addEventListener("click", () => {
2186
+ this.dismiss(), i("User closed");
2187
+ });
2188
+ const h = document.createElement("div");
2189
+ h.className = "vnr-fields", d.forEach((m) => {
2190
+ const g = m.toLowerCase().replace(/[^a-z0-9]/g, "_"), b = g.includes("email"), u = g.includes("phone") || g.includes("number"), v = b ? "email" : u ? "tel" : "text", f = document.createElement("div");
2191
+ f.innerHTML = `
2192
+ <label class="vnr-field-label" for="vnr_${g}">${m} *</label>
2193
+ <input class="vnr-input" type="${v}" id="vnr_${g}" name="${g}" placeholder="Enter your ${m.toLowerCase()}" required />
2194
+ `, h.appendChild(f);
2195
+ }), r.appendChild(h);
2196
+ const l = document.createElement("div");
2197
+ l.className = "vnr-actions", l.style.marginTop = "16px", l.innerHTML = `
1391
2198
  <button class="vnr-cancel-btn">Cancel</button>
1392
2199
  <button class="vnr-confirm-btn">
1393
2200
  <svg width="13" height="13" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>
1394
2201
  Submit
1395
2202
  </button>
1396
- `,c.appendChild(o),o.querySelector(".vnr-cancel-btn").addEventListener("click",()=>{this.dismiss(),i("User cancelled")});const A=o.querySelector(".vnr-confirm-btn");A.addEventListener("click",()=>{const f={};let m=!0;u.forEach(C=>{const w=C.toLowerCase().replace(/[^a-z0-9]/g,"_"),b=c.querySelector(`#vnr_${w}`);if(!(b!=null&&b.value.trim())){m=!1,b==null||b.focus();return}f[w]=b.value.trim()}),m&&(A.disabled=!0,A.innerHTML='<div class="vnr-spinner"></div>',setTimeout(()=>{this.dismiss(),t(f)},300))})}renderCamera(e,t,i,n){const s=e.clientFields.title||"Take a Photo",a=e.clientFields.description||"Point your camera at the subject, then tap capture.",u=e.clientFields.facing_mode||e.args.facing_mode||"environment",p=e.clientFields.reason||"camera_capture";let c=null;const g=this.createOverlay(),o=document.createElement("div");o.className="vnr-modal",o.style.cssText="position:relative;max-width:480px;width:100%",o.innerHTML=`
2203
+ `, r.appendChild(l), l.querySelector(".vnr-cancel-btn").addEventListener("click", () => {
2204
+ this.dismiss(), i("User cancelled");
2205
+ });
2206
+ const c = l.querySelector(".vnr-confirm-btn");
2207
+ c.addEventListener("click", () => {
2208
+ const m = {};
2209
+ let g = !0;
2210
+ d.forEach((b) => {
2211
+ const u = b.toLowerCase().replace(/[^a-z0-9]/g, "_"), v = r.querySelector(`#vnr_${u}`);
2212
+ if (!(v != null && v.value.trim())) {
2213
+ g = !1, v == null || v.focus();
2214
+ return;
2215
+ }
2216
+ m[u] = v.value.trim();
2217
+ }), g && (c.disabled = !0, c.innerHTML = '<div class="vnr-spinner"></div>', setTimeout(() => {
2218
+ this.dismiss(), e(m);
2219
+ }, 300));
2220
+ });
2221
+ }
2222
+ // ─── Camera Preset ────────────────────────────────────────────────────────
2223
+ renderCamera(t, e, i, s) {
2224
+ const n = t.clientFields.title || "Take a Photo", o = t.clientFields.description || "Point your camera at the subject, then tap capture.", d = t.clientFields.facing_mode || t.args.facing_mode || "environment", A = t.clientFields.reason || "camera_capture";
2225
+ let r = null;
2226
+ const h = this.createOverlay(), l = document.createElement("div");
2227
+ l.className = "vnr-modal", l.style.cssText = "position:relative;max-width:480px;width:100%", l.innerHTML = `
1397
2228
  <button class="vnr-close-btn" aria-label="Close">
1398
2229
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
1399
2230
  </button>
1400
- <h2 class="vnr-title" style="padding-right:32px">${s}</h2>
1401
- <p style="margin:0 0 14px;font-size:13px;color:#6b7280;line-height:1.5">${a}</p>
2231
+ <h2 class="vnr-title" style="padding-right:32px">${n}</h2>
2232
+ <p style="margin:0 0 14px;font-size:13px;color:#6b7280;line-height:1.5">${o}</p>
1402
2233
  <div class="vnr-video-wrap" id="vnr-cam-wrap">
1403
2234
  <video id="vnr-cam-video" autoplay playsinline muted></video>
1404
2235
  <div id="vnr-cam-overlay" style="position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#0f172a">
@@ -1415,12 +2246,55 @@ overflow: hidden;
1415
2246
  Capture & Send
1416
2247
  </button>
1417
2248
  </div>
1418
- `,g.appendChild(o);const A=o.querySelector("#vnr-cam-video"),f=o.querySelector("#vnr-cam-canvas"),m=o.querySelector("#vnr-cam-overlay"),C=o.querySelector("#vnr-cam-status"),w=o.querySelector("#vnr-cam-capture"),b=()=>{c==null||c.getTracks().forEach(y=>y.stop()),c=null,A.srcObject=null};o.querySelector(".vnr-close-btn").addEventListener("click",()=>{b(),this.dismiss(),i("User closed")}),o.querySelector("#vnr-cam-cancel").addEventListener("click",()=>{b(),this.dismiss(),i("User cancelled")}),navigator.mediaDevices.getUserMedia({video:{facingMode:{ideal:u}},audio:!1}).then(y=>(c=y,A.srcObject=y,A.play().catch(()=>{}))).then(()=>{m.style.display="none";const y=document.createElement("div");y.className="vnr-live-badge",y.innerHTML='<span class="vnr-live-dot"></span>LIVE',o.querySelector("#vnr-cam-wrap").appendChild(y),w.disabled=!1}).catch(()=>{m.innerHTML='<p style="color:#f87171;font-size:13px;text-align:center;padding:24px">Camera access denied.<br>Please allow camera permissions.</p>'}),w.addEventListener("click",async()=>{if(!c||A.videoWidth===0)return;f.width=A.videoWidth,f.height=A.videoHeight,f.getContext("2d").drawImage(A,0,0),b(),o.querySelector("#vnr-cam-wrap").setAttribute("style","display:none"),w.disabled=!0,C.style.display="block",C.innerHTML='<div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Sending photoâ€Ļ</div>';try{const E=await new Promise(I=>f.toBlob(j=>I(j),"image/jpeg",.85));if(!E)throw new Error("Capture failed");const S=new File([E],`capture-${Date.now()}.jpg`,{type:"image/jpeg"});if(n&&typeof n.uploadMedia=="function"){const{media_id:I,url:j}=await n.uploadMedia(S,p,"User captured a photo via camera");C.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ Photo sent!</div>',setTimeout(()=>{this.dismiss(),t({file_name:S.name,file_type:S.type,file_size:S.size,media_id:I,url:j,message:"User captured and sent a photo."})},400)}else{const I=f.toDataURL("image/jpeg",.85);C.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ Photo ready!</div>',setTimeout(()=>{this.dismiss(),t({file_name:S.name,data_url:I,message:"User captured a photo."})},400)}}catch(E){C.innerHTML=`<div class="vnr-center" style="color:#ef4444">${(E==null?void 0:E.message)||"Capture failed"}</div>`}})}renderUpload(e,t,i,n){const s=e.clientFields.title||"Upload a File",a=e.clientFields.description||"Drop or select a file to send to your agent.",u=e.clientFields.reason||"upload",p=e.clientFields.accept||"image/*,application/pdf,text/plain,text/csv";let c=null;const g=this.createOverlay(),o=document.createElement("div");o.className="vnr-modal",o.style.cssText="position:relative;max-width:480px;width:100%",o.innerHTML=`
2249
+ `, h.appendChild(l);
2250
+ const c = l.querySelector("#vnr-cam-video"), m = l.querySelector("#vnr-cam-canvas"), g = l.querySelector("#vnr-cam-overlay"), b = l.querySelector("#vnr-cam-status"), u = l.querySelector("#vnr-cam-capture"), v = () => {
2251
+ r == null || r.getTracks().forEach((f) => f.stop()), r = null, c.srcObject = null;
2252
+ };
2253
+ l.querySelector(".vnr-close-btn").addEventListener("click", () => {
2254
+ v(), this.dismiss(), i("User closed");
2255
+ }), l.querySelector("#vnr-cam-cancel").addEventListener("click", () => {
2256
+ v(), this.dismiss(), i("User cancelled");
2257
+ }), navigator.mediaDevices.getUserMedia({ video: { facingMode: { ideal: d } }, audio: !1 }).then((f) => (r = f, c.srcObject = f, c.play().catch(() => {
2258
+ }))).then(() => {
2259
+ g.style.display = "none";
2260
+ const f = document.createElement("div");
2261
+ f.className = "vnr-live-badge", f.innerHTML = '<span class="vnr-live-dot"></span>LIVE', l.querySelector("#vnr-cam-wrap").appendChild(f), u.disabled = !1;
2262
+ }).catch(() => {
2263
+ g.innerHTML = '<p style="color:#f87171;font-size:13px;text-align:center;padding:24px">Camera access denied.<br>Please allow camera permissions.</p>';
2264
+ }), u.addEventListener("click", async () => {
2265
+ if (!r || c.videoWidth === 0) return;
2266
+ m.width = c.videoWidth, m.height = c.videoHeight, m.getContext("2d").drawImage(c, 0, 0), v(), l.querySelector("#vnr-cam-wrap").setAttribute("style", "display:none"), u.disabled = !0, b.style.display = "block", b.innerHTML = '<div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Sending photoâ€Ļ</div>';
2267
+ try {
2268
+ const x = await new Promise((w) => m.toBlob((C) => w(C), "image/jpeg", 0.85));
2269
+ if (!x) throw new Error("Capture failed");
2270
+ const y = new File([x], `capture-${Date.now()}.jpg`, { type: "image/jpeg" });
2271
+ if (s && typeof s.uploadMedia == "function") {
2272
+ const { media_id: w, url: C } = await s.uploadMedia(y, A, "User captured a photo via camera");
2273
+ b.innerHTML = '<div class="vnr-center" style="color:#22c55e">✓ Photo sent!</div>', setTimeout(() => {
2274
+ this.dismiss(), e({ file_name: y.name, file_type: y.type, file_size: y.size, media_id: w, url: C, message: "User captured and sent a photo." });
2275
+ }, 400);
2276
+ } else {
2277
+ const w = m.toDataURL("image/jpeg", 0.85);
2278
+ b.innerHTML = '<div class="vnr-center" style="color:#22c55e">✓ Photo ready!</div>', setTimeout(() => {
2279
+ this.dismiss(), e({ file_name: y.name, data_url: w, message: "User captured a photo." });
2280
+ }, 400);
2281
+ }
2282
+ } catch (x) {
2283
+ b.innerHTML = `<div class="vnr-center" style="color:#ef4444">${(x == null ? void 0 : x.message) || "Capture failed"}</div>`;
2284
+ }
2285
+ });
2286
+ }
2287
+ // ─── Upload Preset ────────────────────────────────────────────────────────
2288
+ renderUpload(t, e, i, s) {
2289
+ const n = t.clientFields.title || "Upload a File", o = t.clientFields.description || "Drop or select a file to send to your agent.", d = t.clientFields.reason || "upload", A = t.clientFields.accept || "image/*,application/pdf,text/plain,text/csv";
2290
+ let r = null;
2291
+ const h = this.createOverlay(), l = document.createElement("div");
2292
+ l.className = "vnr-modal", l.style.cssText = "position:relative;max-width:480px;width:100%", l.innerHTML = `
1419
2293
  <button class="vnr-close-btn" aria-label="Close">
1420
2294
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
1421
2295
  </button>
1422
- <h2 class="vnr-title" style="padding-right:32px">${s}</h2>
1423
- <p style="margin:0 0 14px;font-size:13px;color:#6b7280;line-height:1.5">${a}</p>
2296
+ <h2 class="vnr-title" style="padding-right:32px">${n}</h2>
2297
+ <p style="margin:0 0 14px;font-size:13px;color:#6b7280;line-height:1.5">${o}</p>
1424
2298
  <div class="vnr-dropzone" id="vnr-drop-zone">
1425
2299
  <div style="font-size:32px;margin-bottom:8px">📁</div>
1426
2300
  <p style="margin:0 0 4px;font-weight:600;color:#374151;font-size:14px">Drag & drop here</p>
@@ -1428,7 +2302,7 @@ overflow: hidden;
1428
2302
  <span style="display:inline-block;padding:7px 16px;background:#111;color:#fff;border-radius:9px;font-size:13px;font-weight:600">Choose File</span>
1429
2303
  <p style="margin:12px 0 0;font-size:11px;color:#9ca3af">Images, PDF, CSV, Docs ¡ Max 10 MB</p>
1430
2304
  </div>
1431
- <input id="vnr-file-input" type="file" accept="${p}" style="display:none">
2305
+ <input id="vnr-file-input" type="file" accept="${A}" style="display:none">
1432
2306
  <div id="vnr-file-preview" style="display:none;border:1px solid #e5e7eb;border-radius:12px;padding:14px;background:#f9fafb"></div>
1433
2307
  <div id="vnr-upload-status" style="display:none"></div>
1434
2308
  <div class="vnr-actions" style="margin-top:14px">
@@ -1438,27 +2312,436 @@ overflow: hidden;
1438
2312
  Upload & Send
1439
2313
  </button>
1440
2314
  </div>
1441
- `,g.appendChild(o);const A=o.querySelector("#vnr-drop-zone"),f=o.querySelector("#vnr-file-input"),m=o.querySelector("#vnr-file-preview"),C=o.querySelector("#vnr-upload-status"),w=o.querySelector("#vnr-up-submit");o.querySelector(".vnr-close-btn").addEventListener("click",()=>{this.dismiss(),i("User closed")}),o.querySelector("#vnr-up-cancel").addEventListener("click",()=>{this.dismiss(),i("User cancelled")});const b=y=>{c=y,A.style.display="none";const E=y.type.startsWith("image/")?"đŸ–ŧī¸":y.type.includes("pdf")?"📄":"📁",S=(y.size/1024).toFixed(1);m.style.display="block",m.innerHTML=`
2315
+ `, h.appendChild(l);
2316
+ const c = l.querySelector("#vnr-drop-zone"), m = l.querySelector("#vnr-file-input"), g = l.querySelector("#vnr-file-preview"), b = l.querySelector("#vnr-upload-status"), u = l.querySelector("#vnr-up-submit");
2317
+ l.querySelector(".vnr-close-btn").addEventListener("click", () => {
2318
+ this.dismiss(), i("User closed");
2319
+ }), l.querySelector("#vnr-up-cancel").addEventListener("click", () => {
2320
+ this.dismiss(), i("User cancelled");
2321
+ });
2322
+ const v = (f) => {
2323
+ r = f, c.style.display = "none";
2324
+ const x = f.type.startsWith("image/") ? "đŸ–ŧī¸" : f.type.includes("pdf") ? "📄" : "📁", y = (f.size / 1024).toFixed(1);
2325
+ g.style.display = "block", g.innerHTML = `
1442
2326
  <div style="display:flex;align-items:center;gap:10px">
1443
- <span style="font-size:28px">${E}</span>
2327
+ <span style="font-size:28px">${x}</span>
1444
2328
  <div style="flex:1;min-width:0">
1445
- <p style="margin:0;font-weight:600;font-size:13px;color:#111;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${y.name}</p>
1446
- <p style="margin:3px 0 0;font-size:11px;color:#6b7280">${y.type||"unknown"} ¡ ${S} KB</p>
2329
+ <p style="margin:0;font-weight:600;font-size:13px;color:#111;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${f.name}</p>
2330
+ <p style="margin:3px 0 0;font-size:11px;color:#6b7280">${f.type || "unknown"} ¡ ${y} KB</p>
1447
2331
  </div>
1448
2332
  <button id="vnr-remove-file" style="width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #e5e7eb;border-radius:8px;cursor:pointer;color:#6b7280;flex-shrink:0">
1449
2333
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
1450
2334
  </button>
1451
2335
  </div>
1452
- `,m.querySelector("#vnr-remove-file").addEventListener("click",()=>{c=null,m.style.display="none",A.style.display="block",w.disabled=!0}),w.disabled=!1};A.addEventListener("click",()=>f.click()),A.addEventListener("dragover",y=>{y.preventDefault(),A.classList.add("drag")}),A.addEventListener("dragleave",()=>A.classList.remove("drag")),A.addEventListener("drop",y=>{var S;y.preventDefault(),A.classList.remove("drag");const E=(S=y.dataTransfer)==null?void 0:S.files[0];E&&b(E)}),f.addEventListener("change",()=>{var E;const y=(E=f.files)==null?void 0:E[0];y&&b(y)}),w.addEventListener("click",async()=>{if(!c)return;const y=c;A.style.display="none",m.style.display="none",C.style.display="block",C.innerHTML='<div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Uploadingâ€Ļ</div>',w.disabled=!0;try{if(n&&typeof n.uploadMedia=="function"){const{media_id:E,url:S}=await n.uploadMedia(y,u,`User uploaded: ${y.name}`);C.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ File sent!</div>',setTimeout(()=>{this.dismiss(),t({file_name:y.name,file_type:y.type,file_size:y.size,media_id:E,url:S,message:`User uploaded: ${y.name}`})},400)}else{const E=new FileReader;E.onload=S=>{C.innerHTML='<div class="vnr-center" style="color:#22c55e">✓ File ready!</div>',setTimeout(()=>{this.dismiss(),t({file_name:y.name,file_type:y.type,file_size:y.size,data_url:S.target.result,message:`User uploaded: ${y.name}`})},400)},E.readAsDataURL(y)}}catch(E){C.innerHTML=`<div class="vnr-center" style="color:#ef4444">${(E==null?void 0:E.message)||"Upload failed. Please try again."}</div>`,w.disabled=!1}})}renderNavigate(e,t,i){var a,u;const n=String(((a=e.clientFields)==null?void 0:a.target_url)||((u=e.args)==null?void 0:u.target_url)||"/");if(console.log(`🚀 [WidgetPresetRenderer] Navigating to: ${n}`),n.startsWith("http://")||n.startsWith("https://"))window.open(n,"_blank","noopener,noreferrer");else{const p=window.location.href;window.dispatchEvent(new CustomEvent("vanira:navigate",{detail:{url:n}})),setTimeout(()=>{window.location.href===p&&(window.location.href=n)},150)}t({navigated_to:n,status:"success"})}}const ue=class ue extends It{constructor(t){super(t);h(this,"vaniraClient",null);h(this,"currentView",null);h(this,"presetRenderer",null);h(this,"isPanelOpen",!1);h(this,"callActive",!1);h(this,"eventSource",null);h(this,"floatingButton",null);h(this,"floatingWelcomeChips",null);h(this,"panel",null);h(this,"welcomeChipsData",[]);h(this,"chatAdapter");h(this,"sessionManager",null);h(this,"sessionActive",!1);h(this,"widgetMode","voice_only");h(this,"agentId","");h(this,"prospectGroupId","");h(this,"chatServerUrl","");h(this,"prospectId","");h(this,"chatId",null);h(this,"conversationId",null);h(this,"widgetId","");h(this,"pkKey","");h(this,"chatInitialized",!1);h(this,"primaryColor","#000000");h(this,"secondaryColor","#111111");h(this,"gradient",null);h(this,"positionType","fixed");h(this,"position","bottom-right");h(this,"widgetIcon",null);h(this,"iconConfig",null);h(this,"chatWelcomeMessage",null);this.chatAdapter=new Pt,this.processConfig(t)}initSessionManager(){const t=this.widgetId||this.agentId||"default";this.sessionManager=new Ce(t),this.sessionManager.on("tab_took_over",()=>{console.warn("[VaniraAI] Session taken over by another tab."),this.sessionActive=!1,this.showTabConflictBanner("taken_over")}),this.sessionManager.on("session_cleared",()=>{console.log("[VaniraAI] Session cleared externally.")});const i=this.sessionManager.claimSession();return this.sessionActive=i,i}restoreSessionMessages(){var p,c,g;const t=(p=this.sessionManager)==null?void 0:p.getSession();if(!t)return;const i=(g=(c=this.currentView)==null?void 0:c.getChatWindow)==null?void 0:g.call(c);if(!i)return;const n=t.messages.filter(o=>o.content.trim()!==""),s=`vanira_calls_${this.widgetId||this.agentId}`,a=JSON.parse(localStorage.getItem(s)||"[]");if(n.length===0&&a.length===0)return;i.clearMessages();const u=[...n.map((o,A)=>({type:"msg",role:o.role,content:o.content,ts:o.timestamp??A})),...a.map(o=>({type:"call",durationMs:o.durationMs,startedAt:o.startedAt,ts:o.startedAt}))];u.sort((o,A)=>o.ts-A.ts),u.forEach(o=>{o.type==="msg"?i.addMessage(o.role,o.content,o.ts):i.addCallRecord(o.durationMs,o.startedAt)}),console.log(`[VaniraAI] Restored ${n.length} messages + ${a.length} call records from session.`)}showTabConflictBanner(t){var i,n;this.root&&((i=this.root.querySelector(".vanira-tab-conflict-banner"))==null||i.remove(),t==="conflict"&&((n=this.sessionManager)==null||n.forceClaimSession(),this.sessionActive=!0,this.widgetMode.includes("chat")&&this.initializeChatSession(!1)))}playMessageSound(t){try{if(!ue.audioContext){const u=window.AudioContext||window.webkitAudioContext;if(!u)return;ue.audioContext=new u}const i=ue.audioContext;i.state==="suspended"&&i.resume().catch(()=>{});const n=i.createOscillator(),s=i.createGain();n.connect(s),s.connect(i.destination);const a=i.currentTime;t==="send"?(n.type="sine",n.frequency.setValueAtTime(300,a),n.frequency.exponentialRampToValueAtTime(500,a+.05),s.gain.setValueAtTime(0,a),s.gain.linearRampToValueAtTime(.1,a+.01),s.gain.exponentialRampToValueAtTime(.001,a+.1),n.start(a),n.stop(a+.1)):(n.type="sine",n.frequency.setValueAtTime(500,a),n.frequency.exponentialRampToValueAtTime(800,a+.1),s.gain.setValueAtTime(0,a),s.gain.linearRampToValueAtTime(.15,a+.02),s.gain.exponentialRampToValueAtTime(.001,a+.2),n.start(a),n.stop(a+.2))}catch(i){console.warn("[VaniraAI] Audio feedback failed",i)}}handleWelcomePayload(t,i="assistant"){var a,u,p,c,g,o,A,f;if(!t||this.widgetMode==="voice_only")return;t.buttons&&Array.isArray(t.buttons)?this.welcomeChipsData=t.buttons:((a=t.widget)==null?void 0:a.type)==="button_list"&&((u=t.widget.data)!=null&&u.buttons)&&(this.welcomeChipsData=t.widget.data.buttons),this.updateWelcomeChipsVisibility();const n=(c=(p=this.currentView)==null?void 0:p.getChatWindow)==null?void 0:c.call(p);let s=t.text||t.response||t.content||t.message||"";if(!s&&!this.welcomeChipsData.length&&(s="Hey! how can I help you ?"),!s&&typeof t=="string"&&t.trim().startsWith("{"))try{const m=JSON.parse(t);s=m.text||m.response||m.content||m.message||"",((g=m.widget)==null?void 0:g.type)==="button_list"&&((o=m.widget.data)!=null&&o.buttons)&&(this.welcomeChipsData=m.widget.data.buttons)}catch{}if(console.log("[VaniraAI] Processing Welcome Payload:",{hasText:!!s,chipsCount:this.welcomeChipsData.length,hasChatWindow:!!n,mode:this.widgetMode}),n){if(!s&&this.welcomeChipsData.length===0)return;const m=(A=this.sessionManager)==null?void 0:A.getSession();(m==null?void 0:m.messages.some(w=>w.content===s&&w.role===i))||(s&&(n.addMessage(i,s),(f=this.sessionManager)==null||f.pushMessage(i,s)),this.welcomeChipsData.length>0&&n.addButtons(this.welcomeChipsData))}}async initializeChatSession(t=!1){var i,n,s,a,u,p;if(this.sessionActive&&!this.chatInitialized){this.chatInitialized=!0;try{se.setChatUrl(this.chatServerUrl);const c=(i=this.sessionManager)==null?void 0:i.getSession();if(!t&&(c!=null&&c.prospectId)){this.prospectId=c.prospectId,this.chatId=c.chatId,this.conversationId=c.conversationId||null,console.log(`[VaniraAI] Session restored — tab: ${(n=this.sessionManager)==null?void 0:n.getTabId()}, prospect: ${this.prospectId}`),this.restoreSessionMessages(),this.chatId&&!this.eventSource&&(this.eventSource=se.listenForAdminReplies(this.chatId,this.prospectId,o=>{var A,f,m;(f=(A=this.currentView)==null?void 0:A.getChatWindow)==null||f.call(A).addMessage("assistant",o),(m=this.sessionManager)==null||m.pushMessage("assistant",o),this.playMessageSound("receive")}));return}this.prospectId||(this.prospectGroupId?this.prospectId=await se.createChatProspect(this.prospectGroupId):this.prospectId=`anon_${Date.now()}_${Math.random().toString(36).substr(2,9)}`);const g=await se.fetchWelcomeMessage(this.agentId,this.prospectId,this.widgetId||void 0,this.pkKey||void 0);g&&(this.handleWelcomePayload(g),g.chatId&&!this.chatId&&(this.chatId=g.chatId,this.eventSource||(this.eventSource=se.listenForAdminReplies(this.chatId,this.prospectId,o=>{var A,f,m;(f=(A=this.currentView)==null?void 0:A.getChatWindow)==null||f.call(A).addMessage("assistant",o),(m=this.sessionManager)==null||m.pushMessage("assistant",o),this.playMessageSound("receive")}))),g.conversationId&&(this.conversationId=g.conversationId)),(s=this.sessionManager)==null||s.saveIds(this.prospectId,this.chatId,this.conversationId)}catch(c){console.error("[VaniraAI] Chat init failed",c);const g="Hey! how can I help you ?";(u=(a=this.currentView)==null?void 0:a.getChatWindow)==null||u.call(a).addMessage("assistant",g),(p=this.sessionManager)==null||p.pushMessage("assistant",g)}}}async initialize(t){await super.initialize(t),this.processConfig(t),this.root&&this.ui_renderer(this.root)}processConfig(t){var i,n;if(this.widgetId=t.widgetId||t.widget_id||this.widgetId||"",this.agentId=t.agentId||t.agent_id||this.agentId||"",this.prospectGroupId=t.prospectGroupId||((i=t.client)==null?void 0:i.base_prospect_group_id)||this.prospectGroupId||"",this.widgetMode=t.widgetMode||t.mode||this.widgetMode||"voice_only",this.pkKey=t.pkKey||t.pk_key||t.publicKey||t.public_key||this.pkKey||"",this.primaryColor=t.primaryColor||t.primary_color||"#000000",this.secondaryColor=t.secondaryColor||t.secondary_color||"#111111",this.gradient=t.gradient||null,this.position=t.position||"bottom-right",this.positionType=t.positionType||"fixed",this.widgetIcon=t.widgetIcon||t.icon||null,this.iconConfig=t.iconConfig||t.icon_config||null,this.chatWelcomeMessage=t.chatWelcomeMessage||t.chat_welcome_message||((n=t.agent)==null?void 0:n.chat_welcome_message)||null,console.log("[VaniraAI] processConfig:",{hasPrimary:!!this.primaryColor,hasSecondary:!!this.secondaryColor,hasWelcome:!!this.chatWelcomeMessage}),typeof this.chatWelcomeMessage=="string")try{this.chatWelcomeMessage=JSON.parse(this.chatWelcomeMessage)}catch(s){console.warn("[VaniraAI] Failed to parse chatWelcomeMessage string",s)}this.chatServerUrl=t.serverUrl||t.chatServerUrl||"https://inboxapi.travelr.club",this.updateWelcomeChipsVisibility()}async create_call(t="continue"){var i,n,s;if(!(this.callActive||!this.agentId)){this.sessionActive||((i=this.sessionManager)==null||i.forceClaimSession(),this.sessionActive=!0);try{this.callActive=!0,this.updateViewCallState(!0),this.updateViewStatus("connecting");const a=((n=this.config)==null?void 0:n.serverUrl)||((s=this.config)==null?void 0:s.chatServerUrl),u=a&&!a.includes("travelr.club")?a:"https://api.vanira.io",p=new Ge({agentId:this.agentId,apiKey:this.pkKey||void 0,sessionBehavior:t,prospectId:this.prospectId||void 0,backendUrl:u});p.on("session_started",({prospectId:c})=>{var g;c&&(this.prospectId=c,(g=this.sessionManager)==null||g.saveIds(c,this.chatId))}),p.on("connected",()=>this.updateViewStatus("connected")).on("disconnected",()=>this.end_call()).on("error",c=>{console.error("[VaniraAI Widget] Call error:",c),this.updateViewStatus("error",c)}).on("transcription",({text:c,isFinal:g})=>{var o,A;(A=(o=this.currentView)==null?void 0:o.setTranscription)==null||A.call(o,c,g)}).on("track",({track:c})=>{var g;this.widgetMode.includes("avatar")&&c.kind==="video"&&((g=this.currentView)!=null&&g.setVideoTrack)&&this.currentView.setVideoTrack(c)}).on("tool_call",c=>{var A,f,m;if(console.log("[VaniraAI Widget] Tool call received:",c.name,c.arguments),(A=this.presetRenderer)==null?void 0:A.handle(c,C=>{var b;const w=((b=c.client_fields)==null?void 0:b.action_name)||`user_submitted_${c.name}`;p.triggerInterrupt(w,C)},C=>{const w=c.tool_call_id;try{p.sendToolResult(w,{status:"cancelled",reason:"User dismissed"})}catch{}},p))return;const o=new CustomEvent("vaniraai:tool_call",{detail:c,bubbles:!0,composed:!0});(m=(f=this.root)==null?void 0:f.host)==null||m.dispatchEvent(o)}),this.vaniraClient=p,await p.start()}catch(a){console.error("[VaniraAI Widget] Call failed",a),this.updateViewStatus("error",(a==null?void 0:a.message)||String(a))}}}end_call(){var i;this.callActive=!1;const t=this.vaniraClient;this.vaniraClient=null,t&&t.stop(),(i=this.presetRenderer)==null||i.dismiss(),this.updateViewCallState(!1)}updateViewCallState(t){var i;(i=this.currentView)!=null&&i.setCallActive&&this.currentView.setCallActive(t)}updateViewStatus(t,i){var n;(n=this.currentView)!=null&&n.setStatus&&this.currentView.setStatus(t,i)}ui_renderer(t){var c,g,o;this.root=t,this.root.innerHTML="",this.presetRenderer=new zt(t),this.root.host&&(this.positionType==="fixed"?this.root.host.classList.add("vanira-portal"):this.root.host.classList.remove("vanira-portal"));const i=document.createElement("style");i.textContent=`@keyframes vanira-slide-up {
2336
+ `, g.querySelector("#vnr-remove-file").addEventListener("click", () => {
2337
+ r = null, g.style.display = "none", c.style.display = "block", u.disabled = !0;
2338
+ }), u.disabled = !1;
2339
+ };
2340
+ c.addEventListener("click", () => m.click()), c.addEventListener("dragover", (f) => {
2341
+ f.preventDefault(), c.classList.add("drag");
2342
+ }), c.addEventListener("dragleave", () => c.classList.remove("drag")), c.addEventListener("drop", (f) => {
2343
+ var y;
2344
+ f.preventDefault(), c.classList.remove("drag");
2345
+ const x = (y = f.dataTransfer) == null ? void 0 : y.files[0];
2346
+ x && v(x);
2347
+ }), m.addEventListener("change", () => {
2348
+ var x;
2349
+ const f = (x = m.files) == null ? void 0 : x[0];
2350
+ f && v(f);
2351
+ }), u.addEventListener("click", async () => {
2352
+ if (!r) return;
2353
+ const f = r;
2354
+ c.style.display = "none", g.style.display = "none", b.style.display = "block", b.innerHTML = '<div class="vnr-center"><div class="vnr-spinner" style="margin:0 auto 8px"></div>Uploadingâ€Ļ</div>', u.disabled = !0;
2355
+ try {
2356
+ if (s && typeof s.uploadMedia == "function") {
2357
+ const { media_id: x, url: y } = await s.uploadMedia(f, d, `User uploaded: ${f.name}`);
2358
+ b.innerHTML = '<div class="vnr-center" style="color:#22c55e">✓ File sent!</div>', setTimeout(() => {
2359
+ this.dismiss(), e({ file_name: f.name, file_type: f.type, file_size: f.size, media_id: x, url: y, message: `User uploaded: ${f.name}` });
2360
+ }, 400);
2361
+ } else {
2362
+ const x = new FileReader();
2363
+ x.onload = (y) => {
2364
+ b.innerHTML = '<div class="vnr-center" style="color:#22c55e">✓ File ready!</div>', setTimeout(() => {
2365
+ this.dismiss(), e({ file_name: f.name, file_type: f.type, file_size: f.size, data_url: y.target.result, message: `User uploaded: ${f.name}` });
2366
+ }, 400);
2367
+ }, x.readAsDataURL(f);
2368
+ }
2369
+ } catch (x) {
2370
+ b.innerHTML = `<div class="vnr-center" style="color:#ef4444">${(x == null ? void 0 : x.message) || "Upload failed. Please try again."}</div>`, u.disabled = !1;
2371
+ }
2372
+ });
2373
+ }
2374
+ // ─── Navigate Preset ──────────────────────────────────────────────────────
2375
+ renderNavigate(t, e, i) {
2376
+ var o, d;
2377
+ const s = String(
2378
+ ((o = t.clientFields) == null ? void 0 : o.target_url) || ((d = t.args) == null ? void 0 : d.target_url) || "/"
2379
+ );
2380
+ if (console.log(`🚀 [WidgetPresetRenderer] Navigating to: ${s}`), s.startsWith("http://") || s.startsWith("https://"))
2381
+ window.open(s, "_blank", "noopener,noreferrer");
2382
+ else {
2383
+ const A = window.location.href;
2384
+ window.dispatchEvent(new CustomEvent("vanira:navigate", { detail: { url: s } })), setTimeout(() => {
2385
+ window.location.href === A && (window.location.href = s);
2386
+ }, 150);
2387
+ }
2388
+ e({ navigated_to: s, status: "success" });
2389
+ }
2390
+ // ─── Highlight Element Preset ──────────────────────────────────────────────
2391
+ renderHighlight(t, e, i) {
2392
+ const s = t.args || {}, n = t.clientFields || {}, o = String(s.css_selector || n.css_selector || s.selector || n.selector || ""), d = String(s.highlight_color || n.highlight_color || "#a855f7"), A = Number(s.duration_ms || n.duration_ms || 3e3);
2393
+ if (console.log("đŸ”Ļ [WidgetPresetRenderer] renderHighlight triggered"), console.log(` → selector: "${o}"`), console.log(` → color: "${d}"`), console.log(` → duration: ${A}ms`), !o) {
2394
+ console.warn("âš ī¸ [WidgetPresetRenderer] No css_selector provided for highlight"), i("No css_selector provided for highlight");
2395
+ return;
2396
+ }
2397
+ const r = document.querySelector(o);
2398
+ if (console.log(`đŸ”Ļ [WidgetPresetRenderer] querySelector("${o}") →`, r), !r) {
2399
+ console.warn(`âš ī¸ [WidgetPresetRenderer] Element not found for selector: "${o}"`), i(`Element not found for selector: "${o}"`);
2400
+ return;
2401
+ }
2402
+ const h = r.style.outline, l = r.style.outlineOffset, c = r.style.boxShadow, m = r.style.transition, g = r.style.scrollMarginTop;
2403
+ r.style.transition = "outline 0.2s ease, box-shadow 0.2s ease", r.style.outline = `3px solid ${d}`, r.style.outlineOffset = "6px", r.style.boxShadow = `0 0 0 8px ${d}33, 0 0 32px ${d}88`, r.style.scrollMarginTop = "100px", console.log("✅ [WidgetPresetRenderer] Highlight applied to:", r), r.scrollIntoView({ behavior: "smooth", block: "center" }), setTimeout(() => {
2404
+ r.style.outline = h, r.style.outlineOffset = l, r.style.boxShadow = c, r.style.transition = m, r.style.scrollMarginTop = g, console.log(`đŸ”Ļ [WidgetPresetRenderer] Highlight removed from: "${o}"`);
2405
+ }, A), e({ status: "success", message: `Element highlighted: ${o}` });
2406
+ }
2407
+ // ─── Type Text Preset ──────────────────────────────────────────────────────
2408
+ renderTypeText(t, e, i) {
2409
+ const s = t.args || {}, n = t.clientFields || {}, o = String(
2410
+ s.element_id || n.element_id || s.css_selector || n.css_selector || s.selector || n.selector || ""
2411
+ ).trim(), d = String(s.text_to_type || n.text_to_type || ""), A = Number(
2412
+ s.delay_ms !== void 0 ? s.delay_ms : n.delay_ms !== void 0 ? n.delay_ms : 50
2413
+ );
2414
+ console.log("âœī¸ [WidgetPresetRenderer] renderTypeText triggered"), console.log(` → idOrSelector: "${o}"`), console.log(` → text_to_type: "${d}"`), console.log(` → delayMs: ${A}ms`);
2415
+ let r = null;
2416
+ if (o) {
2417
+ try {
2418
+ r = document.querySelector(o);
2419
+ } catch {
2420
+ }
2421
+ r || (r = document.getElementById(o));
2422
+ }
2423
+ const h = () => {
2424
+ console.log("â„šī¸ [WidgetPresetRenderer] Target element not found or selector not provided. Displaying fallback popup.");
2425
+ const u = "Text Input Simulation", v = o ? `Target element "${o}" not found on the page. Typing is simulated below:` : "No target input ID/selector was provided. Typing is simulated below:", f = this.createOverlay(), x = this.createModal(f, u, v), y = document.createElement("div");
2426
+ y.style.marginTop = "14px", y.style.display = "flex", y.style.flexDirection = "column", y.style.gap = "12px";
2427
+ const w = document.createElement("textarea");
2428
+ w.style.width = "100%", w.style.height = "120px", w.style.background = "#f9fafb", w.style.border = "1px solid #e5e7eb", w.style.borderRadius = "10px", w.style.padding = "12px", w.style.fontSize = "14px", w.style.color = "#111", w.style.outline = "none", w.style.resize = "none", w.style.boxSizing = "border-box", w.placeholder = "Simulating typing...", y.appendChild(w);
2429
+ const C = document.createElement("button");
2430
+ C.style.width = "100%", C.style.padding = "10px 16px", C.style.background = "#111", C.style.color = "#fff", C.style.border = "none", C.style.borderRadius = "10px", C.style.fontSize = "14px", C.style.fontWeight = "600", C.style.cursor = "pointer", C.style.transition = "background 0.2s", C.textContent = "Submit", y.appendChild(C), x.appendChild(y);
2431
+ const Q = x.querySelector(".vnr-close-btn");
2432
+ if (Q && (Q.onclick = () => {
2433
+ this.dismiss(), i("User dismissed typing popup");
2434
+ }), C.onclick = () => {
2435
+ const M = w.value;
2436
+ this.dismiss(), e({ status: "success", text: M, message: "Text submitted via popup simulation" });
2437
+ }, w.focus(), A <= 0)
2438
+ w.value = d;
2439
+ else {
2440
+ let M = "", k = 0;
2441
+ const E = () => {
2442
+ this.overlay && k < d.length && (M += d[k], w.value = M, k++, setTimeout(E, A));
2443
+ };
2444
+ E();
2445
+ }
2446
+ };
2447
+ if (!r) {
2448
+ h();
2449
+ return;
2450
+ }
2451
+ if (r.focus(), !(r instanceof HTMLInputElement || r instanceof HTMLTextAreaElement || "value" in r)) {
2452
+ console.log("â„šī¸ [WidgetPresetRenderer] Target is not a form input. Setting textContent directly."), r.textContent = d, e({ status: "success", message: `Text set on element: ${o}` });
2453
+ return;
2454
+ }
2455
+ const c = r;
2456
+ if (A <= 0) {
2457
+ c.value = d, c.dispatchEvent(new Event("input", { bubbles: !0 })), c.dispatchEvent(new Event("change", { bubbles: !0 })), e({ status: "success", message: `Text entered instantly in: ${o}` });
2458
+ return;
2459
+ }
2460
+ let m = "", g = 0;
2461
+ const b = () => {
2462
+ g < d.length ? (m += d[g], c.value = m, c.dispatchEvent(new Event("input", { bubbles: !0 })), g++, setTimeout(b, A)) : (c.dispatchEvent(new Event("change", { bubbles: !0 })), e({ status: "success", message: `Text typed completely in: ${o}` }));
2463
+ };
2464
+ b();
2465
+ }
2466
+ }
2467
+ const D = class D extends $ {
2468
+ constructor(e) {
2469
+ super(e);
2470
+ a(this, "vaniraClient", null);
2471
+ a(this, "currentView", null);
2472
+ a(this, "presetRenderer", null);
2473
+ a(this, "isPanelOpen", !1);
2474
+ a(this, "callActive", !1);
2475
+ a(this, "eventSource", null);
2476
+ // Components
2477
+ a(this, "floatingButton", null);
2478
+ a(this, "floatingWelcomeChips", null);
2479
+ a(this, "panel", null);
2480
+ a(this, "welcomeChipsData", []);
2481
+ // Chat Adapter
2482
+ a(this, "chatAdapter");
2483
+ // ─── Session Manager ─────────────────────────────────────────────────────
2484
+ a(this, "sessionManager", null);
2485
+ /** Whether this tab currently owns the widget session. */
2486
+ a(this, "sessionActive", !1);
2487
+ // Config derived state
2488
+ a(this, "widgetMode", "voice_only");
2489
+ a(this, "agentId", "");
2490
+ a(this, "prospectGroupId", "");
2491
+ a(this, "chatServerUrl", "");
2492
+ a(this, "prospectId", "");
2493
+ a(this, "chatId", null);
2494
+ a(this, "conversationId", null);
2495
+ a(this, "widgetId", "");
2496
+ a(this, "pkKey", "");
2497
+ a(this, "chatInitialized", !1);
2498
+ // Appearance (Defaults)
2499
+ a(this, "primaryColor", "#000000");
2500
+ a(this, "secondaryColor", "#111111");
2501
+ a(this, "gradient", null);
2502
+ a(this, "positionType", "fixed");
2503
+ a(this, "position", "bottom-right");
2504
+ a(this, "widgetIcon", null);
2505
+ a(this, "iconConfig", null);
2506
+ a(this, "chatWelcomeMessage", null);
2507
+ this.chatAdapter = new ce(), this.processConfig(e);
2508
+ }
2509
+ // ─── Session Initialisation ───────────────────────────────────────────────
2510
+ /**
2511
+ * Boot the SessionManager.
2512
+ * Called once we have a stable widgetId to key the session on.
2513
+ * Returns true if this tab owns the session, false if another tab owns it.
2514
+ */
2515
+ initSessionManager() {
2516
+ const e = this.widgetId || this.agentId || "default";
2517
+ this.sessionManager = new q(e), this.sessionManager.on("tab_took_over", () => {
2518
+ console.warn("[VaniraAI] Session taken over by another tab."), this.sessionActive = !1, this.showTabConflictBanner("taken_over");
2519
+ }), this.sessionManager.on("session_cleared", () => {
2520
+ console.log("[VaniraAI] Session cleared externally.");
2521
+ });
2522
+ const i = this.sessionManager.claimSession();
2523
+ return this.sessionActive = i, i;
2524
+ }
2525
+ /**
2526
+ * Restore persisted chat messages into the chat window.
2527
+ * Called after the view is rendered.
2528
+ */
2529
+ restoreSessionMessages() {
2530
+ var A, r, h;
2531
+ const e = (A = this.sessionManager) == null ? void 0 : A.getSession();
2532
+ if (!e) return;
2533
+ const i = (h = (r = this.currentView) == null ? void 0 : r.getChatWindow) == null ? void 0 : h.call(r);
2534
+ if (!i) return;
2535
+ const s = e.messages.filter((l) => l.content.trim() !== ""), n = `vanira_calls_${this.widgetId || this.agentId}`, o = JSON.parse(localStorage.getItem(n) || "[]");
2536
+ if (s.length === 0 && o.length === 0) return;
2537
+ i.clearMessages();
2538
+ const d = [
2539
+ ...s.map((l, c) => ({
2540
+ type: "msg",
2541
+ role: l.role,
2542
+ content: l.content,
2543
+ // If session messages have no timestamp, use index as tiebreaker
2544
+ ts: l.timestamp ?? c
2545
+ })),
2546
+ ...o.map((l) => ({
2547
+ type: "call",
2548
+ durationMs: l.durationMs,
2549
+ startedAt: l.startedAt,
2550
+ ts: l.startedAt
2551
+ }))
2552
+ ];
2553
+ d.sort((l, c) => l.ts - c.ts), d.forEach((l) => {
2554
+ l.type === "msg" ? i.addMessage(l.role, l.content, l.ts) : i.addCallRecord(l.durationMs, l.startedAt);
2555
+ }), console.log(`[VaniraAI] Restored ${s.length} messages + ${o.length} call records from session.`);
2556
+ }
2557
+ // ─── Tab Conflict UI ─────────────────────────────────────────────────────
2558
+ /**
2559
+ * Renders a friendly overlay when:
2560
+ * - 'conflict' → this tab tried to open but another tab owns the session
2561
+ * - 'taken_over' → another tab stole the session while this tab was active
2562
+ */
2563
+ showTabConflictBanner(e) {
2564
+ var i, s;
2565
+ this.root && ((i = this.root.querySelector(".vanira-tab-conflict-banner")) == null || i.remove(), e === "conflict" && ((s = this.sessionManager) == null || s.forceClaimSession(), this.sessionActive = !0, this.widgetMode.includes("chat") && this.initializeChatSession(!1)));
2566
+ }
2567
+ playMessageSound(e) {
2568
+ try {
2569
+ if (!D.audioContext) {
2570
+ const d = window.AudioContext || window.webkitAudioContext;
2571
+ if (!d) return;
2572
+ D.audioContext = new d();
2573
+ }
2574
+ const i = D.audioContext;
2575
+ i.state === "suspended" && i.resume().catch(() => {
2576
+ });
2577
+ const s = i.createOscillator(), n = i.createGain();
2578
+ s.connect(n), n.connect(i.destination);
2579
+ const o = i.currentTime;
2580
+ e === "send" ? (s.type = "sine", s.frequency.setValueAtTime(300, o), s.frequency.exponentialRampToValueAtTime(500, o + 0.05), n.gain.setValueAtTime(0, o), n.gain.linearRampToValueAtTime(0.1, o + 0.01), n.gain.exponentialRampToValueAtTime(1e-3, o + 0.1), s.start(o), s.stop(o + 0.1)) : (s.type = "sine", s.frequency.setValueAtTime(500, o), s.frequency.exponentialRampToValueAtTime(800, o + 0.1), n.gain.setValueAtTime(0, o), n.gain.linearRampToValueAtTime(0.15, o + 0.02), n.gain.exponentialRampToValueAtTime(1e-3, o + 0.2), s.start(o), s.stop(o + 0.2));
2581
+ } catch (i) {
2582
+ console.warn("[VaniraAI] Audio feedback failed", i);
2583
+ }
2584
+ }
2585
+ // ─── Chat Logic ───────────────────────────────────────────────────────────
2586
+ handleWelcomePayload(e, i = "assistant") {
2587
+ var o, d, A, r, h, l, c, m;
2588
+ if (!e || this.widgetMode === "voice_only") return;
2589
+ e.buttons && Array.isArray(e.buttons) ? this.welcomeChipsData = e.buttons : ((o = e.widget) == null ? void 0 : o.type) === "button_list" && ((d = e.widget.data) != null && d.buttons) && (this.welcomeChipsData = e.widget.data.buttons), this.updateWelcomeChipsVisibility();
2590
+ const s = (r = (A = this.currentView) == null ? void 0 : A.getChatWindow) == null ? void 0 : r.call(A);
2591
+ let n = e.text || e.response || e.content || e.message || "";
2592
+ if (!n && !this.welcomeChipsData.length && (n = "Hey! how can I help you ?"), !n && typeof e == "string" && e.trim().startsWith("{"))
2593
+ try {
2594
+ const g = JSON.parse(e);
2595
+ n = g.text || g.response || g.content || g.message || "", ((h = g.widget) == null ? void 0 : h.type) === "button_list" && ((l = g.widget.data) != null && l.buttons) && (this.welcomeChipsData = g.widget.data.buttons);
2596
+ } catch {
2597
+ }
2598
+ if (console.log("[VaniraAI] Processing Welcome Payload:", {
2599
+ hasText: !!n,
2600
+ chipsCount: this.welcomeChipsData.length,
2601
+ hasChatWindow: !!s,
2602
+ mode: this.widgetMode
2603
+ }), s) {
2604
+ if (!n && this.welcomeChipsData.length === 0) return;
2605
+ const g = (c = this.sessionManager) == null ? void 0 : c.getSession();
2606
+ (g == null ? void 0 : g.messages.some((u) => u.content === n && u.role === i)) || (n && (s.addMessage(i, n), (m = this.sessionManager) == null || m.pushMessage(i, n)), this.welcomeChipsData.length > 0 && s.addButtons(this.welcomeChipsData));
2607
+ }
2608
+ }
2609
+ async initializeChatSession(e = !1) {
2610
+ var i, s, n, o, d, A;
2611
+ if (this.sessionActive && !this.chatInitialized) {
2612
+ this.chatInitialized = !0;
2613
+ try {
2614
+ I.setChatUrl(this.chatServerUrl);
2615
+ const r = (i = this.sessionManager) == null ? void 0 : i.getSession();
2616
+ if (!e && (r != null && r.prospectId)) {
2617
+ this.prospectId = r.prospectId, this.chatId = r.chatId, this.conversationId = r.conversationId || null, console.log(`[VaniraAI] Session restored — tab: ${(s = this.sessionManager) == null ? void 0 : s.getTabId()}, prospect: ${this.prospectId}`), this.restoreSessionMessages(), this.chatId && !this.eventSource && (this.eventSource = I.listenForAdminReplies(
2618
+ this.chatId,
2619
+ this.prospectId,
2620
+ (l) => {
2621
+ var c, m, g;
2622
+ (m = (c = this.currentView) == null ? void 0 : c.getChatWindow) == null || m.call(c).addMessage("assistant", l), (g = this.sessionManager) == null || g.pushMessage("assistant", l), this.playMessageSound("receive");
2623
+ }
2624
+ ));
2625
+ return;
2626
+ }
2627
+ this.prospectId || (this.prospectGroupId ? this.prospectId = await I.createChatProspect(this.prospectGroupId) : this.prospectId = `anon_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`);
2628
+ const h = await I.fetchWelcomeMessage(this.agentId, this.prospectId, this.widgetId || void 0, this.pkKey || void 0);
2629
+ h && (this.handleWelcomePayload(h), h.chatId && !this.chatId && (this.chatId = h.chatId, this.eventSource || (this.eventSource = I.listenForAdminReplies(
2630
+ this.chatId,
2631
+ this.prospectId,
2632
+ (l) => {
2633
+ var c, m, g;
2634
+ (m = (c = this.currentView) == null ? void 0 : c.getChatWindow) == null || m.call(c).addMessage("assistant", l), (g = this.sessionManager) == null || g.pushMessage("assistant", l), this.playMessageSound("receive");
2635
+ }
2636
+ ))), h.conversationId && (this.conversationId = h.conversationId)), (n = this.sessionManager) == null || n.saveIds(this.prospectId, this.chatId, this.conversationId);
2637
+ } catch (r) {
2638
+ console.error("[VaniraAI] Chat init failed", r);
2639
+ const h = "Hey! how can I help you ?";
2640
+ (d = (o = this.currentView) == null ? void 0 : o.getChatWindow) == null || d.call(o).addMessage("assistant", h), (A = this.sessionManager) == null || A.pushMessage("assistant", h);
2641
+ }
2642
+ }
2643
+ }
2644
+ async initialize(e) {
2645
+ await super.initialize(e), this.processConfig(e), this.root && this.ui_renderer(this.root);
2646
+ }
2647
+ processConfig(e) {
2648
+ var i, s;
2649
+ if (this.widgetId = e.widgetId || e.widget_id || this.widgetId || "", this.agentId = e.agentId || e.agent_id || this.agentId || "", this.prospectGroupId = e.prospectGroupId || ((i = e.client) == null ? void 0 : i.base_prospect_group_id) || this.prospectGroupId || "", this.widgetMode = e.widgetMode || e.mode || this.widgetMode || "voice_only", this.pkKey = e.pkKey || e.pk_key || e.publicKey || e.public_key || this.pkKey || "", this.primaryColor = e.primaryColor || e.primary_color || "#000000", this.secondaryColor = e.secondaryColor || e.secondary_color || "#111111", this.gradient = e.gradient || null, this.position = e.position || "bottom-right", this.positionType = e.positionType || "fixed", this.widgetIcon = e.widgetIcon || e.icon || null, this.iconConfig = e.iconConfig || e.icon_config || null, this.chatWelcomeMessage = e.chatWelcomeMessage || e.chat_welcome_message || ((s = e.agent) == null ? void 0 : s.chat_welcome_message) || null, console.log("[VaniraAI] processConfig:", {
2650
+ hasPrimary: !!this.primaryColor,
2651
+ hasSecondary: !!this.secondaryColor,
2652
+ hasWelcome: !!this.chatWelcomeMessage
2653
+ }), typeof this.chatWelcomeMessage == "string")
2654
+ try {
2655
+ this.chatWelcomeMessage = JSON.parse(this.chatWelcomeMessage);
2656
+ } catch (n) {
2657
+ console.warn("[VaniraAI] Failed to parse chatWelcomeMessage string", n);
2658
+ }
2659
+ this.chatServerUrl = e.serverUrl || e.chatServerUrl || "https://inboxapi.travelr.club", this.updateWelcomeChipsVisibility();
2660
+ }
2661
+ async create_call(e = "continue") {
2662
+ var i, s, n;
2663
+ if (!(this.callActive || !this.agentId)) {
2664
+ this.sessionActive || ((i = this.sessionManager) == null || i.forceClaimSession(), this.sessionActive = !0);
2665
+ try {
2666
+ this.callActive = !0, this.updateViewCallState(!0), this.updateViewStatus("connecting");
2667
+ const o = ((s = this.config) == null ? void 0 : s.serverUrl) || ((n = this.config) == null ? void 0 : n.chatServerUrl), d = o && !o.includes("travelr.club") ? o : "https://api.vanira.io", A = new K({
2668
+ agentId: this.agentId,
2669
+ apiKey: this.pkKey || void 0,
2670
+ sessionBehavior: e,
2671
+ prospectId: this.prospectId || void 0,
2672
+ backendUrl: d
2673
+ });
2674
+ A.on("session_started", ({ prospectId: r }) => {
2675
+ var h;
2676
+ r && (this.prospectId = r, (h = this.sessionManager) == null || h.saveIds(r, this.chatId));
2677
+ }), A.on("connected", () => this.updateViewStatus("connected")).on("disconnected", () => this.end_call()).on("error", (r) => {
2678
+ console.error("[VaniraAI Widget] Call error:", r), this.updateViewStatus("error", r);
2679
+ }).on("transcription", ({ text: r, isFinal: h }) => {
2680
+ var l, c;
2681
+ (c = (l = this.currentView) == null ? void 0 : l.setTranscription) == null || c.call(l, r, h);
2682
+ }).on("track", ({ track: r }) => {
2683
+ var h;
2684
+ this.widgetMode.includes("avatar") && r.kind === "video" && ((h = this.currentView) != null && h.setVideoTrack) && this.currentView.setVideoTrack(r);
2685
+ }).on("tool_call", (r) => {
2686
+ var c, m, g;
2687
+ if (console.log("[VaniraAI Widget] Tool call received:", r.name, r.arguments), (c = this.presetRenderer) == null ? void 0 : c.handle(
2688
+ r,
2689
+ (b) => {
2690
+ var v;
2691
+ const u = ((v = r.client_fields) == null ? void 0 : v.action_name) || `user_submitted_${r.name}`;
2692
+ A.triggerInterrupt(u, b);
2693
+ },
2694
+ (b) => {
2695
+ const u = r.tool_call_id;
2696
+ try {
2697
+ A.sendToolResult(u, { status: "cancelled", reason: "User dismissed" });
2698
+ } catch {
2699
+ }
2700
+ },
2701
+ A
2702
+ )) return;
2703
+ const l = new CustomEvent("vaniraai:tool_call", {
2704
+ detail: r,
2705
+ bubbles: !0,
2706
+ composed: !0
2707
+ });
2708
+ (g = (m = this.root) == null ? void 0 : m.host) == null || g.dispatchEvent(l);
2709
+ }), this.vaniraClient = A, await A.start();
2710
+ } catch (o) {
2711
+ console.error("[VaniraAI Widget] Call failed", o), this.updateViewStatus("error", (o == null ? void 0 : o.message) || String(o));
2712
+ }
2713
+ }
2714
+ }
2715
+ end_call() {
2716
+ var i;
2717
+ this.callActive = !1;
2718
+ const e = this.vaniraClient;
2719
+ this.vaniraClient = null, e && e.stop(), (i = this.presetRenderer) == null || i.dismiss(), this.updateViewCallState(!1);
2720
+ }
2721
+ updateViewCallState(e) {
2722
+ var i;
2723
+ (i = this.currentView) != null && i.setCallActive && this.currentView.setCallActive(e);
2724
+ }
2725
+ updateViewStatus(e, i) {
2726
+ var s;
2727
+ (s = this.currentView) != null && s.setStatus && this.currentView.setStatus(e, i);
2728
+ }
2729
+ ui_renderer(e) {
2730
+ var r, h, l;
2731
+ this.root = e, this.root.innerHTML = "", this.presetRenderer = new V(e), this.root.host && (this.positionType === "fixed" ? this.root.host.classList.add("vanira-portal") : this.root.host.classList.remove("vanira-portal"));
2732
+ const i = document.createElement("style");
2733
+ i.textContent = `@keyframes vanira-slide-up {
1453
2734
  from { opacity:0; transform:translateY(16px); }
1454
2735
  to { opacity:1; transform:translateY(0); }
1455
- }`,this.root.appendChild(i);const n=document.createElement("style");n.textContent=`
1456
- ${Bt}
1457
- :host { ${Et(this.primaryColor,this.secondaryColor)} }
1458
- ${Xe.styles}
1459
- ${_e.styles}
1460
- ${Ke.styles}
1461
- ${this.gradient?`.widget-fab { background: ${this.gradient} !important; }`:""}
2736
+ }`, this.root.appendChild(i);
2737
+ const s = document.createElement("style");
2738
+ s.textContent = `
2739
+ ${ie}
2740
+ :host { ${ee(this.primaryColor, this.secondaryColor)} }
2741
+ ${L.styles}
2742
+ ${G.styles}
2743
+ ${H.styles}
2744
+ ${this.gradient ? `.widget-fab { background: ${this.gradient} !important; }` : ""}
1462
2745
  .clean-card-launcher {
1463
2746
  position: fixed;
1464
2747
  z-index: 9999;
@@ -1521,12 +2804,37 @@ overflow: hidden;
1521
2804
  height: 12px;
1522
2805
  fill: currentColor;
1523
2806
  }
1524
- `,this.root.appendChild(n);const s=`vanira_pos_${this.widgetId||this.agentId}`,a=localStorage.getItem(s);let u=null;if(a)try{u=JSON.parse(a)}catch{}if(this.floatingButton=new Xe(()=>this.togglePanel(),(A,f)=>{var m,C;(m=this.floatingWelcomeChips)==null||m.updateCoordinates(A,f,f>window.innerHeight/2),this.isPanelOpen&&((C=this.panel)==null||C.updatePosition({left:`${Math.max(20,Math.min(A-170,window.innerWidth-420))}px`,top:f>window.innerHeight/2?"auto":`${f+80}px`,bottom:f>window.innerHeight/2?`${window.innerHeight-f+20}px`:"auto"}))},(A,f)=>{localStorage.setItem(s,JSON.stringify({x:A,y:f}))}),this.floatingButton.setIcon(this.getFabIcon()),u?this.floatingButton.updateCoordinates(u.x,u.y):this.floatingButton.setPosition(this.getPosStyle()),this.floatingWelcomeChips=new _e(A=>this.handleFloatingChipClick(A)),u?this.floatingWelcomeChips.updateCoordinates(u.x,u.y,u.y>window.innerHeight/2):this.floatingWelcomeChips.setPosition(this.getPosStyle()),this.panel=new Ke(()=>this.closePanel(),this.getPanelTitle()),this.root.appendChild(this.floatingWelcomeChips.getElement()),this.widgetIcon==="clean_assistant"){const A=((c=this.iconConfig)==null?void 0:c.logo_text)||"vanira",f=((g=this.iconConfig)==null?void 0:g.title)||"Vanira Voice AI Assistant",m=((o=this.iconConfig)==null?void 0:o.button_text)||"Begin Call",C=typeof window<"u"&&(window.sessionStorage.getItem("vanira_prospect_id")||window.localStorage.getItem("vanira_prospect_id"))&&(window.sessionStorage.getItem("vanira_latest_call_id")||window.localStorage.getItem("vanira_latest_call_id"));let w="continue";const b=document.createElement("div");b.className="clean-card-launcher",b.innerHTML=`
2807
+ `, this.root.appendChild(s);
2808
+ const n = `vanira_pos_${this.widgetId || this.agentId}`, o = localStorage.getItem(n);
2809
+ let d = null;
2810
+ if (o)
2811
+ try {
2812
+ d = JSON.parse(o);
2813
+ } catch {
2814
+ }
2815
+ if (this.floatingButton = new L(
2816
+ () => this.togglePanel(),
2817
+ (c, m) => {
2818
+ var g, b;
2819
+ (g = this.floatingWelcomeChips) == null || g.updateCoordinates(c, m, m > window.innerHeight / 2), this.isPanelOpen && ((b = this.panel) == null || b.updatePosition({
2820
+ left: `${Math.max(20, Math.min(c - 170, window.innerWidth - 420))}px`,
2821
+ top: m > window.innerHeight / 2 ? "auto" : `${m + 80}px`,
2822
+ bottom: m > window.innerHeight / 2 ? `${window.innerHeight - m + 20}px` : "auto"
2823
+ }));
2824
+ },
2825
+ (c, m) => {
2826
+ localStorage.setItem(n, JSON.stringify({ x: c, y: m }));
2827
+ }
2828
+ ), this.floatingButton.setIcon(this.getFabIcon()), d ? this.floatingButton.updateCoordinates(d.x, d.y) : this.floatingButton.setPosition(this.getPosStyle()), this.floatingWelcomeChips = new G((c) => this.handleFloatingChipClick(c)), d ? this.floatingWelcomeChips.updateCoordinates(d.x, d.y, d.y > window.innerHeight / 2) : this.floatingWelcomeChips.setPosition(this.getPosStyle()), this.panel = new H(() => this.closePanel(), this.getPanelTitle()), this.root.appendChild(this.floatingWelcomeChips.getElement()), this.widgetIcon === "clean_assistant") {
2829
+ const c = ((r = this.iconConfig) == null ? void 0 : r.logo_text) || "vanira", m = ((h = this.iconConfig) == null ? void 0 : h.title) || "Vanira Voice AI Assistant", g = ((l = this.iconConfig) == null ? void 0 : l.button_text) || "Begin Call", b = typeof window < "u" && (window.sessionStorage.getItem("vanira_prospect_id") || window.localStorage.getItem("vanira_prospect_id")) && (window.sessionStorage.getItem("vanira_latest_call_id") || window.localStorage.getItem("vanira_latest_call_id"));
2830
+ let u = "continue";
2831
+ const v = document.createElement("div");
2832
+ v.className = "clean-card-launcher", v.innerHTML = `
1525
2833
  <div>
1526
- <div class="clean-card-logo">${A}</div>
1527
- <div class="clean-card-title">${f}</div>
2834
+ <div class="clean-card-logo">${c}</div>
2835
+ <div class="clean-card-title">${m}</div>
1528
2836
  </div>
1529
- ${C?`
2837
+ ${b ? `
1530
2838
  <div class="session-selector-container">
1531
2839
  <div class="session-option active" data-behavior="continue">
1532
2840
  <span class="session-title">Resume</span>
@@ -1535,90 +2843,339 @@ overflow: hidden;
1535
2843
  <span class="session-title">Start Fresh</span>
1536
2844
  </div>
1537
2845
  </div>
1538
- `:""}
2846
+ ` : ""}
1539
2847
  <button class="clean-card-btn">
1540
2848
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
1541
2849
  <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.14 12 19.79 19.79 0 0 1 1.07 3.4 2 2 0 0 1 3 1h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L7.09 8.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"/>
1542
2850
  </svg>
1543
- ${m}
2851
+ ${g}
1544
2852
  </button>
1545
- `;const y=b.querySelectorAll(".session-option");y.forEach(I=>{I.addEventListener("click",j=>{j.stopPropagation(),y.forEach(q=>q.classList.remove("active")),I.classList.add("active"),w=I.getAttribute("data-behavior")})});const E=I=>{I.stopPropagation(),b.style.display="none",this.openPanel(),this.create_call(w)};b.addEventListener("click",E);const S=b.querySelector(".clean-card-btn");S==null||S.addEventListener("click",I=>{I.stopPropagation(),E(I)}),this.root.appendChild(b)}else this.root.appendChild(this.floatingButton.getElement());this.root.appendChild(this.panel.getElement()),this.setupPanelContent(),this.chatWelcomeMessage&&!this.widgetMode.includes("chat")&&this.handleWelcomePayload(this.chatWelcomeMessage),this.initSessionManager()?this.widgetMode.includes("chat")&&this.initializeChatSession():this.showTabConflictBanner("conflict")}getFabIcon(){return this.widgetIcon&&Ie[this.widgetIcon]?Ie[this.widgetIcon]:this.widgetMode.includes("chat")?W.chat:W.voice_orb}getPanelTitle(){return"Assistant"}getPosStyle(){const t={"bottom-right":"bottom: 24px; right: 24px;","bottom-left":"bottom: 24px; left: 24px;","top-right":"top: 24px; right: 24px;","top-left":"top: 24px; left: 24px;"};return t[this.position]||t["bottom-right"]}setupPanelContent(){var i,n;const t=(s,a)=>{var g,o;const u=(o=(g=this.currentView)==null?void 0:g.getChatWindow)==null?void 0:o.call(g);u&&u.addCallRecord(s,a);const p=`vanira_calls_${this.widgetId||this.agentId}`,c=JSON.parse(localStorage.getItem(p)||"[]");c.push({durationMs:s,startedAt:a}),c.length>50&&c.splice(0,c.length-50),localStorage.setItem(p,JSON.stringify(c))};switch(this.widgetMode){case"chat_only":this.currentView=new Dt(s=>this.handleChatSend(s));break;case"chat_voice":this.currentView=new Tt(s=>this.handleChatSend(s),()=>this.create_call(),()=>this.end_call(),this.primaryColor,this.secondaryColor,t);break;case"avatar_only":this.currentView=new Qt(()=>this.create_call(),()=>this.end_call(),this.primaryColor,this.secondaryColor,t);break;case"chat_avatar":this.currentView=new jt(s=>this.handleChatSend(s),()=>this.create_call(),()=>this.end_call(),this.primaryColor,this.secondaryColor,t);break;case"voice_only":default:this.currentView=new Mt(s=>this.create_call(s),()=>this.end_call(),this.primaryColor,this.secondaryColor,t);break}if(this.currentView&&this.panel){this.panel.setContent(this.currentView.getElement());const s=(n=(i=this.currentView).getChatWindow)==null?void 0:n.call(i);s&&s.setResolveCallback(()=>this.resolveActiveConversation())}}async handleChatSend(t){var n,s,a,u,p;if(!t)return;this.sessionActive||((n=this.sessionManager)==null||n.forceClaimSession(),this.sessionActive=!0,this.widgetMode.includes("chat")&&await this.initializeChatSession(!1));const i=(a=(s=this.currentView)==null?void 0:s.getChatWindow)==null?void 0:a.call(s);if(i){this.chatId&&!this.eventSource&&(this.eventSource=se.listenForAdminReplies(this.chatId,this.prospectId,c=>{var g,o,A;(o=(g=this.currentView)==null?void 0:g.getChatWindow)==null||o.call(g).addMessage("assistant",c),(A=this.sessionManager)==null||A.pushMessage("assistant",c),this.playMessageSound("receive")})),i.addMessage("user",t),(u=this.sessionManager)==null||u.pushMessage("user",t),i.setTyping(!0),(p=this.sessionManager)==null||p.pushMessage("assistant","");try{let c=!1;await this.chatAdapter.sendMessage(t,this.agentId,this.prospectId,this.chatId,g=>{var o;c||(this.playMessageSound("receive"),c=!0),i.setTyping(!1),(g==null?void 0:g.type)==="button_list"&&((o=g.data)!=null&&o.buttons)&&(i.addButtons(g.data.buttons),this.welcomeChipsData=g.data.buttons,this.updateWelcomeChipsVisibility())},g=>{var o;c||(this.playMessageSound("receive"),c=!0),i.setTyping(!1),i.updateLastAssistantMessage(g),(o=this.sessionManager)==null||o.updateLastAssistantMessage(g)},(g,o)=>{var A;g&&(this.chatId=g),o&&(this.conversationId=o),(g||o)&&((A=this.sessionManager)==null||A.saveIds(this.prospectId,this.chatId,this.conversationId))},this.widgetId||void 0,this.pkKey||void 0)}catch(c){i.setTyping(!1),console.error("[VaniraAI] Send message failed",c),i.addMessage("assistant","Error sending message.")}}}togglePanel(){this.isPanelOpen?this.closePanel():this.openPanel()}openPanel(){var n,s,a,u;this.isPanelOpen=!0,this.updateWelcomeChipsVisibility();const t=(n=this.floatingButton)==null?void 0:n.getElement().getBoundingClientRect();if(t&&t.width>0){const p=t.top>window.innerHeight/2;(s=this.panel)==null||s.open({left:`${Math.max(20,Math.min(t.left-170,window.innerWidth-420))}px`,bottom:p?`${window.innerHeight-t.top+20}px`:void 0,top:p?void 0:`${t.top+80}px`})}else(a=this.panel)==null||a.open({bottom:"90px",right:"20px",left:"auto",top:"auto"});(u=this.root)!=null&&u.host&&this.root.host.classList.add("vanira-panel-open")}closePanel(){var t,i;this.isPanelOpen=!1,this.updateWelcomeChipsVisibility(),(t=this.panel)==null||t.close(),(i=this.root)!=null&&i.host&&this.root.host.classList.remove("vanira-panel-open")}updateWelcomeChipsVisibility(){if(!this.floatingWelcomeChips)return;const t=!this.isPanelOpen&&this.welcomeChipsData.length>0;console.log("[VaniraAI] updateWelcomeChipsVisibility:",{visible:t,isPanelOpen:this.isPanelOpen,chipsCount:this.welcomeChipsData.length}),t?(this.floatingWelcomeChips.setChips(this.welcomeChipsData),this.floatingWelcomeChips.getElement().style.display="flex"):this.floatingWelcomeChips.getElement().style.display="none"}handleFloatingChipClick(t){this.openPanel(),this.handleChatSend(t)}async resolveActiveConversation(){var i,n,s;if(this.eventSource&&(this.eventSource.close(),this.eventSource=null),this.conversationId)try{await se.resolveConversation(this.conversationId)}catch(a){console.error("[VaniraAI] Failed to resolve conversation on backend:",a)}else console.warn("[VaniraAI] Cannot resolve — conversation_id not yet received from /widget/chat");(i=this.sessionManager)==null||i.clearChatKeepProspect(),this.conversationId=null,this.chatId=null;const t=(s=(n=this.currentView)==null?void 0:n.getChatWindow)==null?void 0:s.call(n);t&&t.clearMessages(),this.chatInitialized=!1,await this.initializeChatSession(!0)}};h(ue,"audioContext",null);let je=ue;class Lt{static getProvider(e){return new je(e)}}class Yt extends HTMLElement{constructor(){super();h(this,"shadow");h(this,"provider",null);h(this,"widgetId","");h(this,"agentId","");h(this,"pkKey","");h(this,"serverUrl","https://inboxapi.travelr.club");h(this,"position","bottom-right");h(this,"primaryColor","#000000");h(this,"secondaryColor","#000000");h(this,"gradient",null);h(this,"positionType","fixed");this.shadow=this.attachShadow({mode:"open"})}static get observedAttributes(){return["widget-id","agent-id","position","primary-color","secondary-color","server-url","gradient","position-type","pk-key"]}connectedCallback(){console.log("[VaniraAI Widget] Initializing..."),this.readAttributes();const t={widgetId:this.widgetId,agentId:this.agentId,pkKey:this.pkKey,serverUrl:this.serverUrl,position:this.position,primaryColor:this.primaryColor,secondaryColor:this.secondaryColor,gradient:this.gradient,positionType:this.positionType};this.provider=Lt.getProvider(t),this.provider&&this.provider.ui_renderer(this.shadow),this.widgetId&&!this.agentId&&this.initializeExpandedConfig()}readAttributes(){this.widgetId=this.getAttribute("widget-id")||"",this.agentId=this.getAttribute("agent-id")||"",this.pkKey=this.getAttribute("pk-key")||"",this.serverUrl=this.getAttribute("server-url")||"https://inboxapi.travelr.club",this.position=this.getAttribute("position")||"bottom-right",this.primaryColor=this.getAttribute("primary-color")||"#000000",this.secondaryColor=this.getAttribute("secondary-color")||this.primaryColor,this.gradient=this.getAttribute("gradient"),this.positionType=this.getAttribute("position-type")||"fixed"}async initializeExpandedConfig(){try{const t=await Ne.fetchWidgetConfig(this.widgetId,this.pkKey||void 0);this.provider&&await this.provider.initialize(t)}catch(t){console.error("[VaniraAI Widget] Config failed:",t)}}}var Pe={exports:{}},ye={};/**
1546
- * @license React
1547
- * react-jsx-runtime.production.min.js
1548
- *
1549
- * Copyright (c) Facebook, Inc. and its affiliates.
1550
- *
1551
- * This source code is licensed under the MIT license found in the
1552
- * LICENSE file in the root directory of this source tree.
1553
- */var tt;function Ht(){if(tt)return ye;tt=1;var d=k,e=Symbol.for("react.element"),t=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,n=d.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function a(u,p,c){var g,o={},A=null,f=null;c!==void 0&&(A=""+c),p.key!==void 0&&(A=""+p.key),p.ref!==void 0&&(f=p.ref);for(g in p)i.call(p,g)&&!s.hasOwnProperty(g)&&(o[g]=p[g]);if(u&&u.defaultProps)for(g in p=u.defaultProps,p)o[g]===void 0&&(o[g]=p[g]);return{$$typeof:e,type:u,key:A,ref:f,props:o,_owner:n.current}}return ye.Fragment=t,ye.jsx=a,ye.jsxs=a,ye}var we={};/**
1554
- * @license React
1555
- * react-jsx-runtime.development.js
1556
- *
1557
- * Copyright (c) Facebook, Inc. and its affiliates.
1558
- *
1559
- * This source code is licensed under the MIT license found in the
1560
- * LICENSE file in the root directory of this source tree.
1561
- */var it;function Ut(){return it||(it=1,process.env.NODE_ENV!=="production"&&function(){var d=k,e=Symbol.for("react.element"),t=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),a=Symbol.for("react.provider"),u=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),g=Symbol.for("react.suspense_list"),o=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),f=Symbol.for("react.offscreen"),m=Symbol.iterator,C="@@iterator";function w(r){if(r===null||typeof r!="object")return null;var v=m&&r[m]||r[C];return typeof v=="function"?v:null}var b=d.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function y(r){{for(var v=arguments.length,x=new Array(v>1?v-1:0),M=1;M<v;M++)x[M-1]=arguments[M];E("error",r,x)}}function E(r,v,x){{var M=b.ReactDebugCurrentFrame,z=M.getStackAddendum();z!==""&&(v+="%s",x=x.concat([z]));var Y=x.map(function(Q){return String(Q)});Y.unshift("Warning: "+v),Function.prototype.apply.call(console[r],console,Y)}}var S=!1,I=!1,j=!1,q=!1,D=!1,P;P=Symbol.for("react.module.reference");function R(r){return!!(typeof r=="string"||typeof r=="function"||r===i||r===s||D||r===n||r===c||r===g||q||r===f||S||I||j||typeof r=="object"&&r!==null&&(r.$$typeof===A||r.$$typeof===o||r.$$typeof===a||r.$$typeof===u||r.$$typeof===p||r.$$typeof===P||r.getModuleId!==void 0))}function Z(r,v,x){var M=r.displayName;if(M)return M;var z=v.displayName||v.name||"";return z!==""?x+"("+z+")":x}function ce(r){return r.displayName||"Context"}function L(r){if(r==null)return null;if(typeof r.tag=="number"&&y("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof r=="function")return r.displayName||r.name||null;if(typeof r=="string")return r;switch(r){case i:return"Fragment";case t:return"Portal";case s:return"Profiler";case n:return"StrictMode";case c:return"Suspense";case g:return"SuspenseList"}if(typeof r=="object")switch(r.$$typeof){case u:var v=r;return ce(v)+".Consumer";case a:var x=r;return ce(x._context)+".Provider";case p:return Z(r,r.render,"ForwardRef");case o:var M=r.displayName||null;return M!==null?M:L(r.type)||"Memo";case A:{var z=r,Y=z._payload,Q=z._init;try{return L(Q(Y))}catch{return null}}}return null}var F=Object.assign,de=0,Ee,Be,ke,Se,Me,De,B;function ee(){}ee.__reactDisabledLog=!0;function J(){{if(de===0){Ee=console.log,Be=console.info,ke=console.warn,Se=console.error,Me=console.group,De=console.groupCollapsed,B=console.groupEnd;var r={configurable:!0,enumerable:!0,value:ee,writable:!0};Object.defineProperties(console,{info:r,log:r,warn:r,error:r,group:r,groupCollapsed:r,groupEnd:r})}de++}}function _(){{if(de--,de===0){var r={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:F({},r,{value:Ee}),info:F({},r,{value:Be}),warn:F({},r,{value:ke}),error:F({},r,{value:Se}),group:F({},r,{value:Me}),groupCollapsed:F({},r,{value:De}),groupEnd:F({},r,{value:B})})}de<0&&y("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var ne=b.ReactCurrentDispatcher,ie;function he(r,v,x){{if(ie===void 0)try{throw Error()}catch(z){var M=z.stack.trim().match(/\n( *(at )?)/);ie=M&&M[1]||""}return`
1562
- `+ie+r}}var oe=!1,ae;{var xe=typeof WeakMap=="function"?WeakMap:Map;ae=new xe}function be(r,v){if(!r||oe)return"";{var x=ae.get(r);if(x!==void 0)return x}var M;oe=!0;var z=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var Y;Y=ne.current,ne.current=null,J();try{if(v){var Q=function(){throw Error()};if(Object.defineProperty(Q.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Q,[])}catch($){M=$}Reflect.construct(r,[],Q)}else{try{Q.call()}catch($){M=$}r.call(Q.prototype)}}else{try{throw Error()}catch($){M=$}r()}}catch($){if($&&M&&typeof $.stack=="string"){for(var T=$.stack.split(`
1563
- `),K=M.stack.split(`
1564
- `),G=T.length-1,N=K.length-1;G>=1&&N>=0&&T[G]!==K[N];)N--;for(;G>=1&&N>=0;G--,N--)if(T[G]!==K[N]){if(G!==1||N!==1)do if(G--,N--,N<0||T[G]!==K[N]){var te=`
1565
- `+T[G].replace(" at new "," at ");return r.displayName&&te.includes("<anonymous>")&&(te=te.replace("<anonymous>",r.displayName)),typeof r=="function"&&ae.set(r,te),te}while(G>=1&&N>=0);break}}}finally{oe=!1,ne.current=Y,_(),Error.prepareStackTrace=z}var me=r?r.displayName||r.name:"",pe=me?he(me):"";return typeof r=="function"&&ae.set(r,pe),pe}function at(r,v,x){return be(r,!1)}function V(r){var v=r.prototype;return!!(v&&v.isReactComponent)}function U(r,v,x){if(r==null)return"";if(typeof r=="function")return be(r,V(r));if(typeof r=="string")return he(r);switch(r){case c:return he("Suspense");case g:return he("SuspenseList")}if(typeof r=="object")switch(r.$$typeof){case p:return at(r.render);case o:return U(r.type,v,x);case A:{var M=r,z=M._payload,Y=M._init;try{return U(Y(z),v,x)}catch{}}}return""}var X=Object.prototype.hasOwnProperty,le={},lt=b.ReactDebugCurrentFrame;function Te(r){if(r){var v=r._owner,x=U(r.type,r._source,v?v.type:null);lt.setExtraStackFrame(x)}else lt.setExtraStackFrame(null)}function Jt(r,v,x,M,z){{var Y=Function.call.bind(X);for(var Q in r)if(Y(r,Q)){var T=void 0;try{if(typeof r[Q]!="function"){var K=Error((M||"React class")+": "+x+" type `"+Q+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof r[Q]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw K.name="Invariant Violation",K}T=r[Q](v,Q,M,x,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(G){T=G}T&&!(T instanceof Error)&&(Te(z),y("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",M||"React class",x,Q,typeof T),Te(null)),T instanceof Error&&!(T.message in le)&&(le[T.message]=!0,Te(z),y("Failed %s type: %s",x,T.message),Te(null))}}}var Ft=Array.isArray;function ze(r){return Ft(r)}function Xt(r){{var v=typeof Symbol=="function"&&Symbol.toStringTag,x=v&&r[Symbol.toStringTag]||r.constructor.name||"Object";return x}}function Kt(r){try{return ct(r),!1}catch{return!0}}function ct(r){return""+r}function dt(r){if(Kt(r))return y("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Xt(r)),ct(r)}var ht=b.ReactCurrentOwner,qt={key:!0,ref:!0,__self:!0,__source:!0},pt,gt;function Zt(r){if(X.call(r,"ref")){var v=Object.getOwnPropertyDescriptor(r,"ref").get;if(v&&v.isReactWarning)return!1}return r.ref!==void 0}function _t(r){if(X.call(r,"key")){var v=Object.getOwnPropertyDescriptor(r,"key").get;if(v&&v.isReactWarning)return!1}return r.key!==void 0}function $t(r,v){typeof r.ref=="string"&&ht.current}function ei(r,v){{var x=function(){pt||(pt=!0,y("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",v))};x.isReactWarning=!0,Object.defineProperty(r,"key",{get:x,configurable:!0})}}function ti(r,v){{var x=function(){gt||(gt=!0,y("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",v))};x.isReactWarning=!0,Object.defineProperty(r,"ref",{get:x,configurable:!0})}}var ii=function(r,v,x,M,z,Y,Q){var T={$$typeof:e,type:r,key:v,ref:x,props:Q,_owner:Y};return T._store={},Object.defineProperty(T._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(T,"_self",{configurable:!1,enumerable:!1,writable:!1,value:M}),Object.defineProperty(T,"_source",{configurable:!1,enumerable:!1,writable:!1,value:z}),Object.freeze&&(Object.freeze(T.props),Object.freeze(T)),T};function ni(r,v,x,M,z){{var Y,Q={},T=null,K=null;x!==void 0&&(dt(x),T=""+x),_t(v)&&(dt(v.key),T=""+v.key),Zt(v)&&(K=v.ref,$t(v,z));for(Y in v)X.call(v,Y)&&!qt.hasOwnProperty(Y)&&(Q[Y]=v[Y]);if(r&&r.defaultProps){var G=r.defaultProps;for(Y in G)Q[Y]===void 0&&(Q[Y]=G[Y])}if(T||K){var N=typeof r=="function"?r.displayName||r.name||"Unknown":r;T&&ei(Q,N),K&&ti(Q,N)}return ii(r,T,K,z,M,ht.current,Q)}}var Le=b.ReactCurrentOwner,At=b.ReactDebugCurrentFrame;function fe(r){if(r){var v=r._owner,x=U(r.type,r._source,v?v.type:null);At.setExtraStackFrame(x)}else At.setExtraStackFrame(null)}var Ye;Ye=!1;function He(r){return typeof r=="object"&&r!==null&&r.$$typeof===e}function ut(){{if(Le.current){var r=L(Le.current.type);if(r)return`
1566
-
1567
- Check the render method of \``+r+"`."}return""}}function si(r){return""}var ft={};function oi(r){{var v=ut();if(!v){var x=typeof r=="string"?r:r.displayName||r.name;x&&(v=`
1568
-
1569
- Check the top-level render call using <`+x+">.")}return v}}function mt(r,v){{if(!r._store||r._store.validated||r.key!=null)return;r._store.validated=!0;var x=oi(v);if(ft[x])return;ft[x]=!0;var M="";r&&r._owner&&r._owner!==Le.current&&(M=" It was passed a child from "+L(r._owner.type)+"."),fe(r),y('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',x,M),fe(null)}}function vt(r,v){{if(typeof r!="object")return;if(ze(r))for(var x=0;x<r.length;x++){var M=r[x];He(M)&&mt(M,v)}else if(He(r))r._store&&(r._store.validated=!0);else if(r){var z=w(r);if(typeof z=="function"&&z!==r.entries)for(var Y=z.call(r),Q;!(Q=Y.next()).done;)He(Q.value)&&mt(Q.value,v)}}}function ri(r){{var v=r.type;if(v==null||typeof v=="string")return;var x;if(typeof v=="function")x=v.propTypes;else if(typeof v=="object"&&(v.$$typeof===p||v.$$typeof===o))x=v.propTypes;else return;if(x){var M=L(v);Jt(x,r.props,"prop",M,r)}else if(v.PropTypes!==void 0&&!Ye){Ye=!0;var z=L(v);y("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",z||"Unknown")}typeof v.getDefaultProps=="function"&&!v.getDefaultProps.isReactClassApproved&&y("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function ai(r){{for(var v=Object.keys(r.props),x=0;x<v.length;x++){var M=v[x];if(M!=="children"&&M!=="key"){fe(r),y("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",M),fe(null);break}}r.ref!==null&&(fe(r),y("Invalid attribute `ref` supplied to `React.Fragment`."),fe(null))}}var yt={};function wt(r,v,x,M,z,Y){{var Q=R(r);if(!Q){var T="";(r===void 0||typeof r=="object"&&r!==null&&Object.keys(r).length===0)&&(T+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var K=si();K?T+=K:T+=ut();var G;r===null?G="null":ze(r)?G="array":r!==void 0&&r.$$typeof===e?(G="<"+(L(r.type)||"Unknown")+" />",T=" Did you accidentally export a JSX literal instead of a component?"):G=typeof r,y("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",G,T)}var N=ni(r,v,x,z,Y);if(N==null)return N;if(Q){var te=v.children;if(te!==void 0)if(M)if(ze(te)){for(var me=0;me<te.length;me++)vt(te[me],r);Object.freeze&&Object.freeze(te)}else y("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else vt(te,r)}if(X.call(v,"key")){var pe=L(r),$=Object.keys(v).filter(function(gi){return gi!=="key"}),Ue=$.length>0?"{key: someKey, "+$.join(": ..., ")+": ...}":"{key: someKey}";if(!yt[pe+Ue]){var pi=$.length>0?"{"+$.join(": ..., ")+": ...}":"{}";y(`A props object containing a "key" prop is being spread into JSX:
1570
- let props = %s;
1571
- <%s {...props} />
1572
- React keys must be passed directly to JSX without using spread:
1573
- let props = %s;
1574
- <%s key={someKey} {...props} />`,Ue,pe,pi,pe),yt[pe+Ue]=!0}}return r===i?ai(N):ri(N),N}}function li(r,v,x){return wt(r,v,x,!0)}function ci(r,v,x){return wt(r,v,x,!1)}var di=ci,hi=li;we.Fragment=i,we.jsx=di,we.jsxs=hi}()),we}process.env.NODE_ENV==="production"?Pe.exports=Ht():Pe.exports=Ut();var l=Pe.exports;const nt=({clientFields:d,arguments:e,onComplete:t,onCancel:i})=>{const[n,s]=k.useState(!1),u=(d.fields||"Name, Email").split(",").map(o=>o.trim()).filter(Boolean),p=d.title||"Data Collection",c=e.reason||"Please provide the requested details.",g=o=>{o.preventDefault(),s(!0);const A=new FormData(o.currentTarget),f=Object.fromEntries(A.entries());setTimeout(()=>{t(f)},300)};return l.jsxs("div",{style:{fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"},className:"p-6 relative bg-white rounded-2xl",children:[l.jsx("button",{onClick:()=>i(),className:"absolute top-4 right-4 text-gray-300 hover:text-gray-600 transition-colors",type:"button","aria-label":"Close",children:l.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),l.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),l.jsxs("div",{className:"mb-6 pr-8",children:[l.jsx("h2",{className:"text-xl font-bold text-gray-900 tracking-tight mb-2",children:p}),l.jsxs("div",{className:"flex items-start gap-2.5 p-3 bg-gray-50 rounded-xl text-sm border border-gray-100",children:[l.jsx("svg",{className:"w-4 h-4 shrink-0 mt-0.5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),l.jsx("p",{className:"text-gray-500 leading-relaxed",children:c})]})]}),l.jsxs("form",{onSubmit:g,className:"space-y-4",children:[u.map(o=>{const A=o.toLowerCase().replace(/[^a-z0-9]/g,"_"),f=A.includes("email"),m=A.includes("phone")||A.includes("number"),C=f?"email":m?"tel":"text";return l.jsxs("div",{children:[l.jsxs("label",{htmlFor:A,className:"block text-xs font-semibold text-gray-400 uppercase tracking-wider mb-1.5",children:[o," ",l.jsx("span",{className:"text-gray-400",children:"*"})]}),l.jsx("input",{type:C,name:A,id:A,required:!0,className:"w-full px-4 py-2.5 border border-gray-200 rounded-xl text-sm text-gray-900 placeholder-gray-300 focus:outline-none focus:border-gray-900 transition-colors bg-white",placeholder:`Enter your ${o.toLowerCase()}`})]},A)}),l.jsxs("div",{className:"flex gap-2.5 pt-5 border-t border-gray-100",children:[l.jsx("button",{type:"button",onClick:()=>i(),className:"flex-1 px-4 py-2.5 text-sm text-gray-500 bg-gray-100 hover:bg-gray-200 rounded-xl font-medium transition-colors",disabled:n,children:"Cancel"}),l.jsx("button",{type:"submit",disabled:n,className:"flex-1 px-4 py-2.5 text-sm text-white bg-gray-900 hover:bg-gray-800 rounded-xl font-semibold transition-colors disabled:opacity-30 flex items-center justify-center gap-2",children:n?l.jsxs("svg",{className:"animate-spin h-4 w-4 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[l.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),l.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}):l.jsxs(l.Fragment,{children:[l.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M5 13l4 4L19 7"})}),"Submit"]})})]})]})]})},H={root:{fontFamily:"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",padding:"20px 20px 16px",position:"relative",background:"#fff",borderRadius:16,width:"100%",boxSizing:"border-box"},closeBtn:{position:"absolute",top:16,right:16,background:"none",border:"none",cursor:"pointer",color:"#d1d5db",padding:4,lineHeight:1,display:"flex",alignItems:"center"},header:{marginBottom:14,paddingRight:28},title:{margin:"0 0 8px",fontSize:18,fontWeight:700,color:"#111",letterSpacing:"-0.02em",lineHeight:1.2},reasonBox:{display:"flex",alignItems:"flex-start",gap:8,padding:"10px 12px",background:"#f9fafb",border:"1px solid #f3f4f6",borderRadius:10,fontSize:13,color:"#6b7280",lineHeight:1.5},monthNav:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:10},navBtn:{width:30,height:30,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid #e5e7eb",borderRadius:8,background:"#fff",cursor:"pointer",color:"#6b7280",transition:"border-color 0.15s"},monthLabel:{fontSize:14,fontWeight:600,color:"#111"},calGrid:{display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:"2px 0"},wdHeader:{textAlign:"center",fontSize:10,fontWeight:600,color:"#9ca3af",textTransform:"uppercase",letterSpacing:"0.05em",paddingBottom:6},dayEmpty:{height:36},dayBtn:(d,e,t)=>({display:"block",margin:"0 auto",width:34,height:34,borderRadius:8,border:t&&!d?"1.5px solid #111":"1.5px solid transparent",background:d?"#111":"transparent",color:d?"#fff":e?"#d1d5db":"#111",fontSize:13,fontWeight:500,cursor:e?"not-allowed":"pointer",transition:"background 0.1s"}),divider:{borderTop:"1px solid #f3f4f6",margin:"12px 0 10px"},sectionLabel:{fontSize:10,fontWeight:600,color:"#9ca3af",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:8},slotsGrid2:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6},slotsGrid3:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:6},slotBtn:d=>({padding:"9px 6px",borderRadius:8,border:`1px solid ${d?"#111":"#e5e7eb"}`,background:d?"#111":"#fff",color:d?"#fff":"#374151",fontSize:12,fontWeight:500,cursor:"pointer",whiteSpace:"nowrap",textAlign:"center",transition:"border-color 0.1s, background 0.1s"}),centerBox:{textAlign:"center",padding:"28px 0",color:"#9ca3af",fontSize:13},errorBox:{padding:"10px 12px",background:"#f9fafb",border:"1px solid #e5e7eb",borderRadius:10,textAlign:"center",fontSize:13,color:"#374151"},retryBtn:{background:"none",border:"none",cursor:"pointer",fontSize:12,fontWeight:600,color:"#111",textDecoration:"underline",marginTop:4},emptyBox:{textAlign:"center",padding:"20px 0",color:"#9ca3af",fontSize:13,background:"#f9fafb",borderRadius:10,border:"1px solid #f3f4f6"},actions:{display:"flex",gap:8,marginTop:14,paddingTop:12,borderTop:"1px solid #f3f4f6"},cancelBtn:{flex:1,padding:"10px 0",borderRadius:10,background:"#f3f4f6",border:"none",color:"#6b7280",fontSize:13,fontWeight:500,cursor:"pointer"},confirmBtn:d=>({flex:1,padding:"10px 0",borderRadius:10,background:d?"#111":"#e5e7eb",border:"none",color:d?"#fff":"#9ca3af",fontSize:13,fontWeight:600,cursor:d?"pointer":"not-allowed",display:"flex",alignItems:"center",justifyContent:"center",gap:6,transition:"background 0.15s"})},Re=d=>{if(!d)return"";if(typeof d=="string"){if(d.includes("T")||!isNaN(Date.parse(d)))try{return new Date(d).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})}catch{}return d}if(typeof d=="object"){const e=d.start||d.startTime||d.time||d.slot,t=d.end||d.endTime;if(e){let i=String(e),n=t?String(t):"";try{(i.includes("T")||!isNaN(Date.parse(i)))&&(i=new Date(i).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),n&&(n.includes("T")||!isNaN(Date.parse(n)))&&(n=new Date(n).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}))}catch{}if(n){const s=i.slice(-2).toUpperCase(),a=n.slice(-2).toUpperCase();return(s==="AM"||s==="PM")&&s===a?`${i.slice(0,-3)} - ${n}`:`${i} - ${n}`}return i}return JSON.stringify(d)}return String(d)},Ot=["Su","Mo","Tu","We","Th","Fr","Sa"],st=({clientFields:d,arguments:e,onComplete:t,onCancel:i,client:n})=>{const s=new Date;s.setHours(0,0,0,0);const[a,u]=k.useState(null),[p,c]=k.useState(null),[g,o]=k.useState(!1),[A,f]=k.useState(s.getFullYear()),[m,C]=k.useState(s.getMonth()),[w,b]=k.useState(["09:00 AM","10:30 AM","01:00 PM","02:30 PM","04:00 PM"]),[y,E]=k.useState(!1),[S,I]=k.useState(null),[j,q]=k.useState(0),D=d.title||"Select Date & Time",P=e.reason||"Please select a preferred time for your appointment.",R=d.slots_api_url,Z=(()=>{const B=new Date(A,m,1).getDay(),ee=new Date(A,m+1,0).getDate(),J=Array(B).fill(null);for(let _=1;_<=ee;_++)J.push(_);for(;J.length%7!==0;)J.push(null);return J})(),ce=new Date(A,m,1).toLocaleDateString("en-US",{month:"long",year:"numeric"}),L=A===s.getFullYear()&&m===s.getMonth(),F=B=>new Date(A,m,B).getTime(),de=B=>F(B)<s.getTime(),Ee=B=>F(B)===s.getTime(),Be=B=>a===F(B),ke=()=>m===0?(C(11),f(B=>B-1)):C(B=>B-1),Se=()=>m===11?(C(0),f(B=>B+1)):C(B=>B+1);k.useEffect(()=>{if(!a||!R){b(["09:00 AM","10:30 AM","01:00 PM","02:30 PM","04:00 PM"]);return}const ee=new Date(a).toISOString().split("T")[0],J=d.timezone||"",_=new Date(a);_.setUTCHours(0,0,0,0);const ne=new Date(a);ne.setUTCHours(23,59,59,999);const ie=V=>{if(typeof V!="string")return V;let U=V.replace(/\{\{date\}\}/g,ee).replace(/\{\{timezone\}\}/g,J).replace(/\{\{start_of_day\}\}/g,_.toISOString()).replace(/\{\{end_of_day\}\}/g,ne.toISOString());return e&&Object.entries(e).forEach(([X,le])=>{U=U.replace(new RegExp(`\\{\\{args\\.${X}\\}\\}`,"g"),String(le)),["date","timezone","start_of_day","end_of_day"].includes(X)||(U=U.replace(new RegExp(`\\{\\{${X}\\}\\}`,"g"),String(le)))}),U},he=(d.slots_api_method||"GET").toUpperCase();let oe={};try{Object.entries(JSON.parse(d.slots_api_headers||"{}")).forEach(([V,U])=>{oe[V]=ie(String(U))})}catch{}n!=null&&n.apiKey&&(oe["X-Vanira-Publishable-Key"]=n.apiKey),n!=null&&n.callId&&(oe["X-Vanira-Call-ID"]=n.callId),n!=null&&n.agentId&&(oe["X-Vanira-Agent-ID"]=n.agentId);let ae={};try{Object.entries(JSON.parse(d.slots_api_body||"{}")).forEach(([V,U])=>{ae[V]=ie(String(U))})}catch{}let xe=ie(R);const be={method:he,headers:{"Content-Type":"application/json",...oe}};if(he==="GET"){const V=new URLSearchParams(Object.entries(ae).map(([U,X])=>[U,String(X)])).toString();V&&(xe+=(xe.includes("?")?"&":"?")+V)}else be.body=JSON.stringify(ae);(async()=>{E(!0),I(null);try{const V=await fetch(xe,be);if(!V.ok)throw new Error(`HTTP ${V.status}`);const U=await V.json();let X=[];if(Array.isArray(U))X=U;else if(U&&typeof U=="object"){for(const le of["slots","free_slots","times","data","available_slots"])if(Array.isArray(U[le])){X=U[le];break}}b(X)}catch{I("Failed to load slots. Please try again.")}finally{E(!1)}})()},[a,R,d.slots_api_method,d.slots_api_headers,d.slots_api_body,d.timezone,j]);const Me=()=>{if(!a||!p)return;o(!0);const B=new Date(a);let ee=typeof p=="string"?p:Re(p);const J=typeof p=="object"?p:void 0;setTimeout(()=>{t({date:B.toISOString().split("T")[0],time:ee,timestamp:a,formatted:`${B.toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"})} at ${ee}`,slot_data:J})},300)},De=w.some(B=>Re(B).length>8);return l.jsxs("div",{style:H.root,children:[l.jsx("button",{style:H.closeBtn,onClick:()=>i(),type:"button","aria-label":"Close",children:l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[l.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),l.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),l.jsxs("div",{style:H.header,children:[l.jsx("h2",{style:H.title,children:D}),l.jsxs("div",{style:H.reasonBox,children:[l.jsx("svg",{width:"14",height:"14",style:{flexShrink:0,marginTop:1},fill:"none",stroke:"#9ca3af",strokeWidth:"2",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})}),l.jsx("span",{children:P})]})]}),l.jsxs("div",{style:H.monthNav,children:[l.jsx("button",{type:"button",style:{...H.navBtn,opacity:L?.3:1,cursor:L?"not-allowed":"pointer"},disabled:L,onClick:ke,children:l.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:l.jsx("polyline",{points:"15 18 9 12 15 6"})})}),l.jsx("span",{style:H.monthLabel,children:ce}),l.jsx("button",{type:"button",style:H.navBtn,onClick:Se,children:l.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:l.jsx("polyline",{points:"9 18 15 12 9 6"})})})]}),l.jsxs("div",{style:H.calGrid,children:[Ot.map(B=>l.jsx("div",{style:H.wdHeader,children:B},B)),Z.map((B,ee)=>{if(B===null)return l.jsx("div",{style:H.dayEmpty},`e${ee}`);const J=de(B),_=Ee(B),ne=Be(B);return l.jsx("div",{style:{textAlign:"center"},children:l.jsx("button",{type:"button",disabled:J,style:H.dayBtn(ne,J,_),onClick:()=>{u(F(B)),c(null)},onMouseEnter:ie=>{!J&&!ne&&(ie.currentTarget.style.background="#f3f4f6")},onMouseLeave:ie=>{ne||(ie.currentTarget.style.background="transparent")},children:B})},`${A}-${m}-${B}`)})]}),a&&l.jsxs(l.Fragment,{children:[l.jsx("div",{style:H.divider}),l.jsx("div",{style:H.sectionLabel,children:new Date(a).toLocaleDateString("en-US",{weekday:"long",month:"short",day:"numeric"})}),y?l.jsxs("div",{style:H.centerBox,children:[l.jsx("div",{style:{width:20,height:20,border:"2px solid #e5e7eb",borderTopColor:"#111",borderRadius:"50%",animation:"vanira-cal-spin 0.7s linear infinite",margin:"0 auto 10px"}}),"Loading slotsâ€Ļ"]}):S?l.jsxs("div",{style:H.errorBox,children:[l.jsx("div",{children:S}),l.jsx("button",{style:H.retryBtn,onClick:()=>q(B=>B+1),children:"Try again"})]}):w.length===0?l.jsx("div",{style:H.emptyBox,children:"No slots available for this date."}):l.jsx("div",{style:De?H.slotsGrid2:H.slotsGrid3,children:w.map((B,ee)=>{const J=typeof B=="object"&&typeof p=="object"?JSON.stringify(B)===JSON.stringify(p):p===B;return l.jsx("button",{type:"button",style:H.slotBtn(J),onClick:()=>c(B),onMouseEnter:_=>{J||(_.currentTarget.style.borderColor="#9ca3af")},onMouseLeave:_=>{J||(_.currentTarget.style.borderColor="#e5e7eb")},children:Re(B)},typeof B=="object"?`slot-${ee}`:B)})})]}),l.jsxs("div",{style:H.actions,children:[l.jsx("button",{type:"button",style:H.cancelBtn,disabled:g,onClick:()=>i(),children:"Cancel"}),l.jsx("button",{type:"button",style:H.confirmBtn(!!(a&&p&&!g)),disabled:!a||!p||g,onClick:Me,children:g?l.jsx("div",{style:{width:16,height:16,border:"2px solid rgba(255,255,255,0.3)",borderTopColor:"#fff",borderRadius:"50%",animation:"vanira-cal-spin 0.7s linear infinite"}}):l.jsxs(l.Fragment,{children:[l.jsx("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",viewBox:"0 0 24 24",children:l.jsx("polyline",{points:"20 6 9 17 4 12"})}),"Confirm"]})})]}),l.jsx("style",{children:"@keyframes vanira-cal-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }"})]})},ot=({clientFields:d,arguments:e,onComplete:t})=>(k.useEffect(()=>{const i=String((e==null?void 0:e.target_url)||(d==null?void 0:d.target_url)||"/");console.log(`🚀 [NavigatePreset] Navigating to: ${i}`),i.startsWith("http://")||i.startsWith("https://")?window.open(i,"_blank","noopener,noreferrer"):window.dispatchEvent(new CustomEvent("vanira:navigate",{detail:{url:i}})),t({navigated_to:i,status:"success"})},[]),null);ot.vaniraHeadless=!0;const Gt=3*1024*1024,Nt=["image/*","application/pdf","text/plain","text/csv","application/json","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"].join(",");function ge(d){return d<1024?`${d} B`:d<1024*1024?`${(d/1024).toFixed(1)} KB`:`${(d/(1024*1024)).toFixed(2)} MB`}function Wt(d){return d.type.startsWith("image/")?"đŸ–ŧī¸":d.type==="application/pdf"?"📄":d.type.includes("sheet")||d.type.includes("excel")||d.type==="text/csv"?"📊":d.type.includes("word")?"📝":d.type==="application/json"||d.type==="text/plain"?"📃":"📁"}const rt={vanira_form:nt,vanira_calendar:st,vanira_navigate:ot,vanira_upload:({clientFields:d,arguments:e,onComplete:t,onCancel:i,client:n})=>{const s=(d==null?void 0:d.title)||(e==null?void 0:e.title)||"Upload a File",a=(d==null?void 0:d.description)||(e==null?void 0:e.description)||"Drop or select any file — images, PDFs, documents — up to 3 MB",u=(d==null?void 0:d.reason)||(e==null?void 0:e.reason)||"upload",p=(d==null?void 0:d.accept)||(e==null?void 0:e.accept)||Nt,[c,g]=k.useState("idle"),[o,A]=k.useState(null),[f,m]=k.useState(null),[C,w]=k.useState(null),[b,y]=k.useState(!1),E=k.useRef(null),S=k.useCallback(D=>{if(w(null),D.size>Gt){w(`File too large (${ge(D.size)}). Maximum allowed: 3 MB.`);return}if(A(D),g("selected"),D.type.startsWith("image/")){const P=new FileReader;P.onload=R=>{var Z;return m((Z=R.target)==null?void 0:Z.result)},P.readAsDataURL(D)}else m(null)},[]),I=k.useCallback(D=>{D.preventDefault(),y(!1);const P=D.dataTransfer.files[0];P&&S(P)},[S]),j=D=>{var R;const P=(R=D.target.files)==null?void 0:R[0];P&&S(P)},q=async()=>{if(o){g("uploading"),w(null);try{if(n&&typeof n.uploadMedia=="function"){console.log(`📤 [UploadPreset] Uploading "${o.name}" via client.uploadMedia()...`);const{media_id:D,url:P}=await n.uploadMedia(o,u,`User uploaded: ${o.name}`);g("done"),console.log(`✅ [UploadPreset] Upload complete. media_id: ${D}`),setTimeout(()=>{t({file_name:o.name,file_type:o.type,file_size:o.size,file_size_label:ge(o.size),media_id:D,url:P,message:`User uploaded a file: ${o.name} (${ge(o.size)})`})},500)}else{console.warn("[UploadPreset] client.uploadMedia not available — falling back to base64");const D=new FileReader;D.onload=P=>{g("done"),setTimeout(()=>{var R;t({file_name:o.name,file_type:o.type,file_size:o.size,file_size_label:ge(o.size),data_url:(R=P.target)==null?void 0:R.result,message:`User uploaded a file: ${o.name} (${ge(o.size)})`})},500)},D.readAsDataURL(o)}}catch(D){console.error("[UploadPreset] Upload failed:",D),g("error"),w((D==null?void 0:D.message)||"Upload failed. Please try again.")}}};return l.jsxs("div",{className:"vanira-upload-preset",style:{padding:"24px 24px 20px",position:"relative",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'},children:[l.jsx("button",{onClick:()=>i(),type:"button","aria-label":"Close",className:"vanira-upload-close",style:{position:"absolute",top:28,right:28,width:36,height:36,display:"flex",alignItems:"center",justifyContent:"center",background:"#f8fafc",border:"1px solid #e2e8f0",borderRadius:10,cursor:"pointer",color:"#64748b",transition:"background 0.15s ease, color 0.15s ease, border-color 0.15s ease"},children:l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[l.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),l.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),l.jsx("header",{style:{marginBottom:18,paddingRight:44},children:l.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:14},children:[l.jsx("div",{style:{flexShrink:0,width:44,height:44,borderRadius:12,background:"linear-gradient(145deg, #171717 0%, #000000 100%)",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 2px 8px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255,255,255,0.08)"},children:l.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:l.jsx("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"})})}),l.jsxs("div",{style:{minWidth:0,paddingTop:2},children:[l.jsx("h2",{style:{margin:"0 0 4px",fontSize:18,fontWeight:600,color:"#0f172a",letterSpacing:"-0.02em",lineHeight:1.25},children:s}),l.jsx("p",{style:{margin:0,fontSize:13,color:"#64748b",lineHeight:1.55},children:a})]})]})}),c==="idle"&&l.jsxs("div",{onDragOver:D=>{D.preventDefault(),y(!0)},onDragLeave:()=>y(!1),onDrop:I,onClick:()=>{var D;return(D=E.current)==null?void 0:D.click()},className:"vanira-upload-dropzone",style:{border:`2px dashed ${b?"#0f172a":"#cbd5e1"}`,borderRadius:16,padding:"36px 24px",textAlign:"center",cursor:"pointer",background:b?"#f8fafc":"#fafafa",transition:"border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease",boxShadow:b?"inset 0 0 0 1px rgba(15, 23, 42, 0.06)":"none"},children:[l.jsx("div",{style:{width:52,height:52,margin:"0 auto 14px",borderRadius:14,background:"#fff",border:"1px solid #e2e8f0",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 3px rgba(15, 23, 42, 0.06)"},children:l.jsxs("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"#475569",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"}),l.jsx("line",{x1:"12",y1:"11",x2:"12",y2:"17"}),l.jsx("line",{x1:"9",y1:"14",x2:"15",y2:"14"})]})}),l.jsx("p",{style:{margin:"0 0 4px",fontWeight:600,color:"#334155",fontSize:14,letterSpacing:"-0.01em"},children:"Drag & drop your file here"}),l.jsx("p",{style:{margin:"0 0 18px",color:"#94a3b8",fontSize:12},children:"or click to browse"}),l.jsx("span",{className:"vanira-upload-choose",style:{display:"inline-block",padding:"8px 18px",background:"#0f172a",color:"#fff",borderRadius:10,fontSize:13,fontWeight:600,letterSpacing:"-0.01em",boxShadow:"0 2px 6px rgba(15, 23, 42, 0.2)"},children:"Choose File"}),l.jsx("p",{style:{margin:"14px 0 0",fontSize:11,color:"#94a3b8"},children:"Images, PDF, CSV, Docs ¡ Max 3 MB"}),l.jsx("input",{ref:E,type:"file",accept:p,style:{display:"none"},onChange:j})]}),c==="selected"&&o&&l.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:16,padding:16,background:"#f8fafc"},children:[f&&l.jsx("img",{src:f,alt:"preview",style:{width:"100%",maxHeight:160,objectFit:"cover",borderRadius:12,marginBottom:12,border:"1px solid #e2e8f0"}}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[l.jsx("div",{style:{width:44,height:44,borderRadius:11,background:"linear-gradient(145deg, #171717 0%, #000000 100%)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:20,flexShrink:0},children:Wt(o)}),l.jsxs("div",{style:{flex:1,minWidth:0},children:[l.jsx("p",{style:{margin:0,fontWeight:600,fontSize:13,color:"#0f172a",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",letterSpacing:"-0.01em"},children:o.name}),l.jsxs("p",{style:{margin:"3px 0 0",fontSize:11,color:"#64748b"},children:[o.type||"unknown"," ¡ ",ge(o.size)]})]}),l.jsx("button",{type:"button",onClick:()=>{A(null),m(null),g("idle")},"aria-label":"Remove file",className:"vanira-upload-remove",style:{width:32,height:32,display:"flex",alignItems:"center",justifyContent:"center",background:"#fff",border:"1px solid #e2e8f0",borderRadius:8,cursor:"pointer",color:"#64748b",flexShrink:0},children:l.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[l.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),l.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),c==="uploading"&&l.jsxs("div",{style:{textAlign:"center",padding:"36px 16px"},children:[l.jsx("div",{style:{width:44,height:44,border:"2.5px solid #e2e8f0",borderTopColor:"#0f172a",borderRadius:"50%",animation:"vanira-upload-spin 0.75s linear infinite",margin:"0 auto 16px"}}),l.jsx("p",{style:{margin:0,fontWeight:600,color:"#334155",fontSize:14,letterSpacing:"-0.01em"},children:"Uploadingâ€Ļ"}),l.jsx("p",{style:{margin:"6px 0 0",fontSize:12,color:"#94a3b8"},children:"Sending to your agent"})]}),c==="done"&&l.jsxs("div",{style:{textAlign:"center",padding:"36px 16px"},children:[l.jsx("div",{style:{width:52,height:52,background:"linear-gradient(145deg, #059669, #10b981)",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 16px",boxShadow:"0 4px 14px rgba(16, 185, 129, 0.35)"},children:l.jsx("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:l.jsx("polyline",{points:"20 6 9 17 4 12"})})}),l.jsx("p",{style:{margin:0,fontWeight:600,color:"#0f172a",fontSize:15,letterSpacing:"-0.02em"},children:"File sent"}),l.jsx("p",{style:{margin:"6px 0 0",fontSize:13,color:"#64748b"},children:"Your agent is processing it now"})]}),C&&l.jsxs("div",{style:{marginTop:14,padding:"12px 14px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:12,color:"#b91c1c",fontSize:13,lineHeight:1.45,display:"flex",alignItems:"flex-start",gap:10},children:[l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{flexShrink:0,marginTop:1},children:[l.jsx("circle",{cx:"12",cy:"12",r:"10"}),l.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),l.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),l.jsxs("span",{style:{flex:1},children:[C,c==="error"&&l.jsx("button",{type:"button",onClick:()=>{g("idle"),A(null),m(null),w(null)},style:{display:"inline",marginLeft:8,fontWeight:600,textDecoration:"underline",textUnderlineOffset:2,background:"none",border:"none",color:"#b91c1c",cursor:"pointer",fontSize:13,padding:0},children:"Try again"})]})]}),(c==="idle"||c==="selected")&&l.jsxs("div",{style:{display:"flex",gap:10,marginTop:18,paddingTop:2},children:[l.jsx("button",{type:"button",onClick:()=>i(),className:"vanira-upload-btn-secondary",style:{flex:1,padding:"12px 16px",borderRadius:12,border:"1px solid #e2e8f0",background:"#fff",color:"#475569",fontWeight:600,fontSize:14,cursor:"pointer",letterSpacing:"-0.01em",transition:"background 0.15s ease, border-color 0.15s ease"},children:"Cancel"}),l.jsx("button",{type:"button",onClick:q,disabled:!o,className:"vanira-upload-btn-primary",style:{flex:1.6,padding:"12px 16px",borderRadius:12,border:"none",background:o?"linear-gradient(145deg, #171717 0%, #000000 100%)":"#e2e8f0",color:o?"#fff":"#94a3b8",fontWeight:600,fontSize:14,cursor:o?"pointer":"not-allowed",boxShadow:o?"0 2px 8px rgba(0, 0, 0, 0.22), inset 0 1px 0 rgba(255,255,255,0.08)":"none",letterSpacing:"-0.01em",transition:"transform 0.15s ease, box-shadow 0.15s ease"},children:"Upload & Send"})]}),l.jsx("style",{children:`
1575
- @keyframes vanira-upload-spin {
1576
- from { transform: rotate(0deg); }
1577
- to { transform: rotate(360deg); }
1578
- }
1579
- .vanira-upload-preset .vanira-upload-close:hover {
1580
- background: #f1f5f9;
1581
- color: #334155;
1582
- border-color: #cbd5e1;
1583
- }
1584
- .vanira-upload-preset .vanira-upload-dropzone:hover {
1585
- border-color: #94a3b8;
1586
- background: #f8fafc;
1587
- }
1588
- .vanira-upload-preset .vanira-upload-remove:hover {
1589
- background: #f8fafc;
1590
- color: #334155;
1591
- border-color: #cbd5e1;
1592
- }
1593
- .vanira-upload-preset .vanira-upload-btn-secondary:hover {
1594
- background: #f8fafc;
1595
- border-color: #cbd5e1;
1596
- }
1597
- .vanira-upload-preset .vanira-upload-btn-primary:hover:not(:disabled) {
1598
- transform: translateY(-1px);
1599
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.28), inset 0 1px 0 rgba(255,255,255,0.1) !important;
1600
- }
1601
- .vanira-upload-preset .vanira-upload-btn-primary:active:not(:disabled) {
1602
- transform: translateY(0);
1603
- }
1604
- `})]})},vanira_camera:({clientFields:d,arguments:e,onComplete:t,onCancel:i,client:n})=>{const s=(d==null?void 0:d.title)||(e==null?void 0:e.title)||"Take a Photo",a=(d==null?void 0:d.description)||(e==null?void 0:e.description)||"Point your camera at the subject, then capture to send it to your agent.",u=(d==null?void 0:d.reason)||(e==null?void 0:e.reason)||"camera_capture",p=(d==null?void 0:d.facing_mode)||(e==null?void 0:e.facing_mode)||"environment",c=k.useRef(null),g=k.useRef(null),o=k.useRef(null),A=k.useRef(!0),[f,m]=k.useState("starting"),[C,w]=k.useState(null),b=k.useCallback(()=>{o.current&&(o.current.getTracks().forEach(I=>I.stop()),o.current=null),c.current&&(c.current.srcObject=null)},[]),y=k.useCallback(async()=>{m("starting"),w(null);try{const I=await navigator.mediaDevices.getUserMedia({video:{facingMode:{ideal:p}},audio:!1});if(!A.current){I.getTracks().forEach(j=>j.stop());return}o.current=I,c.current&&(c.current.srcObject=I,await c.current.play().catch(()=>{})),A.current&&m("live")}catch(I){if(!A.current)return;console.error("[CameraPreset] Camera error:",I),m("error"),w(I instanceof Error?I.message:"Could not access camera. Please allow camera permissions and try again.")}},[p]);k.useEffect(()=>(A.current=!0,y(),()=>{A.current=!1,b()}),[y,b]),k.useEffect(()=>{f==="live"&&c.current&&o.current&&(c.current.srcObject=o.current,c.current.play().catch(()=>{}))},[f]);const E=()=>{b(),i()},S=async()=>{const I=c.current,j=g.current;if(!I||!j||I.videoWidth===0)return;j.width=I.videoWidth,j.height=I.videoHeight;const q=j.getContext("2d");if(q){q.drawImage(I,0,0,j.width,j.height),m("uploading"),w(null);try{const D=await new Promise(R=>{j.toBlob(Z=>R(Z),"image/jpeg",.85)});if(!D)throw new Error("Failed to capture image");const P=new File([D],`capture-${Date.now()}.jpg`,{type:"image/jpeg"});if(b(),n&&typeof n.uploadMedia=="function"){const{media_id:R,url:Z}=await n.uploadMedia(P,u,"User captured a photo via camera");m("done"),setTimeout(()=>{t({file_name:P.name,file_type:P.type,file_size:P.size,media_id:R,url:Z,message:"User captured and sent a photo from the camera."})},400)}else{const R=j.toDataURL("image/jpeg",.85);m("done"),setTimeout(()=>{t({file_name:P.name,file_type:P.type,data_url:R,message:"User captured a photo from the camera."})},400)}}catch(D){console.error("[CameraPreset] Capture/upload failed:",D),m("error"),w(D instanceof Error?D.message:"Capture failed. Please try again."),await y()}}};return l.jsxs("div",{className:"vanira-camera-preset",style:{padding:"24px 24px 20px",position:"relative",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'},children:[l.jsx("button",{onClick:E,type:"button",disabled:f==="uploading","aria-label":"Close",className:"vanira-camera-close",style:{position:"absolute",top:24,right:24,width:36,height:36,display:"flex",alignItems:"center",justifyContent:"center",background:"#f8fafc",border:"1px solid #e2e8f0",borderRadius:10,cursor:f==="uploading"?"not-allowed":"pointer",color:"#64748b",opacity:f==="uploading"?.4:1,transition:"background 0.15s ease, color 0.15s ease, border-color 0.15s ease"},children:l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[l.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),l.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),l.jsx("header",{style:{marginBottom:18,paddingRight:44},children:l.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:14},children:[l.jsx("div",{style:{flexShrink:0,width:44,height:44,borderRadius:12,background:"#000000",display:"flex",alignItems:"center",justifyContent:"center"},children:l.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"}),l.jsx("circle",{cx:"12",cy:"13",r:"4"})]})}),l.jsxs("div",{style:{minWidth:0,paddingTop:2},children:[l.jsx("h2",{style:{margin:"0 0 4px",fontSize:18,fontWeight:600,color:"#0f172a",letterSpacing:"-0.02em",lineHeight:1.25},children:s}),l.jsx("p",{style:{margin:0,fontSize:13,color:"#64748b",lineHeight:1.55},children:a})]})]})}),(f==="starting"||f==="live"||f==="error")&&l.jsxs("div",{style:{width:"100%",aspectRatio:"4/3",background:"#0f172a",borderRadius:12,overflow:"hidden",position:"relative",boxShadow:"inset 0 0 0 1px rgba(255,255,255,0.06), 0 4px 24px rgba(15, 23, 42, 0.12)"},children:[l.jsx("video",{ref:c,autoPlay:!0,playsInline:!0,muted:!0,style:{width:"100%",height:"100%",objectFit:"cover",opacity:f==="live"?1:0,transition:"opacity 0.35s ease"}}),f==="live"&&l.jsxs("div",{style:{position:"absolute",top:12,left:12,display:"flex",alignItems:"center",gap:6,padding:"4px 9px",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",backdropFilter:"blur(8px)",border:"1px solid rgba(255,255,255,0.1)"},children:[l.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:"#22c55e",boxShadow:"0 0 0 2px rgba(34, 197, 94, 0.35)"}}),l.jsx("span",{style:{fontSize:11,fontWeight:600,color:"#f8fafc",letterSpacing:"0.04em",textTransform:"uppercase"},children:"Live"})]}),f==="starting"&&l.jsxs("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",color:"#f8fafc",gap:14,background:"#0f172a"},children:[l.jsx("div",{style:{width:40,height:40,border:"2.5px solid rgba(255,255,255,0.12)",borderTopColor:"#000000",borderRadius:"50%",animation:"vanira-camera-spin 0.75s linear infinite"}}),l.jsx("p",{style:{margin:0,fontSize:13,fontWeight:500,color:"#94a3b8"},children:"Opening cameraâ€Ļ"})]}),f==="live"&&l.jsxs(l.Fragment,{children:[l.jsx("div",{style:{position:"absolute",inset:14,pointerEvents:"none",border:"1px solid rgba(255,255,255,0.12)",borderRadius:8}}),l.jsx("div",{style:{position:"absolute",left:0,right:0,bottom:0,height:56,background:"linear-gradient(to top, rgba(15,23,42,0.45), transparent)",pointerEvents:"none"}})]})]}),l.jsx("canvas",{ref:g,style:{display:"none"}}),f==="uploading"&&l.jsxs("div",{style:{textAlign:"center",padding:"36px 16px"},children:[l.jsx("div",{style:{width:44,height:44,border:"2.5px solid #e2e8f0",borderTopColor:"#000000",borderRadius:"50%",animation:"vanira-camera-spin 0.75s linear infinite",margin:"0 auto 16px"}}),l.jsx("p",{style:{margin:0,fontWeight:600,color:"#334155",fontSize:14,letterSpacing:"-0.01em"},children:"Sending photoâ€Ļ"}),l.jsx("p",{style:{margin:"6px 0 0",fontSize:12,color:"#94a3b8"},children:"This usually takes a moment"})]}),f==="done"&&l.jsxs("div",{style:{textAlign:"center",padding:"36px 16px"},children:[l.jsx("div",{style:{width:52,height:52,background:"linear-gradient(145deg, #059669, #10b981)",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 16px",boxShadow:"0 4px 14px rgba(16, 185, 129, 0.35)"},children:l.jsx("svg",{width:"26",height:"26",viewBox:"0 0 24 24",fill:"none",stroke:"#fff",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:l.jsx("polyline",{points:"20 6 9 17 4 12"})})}),l.jsx("p",{style:{margin:0,fontWeight:600,color:"#0f172a",fontSize:15,letterSpacing:"-0.02em"},children:"Photo sent"}),l.jsx("p",{style:{margin:"6px 0 0",fontSize:13,color:"#64748b"},children:"Your agent can view it now"})]}),C&&l.jsxs("div",{style:{marginTop:14,padding:"12px 14px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:12,color:"#b91c1c",fontSize:13,lineHeight:1.45,display:"flex",alignItems:"flex-start",gap:10},children:[l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",style:{flexShrink:0,marginTop:1},children:[l.jsx("circle",{cx:"12",cy:"12",r:"10"}),l.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),l.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),l.jsxs("span",{style:{flex:1},children:[C,f==="error"&&l.jsx("button",{type:"button",onClick:y,style:{display:"inline",marginLeft:8,fontWeight:600,textDecoration:"underline",textUnderlineOffset:2,background:"none",border:"none",color:"#b91c1c",cursor:"pointer",fontSize:13,padding:0},children:"Retry"})]})]}),(f==="live"||f==="error")&&l.jsxs("div",{style:{display:"flex",gap:10,marginTop:18,paddingTop:2},children:[l.jsx("button",{type:"button",onClick:E,className:"vanira-camera-btn-secondary",style:{flex:1,padding:"12px 16px",borderRadius:12,border:"1px solid #e2e8f0",background:"#fff",color:"#475569",fontWeight:600,fontSize:14,cursor:"pointer",letterSpacing:"-0.01em",transition:"background 0.15s ease, border-color 0.15s ease"},children:"Cancel"}),l.jsxs("button",{type:"button",onClick:S,disabled:f!=="live",className:"vanira-camera-btn-primary",style:{flex:1.6,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8,padding:"12px 16px",borderRadius:12,border:"none",background:f==="live"?"#000000":"#e2e8f0",color:f==="live"?"#fff":"#94a3b8",fontWeight:600,fontSize:14,cursor:f==="live"?"pointer":"not-allowed",letterSpacing:"-0.01em",transition:"transform 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease"},children:[l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{opacity:f==="live"?1:.6},children:[l.jsx("path",{d:"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"}),l.jsx("circle",{cx:"12",cy:"13",r:"4"})]}),"Capture & Send"]})]}),l.jsx("style",{children:`
1605
- @keyframes vanira-camera-spin {
1606
- from { transform: rotate(0deg); }
1607
- to { transform: rotate(360deg); }
1608
- }
1609
- .vanira-camera-preset .vanira-camera-close:hover:not(:disabled) {
1610
- background: #f1f5f9;
1611
- color: #334155;
1612
- border-color: #cbd5e1;
1613
- }
1614
- .vanira-camera-preset .vanira-camera-btn-secondary:hover {
1615
- background: #f8fafc;
1616
- border-color: #cbd5e1;
1617
- }
1618
- .vanira-camera-preset .vanira-camera-btn-primary:hover:not(:disabled) {
1619
- background: #000000 !important;
2853
+ `;
2854
+ const f = v.querySelectorAll(".session-option");
2855
+ f.forEach((w) => {
2856
+ w.addEventListener("click", (C) => {
2857
+ C.stopPropagation(), f.forEach((Q) => Q.classList.remove("active")), w.classList.add("active"), u = w.getAttribute("data-behavior");
2858
+ });
2859
+ });
2860
+ const x = (w) => {
2861
+ w.stopPropagation(), v.style.display = "none", this.openPanel(), this.create_call(u);
2862
+ };
2863
+ v.addEventListener("click", x);
2864
+ const y = v.querySelector(".clean-card-btn");
2865
+ y == null || y.addEventListener("click", (w) => {
2866
+ w.stopPropagation(), x(w);
2867
+ }), this.root.appendChild(v);
2868
+ } else
2869
+ this.root.appendChild(this.floatingButton.getElement());
2870
+ this.root.appendChild(this.panel.getElement()), this.setupPanelContent(), this.chatWelcomeMessage && !this.widgetMode.includes("chat") && this.handleWelcomePayload(this.chatWelcomeMessage), this.initSessionManager() ? this.widgetMode.includes("chat") && this.initializeChatSession() : this.showTabConflictBanner("conflict");
2871
+ }
2872
+ getFabIcon() {
2873
+ return this.widgetIcon && T[this.widgetIcon] ? T[this.widgetIcon] : this.widgetMode.includes("chat") ? B.chat : B.voice_orb;
2874
+ }
2875
+ getPanelTitle() {
2876
+ return "Assistant";
2877
+ }
2878
+ getPosStyle() {
2879
+ const e = {
2880
+ "bottom-right": "bottom: 24px; right: 24px;",
2881
+ "bottom-left": "bottom: 24px; left: 24px;",
2882
+ "top-right": "top: 24px; right: 24px;",
2883
+ "top-left": "top: 24px; left: 24px;"
2884
+ };
2885
+ return e[this.position] || e["bottom-right"];
2886
+ }
2887
+ setupPanelContent() {
2888
+ var i, s;
2889
+ const e = (n, o) => {
2890
+ var h, l;
2891
+ const d = (l = (h = this.currentView) == null ? void 0 : h.getChatWindow) == null ? void 0 : l.call(h);
2892
+ d && d.addCallRecord(n, o);
2893
+ const A = `vanira_calls_${this.widgetId || this.agentId}`, r = JSON.parse(localStorage.getItem(A) || "[]");
2894
+ r.push({ durationMs: n, startedAt: o }), r.length > 50 && r.splice(0, r.length - 50), localStorage.setItem(A, JSON.stringify(r));
2895
+ };
2896
+ switch (this.widgetMode) {
2897
+ case "chat_only":
2898
+ this.currentView = new re((n) => this.handleChatSend(n));
2899
+ break;
2900
+ case "chat_voice":
2901
+ this.currentView = new ae(
2902
+ (n) => this.handleChatSend(n),
2903
+ () => this.create_call(),
2904
+ () => this.end_call(),
2905
+ this.primaryColor,
2906
+ this.secondaryColor,
2907
+ e
2908
+ );
2909
+ break;
2910
+ case "avatar_only":
2911
+ this.currentView = new le(
2912
+ () => this.create_call(),
2913
+ () => this.end_call(),
2914
+ this.primaryColor,
2915
+ this.secondaryColor,
2916
+ e
2917
+ );
2918
+ break;
2919
+ case "chat_avatar":
2920
+ this.currentView = new de(
2921
+ (n) => this.handleChatSend(n),
2922
+ () => this.create_call(),
2923
+ () => this.end_call(),
2924
+ this.primaryColor,
2925
+ this.secondaryColor,
2926
+ e
2927
+ );
2928
+ break;
2929
+ case "voice_only":
2930
+ default:
2931
+ this.currentView = new oe(
2932
+ (n) => this.create_call(n),
2933
+ () => this.end_call(),
2934
+ this.primaryColor,
2935
+ this.secondaryColor,
2936
+ e
2937
+ );
2938
+ break;
2939
+ }
2940
+ if (this.currentView && this.panel) {
2941
+ this.panel.setContent(this.currentView.getElement());
2942
+ const n = (s = (i = this.currentView).getChatWindow) == null ? void 0 : s.call(i);
2943
+ n && n.setResolveCallback(() => this.resolveActiveConversation());
2944
+ }
2945
+ }
2946
+ async handleChatSend(e) {
2947
+ var s, n, o, d, A;
2948
+ if (!e) return;
2949
+ this.sessionActive || ((s = this.sessionManager) == null || s.forceClaimSession(), this.sessionActive = !0, this.widgetMode.includes("chat") && await this.initializeChatSession(!1));
2950
+ const i = (o = (n = this.currentView) == null ? void 0 : n.getChatWindow) == null ? void 0 : o.call(n);
2951
+ if (i) {
2952
+ this.chatId && !this.eventSource && (this.eventSource = I.listenForAdminReplies(
2953
+ this.chatId,
2954
+ this.prospectId,
2955
+ (r) => {
2956
+ var h, l, c;
2957
+ (l = (h = this.currentView) == null ? void 0 : h.getChatWindow) == null || l.call(h).addMessage("assistant", r), (c = this.sessionManager) == null || c.pushMessage("assistant", r), this.playMessageSound("receive");
2958
+ }
2959
+ )), i.addMessage("user", e), (d = this.sessionManager) == null || d.pushMessage("user", e), i.setTyping(!0), (A = this.sessionManager) == null || A.pushMessage("assistant", "");
2960
+ try {
2961
+ let r = !1;
2962
+ await this.chatAdapter.sendMessage(
2963
+ e,
2964
+ this.agentId,
2965
+ this.prospectId,
2966
+ this.chatId,
2967
+ (h) => {
2968
+ var l;
2969
+ r || (this.playMessageSound("receive"), r = !0), i.setTyping(!1), (h == null ? void 0 : h.type) === "button_list" && ((l = h.data) != null && l.buttons) && (i.addButtons(h.data.buttons), this.welcomeChipsData = h.data.buttons, this.updateWelcomeChipsVisibility());
2970
+ },
2971
+ (h) => {
2972
+ var l;
2973
+ r || (this.playMessageSound("receive"), r = !0), i.setTyping(!1), i.updateLastAssistantMessage(h), (l = this.sessionManager) == null || l.updateLastAssistantMessage(h);
2974
+ },
2975
+ (h, l) => {
2976
+ var c;
2977
+ h && (this.chatId = h), l && (this.conversationId = l), (h || l) && ((c = this.sessionManager) == null || c.saveIds(this.prospectId, this.chatId, this.conversationId));
2978
+ },
2979
+ this.widgetId || void 0,
2980
+ this.pkKey || void 0
2981
+ );
2982
+ } catch (r) {
2983
+ i.setTyping(!1), console.error("[VaniraAI] Send message failed", r), i.addMessage("assistant", "Error sending message.");
2984
+ }
2985
+ }
2986
+ }
2987
+ // ─── Panel Management ─────────────────────────────────────────────────────
2988
+ togglePanel() {
2989
+ this.isPanelOpen ? this.closePanel() : this.openPanel();
2990
+ }
2991
+ openPanel() {
2992
+ var s, n, o, d;
2993
+ this.isPanelOpen = !0, this.updateWelcomeChipsVisibility();
2994
+ const e = (s = this.floatingButton) == null ? void 0 : s.getElement().getBoundingClientRect();
2995
+ if (e && e.width > 0) {
2996
+ const A = e.top > window.innerHeight / 2;
2997
+ (n = this.panel) == null || n.open({
2998
+ left: `${Math.max(20, Math.min(e.left - 170, window.innerWidth - 420))}px`,
2999
+ bottom: A ? `${window.innerHeight - e.top + 20}px` : void 0,
3000
+ top: A ? void 0 : `${e.top + 80}px`
3001
+ });
3002
+ } else
3003
+ (o = this.panel) == null || o.open({
3004
+ bottom: "90px",
3005
+ right: "20px",
3006
+ left: "auto",
3007
+ top: "auto"
3008
+ });
3009
+ (d = this.root) != null && d.host && this.root.host.classList.add("vanira-panel-open");
3010
+ }
3011
+ closePanel() {
3012
+ var e, i;
3013
+ this.isPanelOpen = !1, this.updateWelcomeChipsVisibility(), (e = this.panel) == null || e.close(), (i = this.root) != null && i.host && this.root.host.classList.remove("vanira-panel-open");
3014
+ }
3015
+ updateWelcomeChipsVisibility() {
3016
+ if (!this.floatingWelcomeChips) return;
3017
+ const e = !this.isPanelOpen && this.welcomeChipsData.length > 0;
3018
+ console.log("[VaniraAI] updateWelcomeChipsVisibility:", {
3019
+ visible: e,
3020
+ isPanelOpen: this.isPanelOpen,
3021
+ chipsCount: this.welcomeChipsData.length
3022
+ }), e ? (this.floatingWelcomeChips.setChips(this.welcomeChipsData), this.floatingWelcomeChips.getElement().style.display = "flex") : this.floatingWelcomeChips.getElement().style.display = "none";
3023
+ }
3024
+ handleFloatingChipClick(e) {
3025
+ this.openPanel(), this.handleChatSend(e);
3026
+ }
3027
+ async resolveActiveConversation() {
3028
+ var i, s, n;
3029
+ if (this.eventSource && (this.eventSource.close(), this.eventSource = null), this.conversationId)
3030
+ try {
3031
+ await I.resolveConversation(this.conversationId);
3032
+ } catch (o) {
3033
+ console.error("[VaniraAI] Failed to resolve conversation on backend:", o);
3034
+ }
3035
+ else
3036
+ console.warn("[VaniraAI] Cannot resolve — conversation_id not yet received from /widget/chat");
3037
+ (i = this.sessionManager) == null || i.clearChatKeepProspect(), this.conversationId = null, this.chatId = null;
3038
+ const e = (n = (s = this.currentView) == null ? void 0 : s.getChatWindow) == null ? void 0 : n.call(s);
3039
+ e && e.clearMessages(), this.chatInitialized = !1, await this.initializeChatSession(!0);
3040
+ }
3041
+ };
3042
+ a(D, "audioContext", null);
3043
+ let P = D;
3044
+ class he {
3045
+ /**
3046
+ * Factory Method to create the appropriate Widget Provider.
3047
+ * Implements the Factory Pattern to decouple creation logic.
3048
+ * Trade-off: Currently hardcoded to VaniraInternalProvider, but extensible for other providers.
3049
+ */
3050
+ static getProvider(t) {
3051
+ return new P(t);
3052
+ }
1620
3053
  }
1621
- .vanira-camera-preset .vanira-camera-btn-primary:active:not(:disabled) {
1622
- transform: translateY(0);
1623
- }
1624
- `})]})}},Vt=({client:d,toolCall:e,registry:t=rt,onCustomTool:i})=>{const[n,s]=k.useState(null);if(k.useEffect(()=>{if(!e)return;const o=e.data||e,A=o.arguments||o.args||{},f=o.client_fields||A,m=f==null?void 0:f.preset_id,C=o.tool_call_id||o.call_id||"";m&&t[m]?(s({presetId:m,toolCall:o}),d&&d.sendContextUpdate&&C&&(d.sendToolResult(C,{status:"popup_shown",message:`The UI preset ${m} is now visible. I am waiting for the user to complete it. STAY SILENT.`}),d.sendContextUpdate({ui_state:"waiting_for_preset_data",tool_status:"active_waiting",visible_preset:m}))):i&&i(e)},[e,t,i,d]),!n)return null;const a=t[n.presetId];if(!a)return null;const u=o=>{var A;if(console.log(`đŸŽ¯ [PresetRenderer] Preset ${n.presetId} completed! Result:`,o),d){d.triggerActionInterrupt&&(console.log("⚡ [PresetRenderer] Triggering action interrupt to wake AI..."),d.triggerActionInterrupt());const f=typeof o=="string"?{response:o}:o;if(d.sendActionTrigger){const m=((A=n.toolCall.client_fields)==null?void 0:A.action_name)||`user_submitted_${n.toolCall.name}`;console.log(`📤 [PresetRenderer] Submitting preset data via sendActionTrigger (${m})...`),d.sendActionTrigger(m,f)}else{const m=n.toolCall.tool_call_id||n.toolCall.call_id;console.log(`📤 [PresetRenderer] Submitting tool result for ID: ${m}`),d.sendToolResult(m,f)}}else console.warn("âš ī¸ [PresetRenderer] Cannot send result: no client provided");s(null)},p=o=>{if(s(null),d){const A=n.toolCall.tool_call_id||n.toolCall.call_id;if(typeof d.sendToolError=="function")d.sendToolError(A,o||"User cancelled the action");else try{d.sendToolResult(A,{status:"cancelled",reason:o||"User dismissed"})}catch{}}},c=a.vaniraHeadless===!0,g=l.jsx(a,{toolCallId:n.toolCall.tool_call_id||n.toolCall.call_id,clientFields:n.toolCall.client_fields||n.toolCall.arguments||n.toolCall.args||{},arguments:n.toolCall.arguments||n.toolCall.args||{},onComplete:u,onCancel:p,client:d});return c?g:l.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.45)",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)",display:"flex",alignItems:"center",justifyContent:"center",padding:16,fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},children:l.jsx("div",{style:{background:"#fff",borderRadius:16,boxShadow:"0 25px 60px rgba(0,0,0,0.25)",width:"100%",maxWidth:480,maxHeight:"90vh",overflowY:"auto",boxSizing:"border-box"},children:g})})};O.CalendarPreset=st,O.ChatService=se,O.ConfigService=Ne,O.FormPreset=nt,O.PresetRenderer=Vt,O.SessionManager=Ce,O.VaniraAI=Ge,O.VaniraWidget=Yt,O.WebRTCClient=Oe,O.defaultRegistry=rt,Object.defineProperty(O,Symbol.toStringTag,{value:"Module"})});
3054
+ class fe extends HTMLElement {
3055
+ constructor() {
3056
+ super();
3057
+ a(this, "shadow");
3058
+ a(this, "provider", null);
3059
+ // Config attributes
3060
+ a(this, "widgetId", "");
3061
+ a(this, "agentId", "");
3062
+ a(this, "pkKey", "");
3063
+ a(this, "serverUrl", "https://inboxapi.travelr.club");
3064
+ a(this, "position", "bottom-right");
3065
+ a(this, "primaryColor", "#000000");
3066
+ a(this, "secondaryColor", "#000000");
3067
+ a(this, "gradient", null);
3068
+ a(this, "positionType", "fixed");
3069
+ this.shadow = this.attachShadow({ mode: "open" });
3070
+ }
3071
+ static get observedAttributes() {
3072
+ return ["widget-id", "agent-id", "position", "primary-color", "secondary-color", "server-url", "gradient", "position-type", "pk-key"];
3073
+ }
3074
+ connectedCallback() {
3075
+ console.log("[VaniraAI Widget] Initializing..."), this.readAttributes();
3076
+ const e = {
3077
+ widgetId: this.widgetId,
3078
+ agentId: this.agentId,
3079
+ pkKey: this.pkKey,
3080
+ serverUrl: this.serverUrl,
3081
+ position: this.position,
3082
+ primaryColor: this.primaryColor,
3083
+ secondaryColor: this.secondaryColor,
3084
+ gradient: this.gradient,
3085
+ positionType: this.positionType
3086
+ };
3087
+ this.provider = he.getProvider(e), this.provider && this.provider.ui_renderer(this.shadow), this.widgetId && !this.agentId && this.initializeExpandedConfig();
3088
+ }
3089
+ readAttributes() {
3090
+ this.widgetId = this.getAttribute("widget-id") || "", this.agentId = this.getAttribute("agent-id") || "", this.pkKey = this.getAttribute("pk-key") || "", this.serverUrl = this.getAttribute("server-url") || "https://inboxapi.travelr.club", this.position = this.getAttribute("position") || "bottom-right", this.primaryColor = this.getAttribute("primary-color") || "#000000", this.secondaryColor = this.getAttribute("secondary-color") || this.primaryColor, this.gradient = this.getAttribute("gradient"), this.positionType = this.getAttribute("position-type") || "fixed";
3091
+ }
3092
+ async initializeExpandedConfig() {
3093
+ try {
3094
+ const e = await Z.fetchWidgetConfig(this.widgetId, this.pkKey || void 0);
3095
+ this.provider && await this.provider.initialize(e);
3096
+ } catch (e) {
3097
+ console.error("[VaniraAI Widget] Config failed:", e);
3098
+ }
3099
+ }
3100
+ }
3101
+ const ve = ({
3102
+ client: p,
3103
+ toolCall: t,
3104
+ onCustomTool: e
3105
+ }) => {
3106
+ const i = _(null);
3107
+ return z(() => (i.current = new V(null), () => {
3108
+ var s;
3109
+ (s = i.current) == null || s.dismiss();
3110
+ }), []), z(() => {
3111
+ if (!t || !i.current) return;
3112
+ const s = t.data || t;
3113
+ let n = {};
3114
+ const o = s.arguments || s.args;
3115
+ if (typeof o == "string")
3116
+ try {
3117
+ n = JSON.parse(o);
3118
+ } catch {
3119
+ n = {};
3120
+ }
3121
+ else o && typeof o == "object" && (n = o);
3122
+ const d = s.client_fields || {}, A = (d == null ? void 0 : d.preset_id) || (n == null ? void 0 : n.preset_id), r = s.tool_call_id || s.call_id || "";
3123
+ A && [
3124
+ "vanira_form",
3125
+ "vanira_calendar",
3126
+ "vanira_navigate",
3127
+ "vanira_upload",
3128
+ "vanira_camera",
3129
+ "vanira_highlight_element",
3130
+ "vanira_type_text"
3131
+ ].includes(A) ? (!(A === "vanira_highlight_element" || A === "vanira_type_text") && p && p.sendContextUpdate && r && (p.sendToolResult(r, {
3132
+ status: "popup_shown",
3133
+ message: `The UI preset ${A} is now visible. I am waiting for the user to complete it. STAY SILENT.`
3134
+ }), p.sendContextUpdate({
3135
+ ui_state: "waiting_for_preset_data",
3136
+ tool_status: "active_waiting",
3137
+ visible_preset: A
3138
+ })), i.current.handle(
3139
+ t,
3140
+ (c) => {
3141
+ if (console.log(`đŸŽ¯ [PresetRenderer Wrapper] Preset ${A} completed! Result:`, c), p) {
3142
+ p.triggerActionInterrupt && (console.log("⚡ [PresetRenderer Wrapper] Triggering action interrupt to wake AI..."), p.triggerActionInterrupt());
3143
+ const m = typeof c == "string" ? { response: c } : c;
3144
+ if (p.sendActionTrigger) {
3145
+ const g = d.action_name || `user_submitted_${s.name}`;
3146
+ console.log(`📤 [PresetRenderer Wrapper] Submitting preset data via sendActionTrigger (${g})...`), p.sendActionTrigger(g, m);
3147
+ } else
3148
+ console.log(`📤 [PresetRenderer Wrapper] Submitting tool result for ID: ${r}`), p.sendToolResult(r, m);
3149
+ }
3150
+ },
3151
+ (c) => {
3152
+ if (console.log(`❌ [PresetRenderer Wrapper] Preset ${A} cancelled:`, c), p)
3153
+ if (typeof p.sendToolError == "function")
3154
+ p.sendToolError(r, c || "User cancelled the action");
3155
+ else
3156
+ try {
3157
+ p.sendToolResult(r, { status: "cancelled", reason: c || "User dismissed" });
3158
+ } catch {
3159
+ }
3160
+ },
3161
+ p
3162
+ )) : e && e(t);
3163
+ }, [t, p, e]), null;
3164
+ };
3165
+ export {
3166
+ Ce as BrowserAudioAdapter,
3167
+ Be as BrowserDataChannelAdapter,
3168
+ Ee as BrowserMediaAdapter,
3169
+ Ie as BrowserPeerAdapter,
3170
+ I as ChatService,
3171
+ Z as ConfigService,
3172
+ ve as PresetRenderer,
3173
+ q as SessionManager,
3174
+ K as VaniraAI,
3175
+ fe as VaniraWidget,
3176
+ xe as WebRTCClient,
3177
+ Me as browserCapabilities,
3178
+ ke as browserRuntime,
3179
+ Qe as createBrowserAI,
3180
+ De as createBrowserClient
3181
+ };