@characterxyz/widget 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cx.js +5 -4
- package/dist/cx.js.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cx.js
CHANGED
|
@@ -30,16 +30,16 @@ class CxyzMic extends AudioWorkletProcessor {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
registerProcessor('cxyz-mic', CxyzMic);
|
|
33
|
-
`;function Un(t){let e=new Int16Array(t);if(!e.length)return 0;let n=0;for(let i=0;i<e.length;i++){let a=e[i]/32768;n+=a*a}return Math.sqrt(n/e.length)}async function Ln(t){if(!navigator.mediaDevices?.getUserMedia)throw new Error("This browser cannot use a microphone here.");let e=await navigator.mediaDevices.getUserMedia({audio:{deviceId:t.deviceId?{exact:t.deviceId}:void 0,channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}}),n=new AudioContext({latencyHint:"interactive"}),i=n.createMediaStreamSource(e),a=!1,r=d=>{if(a){t.onFrame(new ArrayBuffer(d.byteLength),0);return}t.onFrame(d,Un(d))},o,l;try{let d=URL.createObjectURL(new Blob([$n],{type:"application/javascript"}));try{await n.audioWorklet.addModule(d)}finally{URL.revokeObjectURL(d)}let p=new AudioWorkletNode(n,"cxyz-mic");p.port.onmessage=m=>r(m.data),o=p,l=()=>{p.port.onmessage=null}}catch{let d=n.createScriptProcessor(4096,1,1),p=n.sampleRate/16e3,m=0,c=new Int16Array(480),
|
|
33
|
+
`;function Un(t){let e=new Int16Array(t);if(!e.length)return 0;let n=0;for(let i=0;i<e.length;i++){let a=e[i]/32768;n+=a*a}return Math.sqrt(n/e.length)}async function Ln(t){if(!navigator.mediaDevices?.getUserMedia)throw new Error("This browser cannot use a microphone here.");let e=await navigator.mediaDevices.getUserMedia({audio:{deviceId:t.deviceId?{exact:t.deviceId}:void 0,channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}}),n=new AudioContext({latencyHint:"interactive"}),i=n.createMediaStreamSource(e),a=!1,r=d=>{if(a){t.onFrame(new ArrayBuffer(d.byteLength),0);return}t.onFrame(d,Un(d))},o,l;try{let d=URL.createObjectURL(new Blob([$n],{type:"application/javascript"}));try{await n.audioWorklet.addModule(d)}finally{URL.revokeObjectURL(d)}let p=new AudioWorkletNode(n,"cxyz-mic");p.port.onmessage=m=>r(m.data),o=p,l=()=>{p.port.onmessage=null}}catch{let d=n.createScriptProcessor(4096,1,1),p=n.sampleRate/16e3,m=0,c=new Int16Array(480),f=0;d.onaudioprocess=_=>{let v=_.inputBuffer.getChannelData(0);for(let g=0;g<v.length;g++)if(m+=1,m>=p){m-=p;let x=Math.max(-1,Math.min(1,v[g]));c[f++]=x<0?x*32768:x*32767,f===480&&(r(c.buffer),c=new Int16Array(480),f=0)}},o=d,l=()=>{d.onaudioprocess=null}}i.connect(o);let u=n.createGain();return u.gain.value=0,o.connect(u).connect(n.destination),n.state==="suspended"&&await n.resume().catch(()=>{}),{get muted(){return a},setMuted(d){a=d;for(let p of e.getAudioTracks())p.enabled=!d},stop(){l();try{i.disconnect(),o.disconnect()}catch{}for(let d of e.getTracks())d.stop();n.close().catch(()=>{})}}}var Ye=class{constructor(){b(this,"handlers",{})}on(t,e){var n;return((n=this.handlers)[t]??(n[t]=new Set)).add(e),()=>this.handlers[t]?.delete(e)}emit(t,e){for(let n of this.handlers[t]??[])try{n(e)}catch(i){console.error("[characterxyz] listener threw",i)}}clear(){this.handlers={}}},L=class extends Error{constructor(t,e,n=0){super(e),b(this,"code"),b(this,"status"),this.name="CxError",this.code=t,this.status=n}};function Rn(t){switch(t){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not_found";case 402:return"payment_required";case 422:return"invalid";case 429:return"rate_limited";case 503:return"unavailable";default:return"unknown"}}async function Pn(t){let e="";try{let n=await t.json();typeof n?.message=="string"&&(e=n.message)}catch{}return new L(Rn(t.status),e||`Request failed (${t.status})`,t.status)}async function _e(t,e,n={}){let i={};n.body!==void 0&&(i["Content-Type"]="application/json"),n.token&&(i.Authorization=`Bearer ${n.token}`);let a;try{a=await fetch(t+e,{method:n.method??(n.body===void 0?"GET":"POST"),headers:i,body:n.body===void 0?void 0:JSON.stringify(n.body),signal:n.signal,credentials:"omit",cache:"no-store"})}catch(r){throw r?.name==="AbortError"?r:new L("network","Could not reach Character XYZ. Check your connection.")}if(!a.ok)throw await Pn(a);return a}async function re(t,e,n={}){return(await(await _e(t,e,n)).json()).data}async function ct(t,e,n){let i=t.body;if(!i)return;let a=i.getReader(),r=new TextDecoder,o="",l=()=>{a.cancel().catch(()=>{})};n?.addEventListener("abort",l);try{for(;;){let{value:u,done:d}=await a.read();if(d)break;o+=r.decode(u,{stream:!0}),o=st(o,e)}o+=r.decode(),st(o+`
|
|
34
34
|
|
|
35
35
|
`,e)}finally{n?.removeEventListener("abort",l)}}function st(t,e){let n=t.replace(/\r\n/g,`
|
|
36
36
|
`),i;for(;(i=n.indexOf(`
|
|
37
37
|
|
|
38
38
|
`))!==-1;){let a=n.slice(0,i);n=n.slice(i+2);let r="message",o=[];for(let d of a.split(`
|
|
39
39
|
`)){if(!d||d.startsWith(":"))continue;let p=d.indexOf(":"),m=p===-1?d:d.slice(0,p),c=p===-1?"":d.slice(p+1).replace(/^ /,"");m==="event"?r=c:m==="data"&&o.push(c)}if(!o.length)continue;let l=o.join(`
|
|
40
|
-
`),u=l;try{u=JSON.parse(l)}catch{}e({event:r,data:u})}return n}function Fn(t){if(t.byteLength<25)return null;let e=new DataView(t);if(e.getUint8(0)!==67||e.getUint8(1)!==88||e.getUint8(2)!==89||e.getUint8(3)!==90||e.getUint8(4)!==1)return null;let n=e.getUint8(5),i=(e.getUint8(6)&1)!==0,a=7,r=e.getUint16(a,!0);if(a+=2,a+r+20>t.byteLength)return null;let o=new TextDecoder().decode(new Uint8Array(t,a,r));a+=r+4+8+4;let l=e.getUint32(a,!0);return a+=4,a+l>t.byteLength?null:{kind:n,final:i,corr:o,payload:new Uint8Array(t,a,l)}}var Dn=.09,On=350,Hn=25e3,Wn=()=>({phase:"idle",callId:null,position:null,etaSeconds:null,holdSeconds:null,maxSeconds:null,startedAt:null,endReason:null,muted:!1,speaking:!1,agentState:"idle",error:null}),Yn=class extends Ye{constructor(t,e,n,i={}){super(),b(this,"apiUrl",t),b(this,"session",e),b(this,"agentId",n),b(this,"opts",i),b(this,"s",Wn()),b(this,"ticket",null),b(this,"eventsAbort",null),b(this,"ws",null),b(this,"mic",null),b(this,"players",new Map),b(this,"sampleRates",new Map),b(this,"cancelled",new Set),b(this,"speakingCorr",null),b(this,"heartbeat",null),b(this,"loudSince",null)}get state(){return this.s}audible(){let t=this.speakingCorr,e=t?this.players.get(t):void 0;return t&&e?{corr:t,ms:e.playedMs()}:null}voiceLevel(){let t=this.speakingCorr?this.players.get(this.speakingCorr):void 0;return t?t.level():0}set(t){this.s={...this.s,...t},this.emit("state",this.s)}async start(){if(this.s.phase==="idle"){this.set({phase:"joining"}),lt();try{this.mic=await Ln({deviceId:this.opts.deviceId,onFrame:(t,e)=>this.onMicFrame(t,e)})}catch{this.finish("mic-denied","Allow the microphone to talk, or chat instead.");return}try{let t=await this.session.token(),e=await re(this.apiUrl,"/sdk/v1/calls",{method:"POST",body:{},token:t});this.set({callId:e.callId,phase:e.state==="ready"?"joining":"queued",position:e.position??null,etaSeconds:e.etaSeconds??null}),this.follow()}catch(t){let e=t instanceof L?t:new L("unknown","Could not start the call."),n=e.code==="rate_limited"?"busy":"unavailable";this.finish(n,e.message),this.emit("error",e)}}}async follow(){let t=0;for(;this.s.callId&&this.s.phase!=="ended"&&this.s.phase!=="idle";){this.eventsAbort=new AbortController;try{let e=await this.session.token(),n=await _e(this.apiUrl,`/sdk/v1/calls/${encodeURIComponent(this.s.callId)}/events`,{token:e,signal:this.eventsAbort.signal});t=0,await ct(n,i=>this.onServerEvent(i.event,i.data),this.eventsAbort.signal)}catch(e){if(e?.name==="AbortError")return;if(e instanceof L&&e.code==="not_found"){this.finish("failed","The call ended.");return}if(t+=1,t>5){this.finish("failed","Lost the connection to the call.");return}}if(this.ended())return;await new Promise(e=>setTimeout(e,Math.min(4e3,500*2**t)))}}onServerEvent(t,e){switch(t){case"queued":(this.s.phase==="joining"||this.s.phase==="queued")&&this.set({phase:"queued",position:Number(e.position)||1,etaSeconds:Number(e.etaSeconds)||null});break;case"ready":{typeof e.ticket=="string"&&e.ticket&&(this.ticket=e.ticket);let n=Number(e.holdSeconds)||0;this.s.phase!=="ready"&&this.s.phase!=="connecting"&&this.s.phase!=="live"?(this.set({phase:"ready",holdSeconds:n,position:null,etaSeconds:null}),this.emit("ready",{holdSeconds:n}),this.opts.autoAccept!==!1&&this.accept()):this.s.phase==="ready"&&this.set({holdSeconds:n});break}case"live":this.set({phase:"live",maxSeconds:Number(e.maxSeconds)||null,startedAt:this.s.startedAt??Date.now()-(Number(e.elapsedSeconds)||0)*1e3});break;case"ended":this.finish(String(e.reason||"hangup")||"hangup",null);break}}ended(){return this.s.phase==="ended"}accept(){if(this.s.phase!=="ready"||!this.ticket||this.ws)return;this.set({phase:"connecting"});let t=this.apiUrl.replace(/^http/,"ws")+"/sdk/v1/calls/socket",e=new WebSocket(t,[`cxyz-ticket.${this.ticket}`]);this.ticket=null,e.binaryType="arraybuffer",this.ws=e,e.onopen=()=>{let n=this.opts.face,i=n?.emotion?.()??null;e.send(JSON.stringify({type:"agent_identity",agent_id:this.agentId,skin_index:0,blendshapes:!!n,...n?{blendshape_stream:!0}:{},...n&&i?{face_emotion:i}:{}})),e.send(JSON.stringify({type:"mic_state",silero:"off",denoise:!1})),this.heartbeat=setInterval(()=>this.sendJson({type:"heartbeat"}),Hn),this.set({phase:"live",startedAt:this.s.startedAt??Date.now()})},e.onmessage=n=>this.onSocket(n.data),e.onclose=()=>{this.ws=null,setTimeout(()=>{(this.s.phase==="live"||this.s.phase==="connecting")&&this.finish("hangup",null)},1500)}}sendJson(t){this.ws?.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(t))}onMicFrame(t,e){let n=this.ws;if(!(!n||n.readyState!==WebSocket.OPEN)){if(this.speakingCorr){let i=performance.now();if(e>Dn){if(this.loudSince??(this.loudSince=i),i-this.loudSince>=On){this.loudSince=null,this.interrupt(),n.send(t);return}}else this.loudSince=null;n.send(new ArrayBuffer(t.byteLength));return}n.send(t)}}onSocket(t){if(t instanceof ArrayBuffer){let n=Fn(t);if(!n||this.cancelled.has(n.corr))return;if(n.kind===3){this.opts.face&&this.emit("face",{corr:n.corr,payload:n.payload.slice()});return}if(n.kind!==1)return;let i=this.players.get(n.corr);if(!i){for(let[r,o]of this.players)o.stop(),this.players.delete(r);let a=n.corr;i=new zn({sampleRate:this.sampleRates.get(a)??16e3,onStart:()=>{this.speakingCorr=a,this.set({speaking:!0}),this.emit("line",{corr:a,event:"audible"}),this.sendJson({type:"playback_started",correlationId:a,timestampMs:Date.now()})},onEnd:()=>{this.players.delete(a),this.speakingCorr===a&&(this.speakingCorr=null),this.set({speaking:!1}),this.emit("line",{corr:a,event:"end"}),this.sendJson({type:"playback_ended",correlationId:a,timestampMs:Date.now(),reason:"natural"}),this.sendJson({type:"speech_ended"})}}),this.players.set(a,i)}i.enqueue(n.payload),n.final&&i.end();return}if(typeof t!="string")return;let e;try{e=JSON.parse(t)}catch{return}if("AgentSpeechMeta"in e){let n=e.AgentSpeechMeta;n?.correlation_id&&n.sample_rate&&this.sampleRates.set(n.correlation_id,n.sample_rate);return}if("InteractorTranscript"in e){let n=e.InteractorTranscript;n?.text&&this.emit("caption",{id:`v:${n.correlation_id}`,role:"visitor",text:n.text});return}if("AgentReplyTranscript"in e){let n=e.AgentReplyTranscript;n?.text&&!this.cancelled.has(n.correlation_id)&&this.emit("caption",{id:`a:${n.correlation_id}`,role:"agent",text:n.text});return}if(e.type==="turn_cancelled"&&typeof e.correlationId=="string"){let n=e.correlationId;this.cancelled.add(n),this.players.get(n)?.stop(),this.players.delete(n),this.emit("line",{corr:n,event:"end"}),this.speakingCorr===n&&(this.speakingCorr=null,this.set({speaking:!1})),this.emit("captionRemoved",`a:${n}`);return}e.kind==="agent_status"&&typeof e.state=="string"&&this.set({agentState:e.state.toLowerCase()})}interrupt(){let t=this.speakingCorr;if(!t)return;let e=this.players.get(t),n=Math.round(e?.playedMs()??0);e?.stop(),this.players.delete(t),this.cancelled.add(t),this.speakingCorr=null,this.set({speaking:!1}),this.emit("line",{corr:t,event:"end"}),this.sendJson({type:"playback_ended",correlationId:t,timestampMs:Date.now(),reason:"interrupted"}),this.sendJson({type:"interrupt",correlationId:t,heardMs:n,timestampMs:Date.now()})}setMuted(t){this.mic?.setMuted(t),this.set({muted:t})}async hangUp(){let t=this.s.callId,e=this.s.phase;if(this.finish(e==="live"?"hangup":"left",null),!!t)try{let n=await this.session.token();await _e(this.apiUrl,`/sdk/v1/calls/${encodeURIComponent(t)}`,{method:"DELETE",token:n})}catch{}}finish(t,e){if(this.s.phase==="ended")return;this.eventsAbort?.abort(),this.eventsAbort=null,this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=null;for(let i of this.players.values())i.stop();this.players.clear(),this.speakingCorr=null,this.mic?.stop(),this.mic=null;let n=this.ws;this.ws=null,n&&n.readyState<=WebSocket.OPEN&&n.close(1e3),this.ticket=null,this.set({phase:"ended",endReason:t,speaking:!1,holdSeconds:null,error:e})}},Nn=0,ot=t=>`${t}_${Date.now().toString(36)}_${(Nn++).toString(36)}`,qn=class extends Ye{constructor(t,e){super(),b(this,"apiUrl",t),b(this,"session",e),b(this,"list",[]),b(this,"loaded",!1),b(this,"busy",!1),b(this,"abort",null)}get messages(){return this.list}get isBusy(){return this.busy}publish(){this.list=[...this.list],this.emit("messages",this.list)}async load(){if(this.loaded)return this.list;let t=await this.session.token(),e=await re(this.apiUrl,"/sdk/v1/chat/messages?limit=50",{token:t}),n=this.list;return this.list=[...e?.messages??[],...n],this.loaded=!0,this.publish(),this.list}async send(t){let e=t.trim();if(!e)throw new L("invalid","Say something first.");if(this.busy)throw new L("rate_limited","Wait for the reply first.");this.setBusy(!0);let n={id:ot("local"),role:"visitor",text:e,createdAt:new Date().toISOString()},i={id:ot("reply"),role:"agent",text:"",createdAt:new Date().toISOString(),streaming:!0};this.list.push(n,i),this.publish(),this.abort=new AbortController;try{let a=await this.session.token(),r=await _e(this.apiUrl,"/sdk/v1/chat/messages",{method:"POST",body:{text:e},token:a,signal:this.abort.signal}),o=null,l=null;if(await ct(r,({event:d,data:p})=>{let m=p;d==="delta"&&typeof m?.text=="string"?(i.text+=m.text,this.publish()):d==="done"?o={id:String(m.id),role:"agent",text:String(m.text??i.text),createdAt:String(m.createdAt??i.createdAt)}:d==="error"&&(l=typeof m?.message=="string"?m.message:"Something went wrong.")},this.abort.signal),l||!o)throw new L("unknown",l??"The reply was cut off. Try again.");let u=o;return this.replace(i.id,u),u}catch(a){let r=a instanceof L?a:new L("network","The reply was cut off. Try again.");this.list=this.list.filter(l=>l.id!==i.id);let o=this.list.findIndex(l=>l.id===n.id);throw o!==-1&&(this.list[o]={...n,failed:!0}),this.publish(),a?.name!=="AbortError"&&this.emit("error",r),r}finally{this.abort=null,this.setBusy(!1)}}retry(t){let e=this.list.find(n=>n.id===t&&n.failed);if(!e)throw new L("not_found","Nothing to retry.");return this.list=this.list.filter(n=>n.id!==t),this.publish(),this.send(e.text)}stop(){this.abort?.abort()}replace(t,e){let n=this.list.findIndex(i=>i.id===t);n!==-1&&(this.list[n]=e),this.publish()}setBusy(t){this.busy=t,this.emit("busy",t)}},Bn=()=>{let t=new Map;return{get:e=>t.get(e)??null,set:(e,n)=>{t.set(e,n)}}},jn=()=>({get(t){try{return globalThis.localStorage?.getItem(t)??null}catch{return null}},set(t,e){try{globalThis.localStorage?.setItem(t,e)}catch{}}}),Vn=60,Kn=class{constructor(t){if(b(this,"src",t),b(this,"current",null),b(this,"inflight",null),!t.publishableKey&&!t.getSessionToken)throw new L("invalid","Pass a publishableKey, or getSessionToken for sessions your server mints.")}visitorKey(){return`cxyz:visitor:${(this.src.publishableKey??"server").slice(-12)}`}get info(){return this.current}async token(){let t=Date.now()/1e3;return this.current&&this.current.expiresAt-Vn>t?this.current.token:(await this.refresh()).token}refresh(){return this.inflight??(this.inflight=this.mint().finally(()=>{this.inflight=null})),this.inflight}async mint(){let t;if(this.src.getSessionToken){let e=await this.src.getSessionToken();typeof e=="string"?t=await this.describe(e):t=e}else{let e=this.src.store.get(this.visitorKey())??void 0;t=await re(this.src.apiUrl,"/sdk/v1/sessions",{method:"POST",body:{publishableKey:this.src.publishableKey,agentId:this.src.agentId,visitorId:e}}),this.src.store.set(this.visitorKey(),t.visitorId)}return this.current=t,t}async describe(t){return{...await re(this.src.apiUrl,"/sdk/v1/session",{token:t}),token:t}}},Xn="https://api.character.xyz",dt=class ut extends Ye{constructor(e,n,i){super(),b(this,"apiUrl",e),b(this,"session",n),b(this,"info",i),b(this,"chat"),b(this,"currentCall",null),b(this,"destroyed",!1),this.chat=new qn(e,n)}static async init(e){let n=(e.apiUrl??Xn).replace(/\/+$/,"");if(e.publishableKey&&/^cxyz_sk_/.test(e.publishableKey))throw new L("invalid","That is a SECRET key. Never put it in a web page: use a publishable key (cxyz_pk_\u2026). Revoke the secret key now.");let i=e.storage==="memory"?Bn():e.storage&&typeof e.storage=="object"?e.storage:jn(),a=new Kn({apiUrl:n,agentId:e.agentId,publishableKey:e.publishableKey,getSessionToken:e.getSessionToken,store:i}),r=await a.refresh();return new ut(n,a,r)}get agent(){return(this.session.info??this.info).agent}get features(){return(this.session.info??this.info).features}get appearance(){return(this.session.info??this.info).appearance??{}}get visitorId(){return(this.session.info??this.info).visitorId}get mode(){return(this.session.info??this.info).mode}get call(){return this.currentCall&&this.currentCall.state.phase!=="ended"?this.currentCall:null}async videoAvatar(){let e=await this.session.token();return re(this.apiUrl,"/sdk/v1/agent/video-avatar",{token:e})}async startCall(e={}){if(this.destroyed)throw new L("invalid","This client was destroyed.");if(!this.features.call)throw new L("forbidden","Calls are not available on this site.");if(this.call)return this.call;let n=new Yn(this.apiUrl,this.session,this.agent.id,e);return this.currentCall=n,n.on("state",i=>{i.phase==="ended"&&this.currentCall===n&&this.emit("call",null)}),n.on("error",i=>this.emit("error",i)),this.emit("call",n),await n.start(),n}destroy(){this.destroyed=!0,this.currentCall?.hangUp(),this.chat.stop(),this.chat.clear(),this.clear()}};var Se,C,mt,Jn,j,pt,_t,bt,Ne,xe,se,xt,je,qe,Be,Zn,ke={},we=[],Gn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Ae=Array.isArray;function B(t,e){for(var n in e)t[n]=e[n];return t}function Ve(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function Qn(t,e,n){var i,a,r,o={};for(r in e)r=="key"?i=e[r]:r=="ref"?a=e[r]:o[r]=e[r];if(arguments.length>2&&(o.children=arguments.length>3?Se.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)o[r]===void 0&&(o[r]=t.defaultProps[r]);return ve(t,o,i,a,null)}function ve(t,e,n,i,a){var r={type:t,props:e,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:a??++mt,__i:-1,__u:0};return a==null&&C.vnode!=null&&C.vnode(r),r}function M(t){return t.children}function ye(t,e){this.props=t,this.context=e}function K(t,e){if(e==null)return t.__?K(t.__,t.__i+1):null;for(var n;e<t.__k.length;e++)if((n=t.__k[e])!=null&&n.__e!=null)return n.__e;return typeof t.type=="function"?K(t):null}function ei(t){if(t.__P&&t.__d){var e=t.__v,n=e.__e,i=[],a=[],r=B({},e);r.__v=e.__v+1,C.vnode&&C.vnode(r),Ke(t.__P,r,e,t.__n,t.__P.namespaceURI,32&e.__u?[n]:null,i,n??K(e),!!(32&e.__u),a),r.__v=e.__v,r.__.__k[r.__i]=r,Ct(i,r,a),e.__e=e.__=null,r.__e!=n&&vt(r)}}function vt(t){if((t=t.__)!=null&&t.__c!=null)return t.__e=t.__c.base=null,t.__k.some(function(e){if(e!=null&&e.__e!=null)return t.__e=t.__c.base=e.__e}),vt(t)}function ht(t){(!t.__d&&(t.__d=!0)&&j.push(t)&&!Ce.__r++||pt!=C.debounceRendering)&&((pt=C.debounceRendering)||_t)(Ce)}function Ce(){try{for(var t,e=1;j.length;)j.length>e&&j.sort(bt),t=j.shift(),e=j.length,ei(t)}finally{j.length=Ce.__r=0}}function yt(t,e,n,i,a,r,o,l,u,d,p){var m,c,h,_,v,g,x=i&&i.__k||we,k=e.length;for(u=ti(n,e,x,u,k),m=0;m<k;m++)(h=n.__k[m])!=null&&(c=h.__i!=-1&&x[h.__i]||ke,h.__i=m,g=Ke(t,h,c,a,r,o,l,u,d,p),_=h.__e,h.ref&&c.ref!=h.ref&&(c.ref&&Xe(c.ref,null,h),p.push(h.ref,h.__c||_,h)),v==null&&_!=null&&(v=_),4&h.__u?(u=kt(h,u,t),c.__e&&(c.__e=null)):typeof h.type=="function"&&g!==void 0?u=g:_&&(u=_.nextSibling),h.__u&=-7);return n.__e=v,u}function ti(t,e,n,i,a){var r,o,l,u,d,p=n.length,m=p,c=0;for(t.__k=new Array(a),r=0;r<a;r++)(o=e[r])!=null&&typeof o!="boolean"&&typeof o!="function"?(typeof o=="string"||typeof o=="number"||typeof o=="bigint"||o.constructor==String?o=t.__k[r]=ve(null,o,null,null,null):Ae(o)?o=t.__k[r]=ve(M,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=t.__k[r]=ve(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):t.__k[r]=o,u=r+c,o.__=t,o.__b=t.__b+1,l=null,(d=o.__i=ni(o,n,u,m))!=-1&&(m--,(l=n[d])&&(l.__u|=2)),l==null||l.__v==null?(d==-1&&(a>p?c--:a<p&&c++),typeof o.type!="function"&&(o.__u|=4)):d!=u&&(d==u-1?c--:d==u+1?c++:(d>u?c--:c++,o.__u|=4))):t.__k[r]=null;if(m)for(r=0;r<p;r++)(l=n[r])!=null&&(2&l.__u)==0&&(l.__e==i&&(i=K(l)),At(l,l));return i}function kt(t,e,n){var i,a;if(typeof t.type=="function"){for(i=t.__k,a=0;i&&a<i.length;a++)i[a]&&(i[a].__=t,e=kt(i[a],e,n));return e}t.__e!=e&&(e&&t.type&&!e.parentNode&&(e=K(t)),e=n.insertBefore(t.__e,e||null));do e=e&&e.nextSibling;while(e!=null&&e.nodeType==8);return e}function ni(t,e,n,i){var a,r,o,l=t.key,u=t.type,d=e[n],p=d!=null&&(2&d.__u)==0;if(d===null&&l==null||p&&l==d.key&&u==d.type)return n;if(i>(p?1:0)){for(a=n-1,r=n+1;a>=0||r<e.length;)if((d=e[o=a>=0?a--:r++])!=null&&(2&d.__u)==0&&l==d.key&&u==d.type)return o}return-1}function ft(t,e,n){e[0]=="-"?t.setProperty(e,n??""):t[e]=n==null?"":typeof n!="number"||Gn.test(e)?n:n+"px"}function be(t,e,n,i,a){var r,o;e:if(e=="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof i=="string"&&(t.style.cssText=i=""),i)for(e in i)n&&e in n||ft(t.style,e,"");if(n)for(e in n)i&&n[e]==i[e]||ft(t.style,e,n[e])}else if(e[0]=="o"&&e[1]=="n")r=e!=(e=e.replace(xt,"$1")),o=e.toLowerCase(),e=o in t||e=="onFocusOut"||e=="onFocusIn"?o.slice(2):e.slice(2),t.l||(t.l={}),t.l[e+r]=n,n?i?n[se]=i[se]:(n[se]=je,t.addEventListener(e,r?Be:qe,r)):t.removeEventListener(e,r?Be:qe,r);else{if(a=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in t)try{t[e]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&e[4]!="-"?t.removeAttribute(e):t.setAttribute(e,e=="popover"&&n==1?"":n))}}function gt(t){return function(e){if(this.l){var n=this.l[e.type+t];if(e[xe]==null)e[xe]=je++;else if(e[xe]<n[se])return;return n(C.event?C.event(e):e)}}}function Ke(t,e,n,i,a,r,o,l,u,d){var p,m,c,h,_,v,g,x,k,E,P,F,O,$,D,W,y=e.type;if(e.constructor!==void 0)return null;128&n.__u&&(u=!!(32&n.__u),r=[l=e.__e=n.__e]),(p=C.__b)&&p(e);e:if(typeof y=="function"){m=o.length;try{if(k=e.props,E=y.prototype&&y.prototype.render,P=(p=y.contextType)&&i[p.__c],F=p?P?P.props.value:p.__:i,n.__c?x=(c=e.__c=n.__c).__=c.__E:(E?e.__c=c=new y(k,F):(e.__c=c=new ye(k,F),c.constructor=y,c.render=ai),P&&P.sub(c),c.state||(c.state={}),c.__n=i,h=c.__d=!0,c.__h=[],c._sb=[]),E&&c.__s==null&&(c.__s=c.state),E&&y.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=B({},c.__s)),B(c.__s,y.getDerivedStateFromProps(k,c.__s))),_=c.props,v=c.state,c.__v=e,h)E&&y.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),E&&c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(E&&y.getDerivedStateFromProps==null&&k!==_&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(k,F),e.__v==n.__v||!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(k,c.__s,F)===!1){e.__v!=n.__v&&(c.props=k,c.state=c.__s,c.__d=!1),e.__e=n.__e,e.__k=n.__k,e.__k.some(function(R){R&&(R.__=e)}),we.push.apply(c.__h,c._sb),c._sb=[],c.__h.length&&o.push(c),l=K(n);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(k,c.__s,F),E&&c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(_,v,g)})}if(c.context=F,c.props=k,c.__P=t,c.__e=!1,O=C.__r,$=0,E)c.state=c.__s,c.__d=!1,O&&O(e),p=c.render(c.props,c.state,c.context),we.push.apply(c.__h,c._sb),c._sb=[];else do c.__d=!1,O&&O(e),p=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++$<25);c.state=c.__s,c.getChildContext!=null&&(i=B(B({},i),c.getChildContext())),E&&!h&&c.getSnapshotBeforeUpdate!=null&&(g=c.getSnapshotBeforeUpdate(_,v)),D=p!=null&&p.type===M&&p.key==null?St(p.props.children):p,l=yt(t,Ae(D)?D:[D],e,n,i,a,r,o,l,u,d),c.base=e.__e,e.__u&=-161,c.__h.length&&o.push(c),x&&(c.__E=c.__=null)}catch(R){if(o.length=m,e.__v=null,u||r!=null){if(R.then){for(e.__u|=u?160:128;l&&l.nodeType==8&&l.nextSibling;)l=l.nextSibling;r!=null&&(r[r.indexOf(l)]=null),e.__e=l}else if(r!=null)for(W=r.length;W--;)Ve(r[W])}else e.__e=n.__e;e.__k==null&&(e.__k=n.__k||[]),R.then||wt(e),C.__e(R,e,n)}}else r==null&&e.__v==n.__v?(e.__k=n.__k,e.__e=n.__e):l=e.__e=ii(n.__e,e,n,i,a,r,o,u,d);return(p=C.diffed)&&p(e),128&e.__u?void 0:l}function wt(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(wt))}function Ct(t,e,n){for(var i=0;i<n.length;i++)Xe(n[i],n[++i],n[++i]);C.__c&&C.__c(e,t),t.some(function(a){try{t=a.__h,a.__h=[],t.some(function(r){r.call(a)})}catch(r){C.__e(r,a.__v)}})}function St(t){return typeof t!="object"||t==null||t.__b>0?t:Ae(t)?t.map(St):t.constructor!==void 0?null:B({},t)}function ii(t,e,n,i,a,r,o,l,u){var d,p,m,c,h,_,v,g=n.props||ke,x=e.props,k=e.type;if(k=="svg"?a="http://www.w3.org/2000/svg":k=="math"?a="http://www.w3.org/1998/Math/MathML":a||(a="http://www.w3.org/1999/xhtml"),r!=null){for(d=0;d<r.length;d++)if((h=r[d])&&"setAttribute"in h==!!k&&(k?h.localName==k:h.nodeType==3)){t=h,r[d]=null;break}}if(t==null){if(k==null)return document.createTextNode(x);t=document.createElementNS(a,k,x.is&&x),l&&(C.__m&&C.__m(e,r),l=!1),r=null}if(k==null)g===x||l&&t.data==x||(t.data=x);else{if(r=k=="textarea"&&x.defaultValue!=null?null:r&&Se.call(t.childNodes),!l&&r!=null)for(g={},d=0;d<t.attributes.length;d++)g[(h=t.attributes[d]).name]=h.value;for(d in g)h=g[d],d=="dangerouslySetInnerHTML"?m=h:d=="children"||d in x||d=="value"&&"defaultValue"in x||d=="checked"&&"defaultChecked"in x||be(t,d,null,h,a);for(d in x)h=x[d],d=="children"?c=h:d=="dangerouslySetInnerHTML"?p=h:d=="value"?_=h:d=="checked"?v=h:l&&typeof h!="function"||g[d]===h||be(t,d,h,g[d],a);if(p)l||m&&(p.__html==m.__html||p.__html==t.innerHTML)||(t.innerHTML=p.__html),e.__k=[];else if(m&&(t.innerHTML=""),yt(e.type=="template"?t.content:t,Ae(c)?c:[c],e,n,i,k=="foreignObject"?"http://www.w3.org/1999/xhtml":a,r,o,r?r[0]:n.__k&&K(n,0),l,u),r!=null)for(d=r.length;d--;)Ve(r[d]);l&&k!="textarea"||(d="value",k=="progress"&&_==null?t.removeAttribute("value"):_!=null&&(_!==t[d]||k=="progress"&&!_||k=="option"&&_!=g[d])&&be(t,d,_,g[d],a),d="checked",v!=null&&v!=t[d]&&be(t,d,v,g[d],a))}return t}function Xe(t,e,n){try{if(typeof t=="function"){var i=typeof t.__u=="function";i&&t.__u(),i&&e==null||(t.__u=t(e))}else t.current=e}catch(a){C.__e(a,n)}}function At(t,e,n){var i,a;if(C.unmount&&C.unmount(t),(i=t.ref)&&(i.current&&i.current!=t.__e||Xe(i,null,e)),(i=t.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(r){C.__e(r,e)}i.base=i.__P=i.__n=null}if(i=t.__k)for(a=0;a<i.length;a++)i[a]&&At(i[a],e,n||typeof t.type!="function");n||Ve(t.__e),t.__c=t.__=t.__e=void 0}function ai(t,e,n){return this.constructor(t,n)}function Je(t,e,n){var i,a,r,o;e==document&&(e=document.documentElement),C.__&&C.__(t,e),a=(i=typeof n=="function")?null:n&&n.__k||e.__k,r=[],o=[],Ke(e,t=(!i&&n||e).__k=Qn(M,null,[t]),a||ke,ke,e.namespaceURI,!i&&n?[n]:a?null:e.firstChild?Se.call(e.childNodes):null,r,!i&&n?n:a?a.__e:e.firstChild,i,o),Ct(r,t,o),t.props.children=null}Se=we.slice,C={__e:function(t,e,n,i){for(var a,r,o;e=e.__;)if((a=e.__c)&&!a.__)try{if((r=a.constructor)&&r.getDerivedStateFromError!=null&&(a.setState(r.getDerivedStateFromError(t)),o=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(t,i||{}),o=a.__d),o)return a.__E=a}catch(l){t=l}throw t}},mt=0,Jn=function(t){return t!=null&&t.constructor===void 0},ye.prototype.setState=function(t,e){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=B({},this.state),typeof t=="function"&&(t=t(B({},n),this.props)),t&&B(n,t),t!=null&&this.__v&&(e&&this._sb.push(e),ht(this))},ye.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),ht(this))},ye.prototype.render=M,j=[],_t=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,bt=function(t,e){return t.__v.__b-e.__v.__b},Ce.__r=0,Ne=Math.random().toString(8),xe="__d"+Ne,se="__a"+Ne,xt=/(PointerCapture)$|Capture$/i,je=0,qe=gt(!1),Be=gt(!0),Zn=0;var G,A,Ze,Mt,oe=0,Rt=[],T=C,Tt=T.__b,It=T.__r,Et=T.diffed,zt=T.__c,$t=T.unmount,Ut=T.__;function Te(t,e){T.__h&&T.__h(A,t,oe||e),oe=0;var n=A.__H||(A.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function z(t){return oe=1,ri(Dt,t)}function ri(t,e,n){var i=Te(G++,2);if(i.t=t,!i.__c&&(i.__=[n?n(e):Dt(void 0,e),function(l){var u=i.__N?i.__N[0]:i.__[0],d=i.t(u,l);u!==d&&(i.__N=[d,i.__[1]],i.__c.setState({}))}],i.__c=A,!A.__f)){var a=function(l,u,d){if(!i.__c.__H)return!0;var p=!1,m=i.__c.props!==l;if(i.__c.__H.__.some(function(h){if(h.__N){p=!0;var _=h.__[0];h.__=h.__N,h.__N=void 0,_!==h.__[0]&&(m=!0)}}),r){var c=r.call(this,l,u,d);return p?c||m:c}return!p||m};A.__f=!0;var r=A.shouldComponentUpdate,o=A.componentWillUpdate;A.componentWillUpdate=function(l,u,d){if(this.__e){var p=r;r=void 0,a(l,u,d),r=p}o&&o.call(this,l,u,d)},A.shouldComponentUpdate=a}return i.__N||i.__}function I(t,e){var n=Te(G++,3);!T.__s&&Qe(n.__H,e)&&(n.__=t,n.u=e,A.__H.__h.push(n))}function Pt(t,e){var n=Te(G++,4);!T.__s&&Qe(n.__H,e)&&(n.__=t,n.u=e,A.__h.push(n))}function H(t){return oe=5,Ft(function(){return{current:t}},[])}function Ft(t,e){var n=Te(G++,7);return Qe(n.__H,e)&&(n.__=t(),n.__H=e,n.__h=t),n.__}function Ie(t,e){return oe=8,Ft(function(){return t},e)}function si(){for(var t;t=Rt.shift();){var e=t.__H;if(t.__P&&e)try{e.__h.some(Me),e.__h.some(Ge),e.__h=[]}catch(n){e.__h=[],T.__e(n,t.__v)}}}T.__b=function(t){A=null,Tt&&Tt(t)},T.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),Ut&&Ut(t,e)},T.__r=function(t){It&&It(t),G=0;var e=(A=t.__c).__H;e&&(Ze===A?(e.__h=[],A.__h=[],e.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(e.__h.some(Me),e.__h.some(Ge),e.__h=[],G=0)),Ze=A},T.diffed=function(t){Et&&Et(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(Rt.push(e)!==1&&Mt===T.requestAnimationFrame||((Mt=T.requestAnimationFrame)||oi)(si)),e.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),Ze=A=null},T.__c=function(t,e){e.some(function(n){try{n.__h.some(Me),n.__h=n.__h.filter(function(i){return!i.__||Ge(i)})}catch(i){e.some(function(a){a.__h&&(a.__h=[])}),e=[],T.__e(i,n.__v)}}),zt&&zt(t,e)},T.unmount=function(t){$t&&$t(t);var e,n=t.__c;n&&n.__H&&(n.__H.__.some(function(i){try{Me(i)}catch(a){e=a}}),n.__H=void 0,e&&T.__e(e,n.__v))};var Lt=typeof requestAnimationFrame=="function";function oi(t){var e,n=function(){clearTimeout(i),Lt&&cancelAnimationFrame(e),setTimeout(t)},i=setTimeout(n,35);Lt&&(e=requestAnimationFrame(n))}function Me(t){var e=A,n=t.__c;typeof n=="function"&&(t.__c=void 0,n()),A=e}function Ge(t){var e=A;t.__c=t.__(),A=e}function Qe(t,e){return!t||t.length!==e.length||e.some(function(n,i){return n!==t[i]})}function Dt(t,e){return typeof e=="function"?e(t):e}function V(t){let e=t%100;if(e>=11&&e<=13)return`${t}th`;switch(t%10){case 1:return`${t}st`;case 2:return`${t}nd`;case 3:return`${t}rd`;default:return`${t}th`}}function Ee(t){if(t==null)return"";if(t<60)return"less than a minute";let e=Math.round(t/60);return e<60?`about ${e} min`:`about ${Math.round(e/60)} hr`}function ze(t){let e=Math.max(0,Math.floor(t)),n=Math.floor(e/3600),i=Math.floor(e%3600/60),a=String(e%60).padStart(2,"0");return n?`${n}:${String(i).padStart(2,"0")}:${a}`:`${i}:${a}`}function Ht(t,e){switch(t){case"hangup":return{title:"Call ended",body:`Thanks for talking with ${e}.`};case"left":return{title:"You left the line",body:"You can call again whenever you like."};case"missed":return{title:"You missed your turn",body:`${e} was ready, but the call wasn't joined in time.`};case"timeout":return{title:"Still busy",body:`Sorry for the wait. ${e} is still on other calls. Chat is open meanwhile.`};case"limit":return{title:"Time is up",body:"This call reached its time limit."};case"busy":return{title:"All lines are busy",body:"Try again in a few minutes, or keep chatting."};case"mic-denied":return{title:"Microphone needed",body:"Allow the microphone in your browser to talk, or keep chatting."};case"credits":case"unavailable":return{title:"Calls are unavailable",body:"Calls are not available right now. Chat is open."};default:return{title:"The call dropped",body:"Something interrupted the call. Try again."}}}function Ot(t){let e=[],n=/(\*\*[^*]+\*\*|`[^`]+`|\[[^\]]+\]\((https?:\/\/[^)\s]+)\)|https?:\/\/[^\s<>()]+[^\s<>().,;:!?'"]|\*[^*\s][^*]*\*)/g,i=0,a;for(;a=n.exec(t);){a.index>i&&e.push({t:"text",v:t.slice(i,a.index)});let r=a[0];r.startsWith("**")?e.push({t:"b",v:r.slice(2,-2)}):r.startsWith("`")?e.push({t:"code",v:r.slice(1,-1)}):r.startsWith("[")?e.push({t:"link",v:r.slice(1,r.indexOf("]")),href:a[2]}):r.startsWith("http")?e.push({t:"link",v:r,href:r}):e.push({t:"i",v:r.slice(1,-1)}),i=a.index+r.length}return i<t.length&&e.push({t:"text",v:t.slice(i)}),e}function Wt(t){let e=[];for(let n of t.split(/\n{2,}/)){let i=n.split(`
|
|
41
|
-
`);i.length&&i.every(a=>/^\s*[-*•]\s+/.test(a))?e.push({t:"ul",items:i.map(a=>Ot(a.replace(/^\s*[-*•]\s+/,"")))}):e.push({t:"p",parts:Ot(n)})}return e}var Yt={cx:.5,cy:.12,span:.06};function Nt(t,e,n){let i=t?.face?.eyes,a=t?.face?.chin;if(!i||!a||!e||!n)return Yt;let r=(i.left.x+i.right.x)/2,o=(i.left.y+i.right.y)/2,l=(a.y-o)/n;return l>.005&&l<.5?{cx:r/e,cy:(o+a.y)/2/n,span:l}:Yt}var $e={faceFraction:.26,at:{x:.5,y:.5}},qt={faceFraction:.14,at:{x:.5,y:.34}},Bt={faceFraction:.16,at:{x:.5,y:.22}},jt={fit:"height"};function Vt(t,e,n,i,a){if("fit"in a){let l=i*e;return{width:l,height:i,left:n/2-t.cx*l,top:0}}let r=i*a.faceFraction/t.span,o=r*e;return{width:o,height:r,left:n*a.at.x-t.cx*o,top:i*a.at.y-t.cy*r}}var li=0;function s(t,e,n,i,a,r){e||(e={});var o,l,u=e;if("ref"in u)for(l in u={},e)l=="ref"?o=e[l]:u[l]=e[l];var d={type:t,props:u,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--li,__i:-1,__u:0,__source:a,__self:r};if(typeof t=="function"&&(o=t.defaultProps))for(l in o)u[l]===void 0&&(u[l]=o[l]);return
|
|
42
|
-
`).map((i,a,r)=>s(M,{children:[i,a<r.length-1?s("br",{}):null]},`${n}.${a}`)))})}function _i({text:t}){return s(M,{children:Wt(t).map((e,n)=>e.t==="ul"?s("ul",{children:e.items.map((i,a)=>s("li",{children:s(rn,{parts:i})},a))},n):s("p",{children:s(rn,{parts:e.parts})},n))})}function sn({client:t,config:e,bind:n,onView:i}){let a=t.agent,r=t.features,o=e.showChat&&r.chat,l=e.showCall&&r.call,[u,d]=z(e.open?o?"chat":"call":"closed"),[p,m]=z(!1),[c,h]=z(!1),{messages:_,busy:v}=hi(t),{call:g,state:x,captions:k,reset:E}=fi(t),[P,F]=z(""),O=H(null),$=H(null),D=H(null),W=e.subtitle??a.tagline,y=a.name||"Assistant",R=Ie(f=>{d(f),i(f)},[i]),X=Ie(()=>{m(!0),setTimeout(()=>{m(!1),R("closed")},200)},[R]),q=Ie((f=o?"chat":"call")=>{h(!1),de(tt,"1"),R(f),f==="chat"&&t.chat.load().catch(()=>{})},[o,t,R]);I(()=>n({open:q,close:X}),[n,q,X]),I(()=>{e.open&&o&&t.chat.load().catch(()=>{})},[t,e.open,o]),I(()=>{if(!e.greeting||de(tt))return;let f=setTimeout(()=>h(!0),e.greetingDelay*1e3);return()=>clearTimeout(f)},[e.greeting,e.greetingDelay]);let[Re,un]=z(()=>!de(an));I(()=>{if(!Re)return;let f=setTimeout(()=>{un(!1),de(an,"1")},5e3);return()=>clearTimeout(f)},[Re]),I(()=>{if(u==="closed")return;let f=U=>{U.key==="Escape"&&X()};return window.addEventListener("keydown",f),()=>window.removeEventListener("keydown",f)},[u,X]),I(()=>{let f=O.current;f&&(f.scrollTop=f.scrollHeight)},[_,u,x?.phase]),I(()=>{u==="chat"&&setTimeout(()=>$.current?.focus({preventScroll:!0}),60)},[u]);let ee=e.face&&!!a.video,[pe,pn]=z("loading"),w=x?.phase??"idle";I(()=>{if(!(w!=="ready"||!g)){if(pi(),u==="call"){if(!ee||pe!=="loading"){g.accept();return}let f=setTimeout(()=>g.accept(),3e3);return()=>clearTimeout(f)}if(typeof document<"u"&&document.hidden){let f=document.title;document.title=`\u25CF ${y} is ready for you`;let U=()=>{document.title=f,document.removeEventListener("visibilitychange",U)};document.addEventListener("visibilitychange",U)}}},[w,g,u,y,ee,pe]);let at=w==="live"||w==="connecting";mi(g,D,at&&u==="call");let he=gi(x?.startedAt??null,w==="live"),Pe=bi(g,x?.position??1),fe=async()=>{R("call");try{await t.startCall({autoAccept:!1,...ee?{face:{emotion:()=>et.current}}:{}})}catch{}},Fe=async f=>{let U=f.trim();if(!(!U||v)){F(""),$.current&&($.current.style.height="");try{await t.chat.send(U)}catch{}}},hn=_.length>0&&_[_.length-1].role==="agent"&&_[_.length-1].streaming;if(u==="closed"){let f=w==="queued"||w==="ready"||w==="live"||w==="connecting";return s("div",{class:`dock dock--${e.display}`,part:"launcher",children:[c?s("div",{class:"greeting",part:"greeting",role:"status",onClick:()=>q(),children:[e.greeting,s("button",{class:"greeting__close","aria-label":"Dismiss",onClick:U=>{U.stopPropagation(),h(!1),de(tt,"1")},children:s(Ue,{size:14})})]}):null,s("button",{class:`presence presence--${e.display} ${f?"presence--live":""}`,part:"presence","aria-label":f?w==="queued"?`You are ${V(x?.position??1)} in line to call ${y}. Open`:`Back to your call with ${y}`:o?`Chat with ${y}`:`Call ${y}`,onClick:()=>q(f||!o?"call":"chat"),children:[e.display==="bubble"?s("span",{class:"presence__ring"}):null,s("span",{class:"presence__face",children:s(ce,{agent:a,shot:e.display==="full"?jt:e.display==="half"?Bt:$e})}),s("span",{class:"presence__dot"}),t.mode==="test"?s("span",{class:"testmode",title:"Test mode: this key only works on development sites",children:"TEST"}):null,w==="queued"?s("span",{class:"presence__badge","aria-hidden":"true",children:x?.position??1}):null,e.launcher==="bubble"&&!c?s("span",{class:"presence__label","aria-hidden":"true",children:f?w==="queued"?`${V(x?.position??1)} in line`:"Back to your call":o?`Chat with ${y}`:`Call ${y}`}):null]}),e.launcher==="bubble"?null:s("div",{class:`acts ${Re?"acts--labelled":""}`,part:"actions",children:[o?s("button",{class:"act","aria-label":`Chat with ${y}`,onClick:()=>q("chat"),children:[s(le,{size:20}),s("span",{class:"act__label","aria-hidden":"true",children:"Chat"})]}):null,l?s("button",{class:`act act--call ${f?"act--live":""}`,"aria-label":f?w==="queued"?`You are ${V(x?.position??1)} in line. Open your call`:"Back to your call":`Call ${y}`,onClick:()=>f?q("call"):void fe(),children:[s(Q,{size:20}),s("span",{class:"act__label","aria-hidden":"true",children:f?w==="queued"?`${V(x?.position??1)} in line`:"On call":"Call"}),w==="queued"?s("span",{class:"act__badge","aria-hidden":"true",children:x?.position??1}):null]}):null]})]})}let fn=s("div",{class:"head",part:"header",children:[s("div",{class:"head__face",children:s(ce,{agent:a,shot:$e,talking:!!hn})}),s("div",{class:"head__who",children:[s("div",{class:"head__name",children:y}),s("div",{class:"head__sub",children:[s("i",{}),v?"Typing\u2026":W||"Online"]})]}),l&&u==="chat"?s("button",{class:"icon-btn icon-btn--accent","aria-label":`Call ${y}`,title:`Call ${y}`,onClick:()=>g&&w!=="ended"?R("call"):void fe(),children:s(Q,{size:18})}):null,s("button",{class:"icon-btn","aria-label":"Close",onClick:X,children:s(Ue,{})})]});if(u==="chat")return s("div",{class:`panel ${p?"is-closing":""}`,part:"panel",role:"dialog","aria-label":`Chat with ${y}`,children:[fn,g&&(w==="queued"||w==="ready")?s("div",{class:"banner",part:"banner",role:"status",children:[s("div",{class:"banner__text",children:w==="queued"?s(M,{children:["You're ",s("b",{children:V(x?.position??1)})," in line for a call \xB7 ",Ee(x?.etaSeconds??null)]}):s(M,{children:[s("b",{children:[y," is ready for you"]})," \xB7 ",x?.holdSeconds??30,"s to join"]})}),w==="ready"?s("button",{class:"btn btn--accent btn--glow",onClick:()=>{g.accept(),R("call")},children:"Join"}):s("button",{class:"btn",onClick:()=>R("call"),children:"View"})]}):null,s("div",{class:"log",ref:O,role:"log","aria-live":"polite","aria-relevant":"additions",children:[_.length===0?s("div",{class:"empty",children:[s("div",{class:"empty__face",children:s(ce,{agent:a,shot:$e})}),s("div",{class:"empty__title",children:["Hi, I'm ",y]}),s("div",{class:"empty__body",children:[W?`${W}. `:"","Ask me anything",l?", or call me to talk":"","."]}),l?s("button",{class:"btn btn--accent empty__call",onClick:()=>g&&w!=="ended"?R("call"):void fe(),children:[s(Q,{size:17})," Call ",y]}):null,e.suggestions.length?s("div",{class:"chips",children:e.suggestions.map(f=>s("button",{class:"chip",onClick:()=>{Fe(f)},children:[s(Qt,{}),f]},f))}):null]}):null,_.map(f=>f.role==="agent"&&f.streaming&&!f.text?s("div",{class:"msg msg--agent typing","aria-label":`${y} is typing`,children:[s("i",{}),s("i",{}),s("i",{})]},f.id):s(M,{children:[s("div",{class:`msg msg--${f.role} ${f.failed?"msg--failed":""} ${f.streaming?"caret":""}`,part:`message message-${f.role}`,children:f.role==="agent"?s(_i,{text:f.text}):f.text}),f.failed?s("button",{class:"msg__retry",onClick:()=>{t.chat.retry(f.id).catch(()=>{})},children:[s(en,{})," Not sent \xB7 Retry"]}):null]},f.id))]}),s("form",{class:"compose",part:"composer",onSubmit:f=>{f.preventDefault(),Fe(P)},children:s("div",{class:"compose__box",children:[s("textarea",{ref:$,rows:1,value:P,maxLength:2e3,placeholder:e.placeholder,"aria-label":"Message",onInput:f=>{let U=f.currentTarget;F(U.value),U.style.height="auto",U.style.height=`${Math.min(120,U.scrollHeight)}px`},onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&!f.isComposing&&(f.preventDefault(),Fe(P))}}),s("button",{class:"send",type:"submit","aria-label":"Send",disabled:!P.trim()||v,children:s(Zt,{})})]})}),e.branding?s("div",{class:"foot",children:["Powered by"," ",s("a",{href:"https://character.xyz",target:"_blank",rel:"noopener noreferrer",children:"Character XYZ"})]}):null]});let S=x,De=S?.position??1,gn=Pe>1?(Pe-De)/(Pe-1):0,Oe=74,rt=2*Math.PI*Oe,te=S?.maxSeconds?S.maxSeconds-he:null,mn=S?.agentState??"idle",_n=S?.speaking?"Speaking":mn==="thinking"?"Thinking\u2026":"Listening",bn=!S||w==="ended"||w==="idle",He=Ht(S?.endReason??null,y);return s("div",{class:`panel ${p?"is-closing":""}`,part:"panel",role:"dialog","aria-label":`Call with ${y}`,children:s("div",{class:`stage ${ee&&pe==="ready"?"stage--face":""}`,ref:D,children:[s("div",{class:"stage__figure",style:{opacity:w==="queued"?.35:1,transition:"opacity .6s"},children:[s(ce,{agent:a,shot:qt,talking:!!S?.speaking}),ee?s("div",{class:`stage__face ${pe==="ready"?"is-ready":""}`,children:s(tn,{client:t,call:g,state:S,src:e.faceUrl,onStatus:pn})}):null]}),at?s("div",{class:"voice"}):null,s("div",{class:"stage__veil"}),s("div",{class:"stage__top",children:[w==="live"?s("span",{class:`badge ${te!=null&&te<=60?"badge--warn":""}`,role:"timer","aria-label":"Call time",children:[s("i",{}),te!=null&&te<=60?`${ze(te)} left`:ze(he)]}):s("span",{}),s("div",{style:{display:"flex",gap:"6px"},children:[o?s("button",{class:"icon-btn","aria-label":"Chat",title:"Chat",onClick:()=>q("chat"),children:s(le,{size:18})}):null,s("button",{class:"icon-btn","aria-label":"Minimise",onClick:X,children:s(Ue,{})})]})]}),s("div",{class:"stage__bottom","aria-live":"polite",children:[w==="joining"||w==="connecting"?s(M,{children:[s("div",{class:"stage__name",children:y}),s("div",{class:"stage__status",children:[s("span",{class:"spinner"})," ",w==="joining"?"Connecting\u2026":"Joining\u2026"]})]}):null,w==="queued"?s(M,{children:[s("div",{class:"line",role:"status","aria-label":`You are ${V(De)} in line, ${Ee(S?.etaSeconds??null)}`,children:[s("svg",{width:"168",height:"168",viewBox:"0 0 168 168",children:[s("circle",{class:"line__track",cx:"84",cy:"84",r:Oe,fill:"none","stroke-width":"7"}),s("circle",{class:"line__fill",cx:"84",cy:"84",r:Oe,fill:"none","stroke-width":"7","stroke-linecap":"round","stroke-dasharray":rt,"stroke-dashoffset":rt*(1-Math.max(.06,gn))})]}),s("div",{children:[s("div",{class:"line__num",children:V(De)}),s("div",{class:"line__lbl",children:"in line"})]})]}),s("div",{class:"title",children:[y," is on other calls"]}),s("div",{class:"note",children:["Your turn in ",Ee(S?.etaSeconds??null),". We'll chime when it's time",o?", so feel free to keep chatting.":"."]}),s("div",{class:"btn-row",children:[o?s("button",{class:"btn btn--accent",onClick:()=>q("chat"),children:[s(le,{size:18})," Keep chatting"]}):null,s("button",{class:"btn",onClick:()=>{g?.hangUp()},children:"Leave line"})]})]}):null,w==="ready"?s(M,{children:[s("div",{class:"title",children:[y," is ready for you"]}),s("div",{class:"note",children:["Join within ",S?.holdSeconds??30," seconds."]}),s("button",{class:"btn btn--accent btn--glow",onClick:()=>g?.accept(),children:[s(Q,{size:18})," Join call"]})]}):null,w==="live"?s(M,{children:[s("div",{class:"stage__name",children:y}),s("div",{class:"stage__status",children:[S?.speaking?s("span",{class:"wave","aria-hidden":"true",children:[.6,1,.75,1,.55].map((f,U)=>s("i",{style:{"--k":f}},U))}):null,S?.muted?"You are muted":_n]}),s("div",{class:"captions",children:k.slice(-2).map((f,U,xn)=>s("div",{class:`captions__line ${U===xn.length-1?"captions__line--now":""}`,children:f.role==="visitor"?`You: ${f.text}`:f.text},f.id))}),s("div",{class:"controls",children:[s("div",{class:"ctl",children:[s("button",{class:`round ${S?.muted?"round--on":""}`,"aria-pressed":S?.muted,"aria-label":S?.muted?"Unmute":"Mute",onClick:()=>g?.setMuted(!S?.muted),children:S?.muted?s(Jt,{size:22}):s(Xt,{size:22})}),s("span",{class:"round__label",children:S?.muted?"Unmute":"Mute"})]}),s("div",{class:"ctl",children:[s("button",{class:"round round--end","aria-label":"End call",onClick:()=>{g?.hangUp()},children:s(Kt,{size:26})}),s("span",{class:"round__label",children:"End"})]}),S?.speaking?s("div",{class:"ctl",children:[s("button",{class:"round","aria-label":`Interrupt ${y}`,onClick:()=>g?.interrupt(),children:s(Gt,{size:22})}),s("span",{class:"round__label",children:"Interrupt"})]}):null]})]}):null,bn?s(M,{children:[s("div",{class:"title",children:S?He.title:`Call ${y}`}),s("div",{class:"note",children:S?S.endReason==="hangup"&&he?`${ze(he)} \xB7 ${He.body}`:S.error??He.body:`Talk with ${y} in real time.`}),s("div",{class:"btn-row",children:[l&&S?.endReason!=="credits"&&S?.endReason!=="unavailable"?s("button",{class:"btn btn--accent",onClick:()=>{E(),fe()},children:[s(Q,{size:18})," ",S?"Call again":"Start call"]}):null,o?s("button",{class:"btn",onClick:()=>q("chat"),children:[s(le,{size:18})," Chat"]}):null]})]}):null]})]})})}function bi(t,e){let n=H({call:null,start:e});return n.current.call!==t&&(n.current={call:t,start:e}),e>n.current.start&&(n.current.start=e),n.current.start}var on=`
|
|
40
|
+
`),u=l;try{u=JSON.parse(l)}catch{}e({event:r,data:u})}return n}function Fn(t){if(t.byteLength<25)return null;let e=new DataView(t);if(e.getUint8(0)!==67||e.getUint8(1)!==88||e.getUint8(2)!==89||e.getUint8(3)!==90||e.getUint8(4)!==1)return null;let n=e.getUint8(5),i=(e.getUint8(6)&1)!==0,a=7,r=e.getUint16(a,!0);if(a+=2,a+r+20>t.byteLength)return null;let o=new TextDecoder().decode(new Uint8Array(t,a,r));a+=r+4+8+4;let l=e.getUint32(a,!0);return a+=4,a+l>t.byteLength?null:{kind:n,final:i,corr:o,payload:new Uint8Array(t,a,l)}}var Dn=.09,On=350,Hn=25e3,Wn=()=>({phase:"idle",callId:null,position:null,etaSeconds:null,holdSeconds:null,maxSeconds:null,startedAt:null,endReason:null,muted:!1,speaking:!1,agentState:"idle",error:null}),Yn=class extends Ye{constructor(t,e,n,i={}){super(),b(this,"apiUrl",t),b(this,"session",e),b(this,"agentId",n),b(this,"opts",i),b(this,"s",Wn()),b(this,"ticket",null),b(this,"eventsAbort",null),b(this,"ws",null),b(this,"mic",null),b(this,"players",new Map),b(this,"sampleRates",new Map),b(this,"cancelled",new Set),b(this,"speakingCorr",null),b(this,"heartbeat",null),b(this,"loudSince",null)}get state(){return this.s}audible(){let t=this.speakingCorr,e=t?this.players.get(t):void 0;return t&&e?{corr:t,ms:e.playedMs()}:null}voiceLevel(){let t=this.speakingCorr?this.players.get(this.speakingCorr):void 0;return t?t.level():0}set(t){this.s={...this.s,...t},this.emit("state",this.s)}async start(){if(this.s.phase==="idle"){this.set({phase:"joining"}),lt();try{this.mic=await Ln({deviceId:this.opts.deviceId,onFrame:(t,e)=>this.onMicFrame(t,e)})}catch{this.finish("mic-denied","Allow the microphone to talk, or chat instead.");return}try{let t=await this.session.token(),e=await re(this.apiUrl,"/sdk/v1/calls",{method:"POST",body:{},token:t});this.set({callId:e.callId,phase:e.state==="ready"?"joining":"queued",position:e.position??null,etaSeconds:e.etaSeconds??null}),this.follow()}catch(t){let e=t instanceof L?t:new L("unknown","Could not start the call."),n=e.code==="rate_limited"?"busy":"unavailable";this.finish(n,e.message),this.emit("error",e)}}}async follow(){let t=0;for(;this.s.callId&&this.s.phase!=="ended"&&this.s.phase!=="idle";){this.eventsAbort=new AbortController;try{let e=await this.session.token(),n=await _e(this.apiUrl,`/sdk/v1/calls/${encodeURIComponent(this.s.callId)}/events`,{token:e,signal:this.eventsAbort.signal});t=0,await ct(n,i=>this.onServerEvent(i.event,i.data),this.eventsAbort.signal)}catch(e){if(e?.name==="AbortError")return;if(e instanceof L&&e.code==="not_found"){this.finish("failed","The call ended.");return}if(t+=1,t>5){this.finish("failed","Lost the connection to the call.");return}}if(this.ended())return;await new Promise(e=>setTimeout(e,Math.min(4e3,500*2**t)))}}onServerEvent(t,e){switch(t){case"queued":(this.s.phase==="joining"||this.s.phase==="queued")&&this.set({phase:"queued",position:Number(e.position)||1,etaSeconds:Number(e.etaSeconds)||null});break;case"ready":{typeof e.ticket=="string"&&e.ticket&&(this.ticket=e.ticket);let n=Number(e.holdSeconds)||0;this.s.phase!=="ready"&&this.s.phase!=="connecting"&&this.s.phase!=="live"?(this.set({phase:"ready",holdSeconds:n,position:null,etaSeconds:null}),this.emit("ready",{holdSeconds:n}),this.opts.autoAccept!==!1&&this.accept()):this.s.phase==="ready"&&this.set({holdSeconds:n});break}case"live":this.set({phase:"live",maxSeconds:Number(e.maxSeconds)||null,startedAt:this.s.startedAt??Date.now()-(Number(e.elapsedSeconds)||0)*1e3});break;case"ended":this.finish(String(e.reason||"hangup")||"hangup",null);break}}ended(){return this.s.phase==="ended"}accept(){if(this.s.phase!=="ready"||!this.ticket||this.ws)return;this.set({phase:"connecting"});let t=this.apiUrl.replace(/^http/,"ws")+"/sdk/v1/calls/socket",e=new WebSocket(t,[`cxyz-ticket.${this.ticket}`]);this.ticket=null,e.binaryType="arraybuffer",this.ws=e,e.onopen=()=>{let n=this.opts.face,i=n?.emotion?.()??null;e.send(JSON.stringify({type:"agent_identity",agent_id:this.agentId,skin_index:0,blendshapes:!!n,...n?{blendshape_stream:!0}:{},...n&&i?{face_emotion:i}:{}})),e.send(JSON.stringify({type:"mic_state",silero:"off",denoise:!1})),this.heartbeat=setInterval(()=>this.sendJson({type:"heartbeat"}),Hn),this.set({phase:"live",startedAt:this.s.startedAt??Date.now()})},e.onmessage=n=>this.onSocket(n.data),e.onclose=()=>{this.ws=null,setTimeout(()=>{(this.s.phase==="live"||this.s.phase==="connecting")&&this.finish("hangup",null)},1500)}}sendJson(t){this.ws?.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(t))}onMicFrame(t,e){let n=this.ws;if(!(!n||n.readyState!==WebSocket.OPEN)){if(this.speakingCorr){let i=performance.now();if(e>Dn){if(this.loudSince??(this.loudSince=i),i-this.loudSince>=On){this.loudSince=null,this.interrupt(),n.send(t);return}}else this.loudSince=null;n.send(new ArrayBuffer(t.byteLength));return}n.send(t)}}onSocket(t){if(t instanceof ArrayBuffer){let n=Fn(t);if(!n||this.cancelled.has(n.corr))return;if(n.kind===3){this.opts.face&&this.emit("face",{corr:n.corr,payload:n.payload.slice()});return}if(n.kind!==1)return;let i=this.players.get(n.corr);if(!i){for(let[r,o]of this.players)o.stop(),this.players.delete(r);let a=n.corr;i=new zn({sampleRate:this.sampleRates.get(a)??16e3,onStart:()=>{this.speakingCorr=a,this.set({speaking:!0}),this.emit("line",{corr:a,event:"audible"}),this.sendJson({type:"playback_started",correlationId:a,timestampMs:Date.now()})},onEnd:()=>{this.players.delete(a),this.speakingCorr===a&&(this.speakingCorr=null),this.set({speaking:!1}),this.emit("line",{corr:a,event:"end"}),this.sendJson({type:"playback_ended",correlationId:a,timestampMs:Date.now(),reason:"natural"}),this.sendJson({type:"speech_ended"})}}),this.players.set(a,i)}i.enqueue(n.payload),n.final&&i.end();return}if(typeof t!="string")return;let e;try{e=JSON.parse(t)}catch{return}if("AgentSpeechMeta"in e){let n=e.AgentSpeechMeta;n?.correlation_id&&n.sample_rate&&this.sampleRates.set(n.correlation_id,n.sample_rate);return}if("InteractorTranscript"in e){let n=e.InteractorTranscript;n?.text&&this.emit("caption",{id:`v:${n.correlation_id}`,role:"visitor",text:n.text});return}if("AgentReplyTranscript"in e){let n=e.AgentReplyTranscript;n?.text&&!this.cancelled.has(n.correlation_id)&&this.emit("caption",{id:`a:${n.correlation_id}`,role:"agent",text:n.text});return}if(e.type==="turn_cancelled"&&typeof e.correlationId=="string"){let n=e.correlationId;this.cancelled.add(n),this.players.get(n)?.stop(),this.players.delete(n),this.emit("line",{corr:n,event:"end"}),this.speakingCorr===n&&(this.speakingCorr=null,this.set({speaking:!1})),this.emit("captionRemoved",`a:${n}`);return}e.kind==="agent_status"&&typeof e.state=="string"&&this.set({agentState:e.state.toLowerCase()})}interrupt(){let t=this.speakingCorr;if(!t)return;let e=this.players.get(t),n=Math.round(e?.playedMs()??0);e?.stop(),this.players.delete(t),this.cancelled.add(t),this.speakingCorr=null,this.set({speaking:!1}),this.emit("line",{corr:t,event:"end"}),this.sendJson({type:"playback_ended",correlationId:t,timestampMs:Date.now(),reason:"interrupted"}),this.sendJson({type:"interrupt",correlationId:t,heardMs:n,timestampMs:Date.now()})}setMuted(t){this.mic?.setMuted(t),this.set({muted:t})}async hangUp(){let t=this.s.callId,e=this.s.phase;if(this.finish(e==="live"?"hangup":"left",null),!!t)try{let n=await this.session.token();await _e(this.apiUrl,`/sdk/v1/calls/${encodeURIComponent(t)}`,{method:"DELETE",token:n})}catch{}}finish(t,e){if(this.s.phase==="ended")return;this.eventsAbort?.abort(),this.eventsAbort=null,this.heartbeat&&clearInterval(this.heartbeat),this.heartbeat=null;for(let i of this.players.values())i.stop();this.players.clear(),this.speakingCorr=null,this.mic?.stop(),this.mic=null;let n=this.ws;this.ws=null,n&&n.readyState<=WebSocket.OPEN&&n.close(1e3),this.ticket=null,this.set({phase:"ended",endReason:t,speaking:!1,holdSeconds:null,error:e})}},Nn=0,ot=t=>`${t}_${Date.now().toString(36)}_${(Nn++).toString(36)}`,qn=class extends Ye{constructor(t,e){super(),b(this,"apiUrl",t),b(this,"session",e),b(this,"list",[]),b(this,"loaded",!1),b(this,"busy",!1),b(this,"abort",null)}get messages(){return this.list}get isBusy(){return this.busy}publish(){this.list=[...this.list],this.emit("messages",this.list)}async load(){if(this.loaded)return this.list;let t=await this.session.token(),e=await re(this.apiUrl,"/sdk/v1/chat/messages?limit=50",{token:t}),n=this.list;return this.list=[...e?.messages??[],...n],this.loaded=!0,this.publish(),this.list}async send(t){let e=t.trim();if(!e)throw new L("invalid","Say something first.");if(this.busy)throw new L("rate_limited","Wait for the reply first.");this.setBusy(!0);let n={id:ot("local"),role:"visitor",text:e,createdAt:new Date().toISOString()},i={id:ot("reply"),role:"agent",text:"",createdAt:new Date().toISOString(),streaming:!0};this.list.push(n,i),this.publish(),this.abort=new AbortController;try{let a=await this.session.token(),r=await _e(this.apiUrl,"/sdk/v1/chat/messages",{method:"POST",body:{text:e},token:a,signal:this.abort.signal}),o=null,l=null;if(await ct(r,({event:d,data:p})=>{let m=p;d==="delta"&&typeof m?.text=="string"?(i.text+=m.text,this.publish()):d==="done"?o={id:String(m.id),role:"agent",text:String(m.text??i.text),createdAt:String(m.createdAt??i.createdAt)}:d==="error"&&(l=typeof m?.message=="string"?m.message:"Something went wrong.")},this.abort.signal),l||!o)throw new L("unknown",l??"The reply was cut off. Try again.");let u=o;return this.replace(i.id,u),u}catch(a){let r=a instanceof L?a:new L("network","The reply was cut off. Try again.");this.list=this.list.filter(l=>l.id!==i.id);let o=this.list.findIndex(l=>l.id===n.id);throw o!==-1&&(this.list[o]={...n,failed:!0,...r.status===429?{error:r.message}:{}}),this.publish(),a?.name!=="AbortError"&&this.emit("error",r),r}finally{this.abort=null,this.setBusy(!1)}}retry(t){let e=this.list.find(n=>n.id===t&&n.failed);if(!e)throw new L("not_found","Nothing to retry.");return this.list=this.list.filter(n=>n.id!==t),this.publish(),this.send(e.text)}stop(){this.abort?.abort()}replace(t,e){let n=this.list.findIndex(i=>i.id===t);n!==-1&&(this.list[n]=e),this.publish()}setBusy(t){this.busy=t,this.emit("busy",t)}},Bn=()=>{let t=new Map;return{get:e=>t.get(e)??null,set:(e,n)=>{t.set(e,n)}}},jn=()=>({get(t){try{return globalThis.localStorage?.getItem(t)??null}catch{return null}},set(t,e){try{globalThis.localStorage?.setItem(t,e)}catch{}}}),Vn=60,Kn=class{constructor(t){if(b(this,"src",t),b(this,"current",null),b(this,"inflight",null),!t.publishableKey&&!t.getSessionToken)throw new L("invalid","Pass a publishableKey, or getSessionToken for sessions your server mints.")}visitorKey(){return`cxyz:visitor:${(this.src.publishableKey??"server").slice(-12)}`}get info(){return this.current}async token(){let t=Date.now()/1e3;return this.current&&this.current.expiresAt-Vn>t?this.current.token:(await this.refresh()).token}refresh(){return this.inflight??(this.inflight=this.mint().finally(()=>{this.inflight=null})),this.inflight}async mint(){let t;if(this.src.getSessionToken){let e=await this.src.getSessionToken();typeof e=="string"?t=await this.describe(e):t=e}else{let e=this.src.store.get(this.visitorKey())??void 0;t=await re(this.src.apiUrl,"/sdk/v1/sessions",{method:"POST",body:{publishableKey:this.src.publishableKey,agentId:this.src.agentId,visitorId:e}}),this.src.store.set(this.visitorKey(),t.visitorId)}return this.current=t,t}async describe(t){return{...await re(this.src.apiUrl,"/sdk/v1/session",{token:t}),token:t}}},Xn="https://api.character.xyz",dt=class ut extends Ye{constructor(e,n,i){super(),b(this,"apiUrl",e),b(this,"session",n),b(this,"info",i),b(this,"chat"),b(this,"currentCall",null),b(this,"destroyed",!1),this.chat=new qn(e,n)}static async init(e){let n=(e.apiUrl??Xn).replace(/\/+$/,"");if(e.publishableKey&&/^cxyz_sk_/.test(e.publishableKey))throw new L("invalid","That is a SECRET key. Never put it in a web page: use a publishable key (cxyz_pk_\u2026). Revoke the secret key now.");let i=e.storage==="memory"?Bn():e.storage&&typeof e.storage=="object"?e.storage:jn(),a=new Kn({apiUrl:n,agentId:e.agentId,publishableKey:e.publishableKey,getSessionToken:e.getSessionToken,store:i}),r=await a.refresh();return new ut(n,a,r)}get agent(){return(this.session.info??this.info).agent}get features(){return(this.session.info??this.info).features}get appearance(){return(this.session.info??this.info).appearance??{}}get visitorId(){return(this.session.info??this.info).visitorId}get mode(){return(this.session.info??this.info).mode}get call(){return this.currentCall&&this.currentCall.state.phase!=="ended"?this.currentCall:null}async videoAvatar(){let e=await this.session.token();return re(this.apiUrl,"/sdk/v1/agent/video-avatar",{token:e})}async startCall(e={}){if(this.destroyed)throw new L("invalid","This client was destroyed.");if(!this.features.call)throw new L("forbidden","Calls are not available on this site.");if(this.call)return this.call;let n=new Yn(this.apiUrl,this.session,this.agent.id,e);return this.currentCall=n,n.on("state",i=>{i.phase==="ended"&&this.currentCall===n&&this.emit("call",null)}),n.on("error",i=>this.emit("error",i)),this.emit("call",n),await n.start(),n}destroy(){this.destroyed=!0,this.currentCall?.hangUp(),this.chat.stop(),this.chat.clear(),this.clear()}};var Se,S,mt,Jn,j,pt,_t,bt,Ne,xe,se,xt,je,qe,Be,Zn,ke={},we=[],Gn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Ae=Array.isArray;function B(t,e){for(var n in e)t[n]=e[n];return t}function Ve(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function Qn(t,e,n){var i,a,r,o={};for(r in e)r=="key"?i=e[r]:r=="ref"?a=e[r]:o[r]=e[r];if(arguments.length>2&&(o.children=arguments.length>3?Se.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)o[r]===void 0&&(o[r]=t.defaultProps[r]);return ve(t,o,i,a,null)}function ve(t,e,n,i,a){var r={type:t,props:e,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:a??++mt,__i:-1,__u:0};return a==null&&S.vnode!=null&&S.vnode(r),r}function M(t){return t.children}function ye(t,e){this.props=t,this.context=e}function K(t,e){if(e==null)return t.__?K(t.__,t.__i+1):null;for(var n;e<t.__k.length;e++)if((n=t.__k[e])!=null&&n.__e!=null)return n.__e;return typeof t.type=="function"?K(t):null}function ei(t){if(t.__P&&t.__d){var e=t.__v,n=e.__e,i=[],a=[],r=B({},e);r.__v=e.__v+1,S.vnode&&S.vnode(r),Ke(t.__P,r,e,t.__n,t.__P.namespaceURI,32&e.__u?[n]:null,i,n??K(e),!!(32&e.__u),a),r.__v=e.__v,r.__.__k[r.__i]=r,Ct(i,r,a),e.__e=e.__=null,r.__e!=n&&vt(r)}}function vt(t){if((t=t.__)!=null&&t.__c!=null)return t.__e=t.__c.base=null,t.__k.some(function(e){if(e!=null&&e.__e!=null)return t.__e=t.__c.base=e.__e}),vt(t)}function ht(t){(!t.__d&&(t.__d=!0)&&j.push(t)&&!Ce.__r++||pt!=S.debounceRendering)&&((pt=S.debounceRendering)||_t)(Ce)}function Ce(){try{for(var t,e=1;j.length;)j.length>e&&j.sort(bt),t=j.shift(),e=j.length,ei(t)}finally{j.length=Ce.__r=0}}function yt(t,e,n,i,a,r,o,l,u,d,p){var m,c,f,_,v,g,x=i&&i.__k||we,k=e.length;for(u=ti(n,e,x,u,k),m=0;m<k;m++)(f=n.__k[m])!=null&&(c=f.__i!=-1&&x[f.__i]||ke,f.__i=m,g=Ke(t,f,c,a,r,o,l,u,d,p),_=f.__e,f.ref&&c.ref!=f.ref&&(c.ref&&Xe(c.ref,null,f),p.push(f.ref,f.__c||_,f)),v==null&&_!=null&&(v=_),4&f.__u?(u=kt(f,u,t),c.__e&&(c.__e=null)):typeof f.type=="function"&&g!==void 0?u=g:_&&(u=_.nextSibling),f.__u&=-7);return n.__e=v,u}function ti(t,e,n,i,a){var r,o,l,u,d,p=n.length,m=p,c=0;for(t.__k=new Array(a),r=0;r<a;r++)(o=e[r])!=null&&typeof o!="boolean"&&typeof o!="function"?(typeof o=="string"||typeof o=="number"||typeof o=="bigint"||o.constructor==String?o=t.__k[r]=ve(null,o,null,null,null):Ae(o)?o=t.__k[r]=ve(M,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=t.__k[r]=ve(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):t.__k[r]=o,u=r+c,o.__=t,o.__b=t.__b+1,l=null,(d=o.__i=ni(o,n,u,m))!=-1&&(m--,(l=n[d])&&(l.__u|=2)),l==null||l.__v==null?(d==-1&&(a>p?c--:a<p&&c++),typeof o.type!="function"&&(o.__u|=4)):d!=u&&(d==u-1?c--:d==u+1?c++:(d>u?c--:c++,o.__u|=4))):t.__k[r]=null;if(m)for(r=0;r<p;r++)(l=n[r])!=null&&(2&l.__u)==0&&(l.__e==i&&(i=K(l)),At(l,l));return i}function kt(t,e,n){var i,a;if(typeof t.type=="function"){for(i=t.__k,a=0;i&&a<i.length;a++)i[a]&&(i[a].__=t,e=kt(i[a],e,n));return e}t.__e!=e&&(e&&t.type&&!e.parentNode&&(e=K(t)),e=n.insertBefore(t.__e,e||null));do e=e&&e.nextSibling;while(e!=null&&e.nodeType==8);return e}function ni(t,e,n,i){var a,r,o,l=t.key,u=t.type,d=e[n],p=d!=null&&(2&d.__u)==0;if(d===null&&l==null||p&&l==d.key&&u==d.type)return n;if(i>(p?1:0)){for(a=n-1,r=n+1;a>=0||r<e.length;)if((d=e[o=a>=0?a--:r++])!=null&&(2&d.__u)==0&&l==d.key&&u==d.type)return o}return-1}function ft(t,e,n){e[0]=="-"?t.setProperty(e,n??""):t[e]=n==null?"":typeof n!="number"||Gn.test(e)?n:n+"px"}function be(t,e,n,i,a){var r,o;e:if(e=="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof i=="string"&&(t.style.cssText=i=""),i)for(e in i)n&&e in n||ft(t.style,e,"");if(n)for(e in n)i&&n[e]==i[e]||ft(t.style,e,n[e])}else if(e[0]=="o"&&e[1]=="n")r=e!=(e=e.replace(xt,"$1")),o=e.toLowerCase(),e=o in t||e=="onFocusOut"||e=="onFocusIn"?o.slice(2):e.slice(2),t.l||(t.l={}),t.l[e+r]=n,n?i?n[se]=i[se]:(n[se]=je,t.addEventListener(e,r?Be:qe,r)):t.removeEventListener(e,r?Be:qe,r);else{if(a=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in t)try{t[e]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&e[4]!="-"?t.removeAttribute(e):t.setAttribute(e,e=="popover"&&n==1?"":n))}}function gt(t){return function(e){if(this.l){var n=this.l[e.type+t];if(e[xe]==null)e[xe]=je++;else if(e[xe]<n[se])return;return n(S.event?S.event(e):e)}}}function Ke(t,e,n,i,a,r,o,l,u,d){var p,m,c,f,_,v,g,x,k,E,P,F,O,$,D,W,y=e.type;if(e.constructor!==void 0)return null;128&n.__u&&(u=!!(32&n.__u),r=[l=e.__e=n.__e]),(p=S.__b)&&p(e);e:if(typeof y=="function"){m=o.length;try{if(k=e.props,E=y.prototype&&y.prototype.render,P=(p=y.contextType)&&i[p.__c],F=p?P?P.props.value:p.__:i,n.__c?x=(c=e.__c=n.__c).__=c.__E:(E?e.__c=c=new y(k,F):(e.__c=c=new ye(k,F),c.constructor=y,c.render=ai),P&&P.sub(c),c.state||(c.state={}),c.__n=i,f=c.__d=!0,c.__h=[],c._sb=[]),E&&c.__s==null&&(c.__s=c.state),E&&y.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=B({},c.__s)),B(c.__s,y.getDerivedStateFromProps(k,c.__s))),_=c.props,v=c.state,c.__v=e,f)E&&y.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),E&&c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(E&&y.getDerivedStateFromProps==null&&k!==_&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(k,F),e.__v==n.__v||!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(k,c.__s,F)===!1){e.__v!=n.__v&&(c.props=k,c.state=c.__s,c.__d=!1),e.__e=n.__e,e.__k=n.__k,e.__k.some(function(R){R&&(R.__=e)}),we.push.apply(c.__h,c._sb),c._sb=[],c.__h.length&&o.push(c),l=K(n);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(k,c.__s,F),E&&c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(_,v,g)})}if(c.context=F,c.props=k,c.__P=t,c.__e=!1,O=S.__r,$=0,E)c.state=c.__s,c.__d=!1,O&&O(e),p=c.render(c.props,c.state,c.context),we.push.apply(c.__h,c._sb),c._sb=[];else do c.__d=!1,O&&O(e),p=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++$<25);c.state=c.__s,c.getChildContext!=null&&(i=B(B({},i),c.getChildContext())),E&&!f&&c.getSnapshotBeforeUpdate!=null&&(g=c.getSnapshotBeforeUpdate(_,v)),D=p!=null&&p.type===M&&p.key==null?St(p.props.children):p,l=yt(t,Ae(D)?D:[D],e,n,i,a,r,o,l,u,d),c.base=e.__e,e.__u&=-161,c.__h.length&&o.push(c),x&&(c.__E=c.__=null)}catch(R){if(o.length=m,e.__v=null,u||r!=null){if(R.then){for(e.__u|=u?160:128;l&&l.nodeType==8&&l.nextSibling;)l=l.nextSibling;r!=null&&(r[r.indexOf(l)]=null),e.__e=l}else if(r!=null)for(W=r.length;W--;)Ve(r[W])}else e.__e=n.__e;e.__k==null&&(e.__k=n.__k||[]),R.then||wt(e),S.__e(R,e,n)}}else r==null&&e.__v==n.__v?(e.__k=n.__k,e.__e=n.__e):l=e.__e=ii(n.__e,e,n,i,a,r,o,u,d);return(p=S.diffed)&&p(e),128&e.__u?void 0:l}function wt(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(wt))}function Ct(t,e,n){for(var i=0;i<n.length;i++)Xe(n[i],n[++i],n[++i]);S.__c&&S.__c(e,t),t.some(function(a){try{t=a.__h,a.__h=[],t.some(function(r){r.call(a)})}catch(r){S.__e(r,a.__v)}})}function St(t){return typeof t!="object"||t==null||t.__b>0?t:Ae(t)?t.map(St):t.constructor!==void 0?null:B({},t)}function ii(t,e,n,i,a,r,o,l,u){var d,p,m,c,f,_,v,g=n.props||ke,x=e.props,k=e.type;if(k=="svg"?a="http://www.w3.org/2000/svg":k=="math"?a="http://www.w3.org/1998/Math/MathML":a||(a="http://www.w3.org/1999/xhtml"),r!=null){for(d=0;d<r.length;d++)if((f=r[d])&&"setAttribute"in f==!!k&&(k?f.localName==k:f.nodeType==3)){t=f,r[d]=null;break}}if(t==null){if(k==null)return document.createTextNode(x);t=document.createElementNS(a,k,x.is&&x),l&&(S.__m&&S.__m(e,r),l=!1),r=null}if(k==null)g===x||l&&t.data==x||(t.data=x);else{if(r=k=="textarea"&&x.defaultValue!=null?null:r&&Se.call(t.childNodes),!l&&r!=null)for(g={},d=0;d<t.attributes.length;d++)g[(f=t.attributes[d]).name]=f.value;for(d in g)f=g[d],d=="dangerouslySetInnerHTML"?m=f:d=="children"||d in x||d=="value"&&"defaultValue"in x||d=="checked"&&"defaultChecked"in x||be(t,d,null,f,a);for(d in x)f=x[d],d=="children"?c=f:d=="dangerouslySetInnerHTML"?p=f:d=="value"?_=f:d=="checked"?v=f:l&&typeof f!="function"||g[d]===f||be(t,d,f,g[d],a);if(p)l||m&&(p.__html==m.__html||p.__html==t.innerHTML)||(t.innerHTML=p.__html),e.__k=[];else if(m&&(t.innerHTML=""),yt(e.type=="template"?t.content:t,Ae(c)?c:[c],e,n,i,k=="foreignObject"?"http://www.w3.org/1999/xhtml":a,r,o,r?r[0]:n.__k&&K(n,0),l,u),r!=null)for(d=r.length;d--;)Ve(r[d]);l&&k!="textarea"||(d="value",k=="progress"&&_==null?t.removeAttribute("value"):_!=null&&(_!==t[d]||k=="progress"&&!_||k=="option"&&_!=g[d])&&be(t,d,_,g[d],a),d="checked",v!=null&&v!=t[d]&&be(t,d,v,g[d],a))}return t}function Xe(t,e,n){try{if(typeof t=="function"){var i=typeof t.__u=="function";i&&t.__u(),i&&e==null||(t.__u=t(e))}else t.current=e}catch(a){S.__e(a,n)}}function At(t,e,n){var i,a;if(S.unmount&&S.unmount(t),(i=t.ref)&&(i.current&&i.current!=t.__e||Xe(i,null,e)),(i=t.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(r){S.__e(r,e)}i.base=i.__P=i.__n=null}if(i=t.__k)for(a=0;a<i.length;a++)i[a]&&At(i[a],e,n||typeof t.type!="function");n||Ve(t.__e),t.__c=t.__=t.__e=void 0}function ai(t,e,n){return this.constructor(t,n)}function Je(t,e,n){var i,a,r,o;e==document&&(e=document.documentElement),S.__&&S.__(t,e),a=(i=typeof n=="function")?null:n&&n.__k||e.__k,r=[],o=[],Ke(e,t=(!i&&n||e).__k=Qn(M,null,[t]),a||ke,ke,e.namespaceURI,!i&&n?[n]:a?null:e.firstChild?Se.call(e.childNodes):null,r,!i&&n?n:a?a.__e:e.firstChild,i,o),Ct(r,t,o),t.props.children=null}Se=we.slice,S={__e:function(t,e,n,i){for(var a,r,o;e=e.__;)if((a=e.__c)&&!a.__)try{if((r=a.constructor)&&r.getDerivedStateFromError!=null&&(a.setState(r.getDerivedStateFromError(t)),o=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(t,i||{}),o=a.__d),o)return a.__E=a}catch(l){t=l}throw t}},mt=0,Jn=function(t){return t!=null&&t.constructor===void 0},ye.prototype.setState=function(t,e){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=B({},this.state),typeof t=="function"&&(t=t(B({},n),this.props)),t&&B(n,t),t!=null&&this.__v&&(e&&this._sb.push(e),ht(this))},ye.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),ht(this))},ye.prototype.render=M,j=[],_t=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,bt=function(t,e){return t.__v.__b-e.__v.__b},Ce.__r=0,Ne=Math.random().toString(8),xe="__d"+Ne,se="__a"+Ne,xt=/(PointerCapture)$|Capture$/i,je=0,qe=gt(!1),Be=gt(!0),Zn=0;var G,A,Ze,Mt,oe=0,Rt=[],T=S,Tt=T.__b,It=T.__r,Et=T.diffed,zt=T.__c,$t=T.unmount,Ut=T.__;function Te(t,e){T.__h&&T.__h(A,t,oe||e),oe=0;var n=A.__H||(A.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function z(t){return oe=1,ri(Dt,t)}function ri(t,e,n){var i=Te(G++,2);if(i.t=t,!i.__c&&(i.__=[n?n(e):Dt(void 0,e),function(l){var u=i.__N?i.__N[0]:i.__[0],d=i.t(u,l);u!==d&&(i.__N=[d,i.__[1]],i.__c.setState({}))}],i.__c=A,!A.__f)){var a=function(l,u,d){if(!i.__c.__H)return!0;var p=!1,m=i.__c.props!==l;if(i.__c.__H.__.some(function(f){if(f.__N){p=!0;var _=f.__[0];f.__=f.__N,f.__N=void 0,_!==f.__[0]&&(m=!0)}}),r){var c=r.call(this,l,u,d);return p?c||m:c}return!p||m};A.__f=!0;var r=A.shouldComponentUpdate,o=A.componentWillUpdate;A.componentWillUpdate=function(l,u,d){if(this.__e){var p=r;r=void 0,a(l,u,d),r=p}o&&o.call(this,l,u,d)},A.shouldComponentUpdate=a}return i.__N||i.__}function I(t,e){var n=Te(G++,3);!T.__s&&Qe(n.__H,e)&&(n.__=t,n.u=e,A.__H.__h.push(n))}function Pt(t,e){var n=Te(G++,4);!T.__s&&Qe(n.__H,e)&&(n.__=t,n.u=e,A.__h.push(n))}function H(t){return oe=5,Ft(function(){return{current:t}},[])}function Ft(t,e){var n=Te(G++,7);return Qe(n.__H,e)&&(n.__=t(),n.__H=e,n.__h=t),n.__}function Ie(t,e){return oe=8,Ft(function(){return t},e)}function si(){for(var t;t=Rt.shift();){var e=t.__H;if(t.__P&&e)try{e.__h.some(Me),e.__h.some(Ge),e.__h=[]}catch(n){e.__h=[],T.__e(n,t.__v)}}}T.__b=function(t){A=null,Tt&&Tt(t)},T.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),Ut&&Ut(t,e)},T.__r=function(t){It&&It(t),G=0;var e=(A=t.__c).__H;e&&(Ze===A?(e.__h=[],A.__h=[],e.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(e.__h.some(Me),e.__h.some(Ge),e.__h=[],G=0)),Ze=A},T.diffed=function(t){Et&&Et(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(Rt.push(e)!==1&&Mt===T.requestAnimationFrame||((Mt=T.requestAnimationFrame)||oi)(si)),e.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),Ze=A=null},T.__c=function(t,e){e.some(function(n){try{n.__h.some(Me),n.__h=n.__h.filter(function(i){return!i.__||Ge(i)})}catch(i){e.some(function(a){a.__h&&(a.__h=[])}),e=[],T.__e(i,n.__v)}}),zt&&zt(t,e)},T.unmount=function(t){$t&&$t(t);var e,n=t.__c;n&&n.__H&&(n.__H.__.some(function(i){try{Me(i)}catch(a){e=a}}),n.__H=void 0,e&&T.__e(e,n.__v))};var Lt=typeof requestAnimationFrame=="function";function oi(t){var e,n=function(){clearTimeout(i),Lt&&cancelAnimationFrame(e),setTimeout(t)},i=setTimeout(n,35);Lt&&(e=requestAnimationFrame(n))}function Me(t){var e=A,n=t.__c;typeof n=="function"&&(t.__c=void 0,n()),A=e}function Ge(t){var e=A;t.__c=t.__(),A=e}function Qe(t,e){return!t||t.length!==e.length||e.some(function(n,i){return n!==t[i]})}function Dt(t,e){return typeof e=="function"?e(t):e}function V(t){let e=t%100;if(e>=11&&e<=13)return`${t}th`;switch(t%10){case 1:return`${t}st`;case 2:return`${t}nd`;case 3:return`${t}rd`;default:return`${t}th`}}function Ee(t){if(t==null)return"";if(t<60)return"less than a minute";let e=Math.round(t/60);return e<60?`about ${e} min`:`about ${Math.round(e/60)} hr`}function ze(t){let e=Math.max(0,Math.floor(t)),n=Math.floor(e/3600),i=Math.floor(e%3600/60),a=String(e%60).padStart(2,"0");return n?`${n}:${String(i).padStart(2,"0")}:${a}`:`${i}:${a}`}function Ht(t,e){switch(t){case"hangup":return{title:"Call ended",body:`Thanks for talking with ${e}.`};case"left":return{title:"You left the line",body:"You can call again whenever you like."};case"missed":return{title:"You missed your turn",body:`${e} was ready, but the call wasn't joined in time.`};case"timeout":return{title:"Still busy",body:`Sorry for the wait. ${e} is still on other calls. Chat is open meanwhile.`};case"limit":return{title:"Time is up",body:"This call reached its time limit."};case"busy":return{title:"All lines are busy",body:"Try again in a few minutes, or keep chatting."};case"mic-denied":return{title:"Microphone needed",body:"Allow the microphone in your browser to talk, or keep chatting."};case"silence":return{title:"Call ended",body:`The line was quiet for a minute, so ${e} hung up. Call again any time.`};case"daily_limit":return{title:"Calls are resting",body:"Calls are done for today. Chat is open."};case"credits":case"unavailable":return{title:"Calls are unavailable",body:"Calls are not available right now. Chat is open."};default:return{title:"The call dropped",body:"Something interrupted the call. Try again."}}}function Ot(t){let e=[],n=/(\*\*[^*]+\*\*|`[^`]+`|\[[^\]]+\]\((https?:\/\/[^)\s]+)\)|https?:\/\/[^\s<>()]+[^\s<>().,;:!?'"]|\*[^*\s][^*]*\*)/g,i=0,a;for(;a=n.exec(t);){a.index>i&&e.push({t:"text",v:t.slice(i,a.index)});let r=a[0];r.startsWith("**")?e.push({t:"b",v:r.slice(2,-2)}):r.startsWith("`")?e.push({t:"code",v:r.slice(1,-1)}):r.startsWith("[")?e.push({t:"link",v:r.slice(1,r.indexOf("]")),href:a[2]}):r.startsWith("http")?e.push({t:"link",v:r,href:r}):e.push({t:"i",v:r.slice(1,-1)}),i=a.index+r.length}return i<t.length&&e.push({t:"text",v:t.slice(i)}),e}function Wt(t){let e=[];for(let n of t.split(/\n{2,}/)){let i=n.split(`
|
|
41
|
+
`);i.length&&i.every(a=>/^\s*[-*•]\s+/.test(a))?e.push({t:"ul",items:i.map(a=>Ot(a.replace(/^\s*[-*•]\s+/,"")))}):e.push({t:"p",parts:Ot(n)})}return e}var Yt={cx:.5,cy:.12,span:.06};function Nt(t,e,n){let i=t?.face?.eyes,a=t?.face?.chin;if(!i||!a||!e||!n)return Yt;let r=(i.left.x+i.right.x)/2,o=(i.left.y+i.right.y)/2,l=(a.y-o)/n;return l>.005&&l<.5?{cx:r/e,cy:(o+a.y)/2/n,span:l}:Yt}var $e={faceFraction:.26,at:{x:.5,y:.5}},qt={faceFraction:.14,at:{x:.5,y:.34}},Bt={faceFraction:.16,at:{x:.5,y:.22}},jt={fit:"height"};function Vt(t,e,n,i,a){if("fit"in a){let l=i*e;return{width:l,height:i,left:n/2-t.cx*l,top:0}}let r=i*a.faceFraction/t.span,o=r*e;return{width:o,height:r,left:n*a.at.x-t.cx*o,top:i*a.at.y-t.cy*r}}var li=0;function s(t,e,n,i,a,r){e||(e={});var o,l,u=e;if("ref"in u)for(l in u={},e)l=="ref"?o=e[l]:u[l]=e[l];var d={type:t,props:u,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--li,__i:-1,__u:0,__source:a,__self:r};if(typeof t=="function"&&(o=t.defaultProps))for(l in o)u[l]===void 0&&(u[l]=o[l]);return S.vnode&&S.vnode(d),d}var N=(t,e)=>s("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false",children:e}),le=({size:t=20})=>N(t,s("path",{d:"M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.6a.5.5 0 0 1-.8-.4V16h0A2.5 2.5 0 0 1 4 13.5z"})),Q=({size:t=20})=>N(t,s("path",{d:"M5.2 3.5h3l1.6 4.2-2 1.4a12 12 0 0 0 7.1 7.1l1.4-2 4.2 1.6v3a1.7 1.7 0 0 1-1.8 1.7A16.6 16.6 0 0 1 3.5 5.3 1.7 1.7 0 0 1 5.2 3.5z"})),Kt=({size:t=22})=>N(t,s("path",{d:"M3 13.6c5-4.4 13-4.4 18 0l-1.7 2.6-3.6-1.3v-2.6a11 11 0 0 0-7.4 0v2.6l-3.6 1.3z"})),Xt=({size:t=20})=>N(t,s(M,{children:[s("rect",{x:"9",y:"3",width:"6",height:"11",rx:"3"}),s("path",{d:"M5.5 11a6.5 6.5 0 0 0 13 0M12 17.5V21"})]})),Jt=({size:t=20})=>N(t,s(M,{children:[s("path",{d:"M9 9v2a3 3 0 0 0 5.1 2.1M15 9.4V6a3 3 0 0 0-5.7-1.3"}),s("path",{d:"M5.5 11a6.5 6.5 0 0 0 10.6 5M18.4 12.5a6.5 6.5 0 0 0 .1-1.5M12 17.5V21M3 3l18 18"})]})),Ue=({size:t=18})=>N(t,s("path",{d:"M6 6l12 12M18 6L6 18"})),Zt=({size:t=18})=>N(t,s("path",{d:"M12 19V5M5.5 11.5L12 5l6.5 6.5"})),Gt=({size:t=18})=>N(t,s("path",{d:"M15 5l-7 7 7 7"})),Qt=({size:t=14})=>N(t,s("path",{d:"M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z"})),en=({size:t=14})=>N(t,s("path",{d:"M4 12a8 8 0 1 0 2.3-5.6M4 4v4h4"}));var et={current:null};function ci(t){return t?t.speaking?"speaking":t.agentState==="thinking"?"reasoning":t.agentState==="listening"||t.phase==="live"?"listening":"idle":"idle"}function tn({client:t,call:e,state:n,src:i,onStatus:a}){let r=H(null),[o,l]=z(!1),u=H(!1),d=(()=>{try{return new URL(i).origin}catch{return null}})(),p=(c,f)=>{let _=r.current?.contentWindow;_&&d&&_.postMessage({cx:"face",...c},d,f??[])};I(()=>{if(!d){a("unavailable");return}let c=!1,f=v=>{if(v.source!==r.current?.contentWindow||v.origin!==d)return;let g=v.data;g?.cx==="face"&&(g.type==="loaded"?(u.current=!0,l(!0),t.videoAvatar().then(x=>{c||(x?p({type:"init",avatar:x}):a("unavailable"))}).catch(()=>!c&&a("unavailable"))):g.type==="ready"?(et.current=typeof g.faceEmotion=="string"?g.faceEmotion:null,a("ready")):g.type==="unavailable"&&a("unavailable"))};window.addEventListener("message",f);let _=setTimeout(()=>!c&&!u.current&&a("unavailable"),15e3);return()=>{c=!0,clearTimeout(_),window.removeEventListener("message",f)}},[t,d]);let m=ci(n);return I(()=>{o&&p({type:"state",state:m})},[m,o]),I(()=>{if(!e||!o)return;let c=[e.on("face",({corr:v,payload:g})=>p({type:"batch",corr:v,payload:g},[g.buffer])),e.on("line",({corr:v,event:g})=>{p(g==="audible"?{type:"audible",corr:v,ms:e.audible()?.ms??0}:{type:"end",corr:v})})],f=0,_=()=>{let v=e.audible();v&&p({type:"clock",corr:v.corr,ms:v.ms}),f=requestAnimationFrame(_)};return f=requestAnimationFrame(_),()=>{c.forEach(v=>v()),cancelAnimationFrame(f)}},[e,o]),d?s("iframe",{ref:r,class:"face-frame",src:i,title:"","aria-hidden":"true",tabIndex:-1,allow:"autoplay",sandbox:"allow-scripts allow-same-origin",referrerpolicy:"strict-origin"}):null}function di(){if(typeof document>"u")return!1;let t=navigator.userAgent;return/Safari\//.test(t)&&!/(Chrome|Chromium|Edg|OPR|Firefox)\//.test(t)?!1:document.createElement("video").canPlayType('video/webm; codecs="vp9"')!==""}var ui=()=>typeof matchMedia<"u"&&matchMedia("(prefers-reduced-motion: reduce)").matches;function ce({agent:t,shot:e,talking:n=!1,still:i=!1,class:a}){let r=H(null),[o,l]=z({w:0,h:0}),[u,d]=z(null),[p,m]=z({}),c=t.video,f=c?.anchor?.alphaUrl??c?.anchor?.url??null,_=!i&&!ui()&&di(),v=c?.clips.idle?.alphaUrl??null,g=c?.clips.talking?.alphaUrl??v;if(Pt(()=>{let $=r.current;if(!$)return;let D=()=>l({w:$.clientWidth,h:$.clientHeight});if(D(),typeof ResizeObserver>"u")return;let W=new ResizeObserver(D);return W.observe($),()=>W.disconnect()},[]),!c||!f)return s("div",{ref:r,class:`portrait portrait--initial ${a??""}`,"aria-hidden":"true",children:s("span",{children:(t.name||"?").slice(0,1).toUpperCase()})});let x=u?u.w/u.h:.75,k=Nt(c,u?.w??0,u?.h??0),E=o.w&&o.h?Vt(k,x,o.w,o.h,e):null,P=E?{width:`${E.width}px`,height:`${E.height}px`,left:`${E.left}px`,top:`${E.top}px`}:{opacity:0},F=_&&!!v&&!!p.idle,O=_&&!!g&&g!==v&&!!p.talk&&n;return s("div",{ref:r,class:`portrait ${a??""}`,"aria-hidden":"true",children:[s("img",{class:"portrait__media",src:f,alt:"",draggable:!1,style:{...P,opacity:E?F?0:1:0},onLoad:$=>{let D=$.currentTarget;d({w:D.naturalWidth,h:D.naturalHeight})}}),_&&v?s(nn,{src:v,style:P,visible:F&&!O,onReady:()=>m($=>({...$,idle:!0}))}):null,_&&g&&g!==v?s(nn,{src:g,style:P,visible:O,onReady:()=>m($=>({...$,talk:!0}))}):null]})}function nn({src:t,style:e,visible:n,onReady:i}){let a=H(null);return I(()=>{let r=a.current;r&&(n?r.play().catch(()=>{}):r.pause())},[n]),s("video",{ref:a,class:"portrait__media portrait__clip",src:t,muted:!0,loop:!0,playsInline:!0,preload:"auto",style:{...e,opacity:n?1:0},onLoadedData:i})}var tt="cxyz:greeted",an="cxyz:introduced";function de(t,e){try{return e!==void 0&&localStorage.setItem(t,e),localStorage.getItem(t)}catch{return null}}function pi(){try{let t=window.AudioContext??window.webkitAudioContext,e=new t,n=e.currentTime;[660,880].forEach((i,a)=>{let r=e.createOscillator(),o=e.createGain();r.type="sine",r.frequency.value=i,o.gain.setValueAtTime(0,n+a*.16),o.gain.linearRampToValueAtTime(.18,n+a*.16+.02),o.gain.exponentialRampToValueAtTime(1e-4,n+a*.16+.5),r.connect(o).connect(e.destination),r.start(n+a*.16),r.stop(n+a*.16+.55)}),setTimeout(()=>{e.close()},1200)}catch{}}function hi(t){let[e,n]=z(t.chat.messages),[i,a]=z(t.chat.isBusy);return I(()=>{let r=t.chat.on("messages",n),o=t.chat.on("busy",a);return()=>{r(),o()}},[t]),{messages:e,busy:i}}function fi(t){let[e,n]=z(t.call),[i,a]=z(t.call?.state??null),[r,o]=z([]);return I(()=>t.on("call",l=>l&&n(l)),[t]),I(()=>{if(!e)return;a(e.state),o([]);let l=[e.on("state",a),e.on("caption",u=>o(d=>[...d.filter(p=>p.id!==u.id),u].slice(-4))),e.on("captionRemoved",u=>o(d=>d.filter(p=>p.id!==u)))];return()=>l.forEach(u=>u())},[e]),{call:e,state:i,captions:r,reset:()=>n(null)}}function gi(t,e){let[n,i]=z(Date.now());return I(()=>{if(!e)return;let a=setInterval(()=>i(Date.now()),1e3);return()=>clearInterval(a)},[e]),t?Math.max(0,(n-t)/1e3):0}function mi(t,e,n){I(()=>{if(!t||!n)return;let i=0,a=0,r=()=>{let o=t.voiceLevel();a=a*.7+o*.3,e.current?.style.setProperty("--cx-lvl",a.toFixed(3)),i=requestAnimationFrame(r)};return i=requestAnimationFrame(r),()=>cancelAnimationFrame(i)},[t,n,e])}function rn({parts:t}){return s(M,{children:t.map((e,n)=>e.t==="b"?s("strong",{children:e.v},n):e.t==="i"?s("em",{children:e.v},n):e.t==="code"?s("code",{children:e.v},n):e.t==="link"?s("a",{href:e.href,target:"_blank",rel:"noopener noreferrer nofollow",children:e.v},n):e.v.split(`
|
|
42
|
+
`).map((i,a,r)=>s(M,{children:[i,a<r.length-1?s("br",{}):null]},`${n}.${a}`)))})}function _i({text:t}){return s(M,{children:Wt(t).map((e,n)=>e.t==="ul"?s("ul",{children:e.items.map((i,a)=>s("li",{children:s(rn,{parts:i})},a))},n):s("p",{children:s(rn,{parts:e.parts})},n))})}function sn({client:t,config:e,bind:n,onView:i}){let a=t.agent,r=t.features,o=e.showChat&&r.chat,l=e.showCall&&r.call,[u,d]=z(e.open?o?"chat":"call":"closed"),[p,m]=z(!1),[c,f]=z(!1),{messages:_,busy:v}=hi(t),{call:g,state:x,captions:k,reset:E}=fi(t),[P,F]=z(""),O=H(null),$=H(null),D=H(null),W=e.subtitle??a.tagline,y=a.name||"Assistant",R=Ie(h=>{d(h),i(h)},[i]),X=Ie(()=>{m(!0),setTimeout(()=>{m(!1),R("closed")},200)},[R]),q=Ie((h=o?"chat":"call")=>{f(!1),de(tt,"1"),R(h),h==="chat"&&t.chat.load().catch(()=>{})},[o,t,R]);I(()=>n({open:q,close:X}),[n,q,X]),I(()=>{e.open&&o&&t.chat.load().catch(()=>{})},[t,e.open,o]),I(()=>{if(!e.greeting||de(tt))return;let h=setTimeout(()=>f(!0),e.greetingDelay*1e3);return()=>clearTimeout(h)},[e.greeting,e.greetingDelay]);let[Re,un]=z(()=>!de(an));I(()=>{if(!Re)return;let h=setTimeout(()=>{un(!1),de(an,"1")},5e3);return()=>clearTimeout(h)},[Re]),I(()=>{if(u==="closed")return;let h=U=>{U.key==="Escape"&&X()};return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[u,X]),I(()=>{let h=O.current;h&&(h.scrollTop=h.scrollHeight)},[_,u,x?.phase]),I(()=>{u==="chat"&&setTimeout(()=>$.current?.focus({preventScroll:!0}),60)},[u]);let ee=e.face&&!!a.video,[pe,pn]=z("loading"),w=x?.phase??"idle";I(()=>{if(!(w!=="ready"||!g)){if(pi(),u==="call"){if(!ee||pe!=="loading"){g.accept();return}let h=setTimeout(()=>g.accept(),3e3);return()=>clearTimeout(h)}if(typeof document<"u"&&document.hidden){let h=document.title;document.title=`\u25CF ${y} is ready for you`;let U=()=>{document.title=h,document.removeEventListener("visibilitychange",U)};document.addEventListener("visibilitychange",U)}}},[w,g,u,y,ee,pe]);let at=w==="live"||w==="connecting";mi(g,D,at&&u==="call");let he=gi(x?.startedAt??null,w==="live"),Pe=bi(g,x?.position??1),fe=async()=>{R("call");try{await t.startCall({autoAccept:!1,...ee?{face:{emotion:()=>et.current}}:{}})}catch{}},Fe=async h=>{let U=h.trim();if(!(!U||v)){F(""),$.current&&($.current.style.height="");try{await t.chat.send(U)}catch{}}},hn=_.length>0&&_[_.length-1].role==="agent"&&_[_.length-1].streaming;if(u==="closed"){let h=w==="queued"||w==="ready"||w==="live"||w==="connecting";return s("div",{class:`dock dock--${e.display}`,part:"launcher",children:[c?s("div",{class:"greeting",part:"greeting",role:"status",onClick:()=>q(),children:[e.greeting,s("button",{class:"greeting__close","aria-label":"Dismiss",onClick:U=>{U.stopPropagation(),f(!1),de(tt,"1")},children:s(Ue,{size:14})})]}):null,s("button",{class:`presence presence--${e.display} ${h?"presence--live":""}`,part:"presence","aria-label":h?w==="queued"?`You are ${V(x?.position??1)} in line to call ${y}. Open`:`Back to your call with ${y}`:o?`Chat with ${y}`:`Call ${y}`,onClick:()=>q(h||!o?"call":"chat"),children:[e.display==="bubble"?s("span",{class:"presence__ring"}):null,s("span",{class:"presence__face",children:s(ce,{agent:a,shot:e.display==="full"?jt:e.display==="half"?Bt:$e})}),s("span",{class:"presence__dot"}),t.mode==="test"?s("span",{class:"testmode",title:"Test mode: this key only works on development sites",children:"TEST"}):null,w==="queued"?s("span",{class:"presence__badge","aria-hidden":"true",children:x?.position??1}):null,e.launcher==="bubble"&&!c?s("span",{class:"presence__label","aria-hidden":"true",children:h?w==="queued"?`${V(x?.position??1)} in line`:"Back to your call":o?`Chat with ${y}`:`Call ${y}`}):null]}),e.launcher==="bubble"?null:s("div",{class:`acts ${Re?"acts--labelled":""}`,part:"actions",children:[o?s("button",{class:"act","aria-label":`Chat with ${y}`,onClick:()=>q("chat"),children:[s(le,{size:20}),s("span",{class:"act__label","aria-hidden":"true",children:"Chat"})]}):null,l?s("button",{class:`act act--call ${h?"act--live":""}`,"aria-label":h?w==="queued"?`You are ${V(x?.position??1)} in line. Open your call`:"Back to your call":`Call ${y}`,onClick:()=>h?q("call"):void fe(),children:[s(Q,{size:20}),s("span",{class:"act__label","aria-hidden":"true",children:h?w==="queued"?`${V(x?.position??1)} in line`:"On call":"Call"}),w==="queued"?s("span",{class:"act__badge","aria-hidden":"true",children:x?.position??1}):null]}):null]})]})}let fn=s("div",{class:"head",part:"header",children:[s("div",{class:"head__face",children:s(ce,{agent:a,shot:$e,talking:!!hn})}),s("div",{class:"head__who",children:[s("div",{class:"head__name",children:y}),s("div",{class:"head__sub",children:[s("i",{}),v?"Typing\u2026":W||"Online"]})]}),l&&u==="chat"?s("button",{class:"icon-btn icon-btn--accent","aria-label":`Call ${y}`,title:`Call ${y}`,onClick:()=>g&&w!=="ended"?R("call"):void fe(),children:s(Q,{size:18})}):null,s("button",{class:"icon-btn","aria-label":"Close",onClick:X,children:s(Ue,{})})]});if(u==="chat")return s("div",{class:`panel ${p?"is-closing":""}`,part:"panel",role:"dialog","aria-label":`Chat with ${y}`,children:[fn,g&&(w==="queued"||w==="ready")?s("div",{class:"banner",part:"banner",role:"status",children:[s("div",{class:"banner__text",children:w==="queued"?s(M,{children:["You're ",s("b",{children:V(x?.position??1)})," in line for a call \xB7 ",Ee(x?.etaSeconds??null)]}):s(M,{children:[s("b",{children:[y," is ready for you"]})," \xB7 ",x?.holdSeconds??30,"s to join"]})}),w==="ready"?s("button",{class:"btn btn--accent btn--glow",onClick:()=>{g.accept(),R("call")},children:"Join"}):s("button",{class:"btn",onClick:()=>R("call"),children:"View"})]}):null,s("div",{class:"log",ref:O,role:"log","aria-live":"polite","aria-relevant":"additions",children:[_.length===0?s("div",{class:"empty",children:[s("div",{class:"empty__face",children:s(ce,{agent:a,shot:$e})}),s("div",{class:"empty__title",children:["Hi, I'm ",y]}),s("div",{class:"empty__body",children:[W?`${W}. `:"","Ask me anything",l?", or call me to talk":"","."]}),l?s("button",{class:"btn btn--accent empty__call",onClick:()=>g&&w!=="ended"?R("call"):void fe(),children:[s(Q,{size:17})," Call ",y]}):null,e.suggestions.length?s("div",{class:"chips",children:e.suggestions.map(h=>s("button",{class:"chip",onClick:()=>{Fe(h)},children:[s(Qt,{}),h]},h))}):null]}):null,_.map(h=>h.role==="agent"&&h.streaming&&!h.text?s("div",{class:"msg msg--agent typing","aria-label":`${y} is typing`,children:[s("i",{}),s("i",{}),s("i",{})]},h.id):s(M,{children:[s("div",{class:`msg msg--${h.role} ${h.failed?"msg--failed":""} ${h.streaming?"caret":""}`,part:`message message-${h.role}`,children:h.role==="agent"?s(_i,{text:h.text}):h.text}),h.failed&&h.error?s("div",{class:"msg__why",role:"status",children:h.error}):h.failed?s("button",{class:"msg__retry",onClick:()=>{t.chat.retry(h.id).catch(()=>{})},children:[s(en,{})," Not sent \xB7 Retry"]}):null]},h.id))]}),s("form",{class:"compose",part:"composer",onSubmit:h=>{h.preventDefault(),Fe(P)},children:s("div",{class:"compose__box",children:[s("textarea",{ref:$,rows:1,value:P,maxLength:2e3,placeholder:e.placeholder,"aria-label":"Message",onInput:h=>{let U=h.currentTarget;F(U.value),U.style.height="auto",U.style.height=`${Math.min(120,U.scrollHeight)}px`},onKeyDown:h=>{h.key==="Enter"&&!h.shiftKey&&!h.isComposing&&(h.preventDefault(),Fe(P))}}),s("button",{class:"send",type:"submit","aria-label":"Send",disabled:!P.trim()||v,children:s(Zt,{})})]})}),e.branding?s("div",{class:"foot",children:["Powered by"," ",s("a",{href:"https://character.xyz",target:"_blank",rel:"noopener noreferrer",children:"Character XYZ"})]}):null]});let C=x,De=C?.position??1,gn=Pe>1?(Pe-De)/(Pe-1):0,Oe=74,rt=2*Math.PI*Oe,te=C?.maxSeconds?C.maxSeconds-he:null,mn=C?.agentState??"idle",_n=C?.speaking?"Speaking":mn==="thinking"?"Thinking\u2026":"Listening",bn=!C||w==="ended"||w==="idle",He=Ht(C?.endReason??null,y);return s("div",{class:`panel ${p?"is-closing":""}`,part:"panel",role:"dialog","aria-label":`Call with ${y}`,children:s("div",{class:`stage ${ee&&pe==="ready"?"stage--face":""}`,ref:D,children:[s("div",{class:"stage__figure",style:{opacity:w==="queued"?.35:1,transition:"opacity .6s"},children:[s(ce,{agent:a,shot:qt,talking:!!C?.speaking}),ee?s("div",{class:`stage__face ${pe==="ready"?"is-ready":""}`,children:s(tn,{client:t,call:g,state:C,src:e.faceUrl,onStatus:pn})}):null]}),at?s("div",{class:"voice"}):null,s("div",{class:"stage__veil"}),s("div",{class:"stage__top",children:[w==="live"?s("span",{class:`badge ${te!=null&&te<=60?"badge--warn":""}`,role:"timer","aria-label":"Call time",children:[s("i",{}),te!=null&&te<=60?`${ze(te)} left`:ze(he)]}):s("span",{}),s("div",{style:{display:"flex",gap:"6px"},children:[o?s("button",{class:"icon-btn","aria-label":"Chat",title:"Chat",onClick:()=>q("chat"),children:s(le,{size:18})}):null,s("button",{class:"icon-btn","aria-label":"Minimise",onClick:X,children:s(Ue,{})})]})]}),s("div",{class:"stage__bottom","aria-live":"polite",children:[w==="joining"||w==="connecting"?s(M,{children:[s("div",{class:"stage__name",children:y}),s("div",{class:"stage__status",children:[s("span",{class:"spinner"})," ",w==="joining"?"Connecting\u2026":"Joining\u2026"]})]}):null,w==="queued"?s(M,{children:[s("div",{class:"line",role:"status","aria-label":`You are ${V(De)} in line, ${Ee(C?.etaSeconds??null)}`,children:[s("svg",{width:"168",height:"168",viewBox:"0 0 168 168",children:[s("circle",{class:"line__track",cx:"84",cy:"84",r:Oe,fill:"none","stroke-width":"7"}),s("circle",{class:"line__fill",cx:"84",cy:"84",r:Oe,fill:"none","stroke-width":"7","stroke-linecap":"round","stroke-dasharray":rt,"stroke-dashoffset":rt*(1-Math.max(.06,gn))})]}),s("div",{children:[s("div",{class:"line__num",children:V(De)}),s("div",{class:"line__lbl",children:"in line"})]})]}),s("div",{class:"title",children:[y," is on other calls"]}),s("div",{class:"note",children:["Your turn in ",Ee(C?.etaSeconds??null),". We'll chime when it's time",o?", so feel free to keep chatting.":"."]}),s("div",{class:"btn-row",children:[o?s("button",{class:"btn btn--accent",onClick:()=>q("chat"),children:[s(le,{size:18})," Keep chatting"]}):null,s("button",{class:"btn",onClick:()=>{g?.hangUp()},children:"Leave line"})]})]}):null,w==="ready"?s(M,{children:[s("div",{class:"title",children:[y," is ready for you"]}),s("div",{class:"note",children:["Join within ",C?.holdSeconds??30," seconds."]}),s("button",{class:"btn btn--accent btn--glow",onClick:()=>g?.accept(),children:[s(Q,{size:18})," Join call"]})]}):null,w==="live"?s(M,{children:[s("div",{class:"stage__name",children:y}),s("div",{class:"stage__status",children:[C?.speaking?s("span",{class:"wave","aria-hidden":"true",children:[.6,1,.75,1,.55].map((h,U)=>s("i",{style:{"--k":h}},U))}):null,C?.muted?"You are muted":_n]}),s("div",{class:"captions",children:k.slice(-2).map((h,U,xn)=>s("div",{class:`captions__line ${U===xn.length-1?"captions__line--now":""}`,children:h.role==="visitor"?`You: ${h.text}`:h.text},h.id))}),s("div",{class:"controls",children:[s("div",{class:"ctl",children:[s("button",{class:`round ${C?.muted?"round--on":""}`,"aria-pressed":C?.muted,"aria-label":C?.muted?"Unmute":"Mute",onClick:()=>g?.setMuted(!C?.muted),children:C?.muted?s(Jt,{size:22}):s(Xt,{size:22})}),s("span",{class:"round__label",children:C?.muted?"Unmute":"Mute"})]}),s("div",{class:"ctl",children:[s("button",{class:"round round--end","aria-label":"End call",onClick:()=>{g?.hangUp()},children:s(Kt,{size:26})}),s("span",{class:"round__label",children:"End"})]}),C?.speaking?s("div",{class:"ctl",children:[s("button",{class:"round","aria-label":`Interrupt ${y}`,onClick:()=>g?.interrupt(),children:s(Gt,{size:22})}),s("span",{class:"round__label",children:"Interrupt"})]}):null]})]}):null,bn?s(M,{children:[s("div",{class:"title",children:C?He.title:`Call ${y}`}),s("div",{class:"note",children:C?C.endReason==="hangup"&&he?`${ze(he)} \xB7 ${He.body}`:C.error??He.body:`Talk with ${y} in real time.`}),s("div",{class:"btn-row",children:[l&&C?.endReason!=="credits"&&C?.endReason!=="unavailable"&&C?.endReason!=="daily_limit"?s("button",{class:"btn btn--accent",onClick:()=>{E(),fe()},children:[s(Q,{size:18})," ",C?"Call again":"Start call"]}):null,o?s("button",{class:"btn",onClick:()=>q("chat"),children:[s(le,{size:18})," Chat"]}):null]})]}):null]})]})})}function bi(t,e){let n=H({call:null,start:e});return n.current.call!==t&&(n.current={call:t,start:e}),e>n.current.start&&(n.current.start=e),n.current.start}var on=`
|
|
43
43
|
:host {
|
|
44
44
|
--cx-accent: #7c5cff;
|
|
45
45
|
--cx-accent-ink: #fff;
|
|
@@ -226,6 +226,7 @@ button:focus-visible, textarea:focus-visible, a:focus-visible { outline: 2px sol
|
|
|
226
226
|
.msg--visitor + .msg--visitor, .msg--agent + .msg--agent { margin-top: -2px; }
|
|
227
227
|
.msg--failed { opacity: .65; }
|
|
228
228
|
.msg__retry { display: inline-flex; align-items: center; gap: 4px; margin-top: 4px; font-size: 12px; color: var(--cx-danger); align-self: flex-end; }
|
|
229
|
+
.msg__why { margin-top: 4px; font-size: 12px; color: var(--cx-ink-2); align-self: flex-end; text-align: right; max-width: 85%; }
|
|
229
230
|
.caret::after { content: ""; display: inline-block; width: 7px; height: 1.05em; margin-left: 2px; vertical-align: -2px; border-radius: 2px; background: currentColor; opacity: .55; animation: cx-blink 1s steps(2) infinite; }
|
|
230
231
|
.typing { display: inline-flex; gap: 4px; padding: 13px 14px; }
|
|
231
232
|
.typing i { width: 7px; height: 7px; border-radius: 50%; background: var(--cx-ink-3); animation: cx-bounce 1.2s var(--cx-ease) infinite; }
|