vanilla-agent 1.23.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +21 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -6
- package/dist/index.d.ts +33 -6
- package/dist/index.global.js +43 -43
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/types.ts +33 -6
- package/src/utils/code-generators.ts +237 -0
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import{Marked as
|
|
2
|
-
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\"),
|
|
3
|
-
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\")}catch{return o[1]}let
|
|
4
|
-
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\")}catch{return l[1]}return null};return{getExtractedText:()=>n,processChunk:async t=>{if(t.length<=e)return n!==null?{text:n,raw:t}:null;let r=t.trim();if(!r.startsWith("{")&&!r.startsWith("["))return null;let o=s(t);return o!==null&&(n=o),e=t.length,n!==null?{text:n,raw:t}:null},close:async()=>{}}},fn=n=>{try{let e=JSON.parse(n);if(e&&typeof e=="object"&&typeof e.text=="string")return e.text}catch{return null}return null},En=()=>{let n={processChunk:e=>null,getExtractedText:()=>null};return n.__isPlainTextParser=!0,n},Mn=()=>{var e;let n=_o();return{processChunk:async s=>{let t=s.trim();return!t.startsWith("{")&&!t.startsWith("[")?null:n.processChunk(s)},getExtractedText:n.getExtractedText.bind(n),close:(e=n.close)==null?void 0:e.bind(n)}},Wn=()=>{let n=null,e=0;return{getExtractedText:()=>n,processChunk:s=>{let t=s.trim();if(!t.startsWith("{")&&!t.startsWith("["))return null;if(s.length<=e)return n!==null||n===""?{text:n||"",raw:s}:null;try{let r=po(s,go|ho);r&&typeof r=="object"&&(r.component&&typeof r.component=="string"?n=typeof r.text=="string"?mn(r.text):"":r.type==="init"&&r.form?n="":typeof r.text=="string"&&(n=mn(r.text)))}catch{}return e=s.length,n!==null?{text:n,raw:s}:null},close:()=>{}}},jo=n=>{let e=null,s=0,r=n||(o=>{if(!o||typeof o!="object")return null;let a=l=>typeof l=="string"?mn(l):null;if(o.component&&typeof o.component=="string")return typeof o.text=="string"?mn(o.text):"";if(o.type==="init"&&o.form)return"";if(o.action)switch(o.action){case"nav_then_click":return a(o.on_load_text)||a(o.text)||null;case"message":case"message_and_click":case"checkout":return a(o.text)||null;default:return a(o.text)||a(o.display_text)||a(o.message)||null}return a(o.text)||a(o.display_text)||a(o.message)||a(o.content)||null});return{getExtractedText:()=>e,processChunk:o=>{let a=o.trim();if(!a.startsWith("{")&&!a.startsWith("["))return null;if(o.length<=s)return e!==null?{text:e,raw:o}:null;try{let l=po(o,go|ho),p=r(l);p!==null&&(e=p)}catch{}return s=o.length,{text:e||"",raw:o}},close:()=>{}}},kn=()=>{let n=null;return{processChunk:e=>{if(!e.trim().startsWith("<"))return null;let t=e.match(/<text[^>]*>([\s\S]*?)<\/text>/);return t&&t[1]?(n=t[1],{text:n,raw:e}):null},getExtractedText:()=>n}};var qo="https://api.travrse.ai/v1/dispatch",wo="https://api.travrse.ai";function Uo(n){switch(n){case"json":return Wn;case"regex-json":return Mn;case"xml":return kn;case"plain":default:return En}}var Xt=class{constructor(e={}){this.config=e;this.clientSession=null;this.sessionInitPromise=null;var s,t,r;this.apiUrl=(s=e.apiUrl)!=null?s:qo,this.headers={"Content-Type":"application/json",...e.headers},this.debug=!!e.debug,this.createStreamParser=(t=e.streamParser)!=null?t:Uo(e.parserType),this.contextProviders=(r=e.contextProviders)!=null?r:[],this.requestMiddleware=e.requestMiddleware,this.customFetch=e.customFetch,this.parseSSEEvent=e.parseSSEEvent,this.getHeaders=e.getHeaders}isClientTokenMode(){return!!this.config.clientToken}getClientApiUrl(e){var t;let s=((t=this.config.apiUrl)==null?void 0:t.replace(/\/+$/,"").replace(/\/v1\/dispatch$/,""))||wo;return e==="init"?`${s}/v1/client/init`:`${s}/v1/client/chat`}getClientSession(){return this.clientSession}async initSession(){var e,s;if(!this.isClientTokenMode())throw new Error("initSession() only available in client token mode");if(this.clientSession&&new Date<this.clientSession.expiresAt)return this.clientSession;if(this.sessionInitPromise)return this.sessionInitPromise;this.sessionInitPromise=this._doInitSession();try{let t=await this.sessionInitPromise;return this.clientSession=t,(s=(e=this.config).onSessionInit)==null||s.call(e,t),t}finally{this.sessionInitPromise=null}}async _doInitSession(){let e=await fetch(this.getClientApiUrl("init"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:this.config.clientToken,flow_id:this.config.flowId})});if(!e.ok){let t=await e.json().catch(()=>({error:"Session initialization failed"}));throw e.status===401?new Error(`Invalid client token: ${t.hint||t.error}`):e.status===403?new Error(`Origin not allowed: ${t.hint||t.error}`):new Error(t.error||"Failed to initialize session")}let s=await e.json();return{sessionId:s.session_id,expiresAt:new Date(s.expires_at),flow:s.flow,config:{welcomeMessage:s.config.welcome_message,placeholder:s.config.placeholder,theme:s.config.theme}}}clearClientSession(){this.clientSession=null,this.sessionInitPromise=null}getFeedbackApiUrl(){var s;return`${((s=this.config.apiUrl)==null?void 0:s.replace(/\/+$/,"").replace(/\/v1\/dispatch$/,""))||wo}/v1/client/feedback`}async sendFeedback(e){var o,a;if(!this.isClientTokenMode())throw new Error("sendFeedback() only available in client token mode");if(!this.getClientSession())throw new Error("No active session. Please initialize session first.");if(["upvote","downvote","copy"].includes(e.type)&&!e.message_id)throw new Error(`message_id is required for ${e.type} feedback type`);if(e.type==="csat"&&(e.rating===void 0||e.rating<1||e.rating>5))throw new Error("CSAT rating must be between 1 and 5");if(e.type==="nps"&&(e.rating===void 0||e.rating<0||e.rating>10))throw new Error("NPS rating must be between 0 and 10");this.debug&&console.debug("[AgentWidgetClient] sending feedback",e);let r=await fetch(this.getFeedbackApiUrl(),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){let l=await r.json().catch(()=>({error:"Feedback submission failed"}));throw r.status===401?(this.clientSession=null,(a=(o=this.config).onSessionExpired)==null||a.call(o),new Error("Session expired. Please refresh to continue.")):new Error(l.error||"Failed to submit feedback")}}async submitMessageFeedback(e,s){let t=this.getClientSession();if(!t)throw new Error("No active session. Please initialize session first.");return this.sendFeedback({session_id:t.sessionId,message_id:e,type:s})}async submitCSATFeedback(e,s){let t=this.getClientSession();if(!t)throw new Error("No active session. Please initialize session first.");return this.sendFeedback({session_id:t.sessionId,type:"csat",rating:e,comment:s})}async submitNPSFeedback(e,s){let t=this.getClientSession();if(!t)throw new Error("No active session. Please initialize session first.");return this.sendFeedback({session_id:t.sessionId,type:"nps",rating:e,comment:s})}async dispatch(e,s){return this.isClientTokenMode()?this.dispatchClientToken(e,s):this.dispatchProxy(e,s)}async dispatchClientToken(e,s){var r,o,a,l;let t=new AbortController;e.signal&&e.signal.addEventListener("abort",()=>t.abort()),s({type:"status",status:"connecting"});try{let p=await this.initSession();if(new Date>=new Date(p.expiresAt.getTime()-6e4)){this.clientSession=null,(o=(r=this.config).onSessionExpired)==null||o.call(r);let d=new Error("Session expired. Please refresh to continue.");throw s({type:"error",error:d}),d}let c=await this.buildPayload(e.messages),f={session_id:p.sessionId,messages:e.messages.map(d=>({id:d.id,role:d.role,content:d.rawContent||d.content})),...e.assistantMessageId&&{assistant_message_id:e.assistantMessageId},...c.metadata&&{metadata:c.metadata},...c.context&&{context:c.context}};this.debug&&console.debug("[AgentWidgetClient] client token dispatch",f);let w=await fetch(this.getClientApiUrl("chat"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f),signal:t.signal});if(!w.ok){let d=await w.json().catch(()=>({error:"Chat request failed"}));if(w.status===401){this.clientSession=null,(l=(a=this.config).onSessionExpired)==null||l.call(a);let g=new Error("Session expired. Please refresh to continue.");throw s({type:"error",error:g}),g}if(w.status===429){let g=new Error(d.hint||"Message limit reached for this session.");throw s({type:"error",error:g}),g}let C=new Error(d.error||"Failed to send message");throw s({type:"error",error:C}),C}if(!w.body){let d=new Error("No response body received");throw s({type:"error",error:d}),d}s({type:"status",status:"connected"});try{await this.streamResponse(w.body,s,e.assistantMessageId)}finally{s({type:"status",status:"idle"})}}catch(p){let c=p instanceof Error?p:new Error(String(p));throw!c.message.includes("Session expired")&&!c.message.includes("Message limit")&&s({type:"error",error:c}),c}}async dispatchProxy(e,s){let t=new AbortController;e.signal&&e.signal.addEventListener("abort",()=>t.abort()),s({type:"status",status:"connecting"});let r=await this.buildPayload(e.messages);this.debug&&console.debug("[AgentWidgetClient] dispatch payload",r);let o={...this.headers};if(this.getHeaders)try{let l=await this.getHeaders();o={...o,...l}}catch(l){typeof console!="undefined"&&console.error("[AgentWidget] getHeaders error:",l)}let a;if(this.customFetch)try{a=await this.customFetch(this.apiUrl,{method:"POST",headers:o,body:JSON.stringify(r),signal:t.signal},r)}catch(l){let p=l instanceof Error?l:new Error(String(l));throw s({type:"error",error:p}),p}else a=await fetch(this.apiUrl,{method:"POST",headers:o,body:JSON.stringify(r),signal:t.signal});if(!a.ok||!a.body){let l=new Error(`Chat backend request failed: ${a.status} ${a.statusText}`);throw s({type:"error",error:l}),l}s({type:"status",status:"connected"});try{await this.streamResponse(a.body,s)}finally{s({type:"status",status:"idle"})}}async buildPayload(e){let t={messages:e.slice().sort((r,o)=>{let a=new Date(r.createdAt).getTime(),l=new Date(o.createdAt).getTime();return a-l}).map(r=>({role:r.role,content:r.rawContent||r.content,createdAt:r.createdAt})),...this.config.flowId&&{flowId:this.config.flowId}};if(this.contextProviders.length){let r={};await Promise.all(this.contextProviders.map(async o=>{try{let a=await o({messages:e,config:this.config});a&&typeof a=="object"&&Object.assign(r,a)}catch(a){typeof console!="undefined"&&console.warn("[AgentWidget] Context provider failed:",a)}})),Object.keys(r).length&&(t.context=r)}if(this.requestMiddleware)try{let r=await this.requestMiddleware({payload:{...t},config:this.config});if(r&&typeof r=="object")return r}catch(r){typeof console!="undefined"&&console.error("[AgentWidget] Request middleware error:",r)}return t}async handleCustomSSEEvent(e,s,t,r,o){if(!this.parseSSEEvent)return!1;try{let a=await this.parseSSEEvent(e);if(a===null)return!1;let l=()=>{if(t.current)return t.current;let p={id:`assistant-${Date.now()}-${Math.random().toString(16).slice(2)}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,variant:"assistant",sequence:o()};return t.current=p,r(p),p};if(a.text!==void 0){let p=l();p.content+=a.text,r(p)}return a.done&&(t.current&&(t.current.streaming=!1,r(t.current)),s({type:"status",status:"idle"})),a.error&&s({type:"error",error:new Error(a.error)}),!0}catch(a){return typeof console!="undefined"&&console.error("[AgentWidget] parseSSEEvent error:",a),!1}}async streamResponse(e,s,t){var re,q,qe,Ve,nt,bt,Ct,J,fe,mt,ft,Ge,st,H,He,at,lt,Tt,wt,$e,ot,Ue,I,dt,Se,Oe,te,Ae,Te,ze,Je,xt,Lt,yt,Et,St,ye,Bt,ke,Ye,At,Nt,Mt,Ot,Wt,dn,cn,un,xn,Dt,_t,Ke,Jt,Zt,Qt,en;let r=e.getReader(),o=new TextDecoder,a="",l=Date.now(),p=0,c=()=>l+p++,f=A=>{let V=A.reasoning?{...A.reasoning,chunks:[...A.reasoning.chunks]}:void 0,ie=A.toolCall?{...A.toolCall,chunks:A.toolCall.chunks?[...A.toolCall.chunks]:void 0}:void 0,ve=A.tools?A.tools.map(Fe=>({...Fe,chunks:Fe.chunks?[...Fe.chunks]:void 0})):void 0;return{...A,reasoning:V,toolCall:ie,tools:ve}},w=A=>{s({type:"message",message:f(A)})},d=null,C={current:null},g=new Map,U=new Map,$={lastId:null,byStep:new Map},h={lastId:null,byCall:new Map},b=A=>{if(A==null)return null;try{return String(A)}catch{return null}},W=A=>{var V,ie,ve,Fe,Ne;return b((Ne=(Fe=(ve=(ie=(V=A.stepId)!=null?V:A.step_id)!=null?ie:A.step)!=null?ve:A.parentId)!=null?Fe:A.flowStepId)!=null?Ne:A.flow_step_id)},v=A=>{var V,ie,ve,Fe,Ne,ue,P;return b((P=(ue=(Ne=(Fe=(ve=(ie=(V=A.callId)!=null?V:A.call_id)!=null?ie:A.requestId)!=null?ve:A.request_id)!=null?Fe:A.toolCallId)!=null?Ne:A.tool_call_id)!=null?ue:A.stepId)!=null?P:A.step_id)},D=()=>d||(d={id:t!=null?t:`assistant-${Date.now()}-${Math.random().toString(16).slice(2)}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,sequence:c()},w(d),d),x=(A,V)=>{$.lastId=V,A&&$.byStep.set(A,V)},S=(A,V)=>{var Ne;let ie=(Ne=A.reasoningId)!=null?Ne:A.id,ve=W(A);if(ie){let ue=String(ie);return x(ve,ue),ue}if(ve){let ue=$.byStep.get(ve);if(ue)return $.lastId=ue,ue}if($.lastId&&!V)return $.lastId;if(!V)return null;let Fe=`reason-${c()}`;return x(ve,Fe),Fe},X=A=>{let V=g.get(A);if(V)return V;let ie={id:`reason-${A}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,variant:"reasoning",sequence:c(),reasoning:{id:A,status:"streaming",chunks:[]}};return g.set(A,ie),w(ie),ie},B=(A,V)=>{h.lastId=V,A&&h.byCall.set(A,V)},_=(A,V)=>{var Ne;let ie=(Ne=A.toolId)!=null?Ne:A.id,ve=v(A);if(ie){let ue=String(ie);return B(ve,ue),ue}if(ve){let ue=h.byCall.get(ve);if(ue)return h.lastId=ue,ue}if(h.lastId&&!V)return h.lastId;if(!V)return null;let Fe=`tool-${c()}`;return B(ve,Fe),Fe},Z=A=>{let V=U.get(A);if(V)return V;let ie={id:`tool-${A}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,variant:"tool",sequence:c(),toolCall:{id:A,status:"pending"}};return U.set(A,ie),w(ie),ie},j=A=>{if(typeof A=="number"&&Number.isFinite(A))return A;if(typeof A=="string"){let V=Number(A);if(!Number.isNaN(V)&&Number.isFinite(V))return V;let ie=Date.parse(A);if(!Number.isNaN(ie))return ie}return Date.now()},K=A=>{if(typeof A=="string")return A;if(A==null)return"";try{return JSON.stringify(A)}catch{return String(A)}},Q=new Map,ne=new Map;for(;;){let{done:A,value:V}=await r.read();if(A)break;a+=o.decode(V,{stream:!0});let ie=a.split(`
|
|
1
|
+
import{Marked as No}from"marked";var Oo=n=>{if(n)return n},wn=n=>{var r,o;let e=n==null?void 0:n.markedOptions,s=new No({gfm:(r=e==null?void 0:e.gfm)!=null?r:!0,breaks:(o=e==null?void 0:e.breaks)!=null?o:!0,pedantic:e==null?void 0:e.pedantic,silent:e==null?void 0:e.silent}),t=Oo(n==null?void 0:n.renderer);return t&&s.use({renderer:t}),i=>s.parse(i)},yn=n=>n?wn({markedOptions:n.options,renderer:n.renderer}):wn(),Do=wn(),go=n=>Do(n),Wn=n=>n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),ho=n=>n.replace(/"/g,""").replace(/</g,"<").replace(/>/g,">"),po=n=>`%%FORM_PLACEHOLDER_${n}%%`,mo=(n,e)=>{let s=n;return s=s.replace(/<Directive>([\s\S]*?)<\/Directive>/gi,(t,r)=>{try{let o=JSON.parse(r.trim());if(o&&typeof o=="object"&&o.component==="form"&&o.type){let i=po(e.length);return e.push({token:i,type:String(o.type)}),i}}catch{return t}return t}),s=s.replace(/<Form\s+type="([^"]+)"\s*\/>/gi,(t,r)=>{let o=po(e.length);return e.push({token:o,type:r}),o}),s},jo=n=>{let e=yn(n);return s=>{let t=[],r=mo(s,t),o=e(r);return t.forEach(({token:i,type:l})=>{let c=new RegExp(i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),f=`<div class="tvw-form-directive" data-tv-form="${ho(l)}"></div>`;o=o.replace(c,f)}),o}},_o=n=>{let e=[],s=mo(n,e),t=go(s);return e.forEach(({token:r,type:o})=>{let i=new RegExp(r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),c=`<div class="tvw-form-directive" data-tv-form="${ho(o)}"></div>`;t=t.replace(i,c)}),t};import{parse as fo,STR as wo,OBJ as yo}from"partial-json";var vn=n=>n.replace(/\\n/g,`
|
|
2
|
+
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\"),kn=n=>{if(n===null)return"null";if(n===void 0)return"";if(typeof n=="string")return n;if(typeof n=="number"||typeof n=="boolean")return String(n);try{return JSON.stringify(n,null,2)}catch{return String(n)}},qo=n=>{var i,l;let e=(i=n.completedAt)!=null?i:Date.now(),s=(l=n.startedAt)!=null?l:e,r=(n.durationMs!==void 0?n.durationMs:Math.max(0,e-s))/1e3;return r<.1?"Thought for <0.1 seconds":`Thought for ${r>=10?Math.round(r).toString():r.toFixed(1).replace(/\.0$/,"")} seconds`},vo=n=>n.status==="complete"?qo(n):n.status==="pending"?"Waiting":"",Uo=n=>{var r,o,i;let s=(typeof n.duration=="number"?n.duration:typeof n.durationMs=="number"?n.durationMs:Math.max(0,((r=n.completedAt)!=null?r:Date.now())-((i=(o=n.startedAt)!=null?o:n.completedAt)!=null?i:Date.now())))/1e3;return s<.1?"Used tool for <0.1 seconds":`Used tool for ${s>=10?Math.round(s).toString():s.toFixed(1).replace(/\.0$/,"")} seconds`};var bo=n=>n.status==="complete"?Uo(n):"Using tool...",zo=()=>{let n=null,e=0,s=t=>{let r=/"text"\s*:\s*"((?:[^"\\]|\\.|")*?)"/,o=t.match(r);if(o&&o[1])try{return o[1].replace(/\\n/g,`
|
|
3
|
+
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\")}catch{return o[1]}let i=/"text"\s*:\s*"((?:[^"\\]|\\.)*)/,l=t.match(i);if(l&&l[1])try{return l[1].replace(/\\n/g,`
|
|
4
|
+
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\")}catch{return l[1]}return null};return{getExtractedText:()=>n,processChunk:async t=>{if(t.length<=e)return n!==null?{text:n,raw:t}:null;let r=t.trim();if(!r.startsWith("{")&&!r.startsWith("["))return null;let o=s(t);return o!==null&&(n=o),e=t.length,n!==null?{text:n,raw:t}:null},close:async()=>{}}},bn=n=>{try{let e=JSON.parse(n);if(e&&typeof e=="object"&&typeof e.text=="string")return e.text}catch{return null}return null},Ln=()=>{let n={processChunk:e=>null,getExtractedText:()=>null};return n.__isPlainTextParser=!0,n},Bn=()=>{var e;let n=zo();return{processChunk:async s=>{let t=s.trim();return!t.startsWith("{")&&!t.startsWith("[")?null:n.processChunk(s)},getExtractedText:n.getExtractedText.bind(n),close:(e=n.close)==null?void 0:e.bind(n)}},Hn=()=>{let n=null,e=0;return{getExtractedText:()=>n,processChunk:s=>{let t=s.trim();if(!t.startsWith("{")&&!t.startsWith("["))return null;if(s.length<=e)return n!==null||n===""?{text:n||"",raw:s}:null;try{let r=fo(s,wo|yo);r&&typeof r=="object"&&(r.component&&typeof r.component=="string"?n=typeof r.text=="string"?vn(r.text):"":r.type==="init"&&r.form?n="":typeof r.text=="string"&&(n=vn(r.text)))}catch{}return e=s.length,n!==null?{text:n,raw:s}:null},close:()=>{}}},Yo=n=>{let e=null,s=0,r=n||(o=>{if(!o||typeof o!="object")return null;let i=l=>typeof l=="string"?vn(l):null;if(o.component&&typeof o.component=="string")return typeof o.text=="string"?vn(o.text):"";if(o.type==="init"&&o.form)return"";if(o.action)switch(o.action){case"nav_then_click":return i(o.on_load_text)||i(o.text)||null;case"message":case"message_and_click":case"checkout":return i(o.text)||null;default:return i(o.text)||i(o.display_text)||i(o.message)||null}return i(o.text)||i(o.display_text)||i(o.message)||i(o.content)||null});return{getExtractedText:()=>e,processChunk:o=>{let i=o.trim();if(!i.startsWith("{")&&!i.startsWith("["))return null;if(o.length<=s)return e!==null?{text:e,raw:o}:null;try{let l=fo(o,wo|yo),c=r(l);c!==null&&(e=c)}catch{}return s=o.length,{text:e||"",raw:o}},close:()=>{}}},$n=()=>{let n=null;return{processChunk:e=>{if(!e.trim().startsWith("<"))return null;let t=e.match(/<text[^>]*>([\s\S]*?)<\/text>/);return t&&t[1]?(n=t[1],{text:n,raw:e}):null},getExtractedText:()=>n}};var Jo="https://api.travrse.ai/v1/dispatch",Co="https://api.travrse.ai";function Ko(n){switch(n){case"json":return Hn;case"regex-json":return Bn;case"xml":return $n;case"plain":default:return Ln}}var Xt=class{constructor(e={}){this.config=e;this.clientSession=null;this.sessionInitPromise=null;var s,t,r;this.apiUrl=(s=e.apiUrl)!=null?s:Jo,this.headers={"Content-Type":"application/json",...e.headers},this.debug=!!e.debug,this.createStreamParser=(t=e.streamParser)!=null?t:Ko(e.parserType),this.contextProviders=(r=e.contextProviders)!=null?r:[],this.requestMiddleware=e.requestMiddleware,this.customFetch=e.customFetch,this.parseSSEEvent=e.parseSSEEvent,this.getHeaders=e.getHeaders}isClientTokenMode(){return!!this.config.clientToken}getClientApiUrl(e){var t;let s=((t=this.config.apiUrl)==null?void 0:t.replace(/\/+$/,"").replace(/\/v1\/dispatch$/,""))||Co;return e==="init"?`${s}/v1/client/init`:`${s}/v1/client/chat`}getClientSession(){return this.clientSession}async initSession(){var e,s;if(!this.isClientTokenMode())throw new Error("initSession() only available in client token mode");if(this.clientSession&&new Date<this.clientSession.expiresAt)return this.clientSession;if(this.sessionInitPromise)return this.sessionInitPromise;this.sessionInitPromise=this._doInitSession();try{let t=await this.sessionInitPromise;return this.clientSession=t,(s=(e=this.config).onSessionInit)==null||s.call(e,t),t}finally{this.sessionInitPromise=null}}async _doInitSession(){let e=await fetch(this.getClientApiUrl("init"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:this.config.clientToken,flow_id:this.config.flowId})});if(!e.ok){let t=await e.json().catch(()=>({error:"Session initialization failed"}));throw e.status===401?new Error(`Invalid client token: ${t.hint||t.error}`):e.status===403?new Error(`Origin not allowed: ${t.hint||t.error}`):new Error(t.error||"Failed to initialize session")}let s=await e.json();return{sessionId:s.session_id,expiresAt:new Date(s.expires_at),flow:s.flow,config:{welcomeMessage:s.config.welcome_message,placeholder:s.config.placeholder,theme:s.config.theme}}}clearClientSession(){this.clientSession=null,this.sessionInitPromise=null}getFeedbackApiUrl(){var s;return`${((s=this.config.apiUrl)==null?void 0:s.replace(/\/+$/,"").replace(/\/v1\/dispatch$/,""))||Co}/v1/client/feedback`}async sendFeedback(e){var o,i;if(!this.isClientTokenMode())throw new Error("sendFeedback() only available in client token mode");if(!this.getClientSession())throw new Error("No active session. Please initialize session first.");if(["upvote","downvote","copy"].includes(e.type)&&!e.message_id)throw new Error(`message_id is required for ${e.type} feedback type`);if(e.type==="csat"&&(e.rating===void 0||e.rating<1||e.rating>5))throw new Error("CSAT rating must be between 1 and 5");if(e.type==="nps"&&(e.rating===void 0||e.rating<0||e.rating>10))throw new Error("NPS rating must be between 0 and 10");this.debug&&console.debug("[AgentWidgetClient] sending feedback",e);let r=await fetch(this.getFeedbackApiUrl(),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){let l=await r.json().catch(()=>({error:"Feedback submission failed"}));throw r.status===401?(this.clientSession=null,(i=(o=this.config).onSessionExpired)==null||i.call(o),new Error("Session expired. Please refresh to continue.")):new Error(l.error||"Failed to submit feedback")}}async submitMessageFeedback(e,s){let t=this.getClientSession();if(!t)throw new Error("No active session. Please initialize session first.");return this.sendFeedback({session_id:t.sessionId,message_id:e,type:s})}async submitCSATFeedback(e,s){let t=this.getClientSession();if(!t)throw new Error("No active session. Please initialize session first.");return this.sendFeedback({session_id:t.sessionId,type:"csat",rating:e,comment:s})}async submitNPSFeedback(e,s){let t=this.getClientSession();if(!t)throw new Error("No active session. Please initialize session first.");return this.sendFeedback({session_id:t.sessionId,type:"nps",rating:e,comment:s})}async dispatch(e,s){return this.isClientTokenMode()?this.dispatchClientToken(e,s):this.dispatchProxy(e,s)}async dispatchClientToken(e,s){var r,o,i,l;let t=new AbortController;e.signal&&e.signal.addEventListener("abort",()=>t.abort()),s({type:"status",status:"connecting"});try{let c=await this.initSession();if(new Date>=new Date(c.expiresAt.getTime()-6e4)){this.clientSession=null,(o=(r=this.config).onSessionExpired)==null||o.call(r);let u=new Error("Session expired. Please refresh to continue.");throw s({type:"error",error:u}),u}let d=await this.buildPayload(e.messages),f={session_id:c.sessionId,messages:e.messages.map(u=>({id:u.id,role:u.role,content:u.rawContent||u.content})),...e.assistantMessageId&&{assistant_message_id:e.assistantMessageId},...d.metadata&&{metadata:d.metadata},...d.context&&{context:d.context}};this.debug&&console.debug("[AgentWidgetClient] client token dispatch",f);let w=await fetch(this.getClientApiUrl("chat"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f),signal:t.signal});if(!w.ok){let u=await w.json().catch(()=>({error:"Chat request failed"}));if(w.status===401){this.clientSession=null,(l=(i=this.config).onSessionExpired)==null||l.call(i);let g=new Error("Session expired. Please refresh to continue.");throw s({type:"error",error:g}),g}if(w.status===429){let g=new Error(u.hint||"Message limit reached for this session.");throw s({type:"error",error:g}),g}let C=new Error(u.error||"Failed to send message");throw s({type:"error",error:C}),C}if(!w.body){let u=new Error("No response body received");throw s({type:"error",error:u}),u}s({type:"status",status:"connected"});try{await this.streamResponse(w.body,s,e.assistantMessageId)}finally{s({type:"status",status:"idle"})}}catch(c){let d=c instanceof Error?c:new Error(String(c));throw!d.message.includes("Session expired")&&!d.message.includes("Message limit")&&s({type:"error",error:d}),d}}async dispatchProxy(e,s){let t=new AbortController;e.signal&&e.signal.addEventListener("abort",()=>t.abort()),s({type:"status",status:"connecting"});let r=await this.buildPayload(e.messages);this.debug&&console.debug("[AgentWidgetClient] dispatch payload",r);let o={...this.headers};if(this.getHeaders)try{let l=await this.getHeaders();o={...o,...l}}catch(l){typeof console!="undefined"&&console.error("[AgentWidget] getHeaders error:",l)}let i;if(this.customFetch)try{i=await this.customFetch(this.apiUrl,{method:"POST",headers:o,body:JSON.stringify(r),signal:t.signal},r)}catch(l){let c=l instanceof Error?l:new Error(String(l));throw s({type:"error",error:c}),c}else i=await fetch(this.apiUrl,{method:"POST",headers:o,body:JSON.stringify(r),signal:t.signal});if(!i.ok||!i.body){let l=new Error(`Chat backend request failed: ${i.status} ${i.statusText}`);throw s({type:"error",error:l}),l}s({type:"status",status:"connected"});try{await this.streamResponse(i.body,s)}finally{s({type:"status",status:"idle"})}}async buildPayload(e){let t={messages:e.slice().sort((r,o)=>{let i=new Date(r.createdAt).getTime(),l=new Date(o.createdAt).getTime();return i-l}).map(r=>({role:r.role,content:r.rawContent||r.content,createdAt:r.createdAt})),...this.config.flowId&&{flowId:this.config.flowId}};if(this.contextProviders.length){let r={};await Promise.all(this.contextProviders.map(async o=>{try{let i=await o({messages:e,config:this.config});i&&typeof i=="object"&&Object.assign(r,i)}catch(i){typeof console!="undefined"&&console.warn("[AgentWidget] Context provider failed:",i)}})),Object.keys(r).length&&(t.context=r)}if(this.requestMiddleware)try{let r=await this.requestMiddleware({payload:{...t},config:this.config});if(r&&typeof r=="object")return r}catch(r){typeof console!="undefined"&&console.error("[AgentWidget] Request middleware error:",r)}return t}async handleCustomSSEEvent(e,s,t,r,o){if(!this.parseSSEEvent)return!1;try{let i=await this.parseSSEEvent(e);if(i===null)return!1;let l=()=>{if(t.current)return t.current;let c={id:`assistant-${Date.now()}-${Math.random().toString(16).slice(2)}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,variant:"assistant",sequence:o()};return t.current=c,r(c),c};if(i.text!==void 0){let c=l();c.content+=i.text,r(c)}return i.done&&(t.current&&(t.current.streaming=!1,r(t.current)),s({type:"status",status:"idle"})),i.error&&s({type:"error",error:new Error(i.error)}),!0}catch(i){return typeof console!="undefined"&&console.error("[AgentWidget] parseSSEEvent error:",i),!1}}async streamResponse(e,s,t){var re,q,qe,Ve,nt,bt,Ct,Y,fe,mt,ft,Ge,st,H,He,at,lt,Tt,wt,Ie,ot,Ue,R,dt,Se,Oe,te,Ae,Te,ze,Ye,xt,Lt,yt,Et,St,ye,Bt,ke,Je,At,Nt,Mt,Ot,Wt,gn,hn,mn,En,Dt,jt,Ke,Yt,nn,sn,on;let r=e.getReader(),o=new TextDecoder,i="",l=Date.now(),c=0,d=()=>l+c++,f=A=>{let V=A.reasoning?{...A.reasoning,chunks:[...A.reasoning.chunks]}:void 0,ie=A.toolCall?{...A.toolCall,chunks:A.toolCall.chunks?[...A.toolCall.chunks]:void 0}:void 0,ve=A.tools?A.tools.map(Fe=>({...Fe,chunks:Fe.chunks?[...Fe.chunks]:void 0})):void 0;return{...A,reasoning:V,toolCall:ie,tools:ve}},w=A=>{s({type:"message",message:f(A)})},u=null,C={current:null},g=new Map,U=new Map,I={lastId:null,byStep:new Map},h={lastId:null,byCall:new Map},b=A=>{if(A==null)return null;try{return String(A)}catch{return null}},W=A=>{var V,ie,ve,Fe,Ne;return b((Ne=(Fe=(ve=(ie=(V=A.stepId)!=null?V:A.step_id)!=null?ie:A.step)!=null?ve:A.parentId)!=null?Fe:A.flowStepId)!=null?Ne:A.flow_step_id)},v=A=>{var V,ie,ve,Fe,Ne,ue,$;return b(($=(ue=(Ne=(Fe=(ve=(ie=(V=A.callId)!=null?V:A.call_id)!=null?ie:A.requestId)!=null?ve:A.request_id)!=null?Fe:A.toolCallId)!=null?Ne:A.tool_call_id)!=null?ue:A.stepId)!=null?$:A.step_id)},D=()=>u||(u={id:t!=null?t:`assistant-${Date.now()}-${Math.random().toString(16).slice(2)}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,sequence:d()},w(u),u),x=(A,V)=>{I.lastId=V,A&&I.byStep.set(A,V)},S=(A,V)=>{var Ne;let ie=(Ne=A.reasoningId)!=null?Ne:A.id,ve=W(A);if(ie){let ue=String(ie);return x(ve,ue),ue}if(ve){let ue=I.byStep.get(ve);if(ue)return I.lastId=ue,ue}if(I.lastId&&!V)return I.lastId;if(!V)return null;let Fe=`reason-${d()}`;return x(ve,Fe),Fe},X=A=>{let V=g.get(A);if(V)return V;let ie={id:`reason-${A}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,variant:"reasoning",sequence:d(),reasoning:{id:A,status:"streaming",chunks:[]}};return g.set(A,ie),w(ie),ie},B=(A,V)=>{h.lastId=V,A&&h.byCall.set(A,V)},j=(A,V)=>{var Ne;let ie=(Ne=A.toolId)!=null?Ne:A.id,ve=v(A);if(ie){let ue=String(ie);return B(ve,ue),ue}if(ve){let ue=h.byCall.get(ve);if(ue)return h.lastId=ue,ue}if(h.lastId&&!V)return h.lastId;if(!V)return null;let Fe=`tool-${d()}`;return B(ve,Fe),Fe},Z=A=>{let V=U.get(A);if(V)return V;let ie={id:`tool-${A}`,role:"assistant",content:"",createdAt:new Date().toISOString(),streaming:!0,variant:"tool",sequence:d(),toolCall:{id:A,status:"pending"}};return U.set(A,ie),w(ie),ie},_=A=>{if(typeof A=="number"&&Number.isFinite(A))return A;if(typeof A=="string"){let V=Number(A);if(!Number.isNaN(V)&&Number.isFinite(V))return V;let ie=Date.parse(A);if(!Number.isNaN(ie))return ie}return Date.now()},K=A=>{if(typeof A=="string")return A;if(A==null)return"";try{return JSON.stringify(A)}catch{return String(A)}},Q=new Map,ne=new Map;for(;;){let{done:A,value:V}=await r.read();if(A)break;i+=o.decode(V,{stream:!0});let ie=i.split(`
|
|
5
5
|
|
|
6
|
-
`);
|
|
7
|
-
`),Ne="message",ue="";for(let se of Fe)se.startsWith("event:")?Ne=se.replace("event:","").trim():se.startsWith("data:")&&(ue+=se.replace("data:","").trim());if(!ue)continue;let P;try{P=JSON.parse(ue)}catch(se){s({type:"error",error:se instanceof Error?se:new Error("Failed to parse chat stream payload")});continue}let rt=Ne!=="message"?Ne:(q=P.type)!=null?q:"message";if(this.parseSSEEvent){C.current=d;let se=await this.handleCustomSSEEvent(P,s,C,w,c);if(C.current&&!d&&(d=C.current),se)continue}if(rt==="reason_start"){let se=(qe=S(P,!0))!=null?qe:`reason-${c()}`,M=X(se);M.reasoning=(Ve=M.reasoning)!=null?Ve:{id:se,status:"streaming",chunks:[]},M.reasoning.startedAt=(bt=M.reasoning.startedAt)!=null?bt:j((nt=P.startedAt)!=null?nt:P.timestamp),M.reasoning.completedAt=void 0,M.reasoning.durationMs=void 0,M.streaming=!0,M.reasoning.status="streaming",w(M)}else if(rt==="reason_chunk"){let se=(J=(Ct=S(P,!1))!=null?Ct:S(P,!0))!=null?J:`reason-${c()}`,M=X(se);M.reasoning=(fe=M.reasoning)!=null?fe:{id:se,status:"streaming",chunks:[]},M.reasoning.startedAt=(ft=M.reasoning.startedAt)!=null?ft:j((mt=P.startedAt)!=null?mt:P.timestamp);let y=(H=(st=(Ge=P.reasoningText)!=null?Ge:P.text)!=null?st:P.delta)!=null?H:"";if(y&&P.hidden!==!0&&M.reasoning.chunks.push(String(y)),M.reasoning.status=P.done?"complete":"streaming",P.done){M.reasoning.completedAt=j((He=P.completedAt)!=null?He:P.timestamp);let F=(at=M.reasoning.startedAt)!=null?at:Date.now();M.reasoning.durationMs=Math.max(0,((lt=M.reasoning.completedAt)!=null?lt:Date.now())-F)}M.streaming=M.reasoning.status!=="complete",w(M)}else if(rt==="reason_complete"){let se=(wt=(Tt=S(P,!1))!=null?Tt:S(P,!0))!=null?wt:`reason-${c()}`,M=g.get(se);if(M!=null&&M.reasoning){M.reasoning.status="complete",M.reasoning.completedAt=j(($e=P.completedAt)!=null?$e:P.timestamp);let F=(ot=M.reasoning.startedAt)!=null?ot:Date.now();M.reasoning.durationMs=Math.max(0,((Ue=M.reasoning.completedAt)!=null?Ue:Date.now())-F),M.streaming=!1,w(M)}let y=W(P);y&&$.byStep.delete(y)}else if(rt==="tool_start"){let se=(I=_(P,!0))!=null?I:`tool-${c()}`,M=Z(se),y=(dt=M.toolCall)!=null?dt:{id:se,status:"pending"};y.name=(Se=P.toolName)!=null?Se:y.name,y.status="running",P.args!==void 0&&(y.args=P.args),y.startedAt=(te=y.startedAt)!=null?te:j((Oe=P.startedAt)!=null?Oe:P.timestamp),y.completedAt=void 0,y.durationMs=void 0,M.toolCall=y,M.streaming=!0,w(M)}else if(rt==="tool_chunk"){let se=(Te=(Ae=_(P,!1))!=null?Ae:_(P,!0))!=null?Te:`tool-${c()}`,M=Z(se),y=(ze=M.toolCall)!=null?ze:{id:se,status:"running"};y.startedAt=(xt=y.startedAt)!=null?xt:j((Je=P.startedAt)!=null?Je:P.timestamp);let F=(Et=(yt=(Lt=P.text)!=null?Lt:P.delta)!=null?yt:P.message)!=null?Et:"";F&&(y.chunks=(St=y.chunks)!=null?St:[],y.chunks.push(String(F))),y.status="running",M.toolCall=y,M.streaming=!0,w(M)}else if(rt==="tool_complete"){let se=(Bt=(ye=_(P,!1))!=null?ye:_(P,!0))!=null?Bt:`tool-${c()}`,M=Z(se),y=(ke=M.toolCall)!=null?ke:{id:se,status:"running"};if(y.status="complete",P.result!==void 0&&(y.result=P.result),typeof P.duration=="number"&&(y.duration=P.duration),y.completedAt=j((Ye=P.completedAt)!=null?Ye:P.timestamp),typeof P.duration=="number")y.durationMs=P.duration;else{let be=(At=y.startedAt)!=null?At:Date.now();y.durationMs=Math.max(0,((Nt=y.completedAt)!=null?Nt:Date.now())-be)}M.toolCall=y,M.streaming=!1,w(M);let F=v(P);F&&h.byCall.delete(F)}else if(rt==="step_chunk"){let se=P.stepType,M=P.executionType;if(se==="tool"||M==="context")continue;let y=D(),F=(dn=(Wt=(Ot=(Mt=P.text)!=null?Mt:P.delta)!=null?Ot:P.content)!=null?Wt:P.chunk)!=null?dn:"";if(F){let Ee=((cn=ne.get(y.id))!=null?cn:"")+F;y.rawContent=Ee,Q.has(y.id)||Q.set(y.id,this.createStreamParser());let Ze=Q.get(y.id),Pe=Ee.trim().startsWith("{")||Ee.trim().startsWith("[");if(Pe&&ne.set(y.id,Ee),Ze.__isPlainTextParser===!0){y.content+=F,ne.delete(y.id),Q.delete(y.id),y.rawContent=void 0,w(y);continue}let _e=Ze.processChunk(Ee);if(_e instanceof Promise)_e.then(de=>{var Re;let pe=typeof de=="string"?de:(Re=de==null?void 0:de.text)!=null?Re:null;if(pe!==null&&pe.trim()!==""){let ge=d;ge&&ge.id===y.id&&(ge.content=pe,w(ge))}else if(!Pe&&!Ee.trim().startsWith("<")){let ge=d;ge&&ge.id===y.id&&(ge.content+=F,ne.delete(ge.id),Q.delete(ge.id),ge.rawContent=void 0,w(ge))}}).catch(()=>{y.content+=F,ne.delete(y.id),Q.delete(y.id),y.rawContent=void 0,w(y)});else{let de=typeof _e=="string"?_e:(un=_e==null?void 0:_e.text)!=null?un:null;de!==null&&de.trim()!==""?(y.content=de,w(y)):!Pe&&!Ee.trim().startsWith("<")&&(y.content+=F,ne.delete(y.id),Q.delete(y.id),y.rawContent=void 0,w(y))}}if(P.isComplete){let be=(Dt=(xn=P.result)==null?void 0:xn.response)!=null?Dt:y.content;if(be){let Ee=ne.get(y.id),Ze=Ee!=null?Ee:K(be);y.rawContent=Ze;let Pe=Q.get(y.id),Ce=null,_e=!1;if(Pe&&(Ce=Pe.getExtractedText(),Ce===null&&(Ce=fn(Ze)),Ce===null)){let de=Pe.processChunk(Ze);de instanceof Promise?(_e=!0,de.then(pe=>{var ge;let Re=typeof pe=="string"?pe:(ge=pe==null?void 0:pe.text)!=null?ge:null;if(Re!==null){let De=d;De&&De.id===y.id&&(De.content=Re,De.streaming=!1,Q.delete(De.id),ne.delete(De.id),w(De))}})):Ce=typeof de=="string"?de:(_t=de==null?void 0:de.text)!=null?_t:null}if(!_e){Ce!==null&&Ce.trim()!==""?y.content=Ce:ne.has(y.id)||(y.content=K(be));let de=Q.get(y.id);if(de){let pe=(Ke=de.close)==null?void 0:Ke.call(de);pe instanceof Promise&&pe.catch(()=>{}),Q.delete(y.id)}ne.delete(y.id),y.streaming=!1,w(y)}}}}else if(rt==="step_complete"){let se=P.stepType,M=P.executionType;if(se==="tool"||M==="context")continue;let y=(Jt=P.result)==null?void 0:Jt.response,F=D();if(y!=null){let be=Q.get(F.id),Ee=!1,Ze=!1;if(be){let Pe=be.getExtractedText(),Ce=ne.get(F.id),_e=Ce!=null?Ce:K(y);if(F.rawContent=_e,Pe!==null&&Pe.trim()!=="")F.content=Pe,Ee=!0;else{let de=fn(_e);if(de!==null)F.content=de,Ee=!0;else{let pe=be.processChunk(_e);if(pe instanceof Promise)Ze=!0,pe.then(Re=>{var De;let ge=typeof Re=="string"?Re:(De=Re==null?void 0:Re.text)!=null?De:null;if(ge!==null&&ge.trim()!==""){let it=d;it&&it.id===F.id&&(it.content=ge,it.streaming=!1,Q.delete(it.id),ne.delete(it.id),w(it))}else{let it=be.getExtractedText(),ht=d;ht&&ht.id===F.id&&(it!==null&&it.trim()!==""?ht.content=it:ne.has(ht.id)||(ht.content=K(y)),ht.streaming=!1,Q.delete(ht.id),ne.delete(ht.id),w(ht))}});else{let Re=typeof pe=="string"?pe:(Zt=pe==null?void 0:pe.text)!=null?Zt:null;if(Re!==null&&Re.trim()!=="")F.content=Re,Ee=!0;else{let ge=be.getExtractedText();ge!==null&&ge.trim()!==""&&(F.content=ge,Ee=!0)}}}}}if(!Ze){if(!F.rawContent){let Pe=ne.get(F.id);F.rawContent=Pe!=null?Pe:K(y)}if(!Ee&&!ne.has(F.id)&&(F.content=K(y)),be){let Pe=(Qt=be.close)==null?void 0:Qt.call(be);Pe instanceof Promise&&Pe.catch(()=>{})}Q.delete(F.id),ne.delete(F.id),F.streaming=!1,w(F)}}else Q.delete(F.id),ne.delete(F.id),F.streaming=!1,w(F)}else if(rt==="flow_complete"){let se=(en=P.result)==null?void 0:en.response;if(se!=null){let M=D(),y=ne.get(M.id),F=y!=null?y:K(se);M.rawContent=F;let be=K(se),Ee=Q.get(M.id);if(Ee){let Ce=fn(F);if(Ce!==null)be=Ce;else{let _e=Ee.processChunk(F);_e instanceof Promise&&_e.then(pe=>{var ge;let Re=typeof pe=="string"?pe:(ge=pe==null?void 0:pe.text)!=null?ge:null;if(Re!==null){let De=d;De&&De.id===M.id&&(De.content=Re,De.streaming=!1,w(De))}});let de=Ee.getExtractedText();de!==null&&(be=de)}}Q.delete(M.id),ne.delete(M.id);let Ze=be!==M.content,Pe=M.streaming!==!1;Ze&&(M.content=be),M.streaming=!1,(Ze||Pe)&&w(M)}else if(d!==null){let M=d;Q.delete(M.id),ne.delete(M.id),M.streaming!==!1&&(M.streaming=!1,w(M))}s({type:"status",status:"idle"})}else rt==="error"&&P.error&&s({type:"error",error:P.error instanceof Error?P.error:new Error(String(P.error))})}}}};function zo(){let n=Date.now().toString(36),e=Math.random().toString(36).substring(2,10);return`msg_${n}_${e}`}function Ln(){let n=Date.now().toString(36),e=Math.random().toString(36).substring(2,10);return`usr_${n}_${e}`}function Bn(){let n=Date.now().toString(36),e=Math.random().toString(36).substring(2,10);return`ast_${n}_${e}`}var nn=class{constructor(e={},s){this.config=e;this.callbacks=s;this.status="idle";this.streaming=!1;this.abortController=null;this.sequenceCounter=Date.now();this.clientSession=null;this.handleEvent=e=>{var s,t;e.type==="message"?this.upsertMessage(e.message):e.type==="status"?(this.setStatus(e.status),e.status==="connecting"?this.setStreaming(!0):(e.status==="idle"||e.status==="error")&&(this.setStreaming(!1),this.abortController=null)):e.type==="error"&&(this.setStatus("error"),this.setStreaming(!1),this.abortController=null,(t=(s=this.callbacks).onError)==null||t.call(s,e.error))};var t;this.messages=[...(t=e.initialMessages)!=null?t:[]].map(r=>{var o;return{...r,sequence:(o=r.sequence)!=null?o:this.nextSequence()}}),this.messages=this.sortMessages(this.messages),this.client=new Xt(e),this.messages.length&&this.callbacks.onMessagesChanged([...this.messages]),this.callbacks.onStatusChanged(this.status)}isClientTokenMode(){return this.client.isClientTokenMode()}async initClientSession(){var e,s;if(!this.isClientTokenMode())return null;try{let t=await this.client.initSession();return this.setClientSession(t),t}catch(t){return(s=(e=this.callbacks).onError)==null||s.call(e,t instanceof Error?t:new Error(String(t))),null}}setClientSession(e){if(this.clientSession=e,e.config.welcomeMessage&&this.messages.length===0){let s={id:`welcome-${Date.now()}`,role:"assistant",content:e.config.welcomeMessage,createdAt:new Date().toISOString(),sequence:this.nextSequence()};this.appendMessage(s)}}getClientSession(){var e;return(e=this.clientSession)!=null?e:this.client.getClientSession()}isSessionValid(){let e=this.getClientSession();return e?new Date<e.expiresAt:!1}clearClientSession(){this.clientSession=null,this.client.clearClientSession()}getClient(){return this.client}async submitMessageFeedback(e,s){return this.client.submitMessageFeedback(e,s)}async submitCSATFeedback(e,s){return this.client.submitCSATFeedback(e,s)}async submitNPSFeedback(e,s){return this.client.submitNPSFeedback(e,s)}updateConfig(e){this.config={...this.config,...e},this.client=new Xt(this.config)}getMessages(){return[...this.messages]}getStatus(){return this.status}isStreaming(){return this.streaming}injectTestEvent(e){this.handleEvent(e)}async sendMessage(e,s){var c,f,w,d,C;let t=e.trim();if(!t)return;(c=this.abortController)==null||c.abort();let r=Ln(),o=Bn(),a={id:r,role:"user",content:t,createdAt:new Date().toISOString(),sequence:this.nextSequence(),viaVoice:(s==null?void 0:s.viaVoice)||!1};this.appendMessage(a),this.setStreaming(!0);let l=new AbortController;this.abortController=l;let p=[...this.messages];try{await this.client.dispatch({messages:p,signal:l.signal,assistantMessageId:o},this.handleEvent)}catch(g){let U={id:o,role:"assistant",createdAt:new Date().toISOString(),content:"It looks like the proxy isn't returning a real response yet. Here's a sample message so you can continue testing locally.",sequence:this.nextSequence()};this.appendMessage(U),this.setStatus("idle"),this.setStreaming(!1),this.abortController=null,g instanceof Error?(w=(f=this.callbacks).onError)==null||w.call(f,g):(C=(d=this.callbacks).onError)==null||C.call(d,new Error(String(g)))}}cancel(){var e;(e=this.abortController)==null||e.abort(),this.abortController=null,this.setStreaming(!1),this.setStatus("idle")}clearMessages(){var e;(e=this.abortController)==null||e.abort(),this.abortController=null,this.messages=[],this.setStreaming(!1),this.setStatus("idle"),this.callbacks.onMessagesChanged([...this.messages])}hydrateMessages(e){var s;(s=this.abortController)==null||s.abort(),this.abortController=null,this.messages=this.sortMessages(e.map(t=>{var r;return{...t,streaming:!1,sequence:(r=t.sequence)!=null?r:this.nextSequence()}})),this.setStreaming(!1),this.setStatus("idle"),this.callbacks.onMessagesChanged([...this.messages])}setStatus(e){this.status!==e&&(this.status=e,this.callbacks.onStatusChanged(e))}setStreaming(e){this.streaming!==e&&(this.streaming=e,this.callbacks.onStreamingChanged(e))}appendMessage(e){let s=this.ensureSequence(e);this.messages=this.sortMessages([...this.messages,s]),this.callbacks.onMessagesChanged([...this.messages])}upsertMessage(e){let s=this.ensureSequence(e),t=this.messages.findIndex(r=>r.id===s.id);if(t===-1){this.appendMessage(s);return}this.messages=this.messages.map((r,o)=>o===t?{...r,...s}:r),this.messages=this.sortMessages(this.messages),this.callbacks.onMessagesChanged([...this.messages])}ensureSequence(e){return e.sequence!==void 0?{...e}:{...e,sequence:this.nextSequence()}}nextSequence(){return this.sequenceCounter++}sortMessages(e){return[...e].sort((s,t)=>{var p,c;let r=new Date(s.createdAt).getTime(),o=new Date(t.createdAt).getTime();if(!Number.isNaN(r)&&!Number.isNaN(o)&&r!==o)return r-o;let a=(p=s.sequence)!=null?p:0,l=(c=t.sequence)!=null?c:0;return a!==l?a-l:s.id.localeCompare(t.id)})}};var Hn=(n,e)=>{var t;let s=(t=e==null?void 0:e.theme)!=null?t:{};Object.entries(s).forEach(([r,o])=>{if(o==null||o==="")return;let a=r.replace(/[A-Z]/g,l=>`-${l.toLowerCase()}`);n.style.setProperty(`--cw-${a}`,String(o))})};import*as Jo from"lucide";var ce=(n,e=24,s="currentColor",t=2)=>{try{let r=n.split("-").map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(""),o=Jo[r];return o?Yo(o,e,s,t):(console.warn(`Lucide icon "${n}" not found (tried "${r}"). Available icons: https://lucide.dev/icons`),null)}catch(r){return console.warn(`Failed to render Lucide icon "${n}":`,r),null}};function Yo(n,e,s,t){if(!n||!Array.isArray(n))return null;let r=document.createElementNS("http://www.w3.org/2000/svg","svg");return r.setAttribute("width",String(e)),r.setAttribute("height",String(e)),r.setAttribute("viewBox","0 0 24 24"),r.setAttribute("fill","none"),r.setAttribute("stroke",s),r.setAttribute("stroke-width",String(t)),r.setAttribute("stroke-linecap","round"),r.setAttribute("stroke-linejoin","round"),r.setAttribute("aria-hidden","true"),n.forEach(o=>{if(Array.isArray(o)&&o.length>=2){let a=o[0],l=o[1];if(l){let p=document.createElementNS("http://www.w3.org/2000/svg",a);Object.entries(l).forEach(([c,f])=>{c!=="stroke"&&p.setAttribute(c,String(f))}),r.appendChild(p)}}}),r}var m=(n,e)=>{let s=document.createElement(n);return e&&(s.className=e),s};var Xe={idle:"Online",connecting:"Connecting\u2026",connected:"Streaming\u2026",error:"Offline"};var vt={"bottom-right":"tvw-bottom-6 tvw-right-6","bottom-left":"tvw-bottom-6 tvw-left-6","top-right":"tvw-top-6 tvw-right-6","top-left":"tvw-top-6 tvw-left-6"};var sn=(n,e)=>{let s=m("button");s.type="button",s.innerHTML=`
|
|
6
|
+
`);i=(re=ie.pop())!=null?re:"";for(let ve of ie){let Fe=ve.split(`
|
|
7
|
+
`),Ne="message",ue="";for(let se of Fe)se.startsWith("event:")?Ne=se.replace("event:","").trim():se.startsWith("data:")&&(ue+=se.replace("data:","").trim());if(!ue)continue;let $;try{$=JSON.parse(ue)}catch(se){s({type:"error",error:se instanceof Error?se:new Error("Failed to parse chat stream payload")});continue}let rt=Ne!=="message"?Ne:(q=$.type)!=null?q:"message";if(this.parseSSEEvent){C.current=u;let se=await this.handleCustomSSEEvent($,s,C,w,d);if(C.current&&!u&&(u=C.current),se)continue}if(rt==="reason_start"){let se=(qe=S($,!0))!=null?qe:`reason-${d()}`,M=X(se);M.reasoning=(Ve=M.reasoning)!=null?Ve:{id:se,status:"streaming",chunks:[]},M.reasoning.startedAt=(bt=M.reasoning.startedAt)!=null?bt:_((nt=$.startedAt)!=null?nt:$.timestamp),M.reasoning.completedAt=void 0,M.reasoning.durationMs=void 0,M.streaming=!0,M.reasoning.status="streaming",w(M)}else if(rt==="reason_chunk"){let se=(Y=(Ct=S($,!1))!=null?Ct:S($,!0))!=null?Y:`reason-${d()}`,M=X(se);M.reasoning=(fe=M.reasoning)!=null?fe:{id:se,status:"streaming",chunks:[]},M.reasoning.startedAt=(ft=M.reasoning.startedAt)!=null?ft:_((mt=$.startedAt)!=null?mt:$.timestamp);let y=(H=(st=(Ge=$.reasoningText)!=null?Ge:$.text)!=null?st:$.delta)!=null?H:"";if(y&&$.hidden!==!0&&M.reasoning.chunks.push(String(y)),M.reasoning.status=$.done?"complete":"streaming",$.done){M.reasoning.completedAt=_((He=$.completedAt)!=null?He:$.timestamp);let F=(at=M.reasoning.startedAt)!=null?at:Date.now();M.reasoning.durationMs=Math.max(0,((lt=M.reasoning.completedAt)!=null?lt:Date.now())-F)}M.streaming=M.reasoning.status!=="complete",w(M)}else if(rt==="reason_complete"){let se=(wt=(Tt=S($,!1))!=null?Tt:S($,!0))!=null?wt:`reason-${d()}`,M=g.get(se);if(M!=null&&M.reasoning){M.reasoning.status="complete",M.reasoning.completedAt=_((Ie=$.completedAt)!=null?Ie:$.timestamp);let F=(ot=M.reasoning.startedAt)!=null?ot:Date.now();M.reasoning.durationMs=Math.max(0,((Ue=M.reasoning.completedAt)!=null?Ue:Date.now())-F),M.streaming=!1,w(M)}let y=W($);y&&I.byStep.delete(y)}else if(rt==="tool_start"){let se=(R=j($,!0))!=null?R:`tool-${d()}`,M=Z(se),y=(dt=M.toolCall)!=null?dt:{id:se,status:"pending"};y.name=(Se=$.toolName)!=null?Se:y.name,y.status="running",$.args!==void 0&&(y.args=$.args),y.startedAt=(te=y.startedAt)!=null?te:_((Oe=$.startedAt)!=null?Oe:$.timestamp),y.completedAt=void 0,y.durationMs=void 0,M.toolCall=y,M.streaming=!0,w(M)}else if(rt==="tool_chunk"){let se=(Te=(Ae=j($,!1))!=null?Ae:j($,!0))!=null?Te:`tool-${d()}`,M=Z(se),y=(ze=M.toolCall)!=null?ze:{id:se,status:"running"};y.startedAt=(xt=y.startedAt)!=null?xt:_((Ye=$.startedAt)!=null?Ye:$.timestamp);let F=(Et=(yt=(Lt=$.text)!=null?Lt:$.delta)!=null?yt:$.message)!=null?Et:"";F&&(y.chunks=(St=y.chunks)!=null?St:[],y.chunks.push(String(F))),y.status="running",M.toolCall=y,M.streaming=!0,w(M)}else if(rt==="tool_complete"){let se=(Bt=(ye=j($,!1))!=null?ye:j($,!0))!=null?Bt:`tool-${d()}`,M=Z(se),y=(ke=M.toolCall)!=null?ke:{id:se,status:"running"};if(y.status="complete",$.result!==void 0&&(y.result=$.result),typeof $.duration=="number"&&(y.duration=$.duration),y.completedAt=_((Je=$.completedAt)!=null?Je:$.timestamp),typeof $.duration=="number")y.durationMs=$.duration;else{let be=(At=y.startedAt)!=null?At:Date.now();y.durationMs=Math.max(0,((Nt=y.completedAt)!=null?Nt:Date.now())-be)}M.toolCall=y,M.streaming=!1,w(M);let F=v($);F&&h.byCall.delete(F)}else if(rt==="step_chunk"){let se=$.stepType,M=$.executionType;if(se==="tool"||M==="context")continue;let y=D(),F=(gn=(Wt=(Ot=(Mt=$.text)!=null?Mt:$.delta)!=null?Ot:$.content)!=null?Wt:$.chunk)!=null?gn:"";if(F){let Ee=((hn=ne.get(y.id))!=null?hn:"")+F;y.rawContent=Ee,Q.has(y.id)||Q.set(y.id,this.createStreamParser());let Ze=Q.get(y.id),$e=Ee.trim().startsWith("{")||Ee.trim().startsWith("[");if($e&&ne.set(y.id,Ee),Ze.__isPlainTextParser===!0){y.content+=F,ne.delete(y.id),Q.delete(y.id),y.rawContent=void 0,w(y);continue}let je=Ze.processChunk(Ee);if(je instanceof Promise)je.then(de=>{var Pe;let pe=typeof de=="string"?de:(Pe=de==null?void 0:de.text)!=null?Pe:null;if(pe!==null&&pe.trim()!==""){let ge=u;ge&&ge.id===y.id&&(ge.content=pe,w(ge))}else if(!$e&&!Ee.trim().startsWith("<")){let ge=u;ge&&ge.id===y.id&&(ge.content+=F,ne.delete(ge.id),Q.delete(ge.id),ge.rawContent=void 0,w(ge))}}).catch(()=>{y.content+=F,ne.delete(y.id),Q.delete(y.id),y.rawContent=void 0,w(y)});else{let de=typeof je=="string"?je:(mn=je==null?void 0:je.text)!=null?mn:null;de!==null&&de.trim()!==""?(y.content=de,w(y)):!$e&&!Ee.trim().startsWith("<")&&(y.content+=F,ne.delete(y.id),Q.delete(y.id),y.rawContent=void 0,w(y))}}if($.isComplete){let be=(Dt=(En=$.result)==null?void 0:En.response)!=null?Dt:y.content;if(be){let Ee=ne.get(y.id),Ze=Ee!=null?Ee:K(be);y.rawContent=Ze;let $e=Q.get(y.id),Ce=null,je=!1;if($e&&(Ce=$e.getExtractedText(),Ce===null&&(Ce=bn(Ze)),Ce===null)){let de=$e.processChunk(Ze);de instanceof Promise?(je=!0,de.then(pe=>{var ge;let Pe=typeof pe=="string"?pe:(ge=pe==null?void 0:pe.text)!=null?ge:null;if(Pe!==null){let De=u;De&&De.id===y.id&&(De.content=Pe,De.streaming=!1,Q.delete(De.id),ne.delete(De.id),w(De))}})):Ce=typeof de=="string"?de:(jt=de==null?void 0:de.text)!=null?jt:null}if(!je){Ce!==null&&Ce.trim()!==""?y.content=Ce:ne.has(y.id)||(y.content=K(be));let de=Q.get(y.id);if(de){let pe=(Ke=de.close)==null?void 0:Ke.call(de);pe instanceof Promise&&pe.catch(()=>{}),Q.delete(y.id)}ne.delete(y.id),y.streaming=!1,w(y)}}}}else if(rt==="step_complete"){let se=$.stepType,M=$.executionType;if(se==="tool"||M==="context")continue;let y=(Yt=$.result)==null?void 0:Yt.response,F=D();if(y!=null){let be=Q.get(F.id),Ee=!1,Ze=!1;if(be){let $e=be.getExtractedText(),Ce=ne.get(F.id),je=Ce!=null?Ce:K(y);if(F.rawContent=je,$e!==null&&$e.trim()!=="")F.content=$e,Ee=!0;else{let de=bn(je);if(de!==null)F.content=de,Ee=!0;else{let pe=be.processChunk(je);if(pe instanceof Promise)Ze=!0,pe.then(Pe=>{var De;let ge=typeof Pe=="string"?Pe:(De=Pe==null?void 0:Pe.text)!=null?De:null;if(ge!==null&&ge.trim()!==""){let it=u;it&&it.id===F.id&&(it.content=ge,it.streaming=!1,Q.delete(it.id),ne.delete(it.id),w(it))}else{let it=be.getExtractedText(),ht=u;ht&&ht.id===F.id&&(it!==null&&it.trim()!==""?ht.content=it:ne.has(ht.id)||(ht.content=K(y)),ht.streaming=!1,Q.delete(ht.id),ne.delete(ht.id),w(ht))}});else{let Pe=typeof pe=="string"?pe:(nn=pe==null?void 0:pe.text)!=null?nn:null;if(Pe!==null&&Pe.trim()!=="")F.content=Pe,Ee=!0;else{let ge=be.getExtractedText();ge!==null&&ge.trim()!==""&&(F.content=ge,Ee=!0)}}}}}if(!Ze){if(!F.rawContent){let $e=ne.get(F.id);F.rawContent=$e!=null?$e:K(y)}if(!Ee&&!ne.has(F.id)&&(F.content=K(y)),be){let $e=(sn=be.close)==null?void 0:sn.call(be);$e instanceof Promise&&$e.catch(()=>{})}Q.delete(F.id),ne.delete(F.id),F.streaming=!1,w(F)}}else Q.delete(F.id),ne.delete(F.id),F.streaming=!1,w(F)}else if(rt==="flow_complete"){let se=(on=$.result)==null?void 0:on.response;if(se!=null){let M=D(),y=ne.get(M.id),F=y!=null?y:K(se);M.rawContent=F;let be=K(se),Ee=Q.get(M.id);if(Ee){let Ce=bn(F);if(Ce!==null)be=Ce;else{let je=Ee.processChunk(F);je instanceof Promise&&je.then(pe=>{var ge;let Pe=typeof pe=="string"?pe:(ge=pe==null?void 0:pe.text)!=null?ge:null;if(Pe!==null){let De=u;De&&De.id===M.id&&(De.content=Pe,De.streaming=!1,w(De))}});let de=Ee.getExtractedText();de!==null&&(be=de)}}Q.delete(M.id),ne.delete(M.id);let Ze=be!==M.content,$e=M.streaming!==!1;Ze&&(M.content=be),M.streaming=!1,(Ze||$e)&&w(M)}else if(u!==null){let M=u;Q.delete(M.id),ne.delete(M.id),M.streaming!==!1&&(M.streaming=!1,w(M))}s({type:"status",status:"idle"})}else rt==="error"&&$.error&&s({type:"error",error:$.error instanceof Error?$.error:new Error(String($.error))})}}}};function Xo(){let n=Date.now().toString(36),e=Math.random().toString(36).substring(2,10);return`msg_${n}_${e}`}function Pn(){let n=Date.now().toString(36),e=Math.random().toString(36).substring(2,10);return`usr_${n}_${e}`}function Rn(){let n=Date.now().toString(36),e=Math.random().toString(36).substring(2,10);return`ast_${n}_${e}`}var an=class{constructor(e={},s){this.config=e;this.callbacks=s;this.status="idle";this.streaming=!1;this.abortController=null;this.sequenceCounter=Date.now();this.clientSession=null;this.handleEvent=e=>{var s,t;e.type==="message"?this.upsertMessage(e.message):e.type==="status"?(this.setStatus(e.status),e.status==="connecting"?this.setStreaming(!0):(e.status==="idle"||e.status==="error")&&(this.setStreaming(!1),this.abortController=null)):e.type==="error"&&(this.setStatus("error"),this.setStreaming(!1),this.abortController=null,(t=(s=this.callbacks).onError)==null||t.call(s,e.error))};var t;this.messages=[...(t=e.initialMessages)!=null?t:[]].map(r=>{var o;return{...r,sequence:(o=r.sequence)!=null?o:this.nextSequence()}}),this.messages=this.sortMessages(this.messages),this.client=new Xt(e),this.messages.length&&this.callbacks.onMessagesChanged([...this.messages]),this.callbacks.onStatusChanged(this.status)}isClientTokenMode(){return this.client.isClientTokenMode()}async initClientSession(){var e,s;if(!this.isClientTokenMode())return null;try{let t=await this.client.initSession();return this.setClientSession(t),t}catch(t){return(s=(e=this.callbacks).onError)==null||s.call(e,t instanceof Error?t:new Error(String(t))),null}}setClientSession(e){if(this.clientSession=e,e.config.welcomeMessage&&this.messages.length===0){let s={id:`welcome-${Date.now()}`,role:"assistant",content:e.config.welcomeMessage,createdAt:new Date().toISOString(),sequence:this.nextSequence()};this.appendMessage(s)}}getClientSession(){var e;return(e=this.clientSession)!=null?e:this.client.getClientSession()}isSessionValid(){let e=this.getClientSession();return e?new Date<e.expiresAt:!1}clearClientSession(){this.clientSession=null,this.client.clearClientSession()}getClient(){return this.client}async submitMessageFeedback(e,s){return this.client.submitMessageFeedback(e,s)}async submitCSATFeedback(e,s){return this.client.submitCSATFeedback(e,s)}async submitNPSFeedback(e,s){return this.client.submitNPSFeedback(e,s)}updateConfig(e){this.config={...this.config,...e},this.client=new Xt(this.config)}getMessages(){return[...this.messages]}getStatus(){return this.status}isStreaming(){return this.streaming}injectTestEvent(e){this.handleEvent(e)}async sendMessage(e,s){var d,f,w,u,C;let t=e.trim();if(!t)return;(d=this.abortController)==null||d.abort();let r=Pn(),o=Rn(),i={id:r,role:"user",content:t,createdAt:new Date().toISOString(),sequence:this.nextSequence(),viaVoice:(s==null?void 0:s.viaVoice)||!1};this.appendMessage(i),this.setStreaming(!0);let l=new AbortController;this.abortController=l;let c=[...this.messages];try{await this.client.dispatch({messages:c,signal:l.signal,assistantMessageId:o},this.handleEvent)}catch(g){let U={id:o,role:"assistant",createdAt:new Date().toISOString(),content:"It looks like the proxy isn't returning a real response yet. Here's a sample message so you can continue testing locally.",sequence:this.nextSequence()};this.appendMessage(U),this.setStatus("idle"),this.setStreaming(!1),this.abortController=null,g instanceof Error?(w=(f=this.callbacks).onError)==null||w.call(f,g):(C=(u=this.callbacks).onError)==null||C.call(u,new Error(String(g)))}}cancel(){var e;(e=this.abortController)==null||e.abort(),this.abortController=null,this.setStreaming(!1),this.setStatus("idle")}clearMessages(){var e;(e=this.abortController)==null||e.abort(),this.abortController=null,this.messages=[],this.setStreaming(!1),this.setStatus("idle"),this.callbacks.onMessagesChanged([...this.messages])}hydrateMessages(e){var s;(s=this.abortController)==null||s.abort(),this.abortController=null,this.messages=this.sortMessages(e.map(t=>{var r;return{...t,streaming:!1,sequence:(r=t.sequence)!=null?r:this.nextSequence()}})),this.setStreaming(!1),this.setStatus("idle"),this.callbacks.onMessagesChanged([...this.messages])}setStatus(e){this.status!==e&&(this.status=e,this.callbacks.onStatusChanged(e))}setStreaming(e){this.streaming!==e&&(this.streaming=e,this.callbacks.onStreamingChanged(e))}appendMessage(e){let s=this.ensureSequence(e);this.messages=this.sortMessages([...this.messages,s]),this.callbacks.onMessagesChanged([...this.messages])}upsertMessage(e){let s=this.ensureSequence(e),t=this.messages.findIndex(r=>r.id===s.id);if(t===-1){this.appendMessage(s);return}this.messages=this.messages.map((r,o)=>o===t?{...r,...s}:r),this.messages=this.sortMessages(this.messages),this.callbacks.onMessagesChanged([...this.messages])}ensureSequence(e){return e.sequence!==void 0?{...e}:{...e,sequence:this.nextSequence()}}nextSequence(){return this.sequenceCounter++}sortMessages(e){return[...e].sort((s,t)=>{var c,d;let r=new Date(s.createdAt).getTime(),o=new Date(t.createdAt).getTime();if(!Number.isNaN(r)&&!Number.isNaN(o)&&r!==o)return r-o;let i=(c=s.sequence)!=null?c:0,l=(d=t.sequence)!=null?d:0;return i!==l?i-l:s.id.localeCompare(t.id)})}};var In=(n,e)=>{var t;let s=(t=e==null?void 0:e.theme)!=null?t:{};Object.entries(s).forEach(([r,o])=>{if(o==null||o==="")return;let i=r.replace(/[A-Z]/g,l=>`-${l.toLowerCase()}`);n.style.setProperty(`--cw-${i}`,String(o))})};import*as Vo from"lucide";var ce=(n,e=24,s="currentColor",t=2)=>{try{let r=n.split("-").map(i=>i.charAt(0).toUpperCase()+i.slice(1)).join(""),o=Vo[r];return o?Go(o,e,s,t):(console.warn(`Lucide icon "${n}" not found (tried "${r}"). Available icons: https://lucide.dev/icons`),null)}catch(r){return console.warn(`Failed to render Lucide icon "${n}":`,r),null}};function Go(n,e,s,t){if(!n||!Array.isArray(n))return null;let r=document.createElementNS("http://www.w3.org/2000/svg","svg");return r.setAttribute("width",String(e)),r.setAttribute("height",String(e)),r.setAttribute("viewBox","0 0 24 24"),r.setAttribute("fill","none"),r.setAttribute("stroke",s),r.setAttribute("stroke-width",String(t)),r.setAttribute("stroke-linecap","round"),r.setAttribute("stroke-linejoin","round"),r.setAttribute("aria-hidden","true"),n.forEach(o=>{if(Array.isArray(o)&&o.length>=2){let i=o[0],l=o[1];if(l){let c=document.createElementNS("http://www.w3.org/2000/svg",i);Object.entries(l).forEach(([d,f])=>{d!=="stroke"&&c.setAttribute(d,String(f))}),r.appendChild(c)}}}),r}var m=(n,e)=>{let s=document.createElement(n);return e&&(s.className=e),s};var Xe={idle:"Online",connecting:"Connecting\u2026",connected:"Streaming\u2026",error:"Offline"};var vt={"bottom-right":"tvw-bottom-6 tvw-right-6","bottom-left":"tvw-bottom-6 tvw-left-6","top-right":"tvw-top-6 tvw-right-6","top-left":"tvw-top-6 tvw-left-6"};var ln=(n,e)=>{let s=m("button");s.type="button",s.innerHTML=`
|
|
8
8
|
<span class="tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-bg-cw-primary tvw-text-white" data-role="launcher-icon">\u{1F4AC}</span>
|
|
9
9
|
<img data-role="launcher-image" class="tvw-rounded-full tvw-object-cover" alt="" style="display:none" />
|
|
10
10
|
<span class="tvw-flex tvw-flex-col tvw-items-start tvw-text-left">
|
|
@@ -12,12 +12,12 @@ import{Marked as Ro}from"marked";var Io=n=>{if(n)return n},gn=n=>{var r,o;let e=
|
|
|
12
12
|
<span class="tvw-text-xs tvw-text-cw-muted" data-role="launcher-subtitle"></span>
|
|
13
13
|
</span>
|
|
14
14
|
<span class="tvw-ml-2 tvw-grid tvw-place-items-center tvw-rounded-full tvw-bg-cw-primary tvw-text-cw-call-to-action" data-role="launcher-call-to-action-icon">\u2197</span>
|
|
15
|
-
`,s.addEventListener("click",e);let t=o=>{var h,b,W,v,D,x,S,X,B,_,Z,j;let a=(h=o.launcher)!=null?h:{},l=s.querySelector("[data-role='launcher-title']");l&&(l.textContent=(b=a.title)!=null?b:"Chat Assistant");let p=s.querySelector("[data-role='launcher-subtitle']");p&&(p.textContent=(W=a.subtitle)!=null?W:"Get answers fast");let c=s.querySelector(".tvw-flex-col");c&&(a.textHidden?c.style.display="none":c.style.display="");let f=s.querySelector("[data-role='launcher-icon']");if(f)if(a.agentIconHidden)f.style.display="none";else{let K=(v=a.agentIconSize)!=null?v:"40px";if(f.style.height=K,f.style.width=K,f.innerHTML="",a.agentIconName){let Q=parseFloat(K)||24,ne=ce(a.agentIconName,Q*.6,"#ffffff",2);ne?(f.appendChild(ne),f.style.display=""):(f.textContent=(D=a.agentIconText)!=null?D:"\u{1F4AC}",f.style.display="")}else a.iconUrl?f.style.display="none":(f.textContent=(x=a.agentIconText)!=null?x:"\u{1F4AC}",f.style.display="")}let w=s.querySelector("[data-role='launcher-image']");if(w){let K=(S=a.agentIconSize)!=null?S:"40px";w.style.height=K,w.style.width=K,a.iconUrl&&!a.agentIconName&&!a.agentIconHidden?(w.src=a.iconUrl,w.style.display="block"):w.style.display="none"}let d=s.querySelector("[data-role='launcher-call-to-action-icon']");if(d){let K=(X=a.callToActionIconSize)!=null?X:"32px";d.style.height=K,d.style.width=K,a.callToActionIconBackgroundColor?(d.style.backgroundColor=a.callToActionIconBackgroundColor,d.classList.remove("tvw-bg-cw-primary")):(d.style.backgroundColor="",d.classList.add("tvw-bg-cw-primary"));let Q=0;if(a.callToActionIconPadding?(d.style.boxSizing="border-box",d.style.padding=a.callToActionIconPadding,Q=(parseFloat(a.callToActionIconPadding)||0)*2):(d.style.boxSizing="",d.style.padding=""),a.callToActionIconHidden)d.style.display="none";else if(d.style.display="",d.innerHTML="",a.callToActionIconName){let ne=parseFloat(K)||24,re=Math.max(ne-Q,8),q=ce(a.callToActionIconName,re,"currentColor",2);q?d.appendChild(q):d.textContent=(B=a.callToActionIconText)!=null?B:"\u2197"}else d.textContent=(_=a.callToActionIconText)!=null?_:"\u2197"}let C=a.position&&vt[a.position]?vt[a.position]:vt["bottom-right"],g="tvw-fixed tvw-flex tvw-items-center tvw-gap-3 tvw-rounded-launcher tvw-bg-cw-surface tvw-py-2.5 tvw-pl-3 tvw-pr-3 tvw-transition hover:tvw-translate-y-[-2px] tvw-cursor-pointer tvw-z-50";s.className=`${g} ${C}`;let U="1px solid #e5e7eb",$="0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)";s.style.border=(Z=a.border)!=null?Z:U,s.style.boxShadow=(j=a.shadow)!=null?j:$},r=()=>{s.removeEventListener("click",e),s.remove()};return n&&t(n),{element:s,update:t,destroy:r}};var zt=n=>{var _,Z,j,K,Q,ne,re,q,qe,Ve,nt,bt,Ct,J,fe,mt,ft,Ge,st,H,He,at,lt,Tt,wt,$e,ot,Ue,I,dt,Se,Oe;let{config:e,showClose:s=!0}=n,t=m("div","tvw-widget-header tvw-flex tvw-items-center tvw-gap-3 tvw-bg-cw-surface tvw-px-6 tvw-py-5 tvw-border-b-cw-divider"),r=(_=e==null?void 0:e.launcher)!=null?_:{},o=(Z=r.headerIconSize)!=null?Z:"48px",a=(j=r.closeButtonSize)!=null?j:"32px",l=(K=r.closeButtonPlacement)!=null?K:"inline",p=(Q=r.headerIconHidden)!=null?Q:!1,c=r.headerIconName,f=m("div","tvw-flex tvw-items-center tvw-justify-center tvw-rounded-xl tvw-bg-cw-primary tvw-text-white tvw-text-xl");if(f.style.height=o,f.style.width=o,!p)if(c){let te=parseFloat(o)||24,Ae=ce(c,te*.6,"#ffffff",2);Ae?f.replaceChildren(Ae):f.textContent=(re=(ne=e==null?void 0:e.launcher)==null?void 0:ne.agentIconText)!=null?re:"\u{1F4AC}"}else if((q=e==null?void 0:e.launcher)!=null&&q.iconUrl){let te=m("img");te.src=e.launcher.iconUrl,te.alt="",te.className="tvw-rounded-xl tvw-object-cover",te.style.height=o,te.style.width=o,f.replaceChildren(te)}else f.textContent=(Ve=(qe=e==null?void 0:e.launcher)==null?void 0:qe.agentIconText)!=null?Ve:"\u{1F4AC}";let w=m("div","tvw-flex tvw-flex-col"),d=m("span","tvw-text-base tvw-font-semibold");d.textContent=(bt=(nt=e==null?void 0:e.launcher)==null?void 0:nt.title)!=null?bt:"Chat Assistant";let C=m("span","tvw-text-xs tvw-text-cw-muted");C.textContent=(J=(Ct=e==null?void 0:e.launcher)==null?void 0:Ct.subtitle)!=null?J:"Here to help you get answers fast",w.append(d,C),p?t.append(w):t.append(f,w);let g=(fe=r.clearChat)!=null?fe:{},U=(mt=g.enabled)!=null?mt:!0,$=(ft=g.placement)!=null?ft:"inline",h=null,b=null;if(U){let te=(Ge=g.size)!=null?Ge:"32px",Ae=(st=g.iconName)!=null?st:"refresh-cw",Te=(H=g.iconColor)!=null?H:"",ze=(He=g.backgroundColor)!=null?He:"",Je=(at=g.borderWidth)!=null?at:"",xt=(lt=g.borderColor)!=null?lt:"",Lt=(Tt=g.borderRadius)!=null?Tt:"",yt=(wt=g.paddingX)!=null?wt:"",Et=($e=g.paddingY)!=null?$e:"",St=(ot=g.tooltipText)!=null?ot:"Clear chat",ye=(Ue=g.showTooltip)!=null?Ue:!0;b=m("div",$==="top-right"?"tvw-absolute tvw-top-4 tvw-z-50":"tvw-relative tvw-ml-auto tvw-clear-chat-button-wrapper"),$==="top-right"&&(b.style.right="48px"),h=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none"),h.style.height=te,h.style.width=te,h.type="button",h.setAttribute("aria-label",St);let Bt=ce(Ae,"20px",Te||"",2);if(Bt&&h.appendChild(Bt),Te&&(h.style.color=Te,h.classList.remove("tvw-text-cw-muted")),ze&&(h.style.backgroundColor=ze,h.classList.remove("hover:tvw-bg-gray-100")),Je||xt){let ke=Je||"0px",Ye=xt||"transparent";h.style.border=`${ke} solid ${Ye}`,h.classList.remove("tvw-border-none")}if(Lt&&(h.style.borderRadius=Lt,h.classList.remove("tvw-rounded-full")),yt?(h.style.paddingLeft=yt,h.style.paddingRight=yt):(h.style.paddingLeft="",h.style.paddingRight=""),Et?(h.style.paddingTop=Et,h.style.paddingBottom=Et):(h.style.paddingTop="",h.style.paddingBottom=""),b.appendChild(h),ye&&St&&h&&b){let ke=null,Ye=()=>{if(ke||!h)return;ke=m("div","tvw-clear-chat-tooltip"),ke.textContent=St;let Nt=m("div");Nt.className="tvw-clear-chat-tooltip-arrow",ke.appendChild(Nt);let Mt=h.getBoundingClientRect();ke.style.position="fixed",ke.style.left=`${Mt.left+Mt.width/2}px`,ke.style.top=`${Mt.top-8}px`,ke.style.transform="translate(-50%, -100%)",document.body.appendChild(ke)},At=()=>{ke&&ke.parentNode&&(ke.parentNode.removeChild(ke),ke=null)};b.addEventListener("mouseenter",Ye),b.addEventListener("mouseleave",At),h.addEventListener("focus",Ye),h.addEventListener("blur",At),b._cleanupTooltip=()=>{At(),b&&(b.removeEventListener("mouseenter",Ye),b.removeEventListener("mouseleave",At)),h&&(h.removeEventListener("focus",Ye),h.removeEventListener("blur",At))}}$==="inline"&&t.appendChild(b)}let W=m("div",l==="top-right"?"tvw-absolute tvw-top-4 tvw-right-4 tvw-z-50":U&&$==="inline"?"":"tvw-ml-auto"),v=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none");v.style.height=a,v.style.width=a,v.type="button";let D=(I=r.closeButtonTooltipText)!=null?I:"Close chat",x=(dt=r.closeButtonShowTooltip)!=null?dt:!0;v.setAttribute("aria-label",D),v.style.display=s?"":"none";let S=(Se=r.closeButtonIconName)!=null?Se:"x",X=(Oe=r.closeButtonIconText)!=null?Oe:"\xD7",B=ce(S,"20px",r.closeButtonColor||"",2);if(B?v.appendChild(B):v.textContent=X,r.closeButtonColor?(v.style.color=r.closeButtonColor,v.classList.remove("tvw-text-cw-muted")):(v.style.color="",v.classList.add("tvw-text-cw-muted")),r.closeButtonBackgroundColor?(v.style.backgroundColor=r.closeButtonBackgroundColor,v.classList.remove("hover:tvw-bg-gray-100")):(v.style.backgroundColor="",v.classList.add("hover:tvw-bg-gray-100")),r.closeButtonBorderWidth||r.closeButtonBorderColor){let te=r.closeButtonBorderWidth||"0px",Ae=r.closeButtonBorderColor||"transparent";v.style.border=`${te} solid ${Ae}`,v.classList.remove("tvw-border-none")}else v.style.border="",v.classList.add("tvw-border-none");if(r.closeButtonBorderRadius?(v.style.borderRadius=r.closeButtonBorderRadius,v.classList.remove("tvw-rounded-full")):(v.style.borderRadius="",v.classList.add("tvw-rounded-full")),r.closeButtonPaddingX?(v.style.paddingLeft=r.closeButtonPaddingX,v.style.paddingRight=r.closeButtonPaddingX):(v.style.paddingLeft="",v.style.paddingRight=""),r.closeButtonPaddingY?(v.style.paddingTop=r.closeButtonPaddingY,v.style.paddingBottom=r.closeButtonPaddingY):(v.style.paddingTop="",v.style.paddingBottom=""),W.appendChild(v),x&&D){let te=null,Ae=()=>{if(te)return;te=m("div","tvw-clear-chat-tooltip"),te.textContent=D;let ze=m("div");ze.className="tvw-clear-chat-tooltip-arrow",te.appendChild(ze);let Je=v.getBoundingClientRect();te.style.position="fixed",te.style.left=`${Je.left+Je.width/2}px`,te.style.top=`${Je.top-8}px`,te.style.transform="translate(-50%, -100%)",document.body.appendChild(te)},Te=()=>{te&&te.parentNode&&(te.parentNode.removeChild(te),te=null)};W.addEventListener("mouseenter",Ae),W.addEventListener("mouseleave",Te),v.addEventListener("focus",Ae),v.addEventListener("blur",Te),W._cleanupTooltip=()=>{Te(),W.removeEventListener("mouseenter",Ae),W.removeEventListener("mouseleave",Te),v.removeEventListener("focus",Ae),v.removeEventListener("blur",Te)}}return l!=="top-right"&&t.appendChild(W),{header:t,iconHolder:f,headerTitle:d,headerSubtitle:C,closeButton:v,closeButtonWrapper:W,clearChatButton:h,clearChatButtonWrapper:b}},on=(n,e,s)=>{var a,l,p,c;let t=(a=s==null?void 0:s.launcher)!=null?a:{},r=(l=t.closeButtonPlacement)!=null?l:"inline",o=(c=(p=t.clearChat)==null?void 0:p.placement)!=null?c:"inline";n.appendChild(e.header),r==="top-right"&&(n.style.position="relative",n.appendChild(e.closeButtonWrapper)),e.clearChatButtonWrapper&&o==="top-right"&&(n.style.position="relative",n.appendChild(e.clearChatButtonWrapper))};var yo=n=>zt({config:n.config,showClose:n.showClose,onClose:n.onClose,onClearChat:n.onClearChat}),vo=n=>{var g,U,$,h;let{config:e,showClose:s=!0,onClose:t}=n,r=(g=e==null?void 0:e.launcher)!=null?g:{},o=m("div","tvw-flex tvw-items-center tvw-justify-between tvw-bg-cw-surface tvw-px-6 tvw-py-4 tvw-border-b-cw-divider"),a=m("span","tvw-text-base tvw-font-semibold");a.textContent=(U=r.title)!=null?U:"Chat Assistant",o.appendChild(a);let l=($=r.closeButtonSize)!=null?$:"32px",p=m("div",""),c=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none");c.style.height=l,c.style.width=l,c.type="button",c.setAttribute("aria-label","Close chat"),c.style.display=s?"":"none";let f=(h=r.closeButtonIconName)!=null?h:"x",w=ce(f,"20px",r.closeButtonColor||"",2);w?c.appendChild(w):c.textContent="\xD7",t&&c.addEventListener("click",t),p.appendChild(c),o.appendChild(p);let d=m("div");d.style.display="none";let C=m("span");return C.style.display="none",{header:o,iconHolder:d,headerTitle:a,headerSubtitle:C,closeButton:c,closeButtonWrapper:p,clearChatButton:null,clearChatButtonWrapper:null}},bo=n=>{var v,D,x,S,X,B,_,Z;let{config:e,showClose:s=!0,onClose:t,onClearChat:r}=n,o=(v=e==null?void 0:e.launcher)!=null?v:{},a=m("div","tvw-flex tvw-flex-col tvw-bg-cw-surface tvw-px-6 tvw-py-5 tvw-border-b-cw-divider"),l=m("div","tvw-flex tvw-items-center tvw-gap-3"),p=(D=o.headerIconSize)!=null?D:"56px",c=m("div","tvw-flex tvw-items-center tvw-justify-center tvw-rounded-xl tvw-bg-cw-primary tvw-text-white tvw-text-2xl");c.style.height=p,c.style.width=p;let f=o.headerIconName;if(f){let j=parseFloat(p)||24,K=ce(f,j*.5,"#ffffff",2);K?c.replaceChildren(K):c.textContent=(x=o.agentIconText)!=null?x:"\u{1F4AC}"}else if(o.iconUrl){let j=m("img");j.src=o.iconUrl,j.alt="",j.className="tvw-rounded-xl tvw-object-cover",j.style.height=p,j.style.width=p,c.replaceChildren(j)}else c.textContent=(S=o.agentIconText)!=null?S:"\u{1F4AC}";let w=m("div","tvw-flex tvw-flex-col tvw-flex-1"),d=m("span","tvw-text-lg tvw-font-semibold");d.textContent=(X=o.title)!=null?X:"Chat Assistant";let C=m("span","tvw-text-sm tvw-text-cw-muted");C.textContent=(B=o.subtitle)!=null?B:"Here to help you get answers fast",w.append(d,C),l.append(c,w);let g=(_=o.closeButtonSize)!=null?_:"32px",U=m("div",""),$=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none");$.style.height=g,$.style.width=g,$.type="button",$.setAttribute("aria-label","Close chat"),$.style.display=s?"":"none";let h=(Z=o.closeButtonIconName)!=null?Z:"x",b=ce(h,"20px",o.closeButtonColor||"",2);b?$.appendChild(b):$.textContent="\xD7",t&&$.addEventListener("click",t),U.appendChild($),l.appendChild(U),a.appendChild(l);let W=m("div","tvw-mt-3 tvw-pt-3 tvw-border-t tvw-border-gray-100 tvw-text-xs tvw-text-cw-muted");return W.textContent="Online and ready to help",a.appendChild(W),{header:a,iconHolder:c,headerTitle:d,headerSubtitle:C,closeButton:$,closeButtonWrapper:U,clearChatButton:null,clearChatButtonWrapper:null}},Pn={default:yo,minimal:vo,expanded:bo},Co=n=>{var e;return(e=Pn[n])!=null?e:Pn.default},Rn=(n,e,s)=>{var a,l,p;if(e!=null&&e.render){let c=e.render({config:n,onClose:s==null?void 0:s.onClose,onClearChat:s==null?void 0:s.onClearChat}),f=m("div");f.style.display="none";let w=m("span"),d=m("span"),C=m("button");C.style.display="none";let g=m("div");return g.style.display="none",{header:c,iconHolder:f,headerTitle:w,headerSubtitle:d,closeButton:C,closeButtonWrapper:g,clearChatButton:null,clearChatButtonWrapper:null}}let t=(a=e==null?void 0:e.layout)!=null?a:"default",o=Co(t)({config:n,showClose:(p=(l=e==null?void 0:e.showCloseButton)!=null?l:s==null?void 0:s.showClose)!=null?p:!0,onClose:s==null?void 0:s.onClose,onClearChat:s==null?void 0:s.onClearChat});return e&&(e.showIcon===!1&&(o.iconHolder.style.display="none"),e.showTitle===!1&&(o.headerTitle.style.display="none"),e.showSubtitle===!1&&(o.headerSubtitle.style.display="none"),e.showCloseButton===!1&&(o.closeButton.style.display="none"),e.showClearChat===!1&&o.clearChatButtonWrapper&&(o.clearChatButtonWrapper.style.display="none")),o};var Ko=n=>{switch(n){case"serif":return'Georgia, "Times New Roman", Times, serif';case"mono":return'"Courier New", Courier, "Lucida Console", Monaco, monospace';case"sans-serif":default:return'-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif'}},rn=n=>{var ne,re,q,qe,Ve,nt,bt,Ct,J,fe,mt,ft,Ge,st,H,He,at,lt,Tt,wt,$e,ot,Ue,I,dt;let{config:e}=n,s=m("div","tvw-widget-footer tvw-border-t-cw-divider tvw-bg-cw-surface tvw-px-6 tvw-py-4"),t=m("div","tvw-mb-3 tvw-flex tvw-flex-wrap tvw-gap-2"),r=((ne=e==null?void 0:e.voiceRecognition)==null?void 0:ne.enabled)===!0,o=typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined"),p=m("form",`tvw-widget-composer tvw-flex tvw-items-end ${r&&o?"tvw-gap-1":"tvw-gap-3"} tvw-rounded-2xl tvw-border tvw-border-gray-200 tvw-bg-cw-input-background tvw-px-4 tvw-py-3`);p.style.outline="none";let c=m("textarea");c.placeholder=(q=(re=e==null?void 0:e.copy)==null?void 0:re.inputPlaceholder)!=null?q:"Type your message\u2026",c.className="tvw-min-h-[48px] tvw-flex-1 tvw-resize-none tvw-border-none tvw-bg-transparent tvw-text-sm tvw-text-cw-primary focus:tvw-outline-none focus:tvw-border-none",c.rows=1;let f=(Ve=(qe=e==null?void 0:e.theme)==null?void 0:qe.inputFontFamily)!=null?Ve:"sans-serif",w=(bt=(nt=e==null?void 0:e.theme)==null?void 0:nt.inputFontWeight)!=null?bt:"400";c.style.fontFamily=Ko(f),c.style.fontWeight=w,c.style.border="none",c.style.outline="none",c.style.borderWidth="0",c.style.borderStyle="none",c.style.borderColor="transparent",c.addEventListener("focus",()=>{c.style.border="none",c.style.outline="none",c.style.borderWidth="0",c.style.borderStyle="none",c.style.borderColor="transparent",c.style.boxShadow="none"}),c.addEventListener("blur",()=>{c.style.border="none",c.style.outline="none"});let d=(Ct=e==null?void 0:e.sendButton)!=null?Ct:{},C=(J=d.useIcon)!=null?J:!1,g=(fe=d.iconText)!=null?fe:"\u2191",U=d.iconName,$=(mt=d.tooltipText)!=null?mt:"Send message",h=(ft=d.showTooltip)!=null?ft:!1,b=(Ge=d.size)!=null?Ge:"40px",W=d.backgroundColor,v=d.textColor,D=m("div","tvw-send-button-wrapper"),x=m("button",C?"tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer":"tvw-rounded-button tvw-bg-cw-accent tvw-px-4 tvw-py-2 tvw-text-sm tvw-font-semibold disabled:tvw-opacity-50 tvw-cursor-pointer");if(x.type="submit",C){if(x.style.width=b,x.style.height=b,x.style.minWidth=b,x.style.minHeight=b,x.style.fontSize="18px",x.style.lineHeight="1",x.innerHTML="",U){let Se=parseFloat(b)||24,Oe=v&&typeof v=="string"&&v.trim()?v.trim():"currentColor",te=ce(U,Se,Oe,2);te?(x.appendChild(te),x.style.color=Oe):(x.textContent=g,v?x.style.color=v:x.classList.add("tvw-text-white"))}else x.textContent=g,v?x.style.color=v:x.classList.add("tvw-text-white");W?x.style.backgroundColor=W:x.classList.add("tvw-bg-cw-primary")}else x.textContent=(H=(st=e==null?void 0:e.copy)==null?void 0:st.sendButtonLabel)!=null?H:"Send",v?x.style.color=v:x.classList.add("tvw-text-white");if(d.borderWidth&&(x.style.borderWidth=d.borderWidth,x.style.borderStyle="solid"),d.borderColor&&(x.style.borderColor=d.borderColor),d.paddingX?(x.style.paddingLeft=d.paddingX,x.style.paddingRight=d.paddingX):(x.style.paddingLeft="",x.style.paddingRight=""),d.paddingY?(x.style.paddingTop=d.paddingY,x.style.paddingBottom=d.paddingY):(x.style.paddingTop="",x.style.paddingBottom=""),h&&$){let Se=m("div","tvw-send-button-tooltip");Se.textContent=$,D.appendChild(Se)}D.appendChild(x);let S=(He=e==null?void 0:e.voiceRecognition)!=null?He:{},X=S.enabled===!0,B=null,_=null,Z=typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined");if(X&&Z){_=m("div","tvw-send-button-wrapper"),B=m("button","tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer"),B.type="button",B.setAttribute("aria-label","Start voice recognition");let Se=(at=S.iconName)!=null?at:"mic",Oe=(lt=S.iconSize)!=null?lt:b,te=parseFloat(Oe)||24,Ae=(Tt=S.backgroundColor)!=null?Tt:W,Te=(wt=S.iconColor)!=null?wt:v;B.style.width=Oe,B.style.height=Oe,B.style.minWidth=Oe,B.style.minHeight=Oe,B.style.fontSize="18px",B.style.lineHeight="1";let ze=Te||"currentColor",Je=ce(Se,te,ze,1.5);Je?(B.appendChild(Je),B.style.color=ze):(B.textContent="\u{1F3A4}",B.style.color=ze),Ae?B.style.backgroundColor=Ae:B.classList.add("tvw-bg-cw-primary"),Te?B.style.color=Te:!Te&&!v&&B.classList.add("tvw-text-white"),S.borderWidth&&(B.style.borderWidth=S.borderWidth,B.style.borderStyle="solid"),S.borderColor&&(B.style.borderColor=S.borderColor),S.paddingX&&(B.style.paddingLeft=S.paddingX,B.style.paddingRight=S.paddingX),S.paddingY&&(B.style.paddingTop=S.paddingY,B.style.paddingBottom=S.paddingY),_.appendChild(B);let xt=($e=S.tooltipText)!=null?$e:"Start voice recognition";if(((ot=S.showTooltip)!=null?ot:!1)&&xt){let yt=m("div","tvw-send-button-tooltip");yt.textContent=xt,_.appendChild(yt)}}p.addEventListener("click",Se=>{Se.target!==x&&Se.target!==D&&Se.target!==B&&Se.target!==_&&c.focus()}),p.append(c),_&&p.append(_),p.append(D);let j=m("div","tvw-mt-2 tvw-text-right tvw-text-xs tvw-text-cw-muted"),K=(Ue=e==null?void 0:e.statusIndicator)!=null?Ue:{},Q=(I=K.visible)!=null?I:!0;return j.style.display=Q?"":"none",j.textContent=(dt=K.idleText)!=null?dt:"Online",s.append(t,p,j),{footer:s,suggestions:t,composerForm:p,textarea:c,sendButton:x,sendButtonWrapper:D,micButton:B,micButtonWrapper:_,statusText:j}};var xo=n=>{var p,c,f,w,d,C,g;if(!((c=(p=n==null?void 0:n.launcher)==null?void 0:p.enabled)!=null?c:!0)){let U=m("div","tvw-relative tvw-h-full tvw-flex tvw-flex-col tvw-flex-1 tvw-min-h-0"),$=m("div","tvw-relative tvw-flex-1 tvw-flex tvw-flex-col tvw-min-h-0"),h=(w=(f=n==null?void 0:n.launcher)==null?void 0:f.width)!=null?w:"100%";return U.style.width=h,$.style.width="100%",U.appendChild($),{wrapper:U,panel:$}}let s=(d=n==null?void 0:n.launcher)!=null?d:{},t=s.position&&vt[s.position]?vt[s.position]:vt["bottom-right"],r=m("div",`tvw-widget-wrapper tvw-fixed ${t} tvw-z-50 tvw-transition`),o=m("div","tvw-widget-panel tvw-relative tvw-min-h-[320px]"),a=(g=(C=n==null?void 0:n.launcher)==null?void 0:C.width)!=null?g:n==null?void 0:n.launcherWidth,l=a!=null?a:"min(400px, calc(100vw - 24px))";return o.style.width=l,o.style.maxWidth=l,r.appendChild(o),{wrapper:r,panel:o}},So=(n,e=!0)=>{var w,d,C,g,U;let s=m("div","tvw-widget-container tvw-flex tvw-h-full tvw-w-full tvw-flex-1 tvw-min-h-0 tvw-flex-col tvw-bg-cw-surface tvw-text-cw-primary tvw-rounded-2xl tvw-overflow-hidden tvw-border tvw-border-cw-border"),t=(w=n==null?void 0:n.layout)==null?void 0:w.header,r=t?Rn(n,t,{showClose:e}):zt({config:n,showClose:e}),o=m("div","tvw-widget-body tvw-flex tvw-flex-1 tvw-min-h-0 tvw-flex-col tvw-gap-6 tvw-overflow-y-auto tvw-bg-cw-container tvw-px-6 tvw-py-6");o.id="vanilla-agent-scroll-container";let a=m("div","tvw-rounded-2xl tvw-bg-cw-surface tvw-p-6 tvw-shadow-sm"),l=m("h2","tvw-text-lg tvw-font-semibold tvw-text-cw-primary");l.textContent=(C=(d=n==null?void 0:n.copy)==null?void 0:d.welcomeTitle)!=null?C:"Hello \u{1F44B}";let p=m("p","tvw-mt-2 tvw-text-sm tvw-text-cw-muted");p.textContent=(U=(g=n==null?void 0:n.copy)==null?void 0:g.welcomeSubtitle)!=null?U:"Ask anything about your account or products.",a.append(l,p);let c=m("div","tvw-flex tvw-flex-col tvw-gap-3");o.append(a,c);let f=rn({config:n});return on(s,r,n),s.append(o,f.footer),{container:s,body:o,messagesWrapper:c,suggestions:f.suggestions,textarea:f.textarea,sendButton:f.sendButton,sendButtonWrapper:f.sendButtonWrapper,micButton:f.micButton,micButtonWrapper:f.micButtonWrapper,composerForm:f.composerForm,statusText:f.statusText,introTitle:l,introSubtitle:p,closeButton:r.closeButton,closeButtonWrapper:r.closeButtonWrapper,clearChatButton:r.clearChatButton,clearChatButtonWrapper:r.clearChatButtonWrapper,iconHolder:r.iconHolder,headerTitle:r.headerTitle,headerSubtitle:r.headerSubtitle,header:r.header,footer:f.footer}};var wn=()=>{let n=document.createElement("div");n.className="tvw-flex tvw-items-center tvw-space-x-1 tvw-h-5 tvw-mt-2";let e=document.createElement("div");e.className="tvw-bg-cw-primary tvw-animate-typing tvw-rounded-full tvw-h-1.5 tvw-w-1.5",e.style.animationDelay="0ms";let s=document.createElement("div");s.className="tvw-bg-cw-primary tvw-animate-typing tvw-rounded-full tvw-h-1.5 tvw-w-1.5",s.style.animationDelay="250ms";let t=document.createElement("div");t.className="tvw-bg-cw-primary tvw-animate-typing tvw-rounded-full tvw-h-1.5 tvw-w-1.5",t.style.animationDelay="500ms";let r=document.createElement("span");return r.className="tvw-sr-only",r.textContent="Loading",n.appendChild(e),n.appendChild(s),n.appendChild(t),n.appendChild(r),n},Xo=(n,e)=>{let s=m("div","tvw-flex-shrink-0 tvw-w-8 tvw-h-8 tvw-rounded-full tvw-flex tvw-items-center tvw-justify-center tvw-text-sm"),t=e==="user"?n.userAvatar:n.assistantAvatar;if(t)if(t.startsWith("http")||t.startsWith("/")||t.startsWith("data:")){let r=m("img");r.src=t,r.alt=e==="user"?"User":"Assistant",r.className="tvw-w-full tvw-h-full tvw-rounded-full tvw-object-cover",s.appendChild(r)}else s.textContent=t,s.classList.add(e==="user"?"tvw-bg-cw-accent":"tvw-bg-cw-primary","tvw-text-white");else s.textContent=e==="user"?"U":"A",s.classList.add(e==="user"?"tvw-bg-cw-accent":"tvw-bg-cw-primary","tvw-text-white");return s},Ao=(n,e)=>{let s=m("div","tvw-text-xs tvw-text-cw-muted"),t=new Date(n.createdAt);return e.format?s.textContent=e.format(t):s.textContent=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),s},Vo=(n,e="bubble")=>{let s=["vanilla-message-bubble","tvw-max-w-[85%]"];switch(e){case"flat":n==="user"?s.push("vanilla-message-user-bubble","tvw-ml-auto","tvw-text-cw-primary","tvw-py-2"):s.push("vanilla-message-assistant-bubble","tvw-text-cw-primary","tvw-py-2");break;case"minimal":s.push("tvw-text-sm","tvw-leading-relaxed"),n==="user"?s.push("vanilla-message-user-bubble","tvw-ml-auto","tvw-bg-cw-accent","tvw-text-white","tvw-px-3","tvw-py-2","tvw-rounded-lg"):s.push("vanilla-message-assistant-bubble","tvw-bg-cw-surface","tvw-text-cw-primary","tvw-px-3","tvw-py-2","tvw-rounded-lg");break;case"bubble":default:s.push("tvw-rounded-2xl","tvw-text-sm","tvw-leading-relaxed","tvw-shadow-sm"),n==="user"?s.push("vanilla-message-user-bubble","tvw-ml-auto","tvw-bg-cw-accent","tvw-text-white","tvw-px-5","tvw-py-3"):s.push("vanilla-message-assistant-bubble","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-px-5","tvw-py-3");break}return s},To=(n,e,s)=>{var g,U,$,h,b,W;let t=(g=e.showCopy)!=null?g:!0,r=(U=e.showUpvote)!=null?U:!0,o=($=e.showDownvote)!=null?$:!0,a=(h=e.visibility)!=null?h:"hover",l=(b=e.align)!=null?b:"right",p=(W=e.layout)!=null?W:"pill-inside",c={left:"tvw-message-actions-left",center:"tvw-message-actions-center",right:"tvw-message-actions-right"}[l],f={"pill-inside":"tvw-message-actions-pill","row-inside":"tvw-message-actions-row"}[p],w=m("div",`tvw-message-actions tvw-flex tvw-items-center tvw-gap-1 tvw-mt-2 ${c} ${f} ${a==="hover"?"tvw-message-actions-hover":""}`),d=null,C=(v,D,x,S)=>{let X=document.createElement("button");X.className="tvw-message-action-btn",X.setAttribute("aria-label",D),X.setAttribute("title",D),S&&X.setAttribute("data-action",S);let B=ce(v,14,"currentColor",2);return B&&X.appendChild(B),X.addEventListener("click",_=>{_.preventDefault(),_.stopPropagation(),x()}),X};if(t){let v=C("copy","Copy message",()=>{let D=n.content||"";navigator.clipboard.writeText(D).then(()=>{v.classList.add("tvw-message-action-success");let x=ce("check",14,"currentColor",2);x&&(v.innerHTML="",v.appendChild(x)),setTimeout(()=>{v.classList.remove("tvw-message-action-success");let S=ce("copy",14,"currentColor",2);S&&(v.innerHTML="",v.appendChild(S))},2e3)}).catch(x=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to copy message:",x)}),s!=null&&s.onCopy&&s.onCopy(n),e.onCopy&&e.onCopy(n)},"copy");w.appendChild(v)}if(r){let v=C("thumbs-up","Upvote",()=>{if(d==="upvote")d=null,v.classList.remove("tvw-message-action-active");else{let x=w.querySelector('[data-action="downvote"]');x&&x.classList.remove("tvw-message-action-active"),d="upvote",v.classList.add("tvw-message-action-active");let S={type:"upvote",messageId:n.id,message:n};s!=null&&s.onFeedback&&s.onFeedback(S),e.onFeedback&&e.onFeedback(S)}},"upvote");w.appendChild(v)}if(o){let v=C("thumbs-down","Downvote",()=>{if(d==="downvote")d=null,v.classList.remove("tvw-message-action-active");else{let x=w.querySelector('[data-action="upvote"]');x&&x.classList.remove("tvw-message-action-active"),d="downvote",v.classList.add("tvw-message-action-active");let S={type:"downvote",messageId:n.id,message:n};s!=null&&s.onFeedback&&s.onFeedback(S),e.onFeedback&&e.onFeedback(S)}},"downvote");w.appendChild(v)}return w},an=(n,e,s,t,r)=>{var W,v,D,x,S;let o=s!=null?s:{},a=(W=o.layout)!=null?W:"bubble",l=o.avatar,p=o.timestamp,c=(v=l==null?void 0:l.show)!=null?v:!1,f=(D=p==null?void 0:p.show)!=null?D:!1,w=(x=l==null?void 0:l.position)!=null?x:"left",d=(S=p==null?void 0:p.position)!=null?S:"below",C=Vo(n.role,a),g=m("div",C.join(" ")),U=document.createElement("div");if(U.innerHTML=e({text:n.content,message:n,streaming:!!n.streaming,raw:n.rawContent}),f&&d==="inline"&&n.createdAt){let X=Ao(n,p);X.classList.add("tvw-ml-2","tvw-inline"),U.appendChild(X)}if(g.appendChild(U),f&&d==="below"&&n.createdAt){let X=Ao(n,p);X.classList.add("tvw-mt-1"),g.appendChild(X)}if(n.streaming&&n.role==="assistant"&&(!n.content||!n.content.trim())){let X=wn();g.appendChild(X)}if(n.role==="assistant"&&!n.streaming&&n.content&&n.content.trim()&&(t==null?void 0:t.enabled)!==!1&&t){let X=To(n,t,r);g.appendChild(X)}if(!c||n.role==="system")return g;let h=m("div",`tvw-flex tvw-gap-2 ${n.role==="user"?"tvw-flex-row-reverse":""}`),b=Xo(l,n.role);return w==="right"||w==="left"&&n.role==="user"?h.append(g,b):h.append(b,g),g.classList.remove("tvw-max-w-[85%]"),g.classList.add("tvw-max-w-[calc(85%-2.5rem)]"),h},Go=(n,e,s,t,r)=>{let o=s!=null?s:{};return n.role==="user"&&o.renderUserMessage?o.renderUserMessage({message:n,config:{},streaming:!!n.streaming}):n.role==="assistant"&&o.renderAssistantMessage?o.renderAssistantMessage({message:n,config:{},streaming:!!n.streaming}):an(n,e,s,t,r)};var In=new Set,$n=n=>{let e=n.reasoning,s=m("div",["vanilla-message-bubble","vanilla-reasoning-bubble","tvw-w-full","tvw-max-w-[85%]","tvw-rounded-2xl","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-shadow-sm","tvw-overflow-hidden","tvw-px-0","tvw-py-0"].join(" "));if(!e)return s;let t=In.has(n.id),r=m("button","tvw-flex tvw-w-full tvw-items-center tvw-justify-between tvw-gap-3 tvw-bg-transparent tvw-px-4 tvw-py-3 tvw-text-left tvw-cursor-pointer tvw-border-none");r.type="button",r.setAttribute("aria-expanded",t?"true":"false");let o=m("div","tvw-flex tvw-flex-col tvw-text-left"),a=m("span","tvw-text-xs tvw-text-cw-primary");a.textContent="Thinking...",o.appendChild(a);let l=m("span","tvw-text-xs tvw-text-cw-primary");l.textContent=mo(e),o.appendChild(l),e.status==="complete"?a.style.display="none":a.style.display="";let p=m("div","tvw-flex tvw-items-center"),f=ce(t?"chevron-up":"chevron-down",16,"currentColor",2);f?p.appendChild(f):p.textContent=t?"Hide":"Show";let w=m("div","tvw-flex tvw-items-center tvw-ml-auto");w.append(p),r.append(o,w);let d=m("div","tvw-border-t tvw-border-gray-200 tvw-bg-gray-50 tvw-px-4 tvw-py-3");d.style.display=t?"":"none";let C=e.chunks.join(""),g=m("div","tvw-whitespace-pre-wrap tvw-text-xs tvw-leading-snug tvw-text-cw-muted");g.textContent=C||(e.status==="complete"?"No additional context was shared.":"Waiting for details\u2026"),d.appendChild(g);let U=()=>{r.setAttribute("aria-expanded",t?"true":"false"),p.innerHTML="";let b=ce(t?"chevron-up":"chevron-down",16,"currentColor",2);b?p.appendChild(b):p.textContent=t?"Hide":"Show",d.style.display=t?"":"none"},$=()=>{t=!t,t?In.add(n.id):In.delete(n.id),U()};return r.addEventListener("pointerdown",h=>{h.preventDefault(),$()}),r.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),$())}),U(),s.append(r,d),s};var Fn=new Set,Nn=(n,e)=>{var $;let s=n.toolCall,t=($=e==null?void 0:e.toolCall)!=null?$:{},r=m("div",["vanilla-message-bubble","vanilla-tool-bubble","tvw-w-full","tvw-max-w-[85%]","tvw-rounded-2xl","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-shadow-sm","tvw-overflow-hidden","tvw-px-0","tvw-py-0"].join(" "));if(t.backgroundColor&&(r.style.backgroundColor=t.backgroundColor),t.borderColor&&(r.style.borderColor=t.borderColor),t.borderWidth&&(r.style.borderWidth=t.borderWidth),t.borderRadius&&(r.style.borderRadius=t.borderRadius),!s)return r;let o=Fn.has(n.id),a=m("button","tvw-flex tvw-w-full tvw-items-center tvw-justify-between tvw-gap-3 tvw-bg-transparent tvw-px-4 tvw-py-3 tvw-text-left tvw-cursor-pointer tvw-border-none");a.type="button",a.setAttribute("aria-expanded",o?"true":"false"),t.headerBackgroundColor&&(a.style.backgroundColor=t.headerBackgroundColor),t.headerPaddingX&&(a.style.paddingLeft=t.headerPaddingX,a.style.paddingRight=t.headerPaddingX),t.headerPaddingY&&(a.style.paddingTop=t.headerPaddingY,a.style.paddingBottom=t.headerPaddingY);let l=m("div","tvw-flex tvw-flex-col tvw-text-left"),p=m("span","tvw-text-xs tvw-text-cw-primary");t.headerTextColor&&(p.style.color=t.headerTextColor),p.textContent=fo(s),l.appendChild(p);let c=m("div","tvw-flex tvw-items-center"),f=t.toggleTextColor||t.headerTextColor||"currentColor",w=ce(o?"chevron-up":"chevron-down",16,f,2);w?c.appendChild(w):c.textContent=o?"Hide":"Show";let d=m("div","tvw-flex tvw-items-center tvw-gap-2 tvw-ml-auto");d.append(c),a.append(l,d);let C=m("div","tvw-border-t tvw-border-gray-200 tvw-bg-gray-50 tvw-space-y-3 tvw-px-4 tvw-py-3");if(C.style.display=o?"":"none",t.contentBackgroundColor&&(C.style.backgroundColor=t.contentBackgroundColor),t.contentTextColor&&(C.style.color=t.contentTextColor),t.contentPaddingX&&(C.style.paddingLeft=t.contentPaddingX,C.style.paddingRight=t.contentPaddingX),t.contentPaddingY&&(C.style.paddingTop=t.contentPaddingY,C.style.paddingBottom=t.contentPaddingY),s.name){let h=m("div","tvw-text-xs tvw-text-cw-muted tvw-italic");t.contentTextColor?h.style.color=t.contentTextColor:t.headerTextColor&&(h.style.color=t.headerTextColor),h.textContent=s.name,C.appendChild(h)}if(s.args!==void 0){let h=m("div","tvw-space-y-1"),b=m("div","tvw-text-xs tvw-text-cw-muted");t.labelTextColor&&(b.style.color=t.labelTextColor),b.textContent="Arguments";let W=m("pre","tvw-max-h-48 tvw-overflow-auto tvw-whitespace-pre-wrap tvw-rounded-lg tvw-border tvw-border-gray-100 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-xs tvw-text-cw-primary");W.style.fontSize="0.75rem",W.style.lineHeight="1rem",t.codeBlockBackgroundColor&&(W.style.backgroundColor=t.codeBlockBackgroundColor),t.codeBlockBorderColor&&(W.style.borderColor=t.codeBlockBorderColor),t.codeBlockTextColor&&(W.style.color=t.codeBlockTextColor),W.textContent=Tn(s.args),h.append(b,W),C.appendChild(h)}if(s.chunks&&s.chunks.length){let h=m("div","tvw-space-y-1"),b=m("div","tvw-text-xs tvw-text-cw-muted");t.labelTextColor&&(b.style.color=t.labelTextColor),b.textContent="Activity";let W=m("pre","tvw-max-h-48 tvw-overflow-auto tvw-whitespace-pre-wrap tvw-rounded-lg tvw-border tvw-border-gray-100 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-xs tvw-text-cw-primary");W.style.fontSize="0.75rem",W.style.lineHeight="1rem",t.codeBlockBackgroundColor&&(W.style.backgroundColor=t.codeBlockBackgroundColor),t.codeBlockBorderColor&&(W.style.borderColor=t.codeBlockBorderColor),t.codeBlockTextColor&&(W.style.color=t.codeBlockTextColor),W.textContent=s.chunks.join(`
|
|
16
|
-
`),h.append(b,W),C.appendChild(h)}if(s.status==="complete"&&s.result!==void 0){let h=m("div","tvw-space-y-1"),b=m("div","tvw-text-xs tvw-text-cw-muted");t.labelTextColor&&(b.style.color=t.labelTextColor),b.textContent="Result";let W=m("pre","tvw-max-h-48 tvw-overflow-auto tvw-whitespace-pre-wrap tvw-rounded-lg tvw-border tvw-border-gray-100 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-xs tvw-text-cw-primary");W.style.fontSize="0.75rem",W.style.lineHeight="1rem",t.codeBlockBackgroundColor&&(W.style.backgroundColor=t.codeBlockBackgroundColor),t.codeBlockBorderColor&&(W.style.borderColor=t.codeBlockBorderColor),t.codeBlockTextColor&&(W.style.color=t.codeBlockTextColor),W.textContent=Tn(s.result),h.append(b,W),C.appendChild(h)}if(s.status==="complete"&&typeof s.duration=="number"){let h=m("div","tvw-text-xs tvw-text-cw-muted");t.contentTextColor&&(h.style.color=t.contentTextColor),h.textContent=`Duration: ${s.duration}ms`,C.appendChild(h)}let g=()=>{a.setAttribute("aria-expanded",o?"true":"false"),c.innerHTML="";let h=t.toggleTextColor||t.headerTextColor||"currentColor",b=ce(o?"chevron-up":"chevron-down",16,h,2);b?c.appendChild(b):c.textContent=o?"Hide":"Show",C.style.display=o?"":"none"},U=()=>{o=!o,o?Fn.add(n.id):Fn.delete(n.id),g()};return a.addEventListener("pointerdown",h=>{h.preventDefault(),U()}),a.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),U())}),g(),r.append(a,C),r};var Eo=n=>{let e=[];return{buttons:e,render:(t,r,o,a,l)=>{if(n.innerHTML="",e.length=0,!t||!t.length||(a!=null?a:r?r.getMessages():[]).some(C=>C.role==="user"))return;let f=document.createDocumentFragment(),w=r?r.isStreaming():!1,d=C=>{switch(C){case"serif":return'Georgia, "Times New Roman", Times, serif';case"mono":return'"Courier New", Courier, "Lucida Console", Monaco, monospace';case"sans-serif":default:return'-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif'}};t.forEach(C=>{let g=m("button","tvw-rounded-button tvw-bg-cw-surface tvw-px-3 tvw-py-1.5 tvw-text-xs tvw-font-medium tvw-text-cw-muted hover:tvw-opacity-90 tvw-cursor-pointer tvw-border tvw-border-gray-200");g.type="button",g.textContent=C,g.disabled=w,l!=null&&l.fontFamily&&(g.style.fontFamily=d(l.fontFamily)),l!=null&&l.fontWeight&&(g.style.fontWeight=l.fontWeight),l!=null&&l.paddingX&&(g.style.paddingLeft=l.paddingX,g.style.paddingRight=l.paddingX),l!=null&&l.paddingY&&(g.style.paddingTop=l.paddingY,g.style.paddingBottom=l.paddingY),g.addEventListener("click",()=>{!r||r.isStreaming()||(o.value="",r.sendMessage(C))}),f.appendChild(g),e.push(g)}),n.appendChild(f)}}};var Mo={init:{title:"Schedule a Demo",description:"Share the basics and we'll follow up with a confirmation.",fields:[{name:"name",label:"Full name",placeholder:"Jane Doe",required:!0},{name:"email",label:"Work email",placeholder:"jane@example.com",type:"email",required:!0},{name:"notes",label:"What would you like to cover?",type:"textarea"}],submitLabel:"Submit details"},followup:{title:"Additional Information",description:"Provide any extra details to tailor the next steps.",fields:[{name:"company",label:"Company",placeholder:"Acme Inc."},{name:"context",label:"Context",type:"textarea",placeholder:"Share more about your use case"}],submitLabel:"Send"}},On=(n,e,s,t)=>{let r=n.querySelectorAll("[data-tv-form]");r.length&&r.forEach(o=>{var g,U,$;if(o.dataset.enhanced==="true")return;let a=(g=o.dataset.tvForm)!=null?g:"init";o.dataset.enhanced="true";let l=(U=Mo[a])!=null?U:Mo.init;o.classList.add("tvw-form-card","tvw-space-y-4");let p=m("div","tvw-space-y-1"),c=m("h3","tvw-text-base tvw-font-semibold tvw-text-cw-primary");if(c.textContent=l.title,p.appendChild(c),l.description){let h=m("p","tvw-text-sm tvw-text-cw-muted");h.textContent=l.description,p.appendChild(h)}let f=document.createElement("form");f.className="tvw-form-grid tvw-space-y-3",l.fields.forEach(h=>{var x,S;let b=m("label","tvw-form-field tvw-flex tvw-flex-col tvw-gap-1");b.htmlFor=`${e.id}-${a}-${h.name}`;let W=m("span","tvw-text-xs tvw-font-medium tvw-text-cw-muted");W.textContent=h.label,b.appendChild(W);let v=(x=h.type)!=null?x:"text",D;v==="textarea"?(D=document.createElement("textarea"),D.rows=3):(D=document.createElement("input"),D.type=v),D.className="tvw-rounded-xl tvw-border tvw-border-gray-200 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-sm tvw-text-cw-primary focus:tvw-outline-none focus:tvw-border-cw-primary",D.id=`${e.id}-${a}-${h.name}`,D.name=h.name,D.placeholder=(S=h.placeholder)!=null?S:"",h.required&&(D.required=!0),b.appendChild(D),f.appendChild(b)});let w=m("div","tvw-flex tvw-items-center tvw-justify-between tvw-gap-2"),d=m("div","tvw-text-xs tvw-text-cw-muted tvw-min-h-[1.5rem]"),C=m("button","tvw-inline-flex tvw-items-center tvw-rounded-full tvw-bg-cw-primary tvw-px-4 tvw-py-2 tvw-text-sm tvw-font-semibold tvw-text-white disabled:tvw-opacity-60 tvw-cursor-pointer");C.type="submit",C.textContent=($=l.submitLabel)!=null?$:"Submit",w.appendChild(d),w.appendChild(C),f.appendChild(w),o.replaceChildren(p,f),f.addEventListener("submit",async h=>{var D,x;h.preventDefault();let b=(D=s.formEndpoint)!=null?D:"/form",W=new FormData(f),v={};W.forEach((S,X)=>{v[X]=S}),v.type=a,C.disabled=!0,d.textContent="Submitting\u2026";try{let S=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!S.ok)throw new Error(`Form submission failed (${S.status})`);let X=await S.json();d.textContent=(x=X.message)!=null?x:"Thanks! We'll be in touch soon.",X.success&&X.nextPrompt&&await t.sendMessage(String(X.nextPrompt))}catch(S){d.textContent=S instanceof Error?S.message:"Something went wrong. Please try again."}finally{C.disabled=!1}})})};var Dn=class{constructor(){this.plugins=new Map}register(e){var s;this.plugins.has(e.id)&&console.warn(`Plugin "${e.id}" is already registered. Overwriting.`),this.plugins.set(e.id,e),(s=e.onRegister)==null||s.call(e)}unregister(e){var t;let s=this.plugins.get(e);s&&((t=s.onUnregister)==null||t.call(s),this.plugins.delete(e))}getAll(){return Array.from(this.plugins.values()).sort((e,s)=>{var t,r;return((t=s.priority)!=null?t:0)-((r=e.priority)!=null?r:0)})}getForInstance(e){let s=this.getAll();if(!e||e.length===0)return s;let t=new Set(e.map(o=>o.id));return[...s.filter(o=>!t.has(o.id)),...e].sort((o,a)=>{var l,p;return((l=a.priority)!=null?l:0)-((p=o.priority)!=null?p:0)})}clear(){this.plugins.forEach(e=>{var s;return(s=e.onUnregister)==null?void 0:s.call(e)}),this.plugins.clear()}},yn=new Dn;var Be={apiUrl:"http://localhost:43111/api/chat/dispatch",clientToken:void 0,theme:{primary:"#111827",accent:"#1d4ed8",surface:"#ffffff",muted:"#6b7280",container:"#f8fafc",border:"#f1f5f9",divider:"#f1f5f9",messageBorder:"#f1f5f9",inputBackground:"#ffffff",callToAction:"#000000",callToActionBackground:"#ffffff",sendButtonBackgroundColor:"#111827",sendButtonTextColor:"#ffffff",sendButtonBorderColor:"#60a5fa",closeButtonColor:"#6b7280",closeButtonBackgroundColor:"transparent",closeButtonBorderColor:"",clearChatIconColor:"#6b7280",clearChatBackgroundColor:"transparent",clearChatBorderColor:"transparent",micIconColor:"#111827",micBackgroundColor:"transparent",micBorderColor:"transparent",recordingIconColor:"#ffffff",recordingBackgroundColor:"#ef4444",recordingBorderColor:"transparent",inputFontFamily:"sans-serif",inputFontWeight:"400",radiusSm:"0.75rem",radiusMd:"1rem",radiusLg:"1.5rem",launcherRadius:"9999px",buttonRadius:"9999px"},launcher:{enabled:!0,title:"Chat Assistant",subtitle:"Here to help you get answers fast",agentIconText:"\u{1F4AC}",position:"bottom-right",width:"min(400px, calc(100vw - 24px))",heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:"40px",headerIconSize:"40px",closeButtonSize:"32px",callToActionIconName:"arrow-up-right",callToActionIconText:"",callToActionIconSize:"32px",callToActionIconPadding:"5px",callToActionIconColor:"#000000",callToActionIconBackgroundColor:"#ffffff",closeButtonColor:"#6b7280",closeButtonBackgroundColor:"transparent",clearChat:{iconColor:"#6b7280",backgroundColor:"transparent",borderColor:"transparent",enabled:!0,placement:"inline",iconName:"refresh-cw",size:"32px",showTooltip:!0,tooltipText:"Clear chat",paddingX:"0px",paddingY:"0px"},headerIconHidden:!1,border:"1px solid #e5e7eb",shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)"},copy:{welcomeTitle:"Hello \u{1F44B}",welcomeSubtitle:"Ask anything about your account or products.",inputPlaceholder:"How can I help...",sendButtonLabel:"Send"},sendButton:{borderWidth:"0px",paddingX:"12px",paddingY:"10px",backgroundColor:"#111827",textColor:"#ffffff",borderColor:"#60a5fa",useIcon:!0,iconText:"\u2191",size:"40px",showTooltip:!0,tooltipText:"Send message",iconName:"send"},statusIndicator:{visible:!0,idleText:"Online",connectingText:"Connecting\u2026",connectedText:"Streaming\u2026",errorText:"Offline"},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:"mic",iconSize:"39px",borderWidth:"0px",paddingX:"9px",paddingY:"14px",iconColor:"#111827",backgroundColor:"transparent",borderColor:"transparent",recordingIconColor:"#ffffff",recordingBackgroundColor:"#ef4444",recordingBorderColor:"transparent",showTooltip:!0,tooltipText:"Start voice recognition"},features:{showReasoning:!0,showToolCalls:!0},suggestionChips:["What can you help me with?","Tell me about your features","How does this work?"],suggestionChipsConfig:{fontFamily:"sans-serif",fontWeight:"500",paddingX:"12px",paddingY:"6px"},layout:{header:{layout:"default",showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:"bubble",avatar:{show:!1,position:"left"},timestamp:{show:!1,position:"below"},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:"hover",align:"right",layout:"pill-inside"},debug:!1};function _n(n){var e,s,t,r,o,a,l,p,c,f,w,d,C,g,U,$,h,b,W;return n?{...Be,...n,theme:{...Be.theme,...n.theme},launcher:{...Be.launcher,...n.launcher,clearChat:{...(e=Be.launcher)==null?void 0:e.clearChat,...(s=n.launcher)==null?void 0:s.clearChat}},copy:{...Be.copy,...n.copy},sendButton:{...Be.sendButton,...n.sendButton},statusIndicator:{...Be.statusIndicator,...n.statusIndicator},voiceRecognition:{...Be.voiceRecognition,...n.voiceRecognition},features:{...Be.features,...n.features},suggestionChips:(t=n.suggestionChips)!=null?t:Be.suggestionChips,suggestionChipsConfig:{...Be.suggestionChipsConfig,...n.suggestionChipsConfig},layout:{...Be.layout,...n.layout,header:{...(r=Be.layout)==null?void 0:r.header,...(o=n.layout)==null?void 0:o.header},messages:{...(a=Be.layout)==null?void 0:a.messages,...(l=n.layout)==null?void 0:l.messages,avatar:{...(c=(p=Be.layout)==null?void 0:p.messages)==null?void 0:c.avatar,...(w=(f=n.layout)==null?void 0:f.messages)==null?void 0:w.avatar},timestamp:{...(C=(d=Be.layout)==null?void 0:d.messages)==null?void 0:C.timestamp,...(U=(g=n.layout)==null?void 0:g.messages)==null?void 0:U.timestamp}},slots:{...($=Be.layout)==null?void 0:$.slots,...(h=n.layout)==null?void 0:h.slots}},markdown:{...Be.markdown,...n.markdown,options:{...(b=Be.markdown)==null?void 0:b.options,...(W=n.markdown)==null?void 0:W.options}},messageActions:{...Be.messageActions,...n.messageActions}}:Be}var Wo=()=>{let n=new Map,e=(r,o)=>(n.has(r)||n.set(r,new Set),n.get(r).add(o),()=>s(r,o)),s=(r,o)=>{var a;(a=n.get(r))==null||a.delete(o)};return{on:e,off:s,emit:(r,o)=>{var a;(a=n.get(r))==null||a.forEach(l=>{try{l(o)}catch(p){typeof console!="undefined"&&console.error("[AgentWidget] Event handler error:",p)}})}}};var Zo=n=>{let e=n.match(/```(?:json)?\s*([\s\S]*?)```/i);return e?e[1]:n},Qo=n=>{let e=n.trim(),s=e.indexOf("{");if(s===-1)return null;let t=0;for(let r=s;r<e.length;r+=1){let o=e[r];if(o==="{"&&(t+=1),o==="}"&&(t-=1,t===0))return e.slice(s,r+1)}return null},vn=({text:n})=>{if(!n||!n.includes("{"))return null;try{let e=Zo(n),s=Qo(e);if(!s)return null;let t=JSON.parse(s);if(!t||typeof t!="object"||!t.action)return null;let{action:r,...o}=t;return{type:String(r),payload:o,raw:t}}catch{return null}},jn=n=>typeof n=="string"?n:n==null?"":String(n),Vt={message:n=>n.type!=="message"?void 0:{handled:!0,displayText:jn(n.payload.text)},messageAndClick:(n,e)=>{var r;if(n.type!=="message_and_click")return;let s=n.payload,t=jn(s.element);if(t&&((r=e.document)!=null&&r.querySelector)){let o=e.document.querySelector(t);o?setTimeout(()=>{o.click()},400):typeof console!="undefined"&&console.warn("[AgentWidget] Element not found for selector:",t)}return{handled:!0,displayText:jn(s.text)}}},ko=n=>Array.isArray(n)?n.map(e=>String(e)):[],bn=n=>{let e=new Set(ko(n.getMetadata().processedActionMessageIds)),s=()=>{e=new Set(ko(n.getMetadata().processedActionMessageIds))},t=()=>{let o=Array.from(e);n.updateMetadata(a=>({...a,processedActionMessageIds:o}))};return{process:o=>{if(o.streaming||o.message.role!=="assistant"||!o.text||e.has(o.message.id))return null;let a=typeof o.raw=="string"&&o.raw||typeof o.message.rawContent=="string"&&o.message.rawContent||typeof o.text=="string"&&o.text||null;!a&&typeof o.text=="string"&&o.text.trim().startsWith("{")&&typeof console!="undefined"&&console.warn("[AgentWidget] Structured response detected but no raw payload was provided. Ensure your stream parser returns { text, raw }.");let l=a?n.parsers.reduce((c,f)=>c||(f==null?void 0:f({text:a,message:o.message}))||null,null):null;if(!l)return null;e.add(o.message.id),t();let p={action:l,message:o.message};n.emit("action:detected",p);for(let c of n.handlers)if(c)try{let f=c(l,{message:o.message,metadata:n.getMetadata(),updateMetadata:n.updateMetadata,document:n.documentRef});if(!f)continue;if(f.handled){let w=f.persistMessage!==!1;return{text:f.displayText!==void 0?f.displayText:"",persist:w}}}catch(f){typeof console!="undefined"&&console.error("[AgentWidget] Action handler error:",f)}return{text:"",persist:!0}},syncFromMetadata:s}};var er=n=>{if(!n)return null;try{return JSON.parse(n)}catch(e){return typeof console!="undefined"&&console.error("[AgentWidget] Failed to parse stored state:",e),null}},tr=n=>n.map(e=>({...e,streaming:!1})),qn=(n="vanilla-agent-state")=>{let e=()=>typeof window=="undefined"||!window.localStorage?null:window.localStorage;return{load:()=>{let s=e();return s?er(s.getItem(n)):null},save:s=>{let t=e();if(t)try{let r={...s,messages:s.messages?tr(s.messages):void 0};t.setItem(n,JSON.stringify(r))}catch(r){typeof console!="undefined"&&console.error("[AgentWidget] Failed to persist state:",r)}},clear:()=>{let s=e();if(s)try{s.removeItem(n)}catch(t){typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear stored state:",t)}}}};var Un=class{constructor(){this.components=new Map}register(e,s){this.components.has(e)&&console.warn(`[ComponentRegistry] Component "${e}" is already registered. Overwriting.`),this.components.set(e,s)}unregister(e){this.components.delete(e)}get(e){return this.components.get(e)}has(e){return this.components.has(e)}getAllNames(){return Array.from(this.components.keys())}clear(){this.components.clear()}registerAll(e){Object.entries(e).forEach(([s,t])=>{this.register(s,t)})}},ln=new Un;import{parse as nr,STR as sr,OBJ as or}from"partial-json";function rr(n){if(!n||typeof n!="object"||!("component"in n))return!1;let e=n.component;return typeof e=="string"&&e.length>0}function ir(n,e){if(!rr(n))return null;let s=n.props&&typeof n.props=="object"&&n.props!==null?n.props:{};return{component:n.component,props:s,raw:e}}function zn(){let n=null,e=0;return{getExtractedDirective:()=>n,processChunk:s=>{let t=s.trim();if(!t.startsWith("{")&&!t.startsWith("["))return null;if(s.length<=e)return n;try{let r=nr(s,sr|or),o=ir(r,s);o&&(n=o)}catch{}return e=s.length,n},reset:()=>{n=null,e=0}}}function ar(n){return typeof n=="object"&&n!==null&&"component"in n&&typeof n.component=="string"&&"props"in n&&typeof n.props=="object"}function Jn(n,e){let{config:s,message:t,onPropsUpdate:r}=e,o=ln.get(n.component);if(!o)return console.warn(`[ComponentMiddleware] Component "${n.component}" not found in registry. Falling back to default rendering.`),null;let a={message:t,config:s,updateProps:l=>{r&&r(l)}};try{return o(n.props,a)}catch(l){return console.error(`[ComponentMiddleware] Error rendering component "${n.component}":`,l),null}}function lr(){let n=zn();return{processChunk:e=>n.processChunk(e),getDirective:()=>n.getExtractedDirective(),reset:()=>{n.reset()}}}function Yn(n){if(!n.rawContent)return!1;try{let e=JSON.parse(n.rawContent);return typeof e=="object"&&e!==null&&"component"in e&&typeof e.component=="string"}catch{return!1}}function Kn(n){if(!n.rawContent)return null;try{let e=JSON.parse(n.rawContent);if(typeof e=="object"&&e!==null&&"component"in e&&typeof e.component=="string")return{component:e.component,props:e.props&&typeof e.props=="object"&&e.props!==null?e.props:{},raw:n.rawContent}}catch{}return null}var dr=["Very dissatisfied","Dissatisfied","Neutral","Satisfied","Very satisfied"];function Xn(n){let{onSubmit:e,onDismiss:s,title:t="How satisfied are you?",subtitle:r="Please rate your experience",commentPlaceholder:o="Share your thoughts (optional)...",submitText:a="Submit",skipText:l="Skip",showComment:p=!0,ratingLabels:c=dr}=n,f=document.createElement("div");f.className="tvw-feedback-container tvw-feedback-csat",f.setAttribute("role","dialog"),f.setAttribute("aria-label","Customer satisfaction feedback");let w=null,d=document.createElement("div");d.className="tvw-feedback-content";let C=document.createElement("div");C.className="tvw-feedback-header";let g=document.createElement("h3");g.className="tvw-feedback-title",g.textContent=t,C.appendChild(g);let U=document.createElement("p");U.className="tvw-feedback-subtitle",U.textContent=r,C.appendChild(U),d.appendChild(C);let $=document.createElement("div");$.className="tvw-feedback-rating tvw-feedback-rating-csat",$.setAttribute("role","radiogroup"),$.setAttribute("aria-label","Satisfaction rating from 1 to 5");let h=[];for(let x=1;x<=5;x++){let S=document.createElement("button");S.type="button",S.className="tvw-feedback-rating-btn tvw-feedback-star-btn",S.setAttribute("role","radio"),S.setAttribute("aria-checked","false"),S.setAttribute("aria-label",`${x} star${x>1?"s":""}: ${c[x-1]}`),S.title=c[x-1],S.dataset.rating=String(x),S.innerHTML=`
|
|
15
|
+
`,s.addEventListener("click",e);let t=o=>{var h,b,W,v,D,x,S,X,B,j,Z,_;let i=(h=o.launcher)!=null?h:{},l=s.querySelector("[data-role='launcher-title']");l&&(l.textContent=(b=i.title)!=null?b:"Chat Assistant");let c=s.querySelector("[data-role='launcher-subtitle']");c&&(c.textContent=(W=i.subtitle)!=null?W:"Get answers fast");let d=s.querySelector(".tvw-flex-col");d&&(i.textHidden?d.style.display="none":d.style.display="");let f=s.querySelector("[data-role='launcher-icon']");if(f)if(i.agentIconHidden)f.style.display="none";else{let K=(v=i.agentIconSize)!=null?v:"40px";if(f.style.height=K,f.style.width=K,f.innerHTML="",i.agentIconName){let Q=parseFloat(K)||24,ne=ce(i.agentIconName,Q*.6,"#ffffff",2);ne?(f.appendChild(ne),f.style.display=""):(f.textContent=(D=i.agentIconText)!=null?D:"\u{1F4AC}",f.style.display="")}else i.iconUrl?f.style.display="none":(f.textContent=(x=i.agentIconText)!=null?x:"\u{1F4AC}",f.style.display="")}let w=s.querySelector("[data-role='launcher-image']");if(w){let K=(S=i.agentIconSize)!=null?S:"40px";w.style.height=K,w.style.width=K,i.iconUrl&&!i.agentIconName&&!i.agentIconHidden?(w.src=i.iconUrl,w.style.display="block"):w.style.display="none"}let u=s.querySelector("[data-role='launcher-call-to-action-icon']");if(u){let K=(X=i.callToActionIconSize)!=null?X:"32px";u.style.height=K,u.style.width=K,i.callToActionIconBackgroundColor?(u.style.backgroundColor=i.callToActionIconBackgroundColor,u.classList.remove("tvw-bg-cw-primary")):(u.style.backgroundColor="",u.classList.add("tvw-bg-cw-primary"));let Q=0;if(i.callToActionIconPadding?(u.style.boxSizing="border-box",u.style.padding=i.callToActionIconPadding,Q=(parseFloat(i.callToActionIconPadding)||0)*2):(u.style.boxSizing="",u.style.padding=""),i.callToActionIconHidden)u.style.display="none";else if(u.style.display="",u.innerHTML="",i.callToActionIconName){let ne=parseFloat(K)||24,re=Math.max(ne-Q,8),q=ce(i.callToActionIconName,re,"currentColor",2);q?u.appendChild(q):u.textContent=(B=i.callToActionIconText)!=null?B:"\u2197"}else u.textContent=(j=i.callToActionIconText)!=null?j:"\u2197"}let C=i.position&&vt[i.position]?vt[i.position]:vt["bottom-right"],g="tvw-fixed tvw-flex tvw-items-center tvw-gap-3 tvw-rounded-launcher tvw-bg-cw-surface tvw-py-2.5 tvw-pl-3 tvw-pr-3 tvw-transition hover:tvw-translate-y-[-2px] tvw-cursor-pointer tvw-z-50";s.className=`${g} ${C}`;let U="1px solid #e5e7eb",I="0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)";s.style.border=(Z=i.border)!=null?Z:U,s.style.boxShadow=(_=i.shadow)!=null?_:I},r=()=>{s.removeEventListener("click",e),s.remove()};return n&&t(n),{element:s,update:t,destroy:r}};var zt=n=>{var j,Z,_,K,Q,ne,re,q,qe,Ve,nt,bt,Ct,Y,fe,mt,ft,Ge,st,H,He,at,lt,Tt,wt,Ie,ot,Ue,R,dt,Se,Oe;let{config:e,showClose:s=!0}=n,t=m("div","tvw-widget-header tvw-flex tvw-items-center tvw-gap-3 tvw-bg-cw-surface tvw-px-6 tvw-py-5 tvw-border-b-cw-divider"),r=(j=e==null?void 0:e.launcher)!=null?j:{},o=(Z=r.headerIconSize)!=null?Z:"48px",i=(_=r.closeButtonSize)!=null?_:"32px",l=(K=r.closeButtonPlacement)!=null?K:"inline",c=(Q=r.headerIconHidden)!=null?Q:!1,d=r.headerIconName,f=m("div","tvw-flex tvw-items-center tvw-justify-center tvw-rounded-xl tvw-bg-cw-primary tvw-text-white tvw-text-xl");if(f.style.height=o,f.style.width=o,!c)if(d){let te=parseFloat(o)||24,Ae=ce(d,te*.6,"#ffffff",2);Ae?f.replaceChildren(Ae):f.textContent=(re=(ne=e==null?void 0:e.launcher)==null?void 0:ne.agentIconText)!=null?re:"\u{1F4AC}"}else if((q=e==null?void 0:e.launcher)!=null&&q.iconUrl){let te=m("img");te.src=e.launcher.iconUrl,te.alt="",te.className="tvw-rounded-xl tvw-object-cover",te.style.height=o,te.style.width=o,f.replaceChildren(te)}else f.textContent=(Ve=(qe=e==null?void 0:e.launcher)==null?void 0:qe.agentIconText)!=null?Ve:"\u{1F4AC}";let w=m("div","tvw-flex tvw-flex-col"),u=m("span","tvw-text-base tvw-font-semibold");u.textContent=(bt=(nt=e==null?void 0:e.launcher)==null?void 0:nt.title)!=null?bt:"Chat Assistant";let C=m("span","tvw-text-xs tvw-text-cw-muted");C.textContent=(Y=(Ct=e==null?void 0:e.launcher)==null?void 0:Ct.subtitle)!=null?Y:"Here to help you get answers fast",w.append(u,C),c?t.append(w):t.append(f,w);let g=(fe=r.clearChat)!=null?fe:{},U=(mt=g.enabled)!=null?mt:!0,I=(ft=g.placement)!=null?ft:"inline",h=null,b=null;if(U){let te=(Ge=g.size)!=null?Ge:"32px",Ae=(st=g.iconName)!=null?st:"refresh-cw",Te=(H=g.iconColor)!=null?H:"",ze=(He=g.backgroundColor)!=null?He:"",Ye=(at=g.borderWidth)!=null?at:"",xt=(lt=g.borderColor)!=null?lt:"",Lt=(Tt=g.borderRadius)!=null?Tt:"",yt=(wt=g.paddingX)!=null?wt:"",Et=(Ie=g.paddingY)!=null?Ie:"",St=(ot=g.tooltipText)!=null?ot:"Clear chat",ye=(Ue=g.showTooltip)!=null?Ue:!0;b=m("div",I==="top-right"?"tvw-absolute tvw-top-4 tvw-z-50":"tvw-relative tvw-ml-auto tvw-clear-chat-button-wrapper"),I==="top-right"&&(b.style.right="48px"),h=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none"),h.style.height=te,h.style.width=te,h.type="button",h.setAttribute("aria-label",St);let Bt=ce(Ae,"20px",Te||"",2);if(Bt&&h.appendChild(Bt),Te&&(h.style.color=Te,h.classList.remove("tvw-text-cw-muted")),ze&&(h.style.backgroundColor=ze,h.classList.remove("hover:tvw-bg-gray-100")),Ye||xt){let ke=Ye||"0px",Je=xt||"transparent";h.style.border=`${ke} solid ${Je}`,h.classList.remove("tvw-border-none")}if(Lt&&(h.style.borderRadius=Lt,h.classList.remove("tvw-rounded-full")),yt?(h.style.paddingLeft=yt,h.style.paddingRight=yt):(h.style.paddingLeft="",h.style.paddingRight=""),Et?(h.style.paddingTop=Et,h.style.paddingBottom=Et):(h.style.paddingTop="",h.style.paddingBottom=""),b.appendChild(h),ye&&St&&h&&b){let ke=null,Je=()=>{if(ke||!h)return;ke=m("div","tvw-clear-chat-tooltip"),ke.textContent=St;let Nt=m("div");Nt.className="tvw-clear-chat-tooltip-arrow",ke.appendChild(Nt);let Mt=h.getBoundingClientRect();ke.style.position="fixed",ke.style.left=`${Mt.left+Mt.width/2}px`,ke.style.top=`${Mt.top-8}px`,ke.style.transform="translate(-50%, -100%)",document.body.appendChild(ke)},At=()=>{ke&&ke.parentNode&&(ke.parentNode.removeChild(ke),ke=null)};b.addEventListener("mouseenter",Je),b.addEventListener("mouseleave",At),h.addEventListener("focus",Je),h.addEventListener("blur",At),b._cleanupTooltip=()=>{At(),b&&(b.removeEventListener("mouseenter",Je),b.removeEventListener("mouseleave",At)),h&&(h.removeEventListener("focus",Je),h.removeEventListener("blur",At))}}I==="inline"&&t.appendChild(b)}let W=m("div",l==="top-right"?"tvw-absolute tvw-top-4 tvw-right-4 tvw-z-50":U&&I==="inline"?"":"tvw-ml-auto"),v=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none");v.style.height=i,v.style.width=i,v.type="button";let D=(R=r.closeButtonTooltipText)!=null?R:"Close chat",x=(dt=r.closeButtonShowTooltip)!=null?dt:!0;v.setAttribute("aria-label",D),v.style.display=s?"":"none";let S=(Se=r.closeButtonIconName)!=null?Se:"x",X=(Oe=r.closeButtonIconText)!=null?Oe:"\xD7",B=ce(S,"20px",r.closeButtonColor||"",2);if(B?v.appendChild(B):v.textContent=X,r.closeButtonColor?(v.style.color=r.closeButtonColor,v.classList.remove("tvw-text-cw-muted")):(v.style.color="",v.classList.add("tvw-text-cw-muted")),r.closeButtonBackgroundColor?(v.style.backgroundColor=r.closeButtonBackgroundColor,v.classList.remove("hover:tvw-bg-gray-100")):(v.style.backgroundColor="",v.classList.add("hover:tvw-bg-gray-100")),r.closeButtonBorderWidth||r.closeButtonBorderColor){let te=r.closeButtonBorderWidth||"0px",Ae=r.closeButtonBorderColor||"transparent";v.style.border=`${te} solid ${Ae}`,v.classList.remove("tvw-border-none")}else v.style.border="",v.classList.add("tvw-border-none");if(r.closeButtonBorderRadius?(v.style.borderRadius=r.closeButtonBorderRadius,v.classList.remove("tvw-rounded-full")):(v.style.borderRadius="",v.classList.add("tvw-rounded-full")),r.closeButtonPaddingX?(v.style.paddingLeft=r.closeButtonPaddingX,v.style.paddingRight=r.closeButtonPaddingX):(v.style.paddingLeft="",v.style.paddingRight=""),r.closeButtonPaddingY?(v.style.paddingTop=r.closeButtonPaddingY,v.style.paddingBottom=r.closeButtonPaddingY):(v.style.paddingTop="",v.style.paddingBottom=""),W.appendChild(v),x&&D){let te=null,Ae=()=>{if(te)return;te=m("div","tvw-clear-chat-tooltip"),te.textContent=D;let ze=m("div");ze.className="tvw-clear-chat-tooltip-arrow",te.appendChild(ze);let Ye=v.getBoundingClientRect();te.style.position="fixed",te.style.left=`${Ye.left+Ye.width/2}px`,te.style.top=`${Ye.top-8}px`,te.style.transform="translate(-50%, -100%)",document.body.appendChild(te)},Te=()=>{te&&te.parentNode&&(te.parentNode.removeChild(te),te=null)};W.addEventListener("mouseenter",Ae),W.addEventListener("mouseleave",Te),v.addEventListener("focus",Ae),v.addEventListener("blur",Te),W._cleanupTooltip=()=>{Te(),W.removeEventListener("mouseenter",Ae),W.removeEventListener("mouseleave",Te),v.removeEventListener("focus",Ae),v.removeEventListener("blur",Te)}}return l!=="top-right"&&t.appendChild(W),{header:t,iconHolder:f,headerTitle:u,headerSubtitle:C,closeButton:v,closeButtonWrapper:W,clearChatButton:h,clearChatButtonWrapper:b}},dn=(n,e,s)=>{var i,l,c,d;let t=(i=s==null?void 0:s.launcher)!=null?i:{},r=(l=t.closeButtonPlacement)!=null?l:"inline",o=(d=(c=t.clearChat)==null?void 0:c.placement)!=null?d:"inline";n.appendChild(e.header),r==="top-right"&&(n.style.position="relative",n.appendChild(e.closeButtonWrapper)),e.clearChatButtonWrapper&&o==="top-right"&&(n.style.position="relative",n.appendChild(e.clearChatButtonWrapper))};var xo=n=>zt({config:n.config,showClose:n.showClose,onClose:n.onClose,onClearChat:n.onClearChat}),So=n=>{var g,U,I,h;let{config:e,showClose:s=!0,onClose:t}=n,r=(g=e==null?void 0:e.launcher)!=null?g:{},o=m("div","tvw-flex tvw-items-center tvw-justify-between tvw-bg-cw-surface tvw-px-6 tvw-py-4 tvw-border-b-cw-divider"),i=m("span","tvw-text-base tvw-font-semibold");i.textContent=(U=r.title)!=null?U:"Chat Assistant",o.appendChild(i);let l=(I=r.closeButtonSize)!=null?I:"32px",c=m("div",""),d=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none");d.style.height=l,d.style.width=l,d.type="button",d.setAttribute("aria-label","Close chat"),d.style.display=s?"":"none";let f=(h=r.closeButtonIconName)!=null?h:"x",w=ce(f,"20px",r.closeButtonColor||"",2);w?d.appendChild(w):d.textContent="\xD7",t&&d.addEventListener("click",t),c.appendChild(d),o.appendChild(c);let u=m("div");u.style.display="none";let C=m("span");return C.style.display="none",{header:o,iconHolder:u,headerTitle:i,headerSubtitle:C,closeButton:d,closeButtonWrapper:c,clearChatButton:null,clearChatButtonWrapper:null}},Ao=n=>{var v,D,x,S,X,B,j,Z;let{config:e,showClose:s=!0,onClose:t,onClearChat:r}=n,o=(v=e==null?void 0:e.launcher)!=null?v:{},i=m("div","tvw-flex tvw-flex-col tvw-bg-cw-surface tvw-px-6 tvw-py-5 tvw-border-b-cw-divider"),l=m("div","tvw-flex tvw-items-center tvw-gap-3"),c=(D=o.headerIconSize)!=null?D:"56px",d=m("div","tvw-flex tvw-items-center tvw-justify-center tvw-rounded-xl tvw-bg-cw-primary tvw-text-white tvw-text-2xl");d.style.height=c,d.style.width=c;let f=o.headerIconName;if(f){let _=parseFloat(c)||24,K=ce(f,_*.5,"#ffffff",2);K?d.replaceChildren(K):d.textContent=(x=o.agentIconText)!=null?x:"\u{1F4AC}"}else if(o.iconUrl){let _=m("img");_.src=o.iconUrl,_.alt="",_.className="tvw-rounded-xl tvw-object-cover",_.style.height=c,_.style.width=c,d.replaceChildren(_)}else d.textContent=(S=o.agentIconText)!=null?S:"\u{1F4AC}";let w=m("div","tvw-flex tvw-flex-col tvw-flex-1"),u=m("span","tvw-text-lg tvw-font-semibold");u.textContent=(X=o.title)!=null?X:"Chat Assistant";let C=m("span","tvw-text-sm tvw-text-cw-muted");C.textContent=(B=o.subtitle)!=null?B:"Here to help you get answers fast",w.append(u,C),l.append(d,w);let g=(j=o.closeButtonSize)!=null?j:"32px",U=m("div",""),I=m("button","tvw-inline-flex tvw-items-center tvw-justify-center tvw-rounded-full tvw-text-cw-muted hover:tvw-bg-gray-100 tvw-cursor-pointer tvw-border-none");I.style.height=g,I.style.width=g,I.type="button",I.setAttribute("aria-label","Close chat"),I.style.display=s?"":"none";let h=(Z=o.closeButtonIconName)!=null?Z:"x",b=ce(h,"20px",o.closeButtonColor||"",2);b?I.appendChild(b):I.textContent="\xD7",t&&I.addEventListener("click",t),U.appendChild(I),l.appendChild(U),i.appendChild(l);let W=m("div","tvw-mt-3 tvw-pt-3 tvw-border-t tvw-border-gray-100 tvw-text-xs tvw-text-cw-muted");return W.textContent="Online and ready to help",i.appendChild(W),{header:i,iconHolder:d,headerTitle:u,headerSubtitle:C,closeButton:I,closeButtonWrapper:U,clearChatButton:null,clearChatButtonWrapper:null}},Fn={default:xo,minimal:So,expanded:Ao},To=n=>{var e;return(e=Fn[n])!=null?e:Fn.default},Nn=(n,e,s)=>{var i,l,c;if(e!=null&&e.render){let d=e.render({config:n,onClose:s==null?void 0:s.onClose,onClearChat:s==null?void 0:s.onClearChat}),f=m("div");f.style.display="none";let w=m("span"),u=m("span"),C=m("button");C.style.display="none";let g=m("div");return g.style.display="none",{header:d,iconHolder:f,headerTitle:w,headerSubtitle:u,closeButton:C,closeButtonWrapper:g,clearChatButton:null,clearChatButtonWrapper:null}}let t=(i=e==null?void 0:e.layout)!=null?i:"default",o=To(t)({config:n,showClose:(c=(l=e==null?void 0:e.showCloseButton)!=null?l:s==null?void 0:s.showClose)!=null?c:!0,onClose:s==null?void 0:s.onClose,onClearChat:s==null?void 0:s.onClearChat});return e&&(e.showIcon===!1&&(o.iconHolder.style.display="none"),e.showTitle===!1&&(o.headerTitle.style.display="none"),e.showSubtitle===!1&&(o.headerSubtitle.style.display="none"),e.showCloseButton===!1&&(o.closeButton.style.display="none"),e.showClearChat===!1&&o.clearChatButtonWrapper&&(o.clearChatButtonWrapper.style.display="none")),o};var Zo=n=>{switch(n){case"serif":return'Georgia, "Times New Roman", Times, serif';case"mono":return'"Courier New", Courier, "Lucida Console", Monaco, monospace';case"sans-serif":default:return'-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif'}},cn=n=>{var ne,re,q,qe,Ve,nt,bt,Ct,Y,fe,mt,ft,Ge,st,H,He,at,lt,Tt,wt,Ie,ot,Ue,R,dt;let{config:e}=n,s=m("div","tvw-widget-footer tvw-border-t-cw-divider tvw-bg-cw-surface tvw-px-6 tvw-py-4"),t=m("div","tvw-mb-3 tvw-flex tvw-flex-wrap tvw-gap-2"),r=((ne=e==null?void 0:e.voiceRecognition)==null?void 0:ne.enabled)===!0,o=typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined"),c=m("form",`tvw-widget-composer tvw-flex tvw-items-end ${r&&o?"tvw-gap-1":"tvw-gap-3"} tvw-rounded-2xl tvw-border tvw-border-gray-200 tvw-bg-cw-input-background tvw-px-4 tvw-py-3`);c.style.outline="none";let d=m("textarea");d.placeholder=(q=(re=e==null?void 0:e.copy)==null?void 0:re.inputPlaceholder)!=null?q:"Type your message\u2026",d.className="tvw-min-h-[48px] tvw-flex-1 tvw-resize-none tvw-border-none tvw-bg-transparent tvw-text-sm tvw-text-cw-primary focus:tvw-outline-none focus:tvw-border-none",d.rows=1;let f=(Ve=(qe=e==null?void 0:e.theme)==null?void 0:qe.inputFontFamily)!=null?Ve:"sans-serif",w=(bt=(nt=e==null?void 0:e.theme)==null?void 0:nt.inputFontWeight)!=null?bt:"400";d.style.fontFamily=Zo(f),d.style.fontWeight=w,d.style.border="none",d.style.outline="none",d.style.borderWidth="0",d.style.borderStyle="none",d.style.borderColor="transparent",d.addEventListener("focus",()=>{d.style.border="none",d.style.outline="none",d.style.borderWidth="0",d.style.borderStyle="none",d.style.borderColor="transparent",d.style.boxShadow="none"}),d.addEventListener("blur",()=>{d.style.border="none",d.style.outline="none"});let u=(Ct=e==null?void 0:e.sendButton)!=null?Ct:{},C=(Y=u.useIcon)!=null?Y:!1,g=(fe=u.iconText)!=null?fe:"\u2191",U=u.iconName,I=(mt=u.tooltipText)!=null?mt:"Send message",h=(ft=u.showTooltip)!=null?ft:!1,b=(Ge=u.size)!=null?Ge:"40px",W=u.backgroundColor,v=u.textColor,D=m("div","tvw-send-button-wrapper"),x=m("button",C?"tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer":"tvw-rounded-button tvw-bg-cw-accent tvw-px-4 tvw-py-2 tvw-text-sm tvw-font-semibold disabled:tvw-opacity-50 tvw-cursor-pointer");if(x.type="submit",C){if(x.style.width=b,x.style.height=b,x.style.minWidth=b,x.style.minHeight=b,x.style.fontSize="18px",x.style.lineHeight="1",x.innerHTML="",U){let Se=parseFloat(b)||24,Oe=v&&typeof v=="string"&&v.trim()?v.trim():"currentColor",te=ce(U,Se,Oe,2);te?(x.appendChild(te),x.style.color=Oe):(x.textContent=g,v?x.style.color=v:x.classList.add("tvw-text-white"))}else x.textContent=g,v?x.style.color=v:x.classList.add("tvw-text-white");W?x.style.backgroundColor=W:x.classList.add("tvw-bg-cw-primary")}else x.textContent=(H=(st=e==null?void 0:e.copy)==null?void 0:st.sendButtonLabel)!=null?H:"Send",v?x.style.color=v:x.classList.add("tvw-text-white");if(u.borderWidth&&(x.style.borderWidth=u.borderWidth,x.style.borderStyle="solid"),u.borderColor&&(x.style.borderColor=u.borderColor),u.paddingX?(x.style.paddingLeft=u.paddingX,x.style.paddingRight=u.paddingX):(x.style.paddingLeft="",x.style.paddingRight=""),u.paddingY?(x.style.paddingTop=u.paddingY,x.style.paddingBottom=u.paddingY):(x.style.paddingTop="",x.style.paddingBottom=""),h&&I){let Se=m("div","tvw-send-button-tooltip");Se.textContent=I,D.appendChild(Se)}D.appendChild(x);let S=(He=e==null?void 0:e.voiceRecognition)!=null?He:{},X=S.enabled===!0,B=null,j=null,Z=typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined");if(X&&Z){j=m("div","tvw-send-button-wrapper"),B=m("button","tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer"),B.type="button",B.setAttribute("aria-label","Start voice recognition");let Se=(at=S.iconName)!=null?at:"mic",Oe=(lt=S.iconSize)!=null?lt:b,te=parseFloat(Oe)||24,Ae=(Tt=S.backgroundColor)!=null?Tt:W,Te=(wt=S.iconColor)!=null?wt:v;B.style.width=Oe,B.style.height=Oe,B.style.minWidth=Oe,B.style.minHeight=Oe,B.style.fontSize="18px",B.style.lineHeight="1";let ze=Te||"currentColor",Ye=ce(Se,te,ze,1.5);Ye?(B.appendChild(Ye),B.style.color=ze):(B.textContent="\u{1F3A4}",B.style.color=ze),Ae?B.style.backgroundColor=Ae:B.classList.add("tvw-bg-cw-primary"),Te?B.style.color=Te:!Te&&!v&&B.classList.add("tvw-text-white"),S.borderWidth&&(B.style.borderWidth=S.borderWidth,B.style.borderStyle="solid"),S.borderColor&&(B.style.borderColor=S.borderColor),S.paddingX&&(B.style.paddingLeft=S.paddingX,B.style.paddingRight=S.paddingX),S.paddingY&&(B.style.paddingTop=S.paddingY,B.style.paddingBottom=S.paddingY),j.appendChild(B);let xt=(Ie=S.tooltipText)!=null?Ie:"Start voice recognition";if(((ot=S.showTooltip)!=null?ot:!1)&&xt){let yt=m("div","tvw-send-button-tooltip");yt.textContent=xt,j.appendChild(yt)}}c.addEventListener("click",Se=>{Se.target!==x&&Se.target!==D&&Se.target!==B&&Se.target!==j&&d.focus()}),c.append(d),j&&c.append(j),c.append(D);let _=m("div","tvw-mt-2 tvw-text-right tvw-text-xs tvw-text-cw-muted"),K=(Ue=e==null?void 0:e.statusIndicator)!=null?Ue:{},Q=(R=K.visible)!=null?R:!0;return _.style.display=Q?"":"none",_.textContent=(dt=K.idleText)!=null?dt:"Online",s.append(t,c,_),{footer:s,suggestions:t,composerForm:c,textarea:d,sendButton:x,sendButtonWrapper:D,micButton:B,micButtonWrapper:j,statusText:_}};var Eo=n=>{var c,d,f,w,u,C,g;if(!((d=(c=n==null?void 0:n.launcher)==null?void 0:c.enabled)!=null?d:!0)){let U=m("div","tvw-relative tvw-h-full tvw-flex tvw-flex-col tvw-flex-1 tvw-min-h-0"),I=m("div","tvw-relative tvw-flex-1 tvw-flex tvw-flex-col tvw-min-h-0"),h=(w=(f=n==null?void 0:n.launcher)==null?void 0:f.width)!=null?w:"100%";return U.style.width=h,I.style.width="100%",U.appendChild(I),{wrapper:U,panel:I}}let s=(u=n==null?void 0:n.launcher)!=null?u:{},t=s.position&&vt[s.position]?vt[s.position]:vt["bottom-right"],r=m("div",`tvw-widget-wrapper tvw-fixed ${t} tvw-z-50 tvw-transition`),o=m("div","tvw-widget-panel tvw-relative tvw-min-h-[320px]"),i=(g=(C=n==null?void 0:n.launcher)==null?void 0:C.width)!=null?g:n==null?void 0:n.launcherWidth,l=i!=null?i:"min(400px, calc(100vw - 24px))";return o.style.width=l,o.style.maxWidth=l,r.appendChild(o),{wrapper:r,panel:o}},Mo=(n,e=!0)=>{var w,u,C,g,U;let s=m("div","tvw-widget-container tvw-flex tvw-h-full tvw-w-full tvw-flex-1 tvw-min-h-0 tvw-flex-col tvw-bg-cw-surface tvw-text-cw-primary tvw-rounded-2xl tvw-overflow-hidden tvw-border tvw-border-cw-border"),t=(w=n==null?void 0:n.layout)==null?void 0:w.header,r=t?Nn(n,t,{showClose:e}):zt({config:n,showClose:e}),o=m("div","tvw-widget-body tvw-flex tvw-flex-1 tvw-min-h-0 tvw-flex-col tvw-gap-6 tvw-overflow-y-auto tvw-bg-cw-container tvw-px-6 tvw-py-6");o.id="vanilla-agent-scroll-container";let i=m("div","tvw-rounded-2xl tvw-bg-cw-surface tvw-p-6 tvw-shadow-sm"),l=m("h2","tvw-text-lg tvw-font-semibold tvw-text-cw-primary");l.textContent=(C=(u=n==null?void 0:n.copy)==null?void 0:u.welcomeTitle)!=null?C:"Hello \u{1F44B}";let c=m("p","tvw-mt-2 tvw-text-sm tvw-text-cw-muted");c.textContent=(U=(g=n==null?void 0:n.copy)==null?void 0:g.welcomeSubtitle)!=null?U:"Ask anything about your account or products.",i.append(l,c);let d=m("div","tvw-flex tvw-flex-col tvw-gap-3");o.append(i,d);let f=cn({config:n});return dn(s,r,n),s.append(o,f.footer),{container:s,body:o,messagesWrapper:d,suggestions:f.suggestions,textarea:f.textarea,sendButton:f.sendButton,sendButtonWrapper:f.sendButtonWrapper,micButton:f.micButton,micButtonWrapper:f.micButtonWrapper,composerForm:f.composerForm,statusText:f.statusText,introTitle:l,introSubtitle:c,closeButton:r.closeButton,closeButtonWrapper:r.closeButtonWrapper,clearChatButton:r.clearChatButton,clearChatButtonWrapper:r.clearChatButtonWrapper,iconHolder:r.iconHolder,headerTitle:r.headerTitle,headerSubtitle:r.headerSubtitle,header:r.header,footer:f.footer}};var Cn=()=>{let n=document.createElement("div");n.className="tvw-flex tvw-items-center tvw-space-x-1 tvw-h-5 tvw-mt-2";let e=document.createElement("div");e.className="tvw-bg-cw-primary tvw-animate-typing tvw-rounded-full tvw-h-1.5 tvw-w-1.5",e.style.animationDelay="0ms";let s=document.createElement("div");s.className="tvw-bg-cw-primary tvw-animate-typing tvw-rounded-full tvw-h-1.5 tvw-w-1.5",s.style.animationDelay="250ms";let t=document.createElement("div");t.className="tvw-bg-cw-primary tvw-animate-typing tvw-rounded-full tvw-h-1.5 tvw-w-1.5",t.style.animationDelay="500ms";let r=document.createElement("span");return r.className="tvw-sr-only",r.textContent="Loading",n.appendChild(e),n.appendChild(s),n.appendChild(t),n.appendChild(r),n},Qo=(n,e)=>{let s=m("div","tvw-flex-shrink-0 tvw-w-8 tvw-h-8 tvw-rounded-full tvw-flex tvw-items-center tvw-justify-center tvw-text-sm"),t=e==="user"?n.userAvatar:n.assistantAvatar;if(t)if(t.startsWith("http")||t.startsWith("/")||t.startsWith("data:")){let r=m("img");r.src=t,r.alt=e==="user"?"User":"Assistant",r.className="tvw-w-full tvw-h-full tvw-rounded-full tvw-object-cover",s.appendChild(r)}else s.textContent=t,s.classList.add(e==="user"?"tvw-bg-cw-accent":"tvw-bg-cw-primary","tvw-text-white");else s.textContent=e==="user"?"U":"A",s.classList.add(e==="user"?"tvw-bg-cw-accent":"tvw-bg-cw-primary","tvw-text-white");return s},Wo=(n,e)=>{let s=m("div","tvw-text-xs tvw-text-cw-muted"),t=new Date(n.createdAt);return e.format?s.textContent=e.format(t):s.textContent=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),s},er=(n,e="bubble")=>{let s=["vanilla-message-bubble","tvw-max-w-[85%]"];switch(e){case"flat":n==="user"?s.push("vanilla-message-user-bubble","tvw-ml-auto","tvw-text-cw-primary","tvw-py-2"):s.push("vanilla-message-assistant-bubble","tvw-text-cw-primary","tvw-py-2");break;case"minimal":s.push("tvw-text-sm","tvw-leading-relaxed"),n==="user"?s.push("vanilla-message-user-bubble","tvw-ml-auto","tvw-bg-cw-accent","tvw-text-white","tvw-px-3","tvw-py-2","tvw-rounded-lg"):s.push("vanilla-message-assistant-bubble","tvw-bg-cw-surface","tvw-text-cw-primary","tvw-px-3","tvw-py-2","tvw-rounded-lg");break;case"bubble":default:s.push("tvw-rounded-2xl","tvw-text-sm","tvw-leading-relaxed","tvw-shadow-sm"),n==="user"?s.push("vanilla-message-user-bubble","tvw-ml-auto","tvw-bg-cw-accent","tvw-text-white","tvw-px-5","tvw-py-3"):s.push("vanilla-message-assistant-bubble","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-px-5","tvw-py-3");break}return s},ko=(n,e,s)=>{var g,U,I,h,b,W;let t=(g=e.showCopy)!=null?g:!0,r=(U=e.showUpvote)!=null?U:!0,o=(I=e.showDownvote)!=null?I:!0,i=(h=e.visibility)!=null?h:"hover",l=(b=e.align)!=null?b:"right",c=(W=e.layout)!=null?W:"pill-inside",d={left:"tvw-message-actions-left",center:"tvw-message-actions-center",right:"tvw-message-actions-right"}[l],f={"pill-inside":"tvw-message-actions-pill","row-inside":"tvw-message-actions-row"}[c],w=m("div",`tvw-message-actions tvw-flex tvw-items-center tvw-gap-1 tvw-mt-2 ${d} ${f} ${i==="hover"?"tvw-message-actions-hover":""}`),u=null,C=(v,D,x,S)=>{let X=document.createElement("button");X.className="tvw-message-action-btn",X.setAttribute("aria-label",D),X.setAttribute("title",D),S&&X.setAttribute("data-action",S);let B=ce(v,14,"currentColor",2);return B&&X.appendChild(B),X.addEventListener("click",j=>{j.preventDefault(),j.stopPropagation(),x()}),X};if(t){let v=C("copy","Copy message",()=>{let D=n.content||"";navigator.clipboard.writeText(D).then(()=>{v.classList.add("tvw-message-action-success");let x=ce("check",14,"currentColor",2);x&&(v.innerHTML="",v.appendChild(x)),setTimeout(()=>{v.classList.remove("tvw-message-action-success");let S=ce("copy",14,"currentColor",2);S&&(v.innerHTML="",v.appendChild(S))},2e3)}).catch(x=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to copy message:",x)}),s!=null&&s.onCopy&&s.onCopy(n),e.onCopy&&e.onCopy(n)},"copy");w.appendChild(v)}if(r){let v=C("thumbs-up","Upvote",()=>{if(u==="upvote")u=null,v.classList.remove("tvw-message-action-active");else{let x=w.querySelector('[data-action="downvote"]');x&&x.classList.remove("tvw-message-action-active"),u="upvote",v.classList.add("tvw-message-action-active");let S={type:"upvote",messageId:n.id,message:n};s!=null&&s.onFeedback&&s.onFeedback(S),e.onFeedback&&e.onFeedback(S)}},"upvote");w.appendChild(v)}if(o){let v=C("thumbs-down","Downvote",()=>{if(u==="downvote")u=null,v.classList.remove("tvw-message-action-active");else{let x=w.querySelector('[data-action="upvote"]');x&&x.classList.remove("tvw-message-action-active"),u="downvote",v.classList.add("tvw-message-action-active");let S={type:"downvote",messageId:n.id,message:n};s!=null&&s.onFeedback&&s.onFeedback(S),e.onFeedback&&e.onFeedback(S)}},"downvote");w.appendChild(v)}return w},un=(n,e,s,t,r)=>{var W,v,D,x,S;let o=s!=null?s:{},i=(W=o.layout)!=null?W:"bubble",l=o.avatar,c=o.timestamp,d=(v=l==null?void 0:l.show)!=null?v:!1,f=(D=c==null?void 0:c.show)!=null?D:!1,w=(x=l==null?void 0:l.position)!=null?x:"left",u=(S=c==null?void 0:c.position)!=null?S:"below",C=er(n.role,i),g=m("div",C.join(" ")),U=document.createElement("div");if(U.innerHTML=e({text:n.content,message:n,streaming:!!n.streaming,raw:n.rawContent}),f&&u==="inline"&&n.createdAt){let X=Wo(n,c);X.classList.add("tvw-ml-2","tvw-inline"),U.appendChild(X)}if(g.appendChild(U),f&&u==="below"&&n.createdAt){let X=Wo(n,c);X.classList.add("tvw-mt-1"),g.appendChild(X)}if(n.streaming&&n.role==="assistant"&&(!n.content||!n.content.trim())){let X=Cn();g.appendChild(X)}if(n.role==="assistant"&&!n.streaming&&n.content&&n.content.trim()&&(t==null?void 0:t.enabled)!==!1&&t){let X=ko(n,t,r);g.appendChild(X)}if(!d||n.role==="system")return g;let h=m("div",`tvw-flex tvw-gap-2 ${n.role==="user"?"tvw-flex-row-reverse":""}`),b=Qo(l,n.role);return w==="right"||w==="left"&&n.role==="user"?h.append(g,b):h.append(b,g),g.classList.remove("tvw-max-w-[85%]"),g.classList.add("tvw-max-w-[calc(85%-2.5rem)]"),h},tr=(n,e,s,t,r)=>{let o=s!=null?s:{};return n.role==="user"&&o.renderUserMessage?o.renderUserMessage({message:n,config:{},streaming:!!n.streaming}):n.role==="assistant"&&o.renderAssistantMessage?o.renderAssistantMessage({message:n,config:{},streaming:!!n.streaming}):un(n,e,s,t,r)};var On=new Set,Dn=n=>{let e=n.reasoning,s=m("div",["vanilla-message-bubble","vanilla-reasoning-bubble","tvw-w-full","tvw-max-w-[85%]","tvw-rounded-2xl","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-shadow-sm","tvw-overflow-hidden","tvw-px-0","tvw-py-0"].join(" "));if(!e)return s;let t=On.has(n.id),r=m("button","tvw-flex tvw-w-full tvw-items-center tvw-justify-between tvw-gap-3 tvw-bg-transparent tvw-px-4 tvw-py-3 tvw-text-left tvw-cursor-pointer tvw-border-none");r.type="button",r.setAttribute("aria-expanded",t?"true":"false");let o=m("div","tvw-flex tvw-flex-col tvw-text-left"),i=m("span","tvw-text-xs tvw-text-cw-primary");i.textContent="Thinking...",o.appendChild(i);let l=m("span","tvw-text-xs tvw-text-cw-primary");l.textContent=vo(e),o.appendChild(l),e.status==="complete"?i.style.display="none":i.style.display="";let c=m("div","tvw-flex tvw-items-center"),f=ce(t?"chevron-up":"chevron-down",16,"currentColor",2);f?c.appendChild(f):c.textContent=t?"Hide":"Show";let w=m("div","tvw-flex tvw-items-center tvw-ml-auto");w.append(c),r.append(o,w);let u=m("div","tvw-border-t tvw-border-gray-200 tvw-bg-gray-50 tvw-px-4 tvw-py-3");u.style.display=t?"":"none";let C=e.chunks.join(""),g=m("div","tvw-whitespace-pre-wrap tvw-text-xs tvw-leading-snug tvw-text-cw-muted");g.textContent=C||(e.status==="complete"?"No additional context was shared.":"Waiting for details\u2026"),u.appendChild(g);let U=()=>{r.setAttribute("aria-expanded",t?"true":"false"),c.innerHTML="";let b=ce(t?"chevron-up":"chevron-down",16,"currentColor",2);b?c.appendChild(b):c.textContent=t?"Hide":"Show",u.style.display=t?"":"none"},I=()=>{t=!t,t?On.add(n.id):On.delete(n.id),U()};return r.addEventListener("pointerdown",h=>{h.preventDefault(),I()}),r.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),I())}),U(),s.append(r,u),s};var jn=new Set,_n=(n,e)=>{var I;let s=n.toolCall,t=(I=e==null?void 0:e.toolCall)!=null?I:{},r=m("div",["vanilla-message-bubble","vanilla-tool-bubble","tvw-w-full","tvw-max-w-[85%]","tvw-rounded-2xl","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-shadow-sm","tvw-overflow-hidden","tvw-px-0","tvw-py-0"].join(" "));if(t.backgroundColor&&(r.style.backgroundColor=t.backgroundColor),t.borderColor&&(r.style.borderColor=t.borderColor),t.borderWidth&&(r.style.borderWidth=t.borderWidth),t.borderRadius&&(r.style.borderRadius=t.borderRadius),!s)return r;let o=jn.has(n.id),i=m("button","tvw-flex tvw-w-full tvw-items-center tvw-justify-between tvw-gap-3 tvw-bg-transparent tvw-px-4 tvw-py-3 tvw-text-left tvw-cursor-pointer tvw-border-none");i.type="button",i.setAttribute("aria-expanded",o?"true":"false"),t.headerBackgroundColor&&(i.style.backgroundColor=t.headerBackgroundColor),t.headerPaddingX&&(i.style.paddingLeft=t.headerPaddingX,i.style.paddingRight=t.headerPaddingX),t.headerPaddingY&&(i.style.paddingTop=t.headerPaddingY,i.style.paddingBottom=t.headerPaddingY);let l=m("div","tvw-flex tvw-flex-col tvw-text-left"),c=m("span","tvw-text-xs tvw-text-cw-primary");t.headerTextColor&&(c.style.color=t.headerTextColor),c.textContent=bo(s),l.appendChild(c);let d=m("div","tvw-flex tvw-items-center"),f=t.toggleTextColor||t.headerTextColor||"currentColor",w=ce(o?"chevron-up":"chevron-down",16,f,2);w?d.appendChild(w):d.textContent=o?"Hide":"Show";let u=m("div","tvw-flex tvw-items-center tvw-gap-2 tvw-ml-auto");u.append(d),i.append(l,u);let C=m("div","tvw-border-t tvw-border-gray-200 tvw-bg-gray-50 tvw-space-y-3 tvw-px-4 tvw-py-3");if(C.style.display=o?"":"none",t.contentBackgroundColor&&(C.style.backgroundColor=t.contentBackgroundColor),t.contentTextColor&&(C.style.color=t.contentTextColor),t.contentPaddingX&&(C.style.paddingLeft=t.contentPaddingX,C.style.paddingRight=t.contentPaddingX),t.contentPaddingY&&(C.style.paddingTop=t.contentPaddingY,C.style.paddingBottom=t.contentPaddingY),s.name){let h=m("div","tvw-text-xs tvw-text-cw-muted tvw-italic");t.contentTextColor?h.style.color=t.contentTextColor:t.headerTextColor&&(h.style.color=t.headerTextColor),h.textContent=s.name,C.appendChild(h)}if(s.args!==void 0){let h=m("div","tvw-space-y-1"),b=m("div","tvw-text-xs tvw-text-cw-muted");t.labelTextColor&&(b.style.color=t.labelTextColor),b.textContent="Arguments";let W=m("pre","tvw-max-h-48 tvw-overflow-auto tvw-whitespace-pre-wrap tvw-rounded-lg tvw-border tvw-border-gray-100 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-xs tvw-text-cw-primary");W.style.fontSize="0.75rem",W.style.lineHeight="1rem",t.codeBlockBackgroundColor&&(W.style.backgroundColor=t.codeBlockBackgroundColor),t.codeBlockBorderColor&&(W.style.borderColor=t.codeBlockBorderColor),t.codeBlockTextColor&&(W.style.color=t.codeBlockTextColor),W.textContent=kn(s.args),h.append(b,W),C.appendChild(h)}if(s.chunks&&s.chunks.length){let h=m("div","tvw-space-y-1"),b=m("div","tvw-text-xs tvw-text-cw-muted");t.labelTextColor&&(b.style.color=t.labelTextColor),b.textContent="Activity";let W=m("pre","tvw-max-h-48 tvw-overflow-auto tvw-whitespace-pre-wrap tvw-rounded-lg tvw-border tvw-border-gray-100 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-xs tvw-text-cw-primary");W.style.fontSize="0.75rem",W.style.lineHeight="1rem",t.codeBlockBackgroundColor&&(W.style.backgroundColor=t.codeBlockBackgroundColor),t.codeBlockBorderColor&&(W.style.borderColor=t.codeBlockBorderColor),t.codeBlockTextColor&&(W.style.color=t.codeBlockTextColor),W.textContent=s.chunks.join(`
|
|
16
|
+
`),h.append(b,W),C.appendChild(h)}if(s.status==="complete"&&s.result!==void 0){let h=m("div","tvw-space-y-1"),b=m("div","tvw-text-xs tvw-text-cw-muted");t.labelTextColor&&(b.style.color=t.labelTextColor),b.textContent="Result";let W=m("pre","tvw-max-h-48 tvw-overflow-auto tvw-whitespace-pre-wrap tvw-rounded-lg tvw-border tvw-border-gray-100 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-xs tvw-text-cw-primary");W.style.fontSize="0.75rem",W.style.lineHeight="1rem",t.codeBlockBackgroundColor&&(W.style.backgroundColor=t.codeBlockBackgroundColor),t.codeBlockBorderColor&&(W.style.borderColor=t.codeBlockBorderColor),t.codeBlockTextColor&&(W.style.color=t.codeBlockTextColor),W.textContent=kn(s.result),h.append(b,W),C.appendChild(h)}if(s.status==="complete"&&typeof s.duration=="number"){let h=m("div","tvw-text-xs tvw-text-cw-muted");t.contentTextColor&&(h.style.color=t.contentTextColor),h.textContent=`Duration: ${s.duration}ms`,C.appendChild(h)}let g=()=>{i.setAttribute("aria-expanded",o?"true":"false"),d.innerHTML="";let h=t.toggleTextColor||t.headerTextColor||"currentColor",b=ce(o?"chevron-up":"chevron-down",16,h,2);b?d.appendChild(b):d.textContent=o?"Hide":"Show",C.style.display=o?"":"none"},U=()=>{o=!o,o?jn.add(n.id):jn.delete(n.id),g()};return i.addEventListener("pointerdown",h=>{h.preventDefault(),U()}),i.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),U())}),g(),r.append(i,C),r};var Lo=n=>{let e=[];return{buttons:e,render:(t,r,o,i,l)=>{if(n.innerHTML="",e.length=0,!t||!t.length||(i!=null?i:r?r.getMessages():[]).some(C=>C.role==="user"))return;let f=document.createDocumentFragment(),w=r?r.isStreaming():!1,u=C=>{switch(C){case"serif":return'Georgia, "Times New Roman", Times, serif';case"mono":return'"Courier New", Courier, "Lucida Console", Monaco, monospace';case"sans-serif":default:return'-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif'}};t.forEach(C=>{let g=m("button","tvw-rounded-button tvw-bg-cw-surface tvw-px-3 tvw-py-1.5 tvw-text-xs tvw-font-medium tvw-text-cw-muted hover:tvw-opacity-90 tvw-cursor-pointer tvw-border tvw-border-gray-200");g.type="button",g.textContent=C,g.disabled=w,l!=null&&l.fontFamily&&(g.style.fontFamily=u(l.fontFamily)),l!=null&&l.fontWeight&&(g.style.fontWeight=l.fontWeight),l!=null&&l.paddingX&&(g.style.paddingLeft=l.paddingX,g.style.paddingRight=l.paddingX),l!=null&&l.paddingY&&(g.style.paddingTop=l.paddingY,g.style.paddingBottom=l.paddingY),g.addEventListener("click",()=>{!r||r.isStreaming()||(o.value="",r.sendMessage(C))}),f.appendChild(g),e.push(g)}),n.appendChild(f)}}};var Bo={init:{title:"Schedule a Demo",description:"Share the basics and we'll follow up with a confirmation.",fields:[{name:"name",label:"Full name",placeholder:"Jane Doe",required:!0},{name:"email",label:"Work email",placeholder:"jane@example.com",type:"email",required:!0},{name:"notes",label:"What would you like to cover?",type:"textarea"}],submitLabel:"Submit details"},followup:{title:"Additional Information",description:"Provide any extra details to tailor the next steps.",fields:[{name:"company",label:"Company",placeholder:"Acme Inc."},{name:"context",label:"Context",type:"textarea",placeholder:"Share more about your use case"}],submitLabel:"Send"}},qn=(n,e,s,t)=>{let r=n.querySelectorAll("[data-tv-form]");r.length&&r.forEach(o=>{var g,U,I;if(o.dataset.enhanced==="true")return;let i=(g=o.dataset.tvForm)!=null?g:"init";o.dataset.enhanced="true";let l=(U=Bo[i])!=null?U:Bo.init;o.classList.add("tvw-form-card","tvw-space-y-4");let c=m("div","tvw-space-y-1"),d=m("h3","tvw-text-base tvw-font-semibold tvw-text-cw-primary");if(d.textContent=l.title,c.appendChild(d),l.description){let h=m("p","tvw-text-sm tvw-text-cw-muted");h.textContent=l.description,c.appendChild(h)}let f=document.createElement("form");f.className="tvw-form-grid tvw-space-y-3",l.fields.forEach(h=>{var x,S;let b=m("label","tvw-form-field tvw-flex tvw-flex-col tvw-gap-1");b.htmlFor=`${e.id}-${i}-${h.name}`;let W=m("span","tvw-text-xs tvw-font-medium tvw-text-cw-muted");W.textContent=h.label,b.appendChild(W);let v=(x=h.type)!=null?x:"text",D;v==="textarea"?(D=document.createElement("textarea"),D.rows=3):(D=document.createElement("input"),D.type=v),D.className="tvw-rounded-xl tvw-border tvw-border-gray-200 tvw-bg-white tvw-px-3 tvw-py-2 tvw-text-sm tvw-text-cw-primary focus:tvw-outline-none focus:tvw-border-cw-primary",D.id=`${e.id}-${i}-${h.name}`,D.name=h.name,D.placeholder=(S=h.placeholder)!=null?S:"",h.required&&(D.required=!0),b.appendChild(D),f.appendChild(b)});let w=m("div","tvw-flex tvw-items-center tvw-justify-between tvw-gap-2"),u=m("div","tvw-text-xs tvw-text-cw-muted tvw-min-h-[1.5rem]"),C=m("button","tvw-inline-flex tvw-items-center tvw-rounded-full tvw-bg-cw-primary tvw-px-4 tvw-py-2 tvw-text-sm tvw-font-semibold tvw-text-white disabled:tvw-opacity-60 tvw-cursor-pointer");C.type="submit",C.textContent=(I=l.submitLabel)!=null?I:"Submit",w.appendChild(u),w.appendChild(C),f.appendChild(w),o.replaceChildren(c,f),f.addEventListener("submit",async h=>{var D,x;h.preventDefault();let b=(D=s.formEndpoint)!=null?D:"/form",W=new FormData(f),v={};W.forEach((S,X)=>{v[X]=S}),v.type=i,C.disabled=!0,u.textContent="Submitting\u2026";try{let S=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!S.ok)throw new Error(`Form submission failed (${S.status})`);let X=await S.json();u.textContent=(x=X.message)!=null?x:"Thanks! We'll be in touch soon.",X.success&&X.nextPrompt&&await t.sendMessage(String(X.nextPrompt))}catch(S){u.textContent=S instanceof Error?S.message:"Something went wrong. Please try again."}finally{C.disabled=!1}})})};var Un=class{constructor(){this.plugins=new Map}register(e){var s;this.plugins.has(e.id)&&console.warn(`Plugin "${e.id}" is already registered. Overwriting.`),this.plugins.set(e.id,e),(s=e.onRegister)==null||s.call(e)}unregister(e){var t;let s=this.plugins.get(e);s&&((t=s.onUnregister)==null||t.call(s),this.plugins.delete(e))}getAll(){return Array.from(this.plugins.values()).sort((e,s)=>{var t,r;return((t=s.priority)!=null?t:0)-((r=e.priority)!=null?r:0)})}getForInstance(e){let s=this.getAll();if(!e||e.length===0)return s;let t=new Set(e.map(o=>o.id));return[...s.filter(o=>!t.has(o.id)),...e].sort((o,i)=>{var l,c;return((l=i.priority)!=null?l:0)-((c=o.priority)!=null?c:0)})}clear(){this.plugins.forEach(e=>{var s;return(s=e.onUnregister)==null?void 0:s.call(e)}),this.plugins.clear()}},xn=new Un;var Be={apiUrl:"http://localhost:43111/api/chat/dispatch",clientToken:void 0,theme:{primary:"#111827",accent:"#1d4ed8",surface:"#ffffff",muted:"#6b7280",container:"#f8fafc",border:"#f1f5f9",divider:"#f1f5f9",messageBorder:"#f1f5f9",inputBackground:"#ffffff",callToAction:"#000000",callToActionBackground:"#ffffff",sendButtonBackgroundColor:"#111827",sendButtonTextColor:"#ffffff",sendButtonBorderColor:"#60a5fa",closeButtonColor:"#6b7280",closeButtonBackgroundColor:"transparent",closeButtonBorderColor:"",clearChatIconColor:"#6b7280",clearChatBackgroundColor:"transparent",clearChatBorderColor:"transparent",micIconColor:"#111827",micBackgroundColor:"transparent",micBorderColor:"transparent",recordingIconColor:"#ffffff",recordingBackgroundColor:"#ef4444",recordingBorderColor:"transparent",inputFontFamily:"sans-serif",inputFontWeight:"400",radiusSm:"0.75rem",radiusMd:"1rem",radiusLg:"1.5rem",launcherRadius:"9999px",buttonRadius:"9999px"},launcher:{enabled:!0,title:"Chat Assistant",subtitle:"Here to help you get answers fast",agentIconText:"\u{1F4AC}",position:"bottom-right",width:"min(400px, calc(100vw - 24px))",heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:"40px",headerIconSize:"40px",closeButtonSize:"32px",callToActionIconName:"arrow-up-right",callToActionIconText:"",callToActionIconSize:"32px",callToActionIconPadding:"5px",callToActionIconColor:"#000000",callToActionIconBackgroundColor:"#ffffff",closeButtonColor:"#6b7280",closeButtonBackgroundColor:"transparent",clearChat:{iconColor:"#6b7280",backgroundColor:"transparent",borderColor:"transparent",enabled:!0,placement:"inline",iconName:"refresh-cw",size:"32px",showTooltip:!0,tooltipText:"Clear chat",paddingX:"0px",paddingY:"0px"},headerIconHidden:!1,border:"1px solid #e5e7eb",shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)"},copy:{welcomeTitle:"Hello \u{1F44B}",welcomeSubtitle:"Ask anything about your account or products.",inputPlaceholder:"How can I help...",sendButtonLabel:"Send"},sendButton:{borderWidth:"0px",paddingX:"12px",paddingY:"10px",backgroundColor:"#111827",textColor:"#ffffff",borderColor:"#60a5fa",useIcon:!0,iconText:"\u2191",size:"40px",showTooltip:!0,tooltipText:"Send message",iconName:"send"},statusIndicator:{visible:!0,idleText:"Online",connectingText:"Connecting\u2026",connectedText:"Streaming\u2026",errorText:"Offline"},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:"mic",iconSize:"39px",borderWidth:"0px",paddingX:"9px",paddingY:"14px",iconColor:"#111827",backgroundColor:"transparent",borderColor:"transparent",recordingIconColor:"#ffffff",recordingBackgroundColor:"#ef4444",recordingBorderColor:"transparent",showTooltip:!0,tooltipText:"Start voice recognition"},features:{showReasoning:!0,showToolCalls:!0},suggestionChips:["What can you help me with?","Tell me about your features","How does this work?"],suggestionChipsConfig:{fontFamily:"sans-serif",fontWeight:"500",paddingX:"12px",paddingY:"6px"},layout:{header:{layout:"default",showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:"bubble",avatar:{show:!1,position:"left"},timestamp:{show:!1,position:"below"},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:"hover",align:"right",layout:"pill-inside"},debug:!1};function zn(n){var e,s,t,r,o,i,l,c,d,f,w,u,C,g,U,I,h,b,W;return n?{...Be,...n,theme:{...Be.theme,...n.theme},launcher:{...Be.launcher,...n.launcher,clearChat:{...(e=Be.launcher)==null?void 0:e.clearChat,...(s=n.launcher)==null?void 0:s.clearChat}},copy:{...Be.copy,...n.copy},sendButton:{...Be.sendButton,...n.sendButton},statusIndicator:{...Be.statusIndicator,...n.statusIndicator},voiceRecognition:{...Be.voiceRecognition,...n.voiceRecognition},features:{...Be.features,...n.features},suggestionChips:(t=n.suggestionChips)!=null?t:Be.suggestionChips,suggestionChipsConfig:{...Be.suggestionChipsConfig,...n.suggestionChipsConfig},layout:{...Be.layout,...n.layout,header:{...(r=Be.layout)==null?void 0:r.header,...(o=n.layout)==null?void 0:o.header},messages:{...(i=Be.layout)==null?void 0:i.messages,...(l=n.layout)==null?void 0:l.messages,avatar:{...(d=(c=Be.layout)==null?void 0:c.messages)==null?void 0:d.avatar,...(w=(f=n.layout)==null?void 0:f.messages)==null?void 0:w.avatar},timestamp:{...(C=(u=Be.layout)==null?void 0:u.messages)==null?void 0:C.timestamp,...(U=(g=n.layout)==null?void 0:g.messages)==null?void 0:U.timestamp}},slots:{...(I=Be.layout)==null?void 0:I.slots,...(h=n.layout)==null?void 0:h.slots}},markdown:{...Be.markdown,...n.markdown,options:{...(b=Be.markdown)==null?void 0:b.options,...(W=n.markdown)==null?void 0:W.options}},messageActions:{...Be.messageActions,...n.messageActions}}:Be}var Ho=()=>{let n=new Map,e=(r,o)=>(n.has(r)||n.set(r,new Set),n.get(r).add(o),()=>s(r,o)),s=(r,o)=>{var i;(i=n.get(r))==null||i.delete(o)};return{on:e,off:s,emit:(r,o)=>{var i;(i=n.get(r))==null||i.forEach(l=>{try{l(o)}catch(c){typeof console!="undefined"&&console.error("[AgentWidget] Event handler error:",c)}})}}};var nr=n=>{let e=n.match(/```(?:json)?\s*([\s\S]*?)```/i);return e?e[1]:n},sr=n=>{let e=n.trim(),s=e.indexOf("{");if(s===-1)return null;let t=0;for(let r=s;r<e.length;r+=1){let o=e[r];if(o==="{"&&(t+=1),o==="}"&&(t-=1,t===0))return e.slice(s,r+1)}return null},Sn=({text:n})=>{if(!n||!n.includes("{"))return null;try{let e=nr(n),s=sr(e);if(!s)return null;let t=JSON.parse(s);if(!t||typeof t!="object"||!t.action)return null;let{action:r,...o}=t;return{type:String(r),payload:o,raw:t}}catch{return null}},Yn=n=>typeof n=="string"?n:n==null?"":String(n),Vt={message:n=>n.type!=="message"?void 0:{handled:!0,displayText:Yn(n.payload.text)},messageAndClick:(n,e)=>{var r;if(n.type!=="message_and_click")return;let s=n.payload,t=Yn(s.element);if(t&&((r=e.document)!=null&&r.querySelector)){let o=e.document.querySelector(t);o?setTimeout(()=>{o.click()},400):typeof console!="undefined"&&console.warn("[AgentWidget] Element not found for selector:",t)}return{handled:!0,displayText:Yn(s.text)}}},$o=n=>Array.isArray(n)?n.map(e=>String(e)):[],An=n=>{let e=new Set($o(n.getMetadata().processedActionMessageIds)),s=()=>{e=new Set($o(n.getMetadata().processedActionMessageIds))},t=()=>{let o=Array.from(e);n.updateMetadata(i=>({...i,processedActionMessageIds:o}))};return{process:o=>{if(o.streaming||o.message.role!=="assistant"||!o.text||e.has(o.message.id))return null;let i=typeof o.raw=="string"&&o.raw||typeof o.message.rawContent=="string"&&o.message.rawContent||typeof o.text=="string"&&o.text||null;!i&&typeof o.text=="string"&&o.text.trim().startsWith("{")&&typeof console!="undefined"&&console.warn("[AgentWidget] Structured response detected but no raw payload was provided. Ensure your stream parser returns { text, raw }.");let l=i?n.parsers.reduce((d,f)=>d||(f==null?void 0:f({text:i,message:o.message}))||null,null):null;if(!l)return null;e.add(o.message.id),t();let c={action:l,message:o.message};n.emit("action:detected",c);for(let d of n.handlers)if(d)try{let f=d(l,{message:o.message,metadata:n.getMetadata(),updateMetadata:n.updateMetadata,document:n.documentRef});if(!f)continue;if(f.handled){let w=f.persistMessage!==!1;return{text:f.displayText!==void 0?f.displayText:"",persist:w}}}catch(f){typeof console!="undefined"&&console.error("[AgentWidget] Action handler error:",f)}return{text:"",persist:!0}},syncFromMetadata:s}};var or=n=>{if(!n)return null;try{return JSON.parse(n)}catch(e){return typeof console!="undefined"&&console.error("[AgentWidget] Failed to parse stored state:",e),null}},rr=n=>n.map(e=>({...e,streaming:!1})),Jn=(n="vanilla-agent-state")=>{let e=()=>typeof window=="undefined"||!window.localStorage?null:window.localStorage;return{load:()=>{let s=e();return s?or(s.getItem(n)):null},save:s=>{let t=e();if(t)try{let r={...s,messages:s.messages?rr(s.messages):void 0};t.setItem(n,JSON.stringify(r))}catch(r){typeof console!="undefined"&&console.error("[AgentWidget] Failed to persist state:",r)}},clear:()=>{let s=e();if(s)try{s.removeItem(n)}catch(t){typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear stored state:",t)}}}};var Kn=class{constructor(){this.components=new Map}register(e,s){this.components.has(e)&&console.warn(`[ComponentRegistry] Component "${e}" is already registered. Overwriting.`),this.components.set(e,s)}unregister(e){this.components.delete(e)}get(e){return this.components.get(e)}has(e){return this.components.has(e)}getAllNames(){return Array.from(this.components.keys())}clear(){this.components.clear()}registerAll(e){Object.entries(e).forEach(([s,t])=>{this.register(s,t)})}},pn=new Kn;import{parse as ir,STR as ar,OBJ as lr}from"partial-json";function dr(n){if(!n||typeof n!="object"||!("component"in n))return!1;let e=n.component;return typeof e=="string"&&e.length>0}function cr(n,e){if(!dr(n))return null;let s=n.props&&typeof n.props=="object"&&n.props!==null?n.props:{};return{component:n.component,props:s,raw:e}}function Xn(){let n=null,e=0;return{getExtractedDirective:()=>n,processChunk:s=>{let t=s.trim();if(!t.startsWith("{")&&!t.startsWith("["))return null;if(s.length<=e)return n;try{let r=ir(s,ar|lr),o=cr(r,s);o&&(n=o)}catch{}return e=s.length,n},reset:()=>{n=null,e=0}}}function ur(n){return typeof n=="object"&&n!==null&&"component"in n&&typeof n.component=="string"&&"props"in n&&typeof n.props=="object"}function Vn(n,e){let{config:s,message:t,onPropsUpdate:r}=e,o=pn.get(n.component);if(!o)return console.warn(`[ComponentMiddleware] Component "${n.component}" not found in registry. Falling back to default rendering.`),null;let i={message:t,config:s,updateProps:l=>{r&&r(l)}};try{return o(n.props,i)}catch(l){return console.error(`[ComponentMiddleware] Error rendering component "${n.component}":`,l),null}}function pr(){let n=Xn();return{processChunk:e=>n.processChunk(e),getDirective:()=>n.getExtractedDirective(),reset:()=>{n.reset()}}}function Gn(n){if(!n.rawContent)return!1;try{let e=JSON.parse(n.rawContent);return typeof e=="object"&&e!==null&&"component"in e&&typeof e.component=="string"}catch{return!1}}function Zn(n){if(!n.rawContent)return null;try{let e=JSON.parse(n.rawContent);if(typeof e=="object"&&e!==null&&"component"in e&&typeof e.component=="string")return{component:e.component,props:e.props&&typeof e.props=="object"&&e.props!==null?e.props:{},raw:n.rawContent}}catch{}return null}var gr=["Very dissatisfied","Dissatisfied","Neutral","Satisfied","Very satisfied"];function Qn(n){let{onSubmit:e,onDismiss:s,title:t="How satisfied are you?",subtitle:r="Please rate your experience",commentPlaceholder:o="Share your thoughts (optional)...",submitText:i="Submit",skipText:l="Skip",showComment:c=!0,ratingLabels:d=gr}=n,f=document.createElement("div");f.className="tvw-feedback-container tvw-feedback-csat",f.setAttribute("role","dialog"),f.setAttribute("aria-label","Customer satisfaction feedback");let w=null,u=document.createElement("div");u.className="tvw-feedback-content";let C=document.createElement("div");C.className="tvw-feedback-header";let g=document.createElement("h3");g.className="tvw-feedback-title",g.textContent=t,C.appendChild(g);let U=document.createElement("p");U.className="tvw-feedback-subtitle",U.textContent=r,C.appendChild(U),u.appendChild(C);let I=document.createElement("div");I.className="tvw-feedback-rating tvw-feedback-rating-csat",I.setAttribute("role","radiogroup"),I.setAttribute("aria-label","Satisfaction rating from 1 to 5");let h=[];for(let x=1;x<=5;x++){let S=document.createElement("button");S.type="button",S.className="tvw-feedback-rating-btn tvw-feedback-star-btn",S.setAttribute("role","radio"),S.setAttribute("aria-checked","false"),S.setAttribute("aria-label",`${x} star${x>1?"s":""}: ${d[x-1]}`),S.title=d[x-1],S.dataset.rating=String(x),S.innerHTML=`
|
|
17
17
|
<svg class="tvw-feedback-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
18
18
|
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
|
|
19
19
|
</svg>
|
|
20
|
-
`,S.addEventListener("click",()=>{w=x,h.forEach((X,B)=>{let _=B<x;X.classList.toggle("selected",_),X.setAttribute("aria-checked",B===x-1?"true":"false")})}),h.push(S),$.appendChild(S)}d.appendChild($);let b=null;if(p){let x=document.createElement("div");x.className="tvw-feedback-comment-container",b=document.createElement("textarea"),b.className="tvw-feedback-comment",b.placeholder=o,b.rows=3,b.setAttribute("aria-label","Additional comments"),x.appendChild(b),d.appendChild(x)}let W=document.createElement("div");W.className="tvw-feedback-actions";let v=document.createElement("button");v.type="button",v.className="tvw-feedback-btn tvw-feedback-btn-skip",v.textContent=l,v.addEventListener("click",()=>{s==null||s(),f.remove()});let D=document.createElement("button");return D.type="button",D.className="tvw-feedback-btn tvw-feedback-btn-submit",D.textContent=a,D.addEventListener("click",async()=>{if(w===null){$.classList.add("tvw-feedback-shake"),setTimeout(()=>$.classList.remove("tvw-feedback-shake"),500);return}D.disabled=!0,D.textContent="Submitting...";try{let x=(b==null?void 0:b.value.trim())||void 0;await e(w,x),f.remove()}catch(x){D.disabled=!1,D.textContent=a,console.error("[CSAT Feedback] Failed to submit:",x)}}),W.appendChild(v),W.appendChild(D),d.appendChild(W),f.appendChild(d),f}function Vn(n){let{onSubmit:e,onDismiss:s,title:t="How likely are you to recommend us?",subtitle:r="On a scale of 0 to 10",commentPlaceholder:o="What could we do better? (optional)...",submitText:a="Submit",skipText:l="Skip",showComment:p=!0,lowLabel:c="Not likely",highLabel:f="Very likely"}=n,w=document.createElement("div");w.className="tvw-feedback-container tvw-feedback-nps",w.setAttribute("role","dialog"),w.setAttribute("aria-label","Net Promoter Score feedback");let d=null,C=document.createElement("div");C.className="tvw-feedback-content";let g=document.createElement("div");g.className="tvw-feedback-header";let U=document.createElement("h3");U.className="tvw-feedback-title",U.textContent=t,g.appendChild(U);let $=document.createElement("p");$.className="tvw-feedback-subtitle",$.textContent=r,g.appendChild($),C.appendChild(g);let h=document.createElement("div");h.className="tvw-feedback-rating tvw-feedback-rating-nps",h.setAttribute("role","radiogroup"),h.setAttribute("aria-label","Likelihood rating from 0 to 10");let b=document.createElement("div");b.className="tvw-feedback-labels";let W=document.createElement("span");W.className="tvw-feedback-label-low",W.textContent=c;let v=document.createElement("span");v.className="tvw-feedback-label-high",v.textContent=f,b.appendChild(W),b.appendChild(v);let D=document.createElement("div");D.className="tvw-feedback-numbers";let x=[];for(let Z=0;Z<=10;Z++){let j=document.createElement("button");j.type="button",j.className="tvw-feedback-rating-btn tvw-feedback-number-btn",j.setAttribute("role","radio"),j.setAttribute("aria-checked","false"),j.setAttribute("aria-label",`Rating ${Z} out of 10`),j.textContent=String(Z),j.dataset.rating=String(Z),Z<=6?j.classList.add("tvw-feedback-detractor"):Z<=8?j.classList.add("tvw-feedback-passive"):j.classList.add("tvw-feedback-promoter"),j.addEventListener("click",()=>{d=Z,x.forEach((K,Q)=>{K.classList.toggle("selected",Q===Z),K.setAttribute("aria-checked",Q===Z?"true":"false")})}),x.push(j),D.appendChild(j)}h.appendChild(b),h.appendChild(D),C.appendChild(h);let S=null;if(p){let Z=document.createElement("div");Z.className="tvw-feedback-comment-container",S=document.createElement("textarea"),S.className="tvw-feedback-comment",S.placeholder=o,S.rows=3,S.setAttribute("aria-label","Additional comments"),Z.appendChild(S),C.appendChild(Z)}let X=document.createElement("div");X.className="tvw-feedback-actions";let B=document.createElement("button");B.type="button",B.className="tvw-feedback-btn tvw-feedback-btn-skip",B.textContent=l,B.addEventListener("click",()=>{s==null||s(),w.remove()});let _=document.createElement("button");return _.type="button",_.className="tvw-feedback-btn tvw-feedback-btn-submit",_.textContent=a,_.addEventListener("click",async()=>{if(d===null){D.classList.add("tvw-feedback-shake"),setTimeout(()=>D.classList.remove("tvw-feedback-shake"),500);return}_.disabled=!0,_.textContent="Submitting...";try{let Z=(S==null?void 0:S.value.trim())||void 0;await e(d,Z),w.remove()}catch(Z){_.disabled=!1,_.textContent=a,console.error("[NPS Feedback] Failed to submit:",Z)}}),X.appendChild(B),X.appendChild(_),C.appendChild(X),w.appendChild(C),w}var Gt="vanilla-agent-chat-history",cr=30*1e3,Gn=n=>!n||typeof n!="object"?{}:{...n},Lo=n=>n.map(e=>({...e,streaming:!1})),Bo=(n,e)=>{let s=n!=null&&n.markdown?hn(n.markdown):null;return t=>{var a,l,p;let r=(a=t.text)!=null?a:"",o=(l=t.message.rawContent)!=null?l:null;if(e){let c=e.process({text:r,raw:o!=null?o:r,message:t.message,streaming:t.streaming});c!==null&&(r=c.text,c.persist||(t.message.__skipPersist=!0))}return n!=null&&n.postprocessMessage?n.postprocessMessage({...t,text:r,raw:(p=o!=null?o:t.text)!=null?p:""}):s?s(r):An(r)}},Zn=(n,e,s)=>{var de,pe,Re,ge,De,it,ht,es,ts,ns,ss,os,rs,is;(!n.id||n.id!=="vanilla-agent-root")&&(n.id="vanilla-agent-root");let t=_n(e),r=yn.getForInstance(t.plugins);t.components&&ln.registerAll(t.components);let o=Wo(),a=(de=t.storageAdapter)!=null?de:qn(),l={},p=null;if(a!=null&&a.load)try{let i=a.load();if(i&&typeof i.then=="function")p=i;else if(i){let u=i;u.metadata&&(l=Gn(u.metadata)),(pe=u.messages)!=null&&pe.length&&(t={...t,initialMessages:u.messages})}}catch(i){typeof console!="undefined"&&console.error("[AgentWidget] Failed to load stored state:",i)}let c=()=>l,f=i=>{var E;l=(E=i({...l}))!=null?E:{},Mt()},w=t.actionParsers&&t.actionParsers.length?t.actionParsers:[vn],d=t.actionHandlers&&t.actionHandlers.length?t.actionHandlers:[Vt.message,Vt.messageAndClick],C=bn({parsers:w,handlers:d,getMetadata:c,updateMetadata:f,emit:o.emit,documentRef:typeof document!="undefined"?document:null});C.syncFromMetadata();let g=(ge=(Re=t.launcher)==null?void 0:Re.enabled)!=null?ge:!0,U=(it=(De=t.launcher)==null?void 0:De.autoExpand)!=null?it:!1,$=U,h=g,b=g?U:!0,W=Bo(t,C),v=(es=(ht=t.features)==null?void 0:ht.showReasoning)!=null?es:!0,D=(ns=(ts=t.features)==null?void 0:ts.showToolCalls)!=null?ns:!0,x={onCopy:i=>{var u,E;o.emit("message:copy",i),I!=null&&I.isClientTokenMode()&&I.submitMessageFeedback(i.id,"copy").catch(O=>{t.debug&&console.error("[AgentWidget] Failed to submit copy feedback:",O)}),(E=(u=t.messageActions)==null?void 0:u.onCopy)==null||E.call(u,i)},onFeedback:i=>{var u,E;o.emit("message:feedback",i),I!=null&&I.isClientTokenMode()&&I.submitMessageFeedback(i.messageId,i.type).catch(O=>{t.debug&&console.error("[AgentWidget] Failed to submit feedback:",O)}),(E=(u=t.messageActions)==null?void 0:u.onFeedback)==null||E.call(u,i)}},S=(ss=t.statusIndicator)!=null?ss:{},X=i=>{var u,E,O,k;return i==="idle"?(u=S.idleText)!=null?u:Xe.idle:i==="connecting"?(E=S.connectingText)!=null?E:Xe.connecting:i==="connected"?(O=S.connectedText)!=null?O:Xe.connected:i==="error"?(k=S.errorText)!=null?k:Xe.error:Xe[i]},{wrapper:B,panel:_}=xo(t),Z=So(t,g),{container:j,body:K,messagesWrapper:Q,suggestions:ne,textarea:re,sendButton:q,sendButtonWrapper:qe,composerForm:Ve,statusText:nt,introTitle:bt,introSubtitle:Ct,closeButton:J,iconHolder:fe,headerTitle:mt,headerSubtitle:ft,header:Ge,footer:st}=Z,H=Z.micButton,He=Z.micButtonWrapper,at=r.find(i=>i.renderHeader);if(at!=null&&at.renderHeader){let i=at.renderHeader({config:t,defaultRenderer:()=>{let u=zt({config:t,showClose:g});return on(j,u,t),u.header},onClose:()=>Ke(!1,"user")});if(i){let u=j.querySelector(".tvw-border-b-cw-divider");u&&(u.replaceWith(i),Ge=i)}}let lt=r.find(i=>i.renderComposer);if(lt!=null&<.renderComposer){let i=lt.renderComposer({config:t,defaultRenderer:()=>rn({config:t}).footer,onSubmit:u=>{I&&!I.isStreaming()&&I.sendMessage(u)},disabled:!1});i&&(st.replaceWith(i),st=i)}(()=>{var O,k;let i=(k=(O=t.layout)==null?void 0:O.slots)!=null?k:{},u=ee=>{switch(ee){case"body-top":return j.querySelector(".tvw-rounded-2xl.tvw-bg-cw-surface.tvw-p-6")||null;case"messages":return Q;case"footer-top":return ne;case"composer":return Ve;case"footer-bottom":return nt;default:return null}},E=(ee,N)=>{var T;switch(ee){case"header-left":case"header-center":case"header-right":if(ee==="header-left")Ge.insertBefore(N,Ge.firstChild);else if(ee==="header-right")Ge.appendChild(N);else{let z=Ge.querySelector(".tvw-flex-col");z?(T=z.parentNode)==null||T.insertBefore(N,z.nextSibling):Ge.appendChild(N)}break;case"body-top":let G=K.querySelector(".tvw-rounded-2xl.tvw-bg-cw-surface.tvw-p-6");G?G.replaceWith(N):K.insertBefore(N,K.firstChild);break;case"body-bottom":K.appendChild(N);break;case"footer-top":ne.replaceWith(N);break;case"footer-bottom":nt.replaceWith(N);break;default:break}};for(let[ee,N]of Object.entries(i))if(N)try{let T=N({config:t,defaultContent:()=>u(ee)});T&&E(ee,T)}catch(T){typeof console!="undefined"&&console.error(`[AgentWidget] Error rendering slot "${ee}":`,T)}})(),_.appendChild(j),n.appendChild(B);let wt=()=>{var ae,Ie,ct,le,ut,Ht,Pt,kt,jt,Rt,qt,pt,It,$t,pn,tn;let i=(Ie=(ae=t.launcher)==null?void 0:ae.sidebarMode)!=null?Ie:!1,u=i||((le=(ct=t.launcher)==null?void 0:ct.fullHeight)!=null?le:!1),E=(ut=t.theme)!=null?ut:{},O=(Pt=(Ht=t.launcher)==null?void 0:Ht.position)!=null?Pt:"bottom-left",k=O==="bottom-left"||O==="top-left",ee=i?"none":"1px solid var(--tvw-cw-border)",N=i?k?"2px 0 12px rgba(0, 0, 0, 0.08)":"-2px 0 12px rgba(0, 0, 0, 0.08)":"0 25px 50px -12px rgba(0, 0, 0, 0.25)",T=i?"0":"16px",G=(kt=E.panelBorder)!=null?kt:ee,z=(jt=E.panelShadow)!=null?jt:N,R=(Rt=E.panelBorderRadius)!=null?Rt:T;n.style.cssText="",B.style.cssText="",_.style.cssText="",j.style.cssText="",K.style.cssText="",st.style.cssText="";let Y=(pt=(qt=t==null?void 0:t.launcher)==null?void 0:qt.width)!=null?pt:t==null?void 0:t.launcherWidth,Le=Y!=null?Y:"min(400px, calc(100vw - 24px))";i||(_.style.width=Le,_.style.maxWidth=Le),_.style.boxShadow=z,_.style.borderRadius=R,j.style.border=G,j.style.borderRadius=R;let he=((It=t.launcher)==null?void 0:It.enabled)===!1;if(u&&(n.style.display="flex",n.style.flexDirection="column",n.style.height="100%",n.style.minHeight="0",B.style.display="flex",B.style.flexDirection="column",B.style.flex="1 1 0%",B.style.minHeight="0",B.style.maxHeight="100%",B.style.height="100%",he&&(B.style.overflow="hidden"),_.style.display="flex",_.style.flexDirection="column",_.style.flex="1 1 0%",_.style.minHeight="0",_.style.maxHeight="100%",_.style.height="100%",_.style.overflow="hidden",j.style.display="flex",j.style.flexDirection="column",j.style.flex="1 1 0%",j.style.minHeight="0",j.style.maxHeight="100%",j.style.overflow="hidden",K.style.flex="1 1 0%",K.style.minHeight="0",K.style.overflowY="auto",st.style.flexShrink="0"),B.classList.remove("tvw-bottom-6","tvw-right-6","tvw-left-6","tvw-top-6","tvw-bottom-4","tvw-right-4","tvw-left-4","tvw-top-4"),!i&&!he&&(($t=vt[O])!=null?$t:vt["bottom-right"]).split(" ").forEach(Yt=>B.classList.add(Yt)),i){let Ut=(tn=(pn=t.launcher)==null?void 0:pn.sidebarWidth)!=null?tn:"420px";B.style.cssText=`
|
|
20
|
+
`,S.addEventListener("click",()=>{w=x,h.forEach((X,B)=>{let j=B<x;X.classList.toggle("selected",j),X.setAttribute("aria-checked",B===x-1?"true":"false")})}),h.push(S),I.appendChild(S)}u.appendChild(I);let b=null;if(c){let x=document.createElement("div");x.className="tvw-feedback-comment-container",b=document.createElement("textarea"),b.className="tvw-feedback-comment",b.placeholder=o,b.rows=3,b.setAttribute("aria-label","Additional comments"),x.appendChild(b),u.appendChild(x)}let W=document.createElement("div");W.className="tvw-feedback-actions";let v=document.createElement("button");v.type="button",v.className="tvw-feedback-btn tvw-feedback-btn-skip",v.textContent=l,v.addEventListener("click",()=>{s==null||s(),f.remove()});let D=document.createElement("button");return D.type="button",D.className="tvw-feedback-btn tvw-feedback-btn-submit",D.textContent=i,D.addEventListener("click",async()=>{if(w===null){I.classList.add("tvw-feedback-shake"),setTimeout(()=>I.classList.remove("tvw-feedback-shake"),500);return}D.disabled=!0,D.textContent="Submitting...";try{let x=(b==null?void 0:b.value.trim())||void 0;await e(w,x),f.remove()}catch(x){D.disabled=!1,D.textContent=i,console.error("[CSAT Feedback] Failed to submit:",x)}}),W.appendChild(v),W.appendChild(D),u.appendChild(W),f.appendChild(u),f}function es(n){let{onSubmit:e,onDismiss:s,title:t="How likely are you to recommend us?",subtitle:r="On a scale of 0 to 10",commentPlaceholder:o="What could we do better? (optional)...",submitText:i="Submit",skipText:l="Skip",showComment:c=!0,lowLabel:d="Not likely",highLabel:f="Very likely"}=n,w=document.createElement("div");w.className="tvw-feedback-container tvw-feedback-nps",w.setAttribute("role","dialog"),w.setAttribute("aria-label","Net Promoter Score feedback");let u=null,C=document.createElement("div");C.className="tvw-feedback-content";let g=document.createElement("div");g.className="tvw-feedback-header";let U=document.createElement("h3");U.className="tvw-feedback-title",U.textContent=t,g.appendChild(U);let I=document.createElement("p");I.className="tvw-feedback-subtitle",I.textContent=r,g.appendChild(I),C.appendChild(g);let h=document.createElement("div");h.className="tvw-feedback-rating tvw-feedback-rating-nps",h.setAttribute("role","radiogroup"),h.setAttribute("aria-label","Likelihood rating from 0 to 10");let b=document.createElement("div");b.className="tvw-feedback-labels";let W=document.createElement("span");W.className="tvw-feedback-label-low",W.textContent=d;let v=document.createElement("span");v.className="tvw-feedback-label-high",v.textContent=f,b.appendChild(W),b.appendChild(v);let D=document.createElement("div");D.className="tvw-feedback-numbers";let x=[];for(let Z=0;Z<=10;Z++){let _=document.createElement("button");_.type="button",_.className="tvw-feedback-rating-btn tvw-feedback-number-btn",_.setAttribute("role","radio"),_.setAttribute("aria-checked","false"),_.setAttribute("aria-label",`Rating ${Z} out of 10`),_.textContent=String(Z),_.dataset.rating=String(Z),Z<=6?_.classList.add("tvw-feedback-detractor"):Z<=8?_.classList.add("tvw-feedback-passive"):_.classList.add("tvw-feedback-promoter"),_.addEventListener("click",()=>{u=Z,x.forEach((K,Q)=>{K.classList.toggle("selected",Q===Z),K.setAttribute("aria-checked",Q===Z?"true":"false")})}),x.push(_),D.appendChild(_)}h.appendChild(b),h.appendChild(D),C.appendChild(h);let S=null;if(c){let Z=document.createElement("div");Z.className="tvw-feedback-comment-container",S=document.createElement("textarea"),S.className="tvw-feedback-comment",S.placeholder=o,S.rows=3,S.setAttribute("aria-label","Additional comments"),Z.appendChild(S),C.appendChild(Z)}let X=document.createElement("div");X.className="tvw-feedback-actions";let B=document.createElement("button");B.type="button",B.className="tvw-feedback-btn tvw-feedback-btn-skip",B.textContent=l,B.addEventListener("click",()=>{s==null||s(),w.remove()});let j=document.createElement("button");return j.type="button",j.className="tvw-feedback-btn tvw-feedback-btn-submit",j.textContent=i,j.addEventListener("click",async()=>{if(u===null){D.classList.add("tvw-feedback-shake"),setTimeout(()=>D.classList.remove("tvw-feedback-shake"),500);return}j.disabled=!0,j.textContent="Submitting...";try{let Z=(S==null?void 0:S.value.trim())||void 0;await e(u,Z),w.remove()}catch(Z){j.disabled=!1,j.textContent=i,console.error("[NPS Feedback] Failed to submit:",Z)}}),X.appendChild(B),X.appendChild(j),C.appendChild(X),w.appendChild(C),w}var Gt="vanilla-agent-chat-history",hr=30*1e3,ts=n=>!n||typeof n!="object"?{}:{...n},Po=n=>n.map(e=>({...e,streaming:!1})),Ro=(n,e)=>{let s=n!=null&&n.markdown?yn(n.markdown):null;return t=>{var i,l,c;let r=(i=t.text)!=null?i:"",o=(l=t.message.rawContent)!=null?l:null;if(e){let d=e.process({text:r,raw:o!=null?o:r,message:t.message,streaming:t.streaming});d!==null&&(r=d.text,d.persist||(t.message.__skipPersist=!0))}return n!=null&&n.postprocessMessage?n.postprocessMessage({...t,text:r,raw:(c=o!=null?o:t.text)!=null?c:""}):s?s(r):Wn(r)}},ns=(n,e,s)=>{var de,pe,Pe,ge,De,it,ht,os,rs,is,as,ls,ds,cs;(!n.id||n.id!=="vanilla-agent-root")&&(n.id="vanilla-agent-root");let t=zn(e),r=xn.getForInstance(t.plugins);t.components&&pn.registerAll(t.components);let o=Ho(),i=(de=t.storageAdapter)!=null?de:Jn(),l={},c=null;if(i!=null&&i.load)try{let a=i.load();if(a&&typeof a.then=="function")c=a;else if(a){let p=a;p.metadata&&(l=ts(p.metadata)),(pe=p.messages)!=null&&pe.length&&(t={...t,initialMessages:p.messages})}}catch(a){typeof console!="undefined"&&console.error("[AgentWidget] Failed to load stored state:",a)}let d=()=>l,f=a=>{var E;l=(E=a({...l}))!=null?E:{},Mt()},w=t.actionParsers&&t.actionParsers.length?t.actionParsers:[Sn],u=t.actionHandlers&&t.actionHandlers.length?t.actionHandlers:[Vt.message,Vt.messageAndClick],C=An({parsers:w,handlers:u,getMetadata:d,updateMetadata:f,emit:o.emit,documentRef:typeof document!="undefined"?document:null});C.syncFromMetadata();let g=(ge=(Pe=t.launcher)==null?void 0:Pe.enabled)!=null?ge:!0,U=(it=(De=t.launcher)==null?void 0:De.autoExpand)!=null?it:!1,I=U,h=g,b=g?U:!0,W=Ro(t,C),v=(os=(ht=t.features)==null?void 0:ht.showReasoning)!=null?os:!0,D=(is=(rs=t.features)==null?void 0:rs.showToolCalls)!=null?is:!0,x={onCopy:a=>{var p,E;o.emit("message:copy",a),R!=null&&R.isClientTokenMode()&&R.submitMessageFeedback(a.id,"copy").catch(O=>{t.debug&&console.error("[AgentWidget] Failed to submit copy feedback:",O)}),(E=(p=t.messageActions)==null?void 0:p.onCopy)==null||E.call(p,a)},onFeedback:a=>{var p,E;o.emit("message:feedback",a),R!=null&&R.isClientTokenMode()&&R.submitMessageFeedback(a.messageId,a.type).catch(O=>{t.debug&&console.error("[AgentWidget] Failed to submit feedback:",O)}),(E=(p=t.messageActions)==null?void 0:p.onFeedback)==null||E.call(p,a)}},S=(as=t.statusIndicator)!=null?as:{},X=a=>{var p,E,O,k;return a==="idle"?(p=S.idleText)!=null?p:Xe.idle:a==="connecting"?(E=S.connectingText)!=null?E:Xe.connecting:a==="connected"?(O=S.connectedText)!=null?O:Xe.connected:a==="error"?(k=S.errorText)!=null?k:Xe.error:Xe[a]},{wrapper:B,panel:j}=Eo(t),Z=Mo(t,g),{container:_,body:K,messagesWrapper:Q,suggestions:ne,textarea:re,sendButton:q,sendButtonWrapper:qe,composerForm:Ve,statusText:nt,introTitle:bt,introSubtitle:Ct,closeButton:Y,iconHolder:fe,headerTitle:mt,headerSubtitle:ft,header:Ge,footer:st}=Z,H=Z.micButton,He=Z.micButtonWrapper,at=r.find(a=>a.renderHeader);if(at!=null&&at.renderHeader){let a=at.renderHeader({config:t,defaultRenderer:()=>{let p=zt({config:t,showClose:g});return dn(_,p,t),p.header},onClose:()=>Ke(!1,"user")});if(a){let p=_.querySelector(".tvw-border-b-cw-divider");p&&(p.replaceWith(a),Ge=a)}}let lt=r.find(a=>a.renderComposer);if(lt!=null&<.renderComposer){let a=lt.renderComposer({config:t,defaultRenderer:()=>cn({config:t}).footer,onSubmit:p=>{R&&!R.isStreaming()&&R.sendMessage(p)},disabled:!1});a&&(st.replaceWith(a),st=a)}(()=>{var O,k;let a=(k=(O=t.layout)==null?void 0:O.slots)!=null?k:{},p=ee=>{switch(ee){case"body-top":return _.querySelector(".tvw-rounded-2xl.tvw-bg-cw-surface.tvw-p-6")||null;case"messages":return Q;case"footer-top":return ne;case"composer":return Ve;case"footer-bottom":return nt;default:return null}},E=(ee,N)=>{var T;switch(ee){case"header-left":case"header-center":case"header-right":if(ee==="header-left")Ge.insertBefore(N,Ge.firstChild);else if(ee==="header-right")Ge.appendChild(N);else{let z=Ge.querySelector(".tvw-flex-col");z?(T=z.parentNode)==null||T.insertBefore(N,z.nextSibling):Ge.appendChild(N)}break;case"body-top":let G=K.querySelector(".tvw-rounded-2xl.tvw-bg-cw-surface.tvw-p-6");G?G.replaceWith(N):K.insertBefore(N,K.firstChild);break;case"body-bottom":K.appendChild(N);break;case"footer-top":ne.replaceWith(N);break;case"footer-bottom":nt.replaceWith(N);break;default:break}};for(let[ee,N]of Object.entries(a))if(N)try{let T=N({config:t,defaultContent:()=>p(ee)});T&&E(ee,T)}catch(T){typeof console!="undefined"&&console.error(`[AgentWidget] Error rendering slot "${ee}":`,T)}})(),j.appendChild(_),n.appendChild(B);let wt=()=>{var ae,Re,ct,le,ut,Ht,$t,kt,_t,Pt,qt,pt,Rt,It,fn,rn;let a=(Re=(ae=t.launcher)==null?void 0:ae.sidebarMode)!=null?Re:!1,p=a||((le=(ct=t.launcher)==null?void 0:ct.fullHeight)!=null?le:!1),E=(ut=t.theme)!=null?ut:{},O=($t=(Ht=t.launcher)==null?void 0:Ht.position)!=null?$t:"bottom-left",k=O==="bottom-left"||O==="top-left",ee=a?"none":"1px solid var(--tvw-cw-border)",N=a?k?"2px 0 12px rgba(0, 0, 0, 0.08)":"-2px 0 12px rgba(0, 0, 0, 0.08)":"0 25px 50px -12px rgba(0, 0, 0, 0.25)",T=a?"0":"16px",G=(kt=E.panelBorder)!=null?kt:ee,z=(_t=E.panelShadow)!=null?_t:N,P=(Pt=E.panelBorderRadius)!=null?Pt:T;n.style.cssText="",B.style.cssText="",j.style.cssText="",_.style.cssText="",K.style.cssText="",st.style.cssText="";let J=(pt=(qt=t==null?void 0:t.launcher)==null?void 0:qt.width)!=null?pt:t==null?void 0:t.launcherWidth,Le=J!=null?J:"min(400px, calc(100vw - 24px))";a||(j.style.width=Le,j.style.maxWidth=Le),j.style.boxShadow=z,j.style.borderRadius=P,_.style.border=G,_.style.borderRadius=P;let he=((Rt=t.launcher)==null?void 0:Rt.enabled)===!1;if(p&&(n.style.display="flex",n.style.flexDirection="column",n.style.height="100%",n.style.minHeight="0",B.style.display="flex",B.style.flexDirection="column",B.style.flex="1 1 0%",B.style.minHeight="0",B.style.maxHeight="100%",B.style.height="100%",he&&(B.style.overflow="hidden"),j.style.display="flex",j.style.flexDirection="column",j.style.flex="1 1 0%",j.style.minHeight="0",j.style.maxHeight="100%",j.style.height="100%",j.style.overflow="hidden",_.style.display="flex",_.style.flexDirection="column",_.style.flex="1 1 0%",_.style.minHeight="0",_.style.maxHeight="100%",_.style.overflow="hidden",K.style.flex="1 1 0%",K.style.minHeight="0",K.style.overflowY="auto",st.style.flexShrink="0"),B.classList.remove("tvw-bottom-6","tvw-right-6","tvw-left-6","tvw-top-6","tvw-bottom-4","tvw-right-4","tvw-left-4","tvw-top-4"),!a&&!he&&((It=vt[O])!=null?It:vt["bottom-right"]).split(" ").forEach(Jt=>B.classList.add(Jt)),a){let Ut=(rn=(fn=t.launcher)==null?void 0:fn.sidebarWidth)!=null?rn:"420px";B.style.cssText=`
|
|
21
21
|
position: fixed !important;
|
|
22
22
|
top: 0 !important;
|
|
23
23
|
bottom: 0 !important;
|
|
@@ -29,7 +29,7 @@ import{Marked as Ro}from"marked";var Io=n=>{if(n)return n},gn=n=>{var r,o;let e=
|
|
|
29
29
|
display: flex !important;
|
|
30
30
|
flex-direction: column !important;
|
|
31
31
|
${k?"left: 0 !important; right: auto !important;":"left: auto !important; right: 0 !important;"}
|
|
32
|
-
`,
|
|
32
|
+
`,j.style.cssText=`
|
|
33
33
|
position: relative !important;
|
|
34
34
|
display: flex !important;
|
|
35
35
|
flex-direction: column !important;
|
|
@@ -41,8 +41,8 @@ import{Marked as Ro}from"marked";var Io=n=>{if(n)return n},gn=n=>{var r,o;let e=
|
|
|
41
41
|
margin: 0 !important;
|
|
42
42
|
padding: 0 !important;
|
|
43
43
|
box-shadow: ${z} !important;
|
|
44
|
-
border-radius: ${
|
|
45
|
-
`,
|
|
44
|
+
border-radius: ${P} !important;
|
|
45
|
+
`,j.style.setProperty("width","100%","important"),j.style.setProperty("max-width","100%","important"),_.style.cssText=`
|
|
46
46
|
display: flex !important;
|
|
47
47
|
flex-direction: column !important;
|
|
48
48
|
flex: 1 1 0% !important;
|
|
@@ -51,17 +51,17 @@ import{Marked as Ro}from"marked";var Io=n=>{if(n)return n},gn=n=>{var r,o;let e=
|
|
|
51
51
|
min-height: 0 !important;
|
|
52
52
|
max-height: 100% !important;
|
|
53
53
|
overflow: hidden !important;
|
|
54
|
-
border-radius: ${
|
|
54
|
+
border-radius: ${P} !important;
|
|
55
55
|
border: ${G} !important;
|
|
56
56
|
`,st.style.cssText=`
|
|
57
57
|
flex-shrink: 0 !important;
|
|
58
58
|
border-top: none !important;
|
|
59
59
|
padding: 8px 16px 12px 16px !important;
|
|
60
|
-
`}if(!he){let Ut="max-height: -moz-available !important; max-height: stretch !important;",Yt=i?"":"padding-top: 1.25em !important;";B.style.cssText+=Ut+Yt}};wt(),Hn(n,t);let $e=[],ot=Eo(ne),Ue=null,I,dt=!1,Se=!0,Oe=0,te=0,Ae=null,Te=!1,ze=0,Je=!1,xt=125,Lt=2e3,yt=5,Et=50,St=new Map,ye={active:!1,manuallyDeactivated:!1,lastUserMessageWasVoice:!1},Bt=(rs=(os=t.voiceRecognition)==null?void 0:os.autoResume)!=null?rs:!1,ke=i=>{o.emit("voice:state",{active:ye.active,source:i,timestamp:Date.now()})},Ye=()=>{f(i=>({...i,voiceState:{active:ye.active,timestamp:Date.now(),manuallyDeactivated:ye.manuallyDeactivated}}))},At=()=>{var O,k;if(((O=t.voiceRecognition)==null?void 0:O.enabled)===!1)return;let i=Gn(l.voiceState),u=!!i.active,E=Number((k=i.timestamp)!=null?k:0);ye.manuallyDeactivated=!!i.manuallyDeactivated,u&&Date.now()-E<cr&&setTimeout(()=>{ye.active||(ye.manuallyDeactivated=!1,Ne("restore"))},1e3)},Nt=()=>I?Lo(I.getMessages()).filter(i=>!i.__skipPersist):[];function Mt(i){if(!(a!=null&&a.save))return;let E={messages:i?Lo(i):I?Nt():[],metadata:l};try{let O=a.save(E);O instanceof Promise&&O.catch(k=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to persist state:",k)})}catch(O){typeof console!="undefined"&&console.error("[AgentWidget] Failed to persist state:",O)}}let Ot=(i=!1)=>{if(!Se)return;let u=Date.now();Te&&u<ze&&!i||(Te&&u>=ze&&(Te=!1),!(!i&&!dt)&&(u-te<xt||(te=u,Ae&&cancelAnimationFrame(Ae),Ae=requestAnimationFrame(()=>{Te||!Se||(Je=!0,K.scrollTop=K.scrollHeight,Oe=K.scrollTop,requestAnimationFrame(()=>{Je=!1}),Ae=null)}))))},Wt=null,dn=()=>B.querySelector("#vanilla-agent-scroll-container")||K,cn=(i,u=500)=>{let E=i.scrollTop,O=i.clientHeight,k=i.scrollHeight,ee=k-E;if(E+O>=k-2||Math.abs(ee)<5)return;Wt!==null&&(cancelAnimationFrame(Wt),Wt=null);let T=performance.now(),G=R=>1-Math.pow(1-R,3),z=R=>{let Y=i.scrollHeight;Y!==k&&(k=Y,ee=k-E);let Le=R-T,he=Math.min(Le/u,1),ae=G(he),Ie=E+ee*ae;i.scrollTop=Ie,he<1?Wt=requestAnimationFrame(z):(i.scrollTop=i.scrollHeight,Wt=null)};Wt=requestAnimationFrame(z)},un=i=>{let u=new Map;i.forEach(E=>{let O=St.get(E.id);u.set(E.id,{streaming:E.streaming,role:E.role}),!O&&E.role==="assistant"&&o.emit("assistant:message",E),E.role==="assistant"&&(O!=null&&O.streaming)&&E.streaming===!1&&o.emit("assistant:complete",E)}),St.clear(),u.forEach((E,O)=>{St.set(O,E)})},Dt=(i,u,E)=>{i.innerHTML="";let O=document.createDocumentFragment();u.forEach(T=>{var Le,he;let G=null,z=r.find(ae=>!!(T.variant==="reasoning"&&ae.renderReasoning||T.variant==="tool"&&ae.renderToolCall||!T.variant&&ae.renderMessage)),R=(Le=t.layout)==null?void 0:Le.messages;if(z)if(T.variant==="reasoning"&&T.reasoning&&z.renderReasoning){if(!v)return;G=z.renderReasoning({message:T,defaultRenderer:()=>$n(T),config:t})}else if(T.variant==="tool"&&T.toolCall&&z.renderToolCall){if(!D)return;G=z.renderToolCall({message:T,defaultRenderer:()=>Nn(T,t),config:t})}else z.renderMessage&&(G=z.renderMessage({message:T,defaultRenderer:()=>{let ae=an(T,E,R,t.messageActions,x);return T.role!=="user"&&On(ae,T,t,I),ae},config:t}));if(!G&&T.role==="assistant"&&!T.variant&&t.enableComponentStreaming!==!1&&Yn(T)){let Ie=Kn(T);if(Ie){let ct=Jn(Ie,{config:t,message:T,transform:E});if(ct){let le=document.createElement("div");if(le.className=["vanilla-message-bubble","tvw-max-w-[85%]","tvw-rounded-2xl","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-p-4"].join(" "),le.setAttribute("data-message-id",T.id),T.content&&T.content.trim()){let ut=document.createElement("div");ut.className="tvw-mb-3 tvw-text-sm tvw-leading-relaxed",ut.innerHTML=E({text:T.content,message:T,streaming:!!T.streaming,raw:T.rawContent}),le.appendChild(ut)}le.appendChild(ct),G=le}}}if(!G)if(T.variant==="reasoning"&&T.reasoning){if(!v)return;G=$n(T)}else if(T.variant==="tool"&&T.toolCall){if(!D)return;G=Nn(T,t)}else{let ae=(he=t.layout)==null?void 0:he.messages;ae!=null&&ae.renderUserMessage&&T.role==="user"?G=ae.renderUserMessage({message:T,config:t,streaming:!!T.streaming}):ae!=null&&ae.renderAssistantMessage&&T.role==="assistant"?G=ae.renderAssistantMessage({message:T,config:t,streaming:!!T.streaming}):G=an(T,E,ae,t.messageActions,x),T.role!=="user"&&G&&On(G,T,t,I)}let Y=document.createElement("div");Y.className="tvw-flex",T.role==="user"&&Y.classList.add("tvw-justify-end"),Y.appendChild(G),O.appendChild(Y)});let k=u.some(T=>T.role==="assistant"&&T.streaming),ee=u[u.length-1],N=(ee==null?void 0:ee.role)==="assistant"&&!ee.streaming;if(dt&&u.some(T=>T.role==="user")&&!k&&!N){let T=wn(),G=document.createElement("div");G.className=["tvw-max-w-[85%]","tvw-rounded-2xl","tvw-text-sm","tvw-leading-relaxed","tvw-shadow-sm","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-px-5","tvw-py-3"].join(" "),G.appendChild(T);let z=document.createElement("div");z.className="tvw-flex",z.appendChild(G),O.appendChild(z)}i.appendChild(O),requestAnimationFrame(()=>{requestAnimationFrame(()=>{let T=dn();cn(T)})})},_t=()=>{g&&(b?(B.classList.remove("tvw-pointer-events-none","tvw-opacity-0"),_.classList.remove("tvw-scale-95","tvw-opacity-0"),_.classList.add("tvw-scale-100","tvw-opacity-100"),y?y.element.style.display="none":F&&(F.style.display="none")):(B.classList.add("tvw-pointer-events-none","tvw-opacity-0"),_.classList.remove("tvw-scale-100","tvw-opacity-100"),_.classList.add("tvw-scale-95","tvw-opacity-0"),y?y.element.style.display="":F&&(F.style.display="")))},Ke=(i,u="user")=>{if(!g||b===i)return;let E=b;b=i,_t(),b&&(be(),Ot(!0));let O={open:b,source:u,timestamp:Date.now()};b&&!E?o.emit("widget:opened",O):!b&&E&&o.emit("widget:closed",O),o.emit("widget:state",{open:b,launcherEnabled:g,voiceActive:ye.active,streaming:I.isStreaming()})},Jt=i=>{q.disabled=i,H&&(H.disabled=i),ot.buttons.forEach(u=>{u.disabled=i})},Zt=()=>{var k,ee,N,T,G,z,R,Y,Le,he,ae,Ie,ct,le;bt.textContent=(ee=(k=t.copy)==null?void 0:k.welcomeTitle)!=null?ee:"Hello \u{1F44B}",Ct.textContent=(T=(N=t.copy)==null?void 0:N.welcomeSubtitle)!=null?T:"Ask anything about your account or products.",re.placeholder=(z=(G=t.copy)==null?void 0:G.inputPlaceholder)!=null?z:"How can I help...",((Y=(R=t.sendButton)==null?void 0:R.useIcon)!=null?Y:!1)||(q.textContent=(he=(Le=t.copy)==null?void 0:Le.sendButtonLabel)!=null?he:"Send");let u=(Ie=(ae=t.theme)==null?void 0:ae.inputFontFamily)!=null?Ie:"sans-serif",E=(le=(ct=t.theme)==null?void 0:ct.inputFontWeight)!=null?le:"400",O=ut=>{switch(ut){case"serif":return'Georgia, "Times New Roman", Times, serif';case"mono":return'"Courier New", Courier, "Lucida Console", Monaco, monospace';case"sans-serif":default:return'-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif'}};re.style.fontFamily=O(u),re.style.fontWeight=E};I=new nn(t,{onMessagesChanged(i){Dt(Q,i,W),I&&(i.some(O=>O.role==="user")?ot.render([],I,re,i):ot.render(t.suggestionChips,I,re,i,t.suggestionChipsConfig)),Ot(!dt),un(i);let u=[...i].reverse().find(E=>E.role==="user");ye.lastUserMessageWasVoice=!!(u!=null&&u.viaVoice),Mt(i)},onStatusChanged(i){var O;let u=(O=t.statusIndicator)!=null?O:{},E=k=>{var ee,N,T,G;return k==="idle"?(ee=u.idleText)!=null?ee:Xe.idle:k==="connecting"?(N=u.connectingText)!=null?N:Xe.connecting:k==="connected"?(T=u.connectedText)!=null?T:Xe.connected:k==="error"?(G=u.errorText)!=null?G:Xe.error:Xe[k]};nt.textContent=E(i)},onStreamingChanged(i){dt=i,Jt(i),I&&Dt(Q,I.getMessages(),W),i||Ot(!0)}}),p&&p.then(i=>{var u;i&&(i.metadata&&(l=Gn(i.metadata),C.syncFromMetadata()),(u=i.messages)!=null&&u.length&&I.hydrateMessages(i.messages))}).catch(i=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to hydrate stored state:",i)});let Qt=i=>{i.preventDefault();let u=re.value.trim();u&&(re.value="",I.sendMessage(u))},en=i=>{i.key==="Enter"&&!i.shiftKey&&(i.preventDefault(),q.click())},A=null,V=!1,ie=null,ve=null,Fe=()=>typeof window=="undefined"?null:window.webkitSpeechRecognition||window.SpeechRecognition||null,Ne=(i="user")=>{var ee,N,T,G;if(V||I.isStreaming())return;let u=Fe();if(!u)return;A=new u;let O=(N=((ee=t.voiceRecognition)!=null?ee:{}).pauseDuration)!=null?N:2e3;A.continuous=!0,A.interimResults=!0,A.lang="en-US";let k=re.value;A.onresult=z=>{let R="",Y="";for(let he=0;he<z.results.length;he++){let ae=z.results[he],Ie=ae[0].transcript;ae.isFinal?R+=Ie+" ":Y=Ie}let Le=k+R+Y;re.value=Le,ie&&clearTimeout(ie),(R||Y)&&(ie=window.setTimeout(()=>{let he=re.value.trim();he&&A&&V&&(ue(),re.value="",I.sendMessage(he,{viaVoice:!0}))},O))},A.onerror=z=>{z.error!=="no-speech"&&ue()},A.onend=()=>{if(V){let z=re.value.trim();z&&z!==k.trim()&&(re.value="",I.sendMessage(z,{viaVoice:!0})),ue()}};try{if(A.start(),V=!0,ye.active=!0,i!=="system"&&(ye.manuallyDeactivated=!1),ke(i),Ye(),H){ve={backgroundColor:H.style.backgroundColor,color:H.style.color,borderColor:H.style.borderColor};let z=(T=t.voiceRecognition)!=null?T:{},R=(G=z.recordingBackgroundColor)!=null?G:"#ef4444",Y=z.recordingIconColor,Le=z.recordingBorderColor;if(H.classList.add("tvw-voice-recording"),H.style.backgroundColor=R,Y){H.style.color=Y;let he=H.querySelector("svg");he&&he.setAttribute("stroke",Y)}Le&&(H.style.borderColor=Le),H.setAttribute("aria-label","Stop voice recognition")}}catch{ue("system")}},ue=(i="user")=>{if(V){if(V=!1,ie&&(clearTimeout(ie),ie=null),A){try{A.stop()}catch{}A=null}if(ye.active=!1,ke(i),Ye(),H){if(H.classList.remove("tvw-voice-recording"),ve){H.style.backgroundColor=ve.backgroundColor,H.style.color=ve.color,H.style.borderColor=ve.borderColor;let u=H.querySelector("svg");u&&u.setAttribute("stroke",ve.color||"currentColor"),ve=null}H.setAttribute("aria-label","Start voice recognition")}}},P=(i,u)=>{var Ie,ct,le,ut,Ht,Pt,kt;if(!(typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined")))return null;let O=m("div","tvw-send-button-wrapper"),k=m("button","tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer");k.type="button",k.setAttribute("aria-label","Start voice recognition");let ee=(Ie=i==null?void 0:i.iconName)!=null?Ie:"mic",N=(ct=u==null?void 0:u.size)!=null?ct:"40px",T=(le=i==null?void 0:i.iconSize)!=null?le:N,G=parseFloat(T)||24,z=(ut=i==null?void 0:i.backgroundColor)!=null?ut:u==null?void 0:u.backgroundColor,R=(Ht=i==null?void 0:i.iconColor)!=null?Ht:u==null?void 0:u.textColor;k.style.width=T,k.style.height=T,k.style.minWidth=T,k.style.minHeight=T,k.style.fontSize="18px",k.style.lineHeight="1";let Y=R||"currentColor",Le=ce(ee,G,Y,1.5);Le?(k.appendChild(Le),k.style.color=Y):(k.textContent="\u{1F3A4}",k.style.color=Y),z?k.style.backgroundColor=z:k.classList.add("tvw-bg-cw-primary"),R?k.style.color=R:!R&&!(u!=null&&u.textColor)&&k.classList.add("tvw-text-white"),i!=null&&i.borderWidth&&(k.style.borderWidth=i.borderWidth,k.style.borderStyle="solid"),i!=null&&i.borderColor&&(k.style.borderColor=i.borderColor),i!=null&&i.paddingX&&(k.style.paddingLeft=i.paddingX,k.style.paddingRight=i.paddingX),i!=null&&i.paddingY&&(k.style.paddingTop=i.paddingY,k.style.paddingBottom=i.paddingY),O.appendChild(k);let he=(Pt=i==null?void 0:i.tooltipText)!=null?Pt:"Start voice recognition";if(((kt=i==null?void 0:i.showTooltip)!=null?kt:!1)&&he){let jt=m("div","tvw-send-button-tooltip");jt.textContent=he,O.appendChild(jt)}return{micButton:k,micButtonWrapper:O}},rt=()=>{if(V){let i=re.value.trim();ye.manuallyDeactivated=!0,Ye(),ue("user"),i&&(re.value="",I.sendMessage(i))}else ye.manuallyDeactivated=!1,Ye(),Ne("user")};H&&(H.addEventListener("click",rt),$e.push(()=>{ue("system"),H&&H.removeEventListener("click",rt)}));let se=o.on("assistant:complete",()=>{Bt&&(ye.active||ye.manuallyDeactivated||Bt==="assistant"&&!ye.lastUserMessageWasVoice||setTimeout(()=>{!ye.active&&!ye.manuallyDeactivated&&Ne("auto")},600))});$e.push(se);let M=()=>{Ke(!b,"user")},y=null,F=null;if(g){let i=r.find(u=>u.renderLauncher);if(i!=null&&i.renderLauncher){let u=i.renderLauncher({config:t,defaultRenderer:()=>sn(t,M).element,onToggle:M});u&&(F=u)}F||(y=sn(t,M))}y?n.appendChild(y.element):F&&n.appendChild(F),_t(),ot.render(t.suggestionChips,I,re,void 0,t.suggestionChipsConfig),Zt(),Jt(I.isStreaming()),Ot(!0),At();let be=()=>{var E,O,k,ee,N,T,G,z;let i=(O=(E=t.launcher)==null?void 0:E.sidebarMode)!=null?O:!1,u=i||((ee=(k=t.launcher)==null?void 0:k.fullHeight)!=null?ee:!1);if(!g){_.style.height="",_.style.width="";return}if(!i){let R=(T=(N=t==null?void 0:t.launcher)==null?void 0:N.width)!=null?T:t==null?void 0:t.launcherWidth,Y=R!=null?R:"min(400px, calc(100vw - 24px))";_.style.width=Y,_.style.maxWidth=Y}if(!u){let R=window.innerHeight,Y=64,Le=(z=(G=t.launcher)==null?void 0:G.heightOffset)!=null?z:0,he=Math.max(200,R-Y),ae=Math.min(640,he),Ie=Math.max(200,ae-Le);_.style.height=`${Ie}px`}};be(),window.addEventListener("resize",be),$e.push(()=>window.removeEventListener("resize",be)),Oe=K.scrollTop;let Ee=()=>{let i=K.scrollTop,u=K.scrollHeight,E=K.clientHeight,O=u-i-E,k=Math.abs(i-Oe);if(Oe=i,!Je&&!(k<=yt)){if(!Se&&O<Et){Te=!1,Se=!0;return}Se&&O>Et&&(Te=!0,ze=Date.now()+Lt,Se=!1)}};K.addEventListener("scroll",Ee,{passive:!0}),$e.push(()=>K.removeEventListener("scroll",Ee)),$e.push(()=>{Ae&&cancelAnimationFrame(Ae)});let Ze=()=>{J&&(Ue&&(J.removeEventListener("click",Ue),Ue=null),g?(J.style.display="",Ue=()=>{b=!1,_t()},J.addEventListener("click",Ue)):J.style.display="none")};Ze(),(()=>{let{clearChatButton:i}=Z;i&&i.addEventListener("click",()=>{I.clearMessages();try{localStorage.removeItem(Gt),t.debug&&console.log(`[AgentWidget] Cleared default localStorage key: ${Gt}`)}catch(E){console.error("[AgentWidget] Failed to clear default localStorage:",E)}if(t.clearChatHistoryStorageKey&&t.clearChatHistoryStorageKey!==Gt)try{localStorage.removeItem(t.clearChatHistoryStorageKey),t.debug&&console.log(`[AgentWidget] Cleared custom localStorage key: ${t.clearChatHistoryStorageKey}`)}catch(E){console.error("[AgentWidget] Failed to clear custom localStorage:",E)}let u=new CustomEvent("vanilla-agent:clear-chat",{detail:{timestamp:new Date().toISOString()}});if(window.dispatchEvent(u),a!=null&&a.clear)try{let E=a.clear();E instanceof Promise&&E.catch(O=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",O)})}catch(E){typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",E)}l={},C.syncFromMetadata()})})(),Ve.addEventListener("submit",Qt),re.addEventListener("keydown",en),$e.push(()=>{Ve.removeEventListener("submit",Qt),re.removeEventListener("keydown",en)}),$e.push(()=>{I.cancel()}),y?$e.push(()=>{y==null||y.destroy()}):F&&$e.push(()=>{F==null||F.remove()});let Ce={update(i){var tn,Ut,Yt,as,ls,ds,cs,us,ps,gs,hs,ms,fs,ws,ys,vs,bs,Cs,xs,Ss,As,Ts,Es,Ms,Ws,ks,Ls,Bs,Hs,Ps,Rs,Is,$s,Fs,Ns,Os,Ds,_s,js,qs,Us,zs,Js,Ys,Ks,Xs,Vs,Gs,Zs,Qs,eo,to,no,so,oo,ro,io;let u=t.toolCall;t={...t,...i},wt(),Hn(n,t);let E=yn.getForInstance(t.plugins);if(r.length=0,r.push(...E),g=(Ut=(tn=t.launcher)==null?void 0:tn.enabled)!=null?Ut:!0,U=(as=(Yt=t.launcher)==null?void 0:Yt.autoExpand)!=null?as:!1,v=(ds=(ls=t.features)==null?void 0:ls.showReasoning)!=null?ds:!0,D=(us=(cs=t.features)==null?void 0:cs.showToolCalls)!=null?us:!0,((ps=t.launcher)==null?void 0:ps.enabled)===!1&&y&&(y.destroy(),y=null),((gs=t.launcher)==null?void 0:gs.enabled)===!1&&F&&(F.remove(),F=null),((hs=t.launcher)==null?void 0:hs.enabled)!==!1&&!y&&!F){let L=r.find(we=>we.renderLauncher);if(L!=null&&L.renderLauncher){let we=L.renderLauncher({config:t,defaultRenderer:()=>sn(t,M).element,onToggle:M});we&&(F=we,n.appendChild(F))}F||(y=sn(t,M),n.appendChild(y.element))}y&&y.update(t),mt&&((ms=t.launcher)==null?void 0:ms.title)!==void 0&&(mt.textContent=t.launcher.title),ft&&((fs=t.launcher)==null?void 0:fs.subtitle)!==void 0&&(ft.textContent=t.launcher.subtitle),g!==h?g?Ke(U,"auto"):(b=!0,_t()):U!==$&&Ke(U,"auto"),$=U,h=g,be(),Ze(),JSON.stringify(i.toolCall)!==JSON.stringify(u)&&I&&Dt(Q,I.getMessages(),W);let N=(ws=t.launcher)!=null?ws:{},T=(ys=N.headerIconHidden)!=null?ys:!1,G=N.headerIconName,z=(vs=N.headerIconSize)!=null?vs:"48px";if(fe){let L=j.querySelector(".tvw-border-b-cw-divider"),we=L==null?void 0:L.querySelector(".tvw-flex-col");if(T)fe.style.display="none",L&&we&&!L.contains(we)&&L.insertBefore(we,L.firstChild);else{if(fe.style.display="",fe.style.height=z,fe.style.width=z,L&&we&&(L.contains(fe)?fe.nextSibling!==we&&(fe.remove(),L.insertBefore(fe,we)):L.insertBefore(fe,we)),G){let We=parseFloat(z)||24,xe=ce(G,We*.6,"#ffffff",2);xe?fe.replaceChildren(xe):fe.textContent=(bs=N.agentIconText)!=null?bs:"\u{1F4AC}"}else if(N.iconUrl){let We=fe.querySelector("img");if(We)We.src=N.iconUrl,We.style.height=z,We.style.width=z;else{let xe=document.createElement("img");xe.src=N.iconUrl,xe.alt="",xe.className="tvw-rounded-xl tvw-object-cover",xe.style.height=z,xe.style.width=z,fe.replaceChildren(xe)}}else{let We=fe.querySelector("svg"),xe=fe.querySelector("img");(We||xe)&&fe.replaceChildren(),fe.textContent=(Cs=N.agentIconText)!=null?Cs:"\u{1F4AC}"}let oe=fe.querySelector("img");oe&&(oe.style.height=z,oe.style.width=z)}}if(J){let L=(xs=N.closeButtonSize)!=null?xs:"32px",we=(Ss=N.closeButtonPlacement)!=null?Ss:"inline";J.style.height=L,J.style.width=L;let{closeButtonWrapper:oe}=Z,We=we==="top-right",xe=oe==null?void 0:oe.classList.contains("tvw-absolute");if(oe&&We!==xe)if(oe.remove(),We)oe.className="tvw-absolute tvw-top-4 tvw-right-4 tvw-z-50",j.style.position="relative",j.appendChild(oe);else{let me=(Ts=(As=N.clearChat)==null?void 0:As.placement)!=null?Ts:"inline",et=(Ms=(Es=N.clearChat)==null?void 0:Es.enabled)!=null?Ms:!0;oe.className=et&&me==="inline"?"":"tvw-ml-auto";let tt=j.querySelector(".tvw-border-b-cw-divider");tt&&tt.appendChild(oe)}if(N.closeButtonColor?(J.style.color=N.closeButtonColor,J.classList.remove("tvw-text-cw-muted")):(J.style.color="",J.classList.add("tvw-text-cw-muted")),N.closeButtonBackgroundColor?(J.style.backgroundColor=N.closeButtonBackgroundColor,J.classList.remove("hover:tvw-bg-gray-100")):(J.style.backgroundColor="",J.classList.add("hover:tvw-bg-gray-100")),N.closeButtonBorderWidth||N.closeButtonBorderColor){let me=N.closeButtonBorderWidth||"0px",et=N.closeButtonBorderColor||"transparent";J.style.border=`${me} solid ${et}`,J.classList.remove("tvw-border-none")}else J.style.border="",J.classList.add("tvw-border-none");N.closeButtonBorderRadius?(J.style.borderRadius=N.closeButtonBorderRadius,J.classList.remove("tvw-rounded-full")):(J.style.borderRadius="",J.classList.add("tvw-rounded-full")),N.closeButtonPaddingX?(J.style.paddingLeft=N.closeButtonPaddingX,J.style.paddingRight=N.closeButtonPaddingX):(J.style.paddingLeft="",J.style.paddingRight=""),N.closeButtonPaddingY?(J.style.paddingTop=N.closeButtonPaddingY,J.style.paddingBottom=N.closeButtonPaddingY):(J.style.paddingTop="",J.style.paddingBottom="");let Qe=(Ws=N.closeButtonIconName)!=null?Ws:"x",je=(ks=N.closeButtonIconText)!=null?ks:"\xD7";J.innerHTML="";let gt=ce(Qe,"20px",N.closeButtonColor||"",2);gt?J.appendChild(gt):J.textContent=je;let Ft=(Ls=N.closeButtonTooltipText)!=null?Ls:"Close chat",Me=(Bs=N.closeButtonShowTooltip)!=null?Bs:!0;if(J.setAttribute("aria-label",Ft),oe&&(oe._cleanupTooltip&&(oe._cleanupTooltip(),delete oe._cleanupTooltip),Me&&Ft)){let me=null,et=()=>{if(me||!J)return;me=m("div","tvw-clear-chat-tooltip"),me.textContent=Ft;let Kt=m("div");Kt.className="tvw-clear-chat-tooltip-arrow",me.appendChild(Kt);let Sn=J.getBoundingClientRect();me.style.position="fixed",me.style.left=`${Sn.left+Sn.width/2}px`,me.style.top=`${Sn.top-8}px`,me.style.transform="translate(-50%, -100%)",document.body.appendChild(me)},tt=()=>{me&&me.parentNode&&(me.parentNode.removeChild(me),me=null)};oe.addEventListener("mouseenter",et),oe.addEventListener("mouseleave",tt),J.addEventListener("focus",et),J.addEventListener("blur",tt),oe._cleanupTooltip=()=>{tt(),oe&&(oe.removeEventListener("mouseenter",et),oe.removeEventListener("mouseleave",tt)),J&&(J.removeEventListener("focus",et),J.removeEventListener("blur",tt))}}}let{clearChatButton:R,clearChatButtonWrapper:Y}=Z;if(R){let L=(Hs=N.clearChat)!=null?Hs:{},we=(Ps=L.enabled)!=null?Ps:!0,oe=(Rs=L.placement)!=null?Rs:"inline";if(Y){Y.style.display=we?"":"none";let We=oe==="top-right",xe=Y.classList.contains("tvw-absolute");if(We!==xe&&we){if(Y.remove(),We)Y.className="tvw-absolute tvw-top-4 tvw-z-50",Y.style.right="48px",j.style.position="relative",j.appendChild(Y);else{Y.className="tvw-relative tvw-ml-auto tvw-clear-chat-button-wrapper",Y.style.right="";let je=j.querySelector(".tvw-border-b-cw-divider"),gt=Z.closeButtonWrapper;je&>&>.parentElement===je?je.insertBefore(Y,gt):je&&je.appendChild(Y)}let Qe=Z.closeButtonWrapper;Qe&&!Qe.classList.contains("tvw-absolute")&&(We?Qe.classList.add("tvw-ml-auto"):Qe.classList.remove("tvw-ml-auto"))}}if(we){let We=(Is=L.size)!=null?Is:"32px";R.style.height=We,R.style.width=We;let xe=($s=L.iconName)!=null?$s:"refresh-cw",Qe=(Fs=L.iconColor)!=null?Fs:"";R.innerHTML="";let je=ce(xe,"20px",Qe||"",2);if(je&&R.appendChild(je),Qe?(R.style.color=Qe,R.classList.remove("tvw-text-cw-muted")):(R.style.color="",R.classList.add("tvw-text-cw-muted")),L.backgroundColor?(R.style.backgroundColor=L.backgroundColor,R.classList.remove("hover:tvw-bg-gray-100")):(R.style.backgroundColor="",R.classList.add("hover:tvw-bg-gray-100")),L.borderWidth||L.borderColor){let Me=L.borderWidth||"0px",me=L.borderColor||"transparent";R.style.border=`${Me} solid ${me}`,R.classList.remove("tvw-border-none")}else R.style.border="",R.classList.add("tvw-border-none");L.borderRadius?(R.style.borderRadius=L.borderRadius,R.classList.remove("tvw-rounded-full")):(R.style.borderRadius="",R.classList.add("tvw-rounded-full")),L.paddingX?(R.style.paddingLeft=L.paddingX,R.style.paddingRight=L.paddingX):(R.style.paddingLeft="",R.style.paddingRight=""),L.paddingY?(R.style.paddingTop=L.paddingY,R.style.paddingBottom=L.paddingY):(R.style.paddingTop="",R.style.paddingBottom="");let gt=(Ns=L.tooltipText)!=null?Ns:"Clear chat",Ft=(Os=L.showTooltip)!=null?Os:!0;if(R.setAttribute("aria-label",gt),Y&&(Y._cleanupTooltip&&(Y._cleanupTooltip(),delete Y._cleanupTooltip),Ft&>)){let Me=null,me=()=>{if(Me||!R)return;Me=m("div","tvw-clear-chat-tooltip"),Me.textContent=gt;let tt=m("div");tt.className="tvw-clear-chat-tooltip-arrow",Me.appendChild(tt);let Kt=R.getBoundingClientRect();Me.style.position="fixed",Me.style.left=`${Kt.left+Kt.width/2}px`,Me.style.top=`${Kt.top-8}px`,Me.style.transform="translate(-50%, -100%)",document.body.appendChild(Me)},et=()=>{Me&&Me.parentNode&&(Me.parentNode.removeChild(Me),Me=null)};Y.addEventListener("mouseenter",me),Y.addEventListener("mouseleave",et),R.addEventListener("focus",me),R.addEventListener("blur",et),Y._cleanupTooltip=()=>{et(),Y&&(Y.removeEventListener("mouseenter",me),Y.removeEventListener("mouseleave",et)),R&&(R.removeEventListener("focus",me),R.removeEventListener("blur",et))}}}}let Le=t.actionParsers&&t.actionParsers.length?t.actionParsers:[vn],he=t.actionHandlers&&t.actionHandlers.length?t.actionHandlers:[Vt.message,Vt.messageAndClick];C=bn({parsers:Le,handlers:he,getMetadata:c,updateMetadata:f,emit:o.emit,documentRef:typeof document!="undefined"?document:null}),W=Bo(t,C),I.updateConfig(t),Dt(Q,I.getMessages(),W),ot.render(t.suggestionChips,I,re,void 0,t.suggestionChipsConfig),Zt(),Jt(I.isStreaming());let ae=((Ds=t.voiceRecognition)==null?void 0:Ds.enabled)===!0,Ie=typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined"),ct=ae&&Ie;if(Ve.classList.remove("tvw-gap-1","tvw-gap-3"),Ve.classList.add(ct?"tvw-gap-1":"tvw-gap-3"),ae&&Ie)if(!H||!He){let L=P(t.voiceRecognition,t.sendButton);L&&(H=L.micButton,He=L.micButtonWrapper,Ve.insertBefore(He,qe),H.addEventListener("click",rt),H.disabled=I.isStreaming())}else{let L=(_s=t.voiceRecognition)!=null?_s:{},we=(js=t.sendButton)!=null?js:{},oe=(qs=L.iconName)!=null?qs:"mic",We=(Us=we.size)!=null?Us:"40px",xe=(zs=L.iconSize)!=null?zs:We,Qe=parseFloat(xe)||24;H.style.width=xe,H.style.height=xe,H.style.minWidth=xe,H.style.minHeight=xe;let je=(Ys=(Js=L.iconColor)!=null?Js:we.textColor)!=null?Ys:"currentColor";H.innerHTML="";let gt=ce(oe,Qe,je,2);gt?H.appendChild(gt):H.textContent="\u{1F3A4}";let Ft=(Ks=L.backgroundColor)!=null?Ks:we.backgroundColor;Ft?(H.style.backgroundColor=Ft,H.classList.remove("tvw-bg-cw-primary")):(H.style.backgroundColor="",H.classList.add("tvw-bg-cw-primary")),je?(H.style.color=je,H.classList.remove("tvw-text-white")):!je&&!we.textColor&&(H.style.color="",H.classList.add("tvw-text-white")),L.borderWidth?(H.style.borderWidth=L.borderWidth,H.style.borderStyle="solid"):(H.style.borderWidth="",H.style.borderStyle=""),L.borderColor?H.style.borderColor=L.borderColor:H.style.borderColor="",L.paddingX?(H.style.paddingLeft=L.paddingX,H.style.paddingRight=L.paddingX):(H.style.paddingLeft="",H.style.paddingRight=""),L.paddingY?(H.style.paddingTop=L.paddingY,H.style.paddingBottom=L.paddingY):(H.style.paddingTop="",H.style.paddingBottom="");let Me=He==null?void 0:He.querySelector(".tvw-send-button-tooltip"),me=(Xs=L.tooltipText)!=null?Xs:"Start voice recognition";if(((Vs=L.showTooltip)!=null?Vs:!1)&&me)if(Me)Me.textContent=me,Me.style.display="";else{let tt=document.createElement("div");tt.className="tvw-send-button-tooltip",tt.textContent=me,He==null||He.insertBefore(tt,H)}else Me&&(Me.style.display="none");He.style.display="",H.disabled=I.isStreaming()}else H&&He&&(He.style.display="none",V&&ue());let le=(Gs=t.sendButton)!=null?Gs:{},ut=(Zs=le.useIcon)!=null?Zs:!1,Ht=(Qs=le.iconText)!=null?Qs:"\u2191",Pt=le.iconName,kt=(eo=le.tooltipText)!=null?eo:"Send message",jt=(to=le.showTooltip)!=null?to:!1,Rt=(no=le.size)!=null?no:"40px",qt=le.backgroundColor,pt=le.textColor;if(ut){if(q.style.width=Rt,q.style.height=Rt,q.style.minWidth=Rt,q.style.minHeight=Rt,q.style.fontSize="18px",q.style.lineHeight="1",q.innerHTML="",Pt){let L=parseFloat(Rt)||24,we=pt&&typeof pt=="string"&&pt.trim()?pt.trim():"currentColor",oe=ce(Pt,L,we,2);oe?(q.appendChild(oe),q.style.color=we):(q.textContent=Ht,pt?q.style.color=pt:q.classList.add("tvw-text-white"))}else q.textContent=Ht,pt?q.style.color=pt:q.classList.add("tvw-text-white");q.className="tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer",qt?(q.style.backgroundColor=qt,q.classList.remove("tvw-bg-cw-primary")):q.classList.add("tvw-bg-cw-primary")}else q.textContent=(oo=(so=t.copy)==null?void 0:so.sendButtonLabel)!=null?oo:"Send",q.style.width="",q.style.height="",q.style.minWidth="",q.style.minHeight="",q.style.fontSize="",q.style.lineHeight="",q.className="tvw-rounded-button tvw-bg-cw-accent tvw-px-4 tvw-py-2 tvw-text-sm tvw-font-semibold tvw-text-white disabled:tvw-opacity-50 tvw-cursor-pointer",qt?(q.style.backgroundColor=qt,q.classList.remove("tvw-bg-cw-accent")):q.classList.add("tvw-bg-cw-accent"),pt?q.style.color=pt:q.classList.add("tvw-text-white");le.borderWidth?(q.style.borderWidth=le.borderWidth,q.style.borderStyle="solid"):(q.style.borderWidth="",q.style.borderStyle=""),le.borderColor?q.style.borderColor=le.borderColor:q.style.borderColor="",le.paddingX?(q.style.paddingLeft=le.paddingX,q.style.paddingRight=le.paddingX):(q.style.paddingLeft="",q.style.paddingRight=""),le.paddingY?(q.style.paddingTop=le.paddingY,q.style.paddingBottom=le.paddingY):(q.style.paddingTop="",q.style.paddingBottom="");let It=qe==null?void 0:qe.querySelector(".tvw-send-button-tooltip");if(jt&&kt)if(It)It.textContent=kt,It.style.display="";else{let L=document.createElement("div");L.className="tvw-send-button-tooltip",L.textContent=kt,qe==null||qe.insertBefore(L,q)}else It&&(It.style.display="none");let $t=(ro=t.statusIndicator)!=null?ro:{},pn=(io=$t.visible)!=null?io:!0;if(nt.style.display=pn?"":"none",I){let L=I.getStatus(),we=oe=>{var We,xe,Qe,je;return oe==="idle"?(We=$t.idleText)!=null?We:Xe.idle:oe==="connecting"?(xe=$t.connectingText)!=null?xe:Xe.connecting:oe==="connected"?(Qe=$t.connectedText)!=null?Qe:Xe.connected:oe==="error"?(je=$t.errorText)!=null?je:Xe.error:Xe[oe]};nt.textContent=we(L)}},open(){g&&Ke(!0,"api")},close(){g&&Ke(!1,"api")},toggle(){g&&Ke(!b,"api")},clearChat(){I.clearMessages();try{localStorage.removeItem(Gt),t.debug&&console.log(`[AgentWidget] Cleared default localStorage key: ${Gt}`)}catch(u){console.error("[AgentWidget] Failed to clear default localStorage:",u)}if(t.clearChatHistoryStorageKey&&t.clearChatHistoryStorageKey!==Gt)try{localStorage.removeItem(t.clearChatHistoryStorageKey),t.debug&&console.log(`[AgentWidget] Cleared custom localStorage key: ${t.clearChatHistoryStorageKey}`)}catch(u){console.error("[AgentWidget] Failed to clear custom localStorage:",u)}let i=new CustomEvent("vanilla-agent:clear-chat",{detail:{timestamp:new Date().toISOString()}});if(window.dispatchEvent(i),a!=null&&a.clear)try{let u=a.clear();u instanceof Promise&&u.catch(E=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",E)})}catch(u){typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",u)}l={},C.syncFromMetadata()},setMessage(i){return!re||I.isStreaming()?!1:(!b&&g&&Ke(!0,"system"),re.value=i,re.dispatchEvent(new Event("input",{bubbles:!0})),!0)},submitMessage(i){if(I.isStreaming())return!1;let u=(i==null?void 0:i.trim())||re.value.trim();return u?(!b&&g&&Ke(!0,"system"),re.value="",I.sendMessage(u),!0):!1},startVoiceRecognition(){return V||I.isStreaming()||!Fe()?!1:(!b&&g&&Ke(!0,"system"),ye.manuallyDeactivated=!1,Ye(),Ne("user"),!0)},stopVoiceRecognition(){return V?(ye.manuallyDeactivated=!0,Ye(),ue("user"),!0):!1},injectTestMessage(i){!b&&g&&Ke(!0,"system"),I.injectTestEvent(i)},getMessages(){return I.getMessages()},getStatus(){return I.getStatus()},getPersistentMetadata(){return{...l}},updatePersistentMetadata(i){f(i)},on(i,u){return o.on(i,u)},off(i,u){o.off(i,u)},isOpen(){return g&&b},isVoiceActive(){return ye.active},getState(){return{open:g&&b,launcherEnabled:g,voiceActive:ye.active,streaming:I.isStreaming()}},showCSATFeedback(i){!b&&g&&Ke(!0,"system");let u=Q.querySelector(".tvw-feedback-container");u&&u.remove();let E=Xn({onSubmit:async(O,k)=>{var ee;I.isClientTokenMode()&&await I.submitCSATFeedback(O,k),(ee=i==null?void 0:i.onSubmit)==null||ee.call(i,O,k)},onDismiss:i==null?void 0:i.onDismiss,...i});Q.appendChild(E),E.scrollIntoView({behavior:"smooth",block:"end"})},showNPSFeedback(i){!b&&g&&Ke(!0,"system");let u=Q.querySelector(".tvw-feedback-container");u&&u.remove();let E=Vn({onSubmit:async(O,k)=>{var ee;I.isClientTokenMode()&&await I.submitNPSFeedback(O,k),(ee=i==null?void 0:i.onSubmit)==null||ee.call(i,O,k)},onDismiss:i==null?void 0:i.onDismiss,...i});Q.appendChild(E),E.scrollIntoView({behavior:"smooth",block:"end"})},async submitCSATFeedback(i,u){return I.submitCSATFeedback(i,u)},async submitNPSFeedback(i,u){return I.submitNPSFeedback(i,u)},destroy(){$e.forEach(i=>i()),B.remove(),y==null||y.destroy(),F==null||F.remove(),Ue&&J.removeEventListener("click",Ue)}};if((((is=s==null?void 0:s.debugTools)!=null?is:!1)||!!t.debug)&&typeof window!="undefined"){let i=window.AgentWidgetBrowser,u={controller:Ce,getMessages:Ce.getMessages,getStatus:Ce.getStatus,getMetadata:Ce.getPersistentMetadata,updateMetadata:Ce.updatePersistentMetadata,clearHistory:()=>Ce.clearChat(),setVoiceActive:E=>E?Ce.startVoiceRecognition():Ce.stopVoiceRecognition()};window.AgentWidgetBrowser=u,$e.push(()=>{window.AgentWidgetBrowser===u&&(window.AgentWidgetBrowser=i)})}return Ce};var Qn={},ur=n=>{if(typeof window=="undefined"||typeof document=="undefined")throw new Error("Chat widget can only be mounted in a browser environment");if(typeof n=="string"){let e=document.querySelector(n);if(!e)throw new Error(`Chat widget target "${n}" was not found`);return e}return n},pr=()=>{try{if(typeof Qn!="undefined"&&Qn.url)return new URL("../widget.css",Qn.url).href}catch{}return null},Ho=n=>{let e=pr(),s=()=>{if(!(n instanceof ShadowRoot)||n.querySelector("link[data-vanilla-agent]"))return;let t=document.head.querySelector("link[data-vanilla-agent]");if(!t)return;let r=t.cloneNode(!0);n.insertBefore(r,n.firstChild)};if(n instanceof ShadowRoot)if(e){let t=document.createElement("link");t.rel="stylesheet",t.href=e,t.setAttribute("data-vanilla-agent","true"),n.insertBefore(t,n.firstChild)}else s();else if(!document.head.querySelector("link[data-vanilla-agent]")&&e){let r=document.createElement("link");r.rel="stylesheet",r.href=e,r.setAttribute("data-vanilla-agent","true"),document.head.appendChild(r)}},Po=n=>{var c,f,w,d;let e=ur(n.target),s=document.createElement("div");s.className="vanilla-agent-host";let t=(w=(f=(c=n.config)==null?void 0:c.launcher)==null?void 0:f.enabled)!=null?w:!0;t||(s.style.height="100%"),e.appendChild(s);let r=n.useShadowDom===!0,o,a;if(r){let C=s.attachShadow({mode:"open"});a=C,o=document.createElement("div"),o.id="vanilla-agent-root",t||(o.style.height="100%",o.style.display="flex",o.style.flexDirection="column",o.style.flex="1",o.style.minHeight="0"),C.appendChild(o),Ho(C)}else a=s,o=document.createElement("div"),o.id="vanilla-agent-root",t||(o.style.height="100%",o.style.display="flex",o.style.flexDirection="column",o.style.flex="1",o.style.minHeight="0"),s.appendChild(o),Ho(s);let l=Zn(o,n.config,{debugTools:n.debugTools});(d=n.onReady)==null||d.call(n);let p={...l,host:s,destroy(){l.destroy(),s.remove(),n.windowKey&&typeof window!="undefined"&&delete window[n.windowKey]}};return n.windowKey&&typeof window!="undefined"&&(window[n.windowKey]=p),p};function gr(n){if(!n)return null;let e=n.toString();return e.includes("createJsonStreamParser")||e.includes("partial-json")?"json":e.includes("createRegexJsonParser")||e.includes("regex")?"regex-json":e.includes("createXmlParser")||e.includes("<text>")?"xml":null}function Cn(n){var e,s;return(s=(e=n.parserType)!=null?e:gr(n.streamParser))!=null?s:"plain"}function hr(n,e="esm"){let s={...n};return delete s.postprocessMessage,delete s.initialMessages,e==="esm"?mr(s):e==="script-installer"?yr(s):e==="script-advanced"?br(s):e==="react-component"?fr(s):e==="react-advanced"?wr(s):vr(s)}function mr(n){let e=Cn(n),s=e!=="plain",t=["import 'vanilla-agent/widget.css';","import { initAgentWidget, markdownPostprocessor } from 'vanilla-agent';","","initAgentWidget({"," target: 'body',"," config: {"];return n.apiUrl&&t.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&t.push(` flowId: "${n.flowId}",`),s&&t.push(` parserType: "${e}",`),n.theme&&(t.push(" theme: {"),Object.entries(n.theme).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.launcher&&(t.push(" launcher: {"),Object.entries(n.launcher).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.copy&&(t.push(" copy: {"),Object.entries(n.copy).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.sendButton&&(t.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.voiceRecognition&&(t.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"?t.push(` ${r}: ${o},`):typeof o=="number"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.statusIndicator&&(t.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.features&&(t.push(" features: {"),Object.entries(n.features).forEach(([r,o])=>{t.push(` ${r}: ${o},`)}),t.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(t.push(" suggestionChips: ["),n.suggestionChips.forEach(r=>{t.push(` "${r}",`)}),t.push(" ],")),n.suggestionChipsConfig&&(t.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&t.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&t.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&t.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&t.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),t.push(" },")),n.debug&&t.push(` debug: ${n.debug},`),t.push(" postprocessMessage: ({ text }) => markdownPostprocessor(text)"),t.push(" }"),t.push("});"),t.join(`
|
|
61
|
-
`)}function
|
|
62
|
-
`)}function wr(n){let e=["// ChatWidgetAdvanced.tsx","'use client'; // Required for Next.js - remove for Vite/CRA","","import { useEffect } from 'react';","import 'vanilla-agent/widget.css';","import {"," initAgentWidget,"," createFlexibleJsonStreamParser,"," defaultJsonActionParser,"," defaultActionHandlers,"," markdownPostprocessor","} from 'vanilla-agent';","import type { AgentWidgetInitHandle } from 'vanilla-agent';","","const STORAGE_KEY = 'chat-widget-state';","const PROCESSED_ACTIONS_KEY = 'chat-widget-processed-actions';","","// Types for DOM elements","interface PageElement {"," type: string;"," tagName: string;"," selector: string;"," innerText: string;"," href?: string;","}","","interface DOMContext {"," page_elements: PageElement[];"," page_element_count: number;"," element_types: Record<string, number>;"," page_url: string;"," page_title: string;"," timestamp: string;","}","","// DOM context provider - extracts page elements for AI context","const collectDOMContext = (): DOMContext => {"," const selectors = {",` products: '[data-product-id], .product-card, .product-item, [role="article"]',`,` buttons: 'button, [role="button"], .btn',`," links: 'a[href]',"," inputs: 'input, textarea, select'"," };",""," const elements: PageElement[] = [];"," Object.entries(selectors).forEach(([type, selector]) => {"," document.querySelectorAll(selector).forEach((element) => {"," if (!(element instanceof HTMLElement)) return;"," "," // Exclude elements within the widget"," const widgetHost = element.closest('.vanilla-agent-host');"," if (widgetHost) return;"," "," const text = element.innerText?.trim();"," if (!text) return;",""," const selectorString ="," element.id ? `#${element.id}` :"," element.getAttribute('data-testid') ? `[data-testid=\"${element.getAttribute('data-testid')}\"]` :"," element.getAttribute('data-product-id') ? `[data-product-id=\"${element.getAttribute('data-product-id')}\"]` :"," element.tagName.toLowerCase();",""," const elementData: PageElement = {"," type,"," tagName: element.tagName.toLowerCase(),"," selector: selectorString,"," innerText: text.substring(0, 200)"," };",""," if (type === 'links' && element instanceof HTMLAnchorElement && element.href) {"," elementData.href = element.href;"," }",""," elements.push(elementData);"," });"," });",""," const counts = elements.reduce((acc, el) => {"," acc[el.type] = (acc[el.type] || 0) + 1;"," return acc;"," }, {} as Record<string, number>);",""," return {"," page_elements: elements.slice(0, 50),"," page_element_count: elements.length,"," element_types: counts,"," page_url: window.location.href,"," page_title: document.title,"," timestamp: new Date().toISOString()"," };","};","","export function ChatWidgetAdvanced() {"," useEffect(() => {"," let handle: AgentWidgetInitHandle | null = null;",""," // Load saved state"," const loadSavedMessages = () => {"," const savedState = localStorage.getItem(STORAGE_KEY);"," if (savedState) {"," try {"," const { messages } = JSON.parse(savedState);"," return messages || [];"," } catch (e) {"," console.error('Failed to load saved state:', e);"," }"," }"," return [];"," };",""," handle = initAgentWidget({"," target: 'body',"," config: {"];return n.apiUrl&&e.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&e.push(` flowId: "${n.flowId}",`),n.theme&&(e.push(" theme: {"),Object.entries(n.theme).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.launcher&&(e.push(" launcher: {"),Object.entries(n.launcher).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.copy&&(e.push(" copy: {"),Object.entries(n.copy).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.sendButton&&(e.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.voiceRecognition&&(e.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"?e.push(` ${s}: ${t},`):typeof t=="number"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.statusIndicator&&(e.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.features&&(e.push(" features: {"),Object.entries(n.features).forEach(([s,t])=>{e.push(` ${s}: ${t},`)}),e.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(e.push(" suggestionChips: ["),n.suggestionChips.forEach(s=>{e.push(` "${s}",`)}),e.push(" ],")),n.suggestionChipsConfig&&(e.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&e.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&e.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&e.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&e.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),e.push(" },")),n.debug&&e.push(` debug: ${n.debug},`),e.push(" initialMessages: loadSavedMessages(),"),e.push(" // Flexible JSON stream parser for handling structured actions"),e.push(" streamParser: () => createFlexibleJsonStreamParser((parsed: any) => {"),e.push(" if (!parsed || typeof parsed !== 'object') return null;"),e.push(" // Extract display text based on action type"),e.push(" if (parsed.action === 'nav_then_click') return 'Navigating...';"),e.push(" if (parsed.action === 'message') return parsed.text || '';"),e.push(" if (parsed.action === 'message_and_click') return parsed.text || 'Processing...';"),e.push(" return parsed.text || null;"),e.push(" }),"),e.push(" // Action parsers to detect JSON actions in responses"),e.push(" actionParsers: ["),e.push(" defaultJsonActionParser,"),e.push(" // Custom parser for markdown-wrapped JSON"),e.push(" ({ text, message }: any) => {"),e.push(" const jsonSource = (message as any).rawContent || text || message.content;"),e.push(" if (!jsonSource || typeof jsonSource !== 'string') return null;"),e.push(" // Strip markdown code fences"),e.push(" let cleanJson = jsonSource"),e.push(" .replace(/^```(?:json)?\\s*\\n?/, '')"),e.push(" .replace(/\\n?```\\s*$/, '')"),e.push(" .trim();"),e.push(" if (!cleanJson.startsWith('{') || !cleanJson.endsWith('}')) return null;"),e.push(" try {"),e.push(" const parsed = JSON.parse(cleanJson);"),e.push(" if (parsed.action) return { type: parsed.action, payload: parsed };"),e.push(" } catch (e) { return null; }"),e.push(" return null;"),e.push(" }"),e.push(" ],"),e.push(" // Action handlers for navigation and other actions"),e.push(" actionHandlers: ["),e.push(" defaultActionHandlers.message,"),e.push(" defaultActionHandlers.messageAndClick,"),e.push(" // Handler for nav_then_click action"),e.push(" (action: any, context: any) => {"),e.push(" if (action.type !== 'nav_then_click') return;"),e.push(" const payload = action.payload || action.raw || {};"),e.push(" const url = payload?.page;"),e.push(" const text = payload?.on_load_text || 'Navigating...';"),e.push(" if (!url) return { handled: true, displayText: text };"),e.push(" // Check if already processed"),e.push(" const messageId = context.message?.id;"),e.push(" const processedActions = JSON.parse(localStorage.getItem(PROCESSED_ACTIONS_KEY) || '[]');"),e.push(" const actionKey = `nav_${messageId}_${url}`;"),e.push(" if (processedActions.includes(actionKey)) {"),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" processedActions.push(actionKey);"),e.push(" localStorage.setItem(PROCESSED_ACTIONS_KEY, JSON.stringify(processedActions));"),e.push(" const targetUrl = url.startsWith('http') ? url : new URL(url, window.location.origin).toString();"),e.push(" window.location.href = targetUrl;"),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" ],"),e.push(" postprocessMessage: ({ text }) => markdownPostprocessor(text),"),e.push(" requestMiddleware: ({ payload }) => {"),e.push(" return {"),e.push(" ...payload,"),e.push(" metadata: collectDOMContext()"),e.push(" };"),e.push(" }"),e.push(" }"),e.push(" });"),e.push(""),e.push(" // Save state on message events"),e.push(" const handleMessage = () => {"),e.push(" const session = handle?.getSession?.();"),e.push(" if (session) {"),e.push(" localStorage.setItem(STORAGE_KEY, JSON.stringify({"),e.push(" messages: session.messages,"),e.push(" timestamp: new Date().toISOString()"),e.push(" }));"),e.push(" }"),e.push(" };"),e.push(""),e.push(" // Clear state on clear chat"),e.push(" const handleClearChat = () => {"),e.push(" localStorage.removeItem(STORAGE_KEY);"),e.push(" localStorage.removeItem(PROCESSED_ACTIONS_KEY);"),e.push(" };"),e.push(""),e.push(" window.addEventListener('vanilla-agent:message', handleMessage);"),e.push(" window.addEventListener('vanilla-agent:clear-chat', handleClearChat);"),e.push(""),e.push(" // Cleanup on unmount"),e.push(" return () => {"),e.push(" window.removeEventListener('vanilla-agent:message', handleMessage);"),e.push(" window.removeEventListener('vanilla-agent:clear-chat', handleClearChat);"),e.push(" if (handle) {"),e.push(" handle.destroy();"),e.push(" }"),e.push(" };"),e.push(" }, []);"),e.push(""),e.push(" return null; // Widget injects itself into the DOM"),e.push("}"),e.push(""),e.push("// Usage: Collects DOM context for AI-powered navigation"),e.push("// Features:"),e.push("// - Extracts page elements (products, buttons, links)"),e.push("// - Persists chat history across page loads"),e.push("// - Handles navigation actions (nav_then_click)"),e.push("// - Processes structured JSON actions from AI"),e.push("//"),e.push("// Example usage in Next.js:"),e.push("// import { ChatWidgetAdvanced } from './components/ChatWidgetAdvanced';"),e.push("//"),e.push("// export default function RootLayout({ children }) {"),e.push("// return ("),e.push('// <html lang="en">'),e.push("// <body>"),e.push("// {children}"),e.push("// <ChatWidgetAdvanced />"),e.push("// </body>"),e.push("// </html>"),e.push("// );"),e.push("// }"),e.join(`
|
|
63
|
-
`)}function
|
|
64
|
-
`)}function
|
|
65
|
-
`)}function br(n){let e=["<!-- Load CSS -->",'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/widget.css" />',"","<!-- Chat Widget Configuration -->","<script>"," window.ChatWidgetConfig = {"];return n.apiUrl&&e.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&e.push(` flowId: "${n.flowId}",`),n.theme&&(e.push(" theme: {"),Object.entries(n.theme).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.launcher&&(e.push(" launcher: {"),Object.entries(n.launcher).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.copy&&(e.push(" copy: {"),Object.entries(n.copy).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.sendButton&&(e.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.voiceRecognition&&(e.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"?e.push(` ${s}: ${t},`):typeof t=="number"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.statusIndicator&&(e.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.features&&(e.push(" features: {"),Object.entries(n.features).forEach(([s,t])=>{e.push(` ${s}: ${t},`)}),e.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(e.push(" suggestionChips: ["),n.suggestionChips.forEach(s=>{e.push(` "${s}",`)}),e.push(" ],")),e.push(" };"),e.push("</script>"),e.push(""),e.push("<!-- Load the widget library -->"),e.push('<script src="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/index.global.js"></script>'),e.push(""),e.push("<!-- Chat Widget Script with DOM Helper -->"),e.push("<script>"),e.push(" (function () {"),e.push(" 'use strict';"),e.push(" "),e.push(" const STORAGE_KEY = 'chat-widget-state';"),e.push(" const PROCESSED_ACTIONS_KEY = 'chat-widget-processed-actions';"),e.push(""),e.push(" // DOM context provider - extracts page elements for AI context"),e.push(" const domContextProvider = () => {"),e.push(" const selectors = {"),e.push(` products: '[data-product-id], .product-card, .product-item, [role="article"]',`),e.push(` buttons: 'button, [role="button"], .btn',`),e.push(" links: 'a[href]',"),e.push(" inputs: 'input, textarea, select'"),e.push(" };"),e.push(""),e.push(" const elements = [];"),e.push(" Object.entries(selectors).forEach(([type, selector]) => {"),e.push(" document.querySelectorAll(selector).forEach((element) => {"),e.push(" if (!(element instanceof HTMLElement)) return;"),e.push(" "),e.push(" // Exclude elements within the widget"),e.push(" const widgetHost = element.closest('.vanilla-agent-host');"),e.push(" if (widgetHost) return;"),e.push(" "),e.push(" const text = element.innerText?.trim();"),e.push(" if (!text) return;"),e.push(""),e.push(" const selectorString ="),e.push(" element.id ? `#${element.id}` :"),e.push(" element.getAttribute('data-testid') ? `[data-testid=\"${element.getAttribute('data-testid')}\"]` :"),e.push(" element.getAttribute('data-product-id') ? `[data-product-id=\"${element.getAttribute('data-product-id')}\"]` :"),e.push(" element.tagName.toLowerCase();"),e.push(""),e.push(" const elementData = {"),e.push(" type,"),e.push(" tagName: element.tagName.toLowerCase(),"),e.push(" selector: selectorString,"),e.push(" innerText: text.substring(0, 200)"),e.push(" };"),e.push(""),e.push(" if (type === 'links' && element instanceof HTMLAnchorElement && element.href) {"),e.push(" elementData.href = element.href;"),e.push(" }"),e.push(""),e.push(" elements.push(elementData);"),e.push(" });"),e.push(" });"),e.push(""),e.push(" const counts = elements.reduce((acc, el) => {"),e.push(" acc[el.type] = (acc[el.type] || 0) + 1;"),e.push(" return acc;"),e.push(" }, {});"),e.push(""),e.push(" return {"),e.push(" page_elements: elements.slice(0, 50),"),e.push(" page_element_count: elements.length,"),e.push(" element_types: counts,"),e.push(" page_url: window.location.href,"),e.push(" page_title: document.title,"),e.push(" timestamp: new Date().toISOString()"),e.push(" };"),e.push(" };"),e.push(""),e.push(" const createWidgetConfig = (agentWidget) => ({"),e.push(" ...window.ChatWidgetConfig,"),e.push(" // Flexible JSON stream parser for handling structured actions"),e.push(" streamParser: () => agentWidget.createFlexibleJsonStreamParser((parsed) => {"),e.push(" if (!parsed || typeof parsed !== 'object') return null;"),e.push(" "),e.push(" // Extract display text based on action type"),e.push(" if (parsed.action === 'nav_then_click') {"),e.push(" return 'Navigating...';"),e.push(" } else if (parsed.action === 'message') {"),e.push(" return parsed.text || '';"),e.push(" } else if (parsed.action === 'message_and_click') {"),e.push(" return parsed.text || 'Processing...';"),e.push(" }"),e.push(" "),e.push(" return parsed.text || null;"),e.push(" }),"),e.push(" // Action parsers to detect JSON actions in responses"),e.push(" actionParsers: ["),e.push(" agentWidget.defaultJsonActionParser,"),e.push(" // Custom parser for markdown-wrapped JSON"),e.push(" ({ text, message }) => {"),e.push(" const jsonSource = message.rawContent || text || message.content;"),e.push(" if (!jsonSource || typeof jsonSource !== 'string') return null;"),e.push(" "),e.push(" // Strip markdown code fences"),e.push(" let cleanJson = jsonSource"),e.push(" .replace(/^```(?:json)?\\s*\\n?/, '')"),e.push(" .replace(/\\n?```\\s*$/, '')"),e.push(" .trim();"),e.push(" "),e.push(" if (!cleanJson.startsWith('{') || !cleanJson.endsWith('}')) return null;"),e.push(" "),e.push(" try {"),e.push(" const parsed = JSON.parse(cleanJson);"),e.push(" if (parsed.action) {"),e.push(" return { type: parsed.action, payload: parsed };"),e.push(" }"),e.push(" } catch (e) {"),e.push(" return null;"),e.push(" }"),e.push(" return null;"),e.push(" }"),e.push(" ],"),e.push(" // Action handlers for navigation and other actions"),e.push(" actionHandlers: ["),e.push(" agentWidget.defaultActionHandlers.message,"),e.push(" agentWidget.defaultActionHandlers.messageAndClick,"),e.push(" // Handler for nav_then_click action"),e.push(" (action, context) => {"),e.push(" if (action.type !== 'nav_then_click') return;"),e.push(" "),e.push(" const payload = action.payload || action.raw || {};"),e.push(" const url = payload?.page;"),e.push(" const text = payload?.on_load_text || 'Navigating...';"),e.push(" "),e.push(" if (!url) return { handled: true, displayText: text };"),e.push(" "),e.push(" // Check if already processed"),e.push(" const messageId = context.message?.id;"),e.push(" const processedActions = JSON.parse(localStorage.getItem(PROCESSED_ACTIONS_KEY) || '[]');"),e.push(" const actionKey = `nav_${messageId}_${url}`;"),e.push(" "),e.push(" if (processedActions.includes(actionKey)) {"),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" "),e.push(" processedActions.push(actionKey);"),e.push(" localStorage.setItem(PROCESSED_ACTIONS_KEY, JSON.stringify(processedActions));"),e.push(" "),e.push(" const targetUrl = url.startsWith('http')"),e.push(" ? url"),e.push(" : new URL(url, window.location.origin).toString();"),e.push(" "),e.push(" window.location.href = targetUrl;"),e.push(" "),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" ],"),e.push(" // Send DOM context with each request"),e.push(" requestMiddleware: ({ payload }) => ({"),e.push(" ...payload,"),e.push(" metadata: domContextProvider()"),e.push(" }),"),e.push(" postprocessMessage: ({ text }) => agentWidget.markdownPostprocessor(text)"),e.push(" });"),e.push(""),e.push(" // Initialize widget when DOM is loaded"),e.push(" function init() {"),e.push(" const agentWidget = window.AgentWidget;"),e.push(" if (!agentWidget) {"),e.push(" console.error('AgentWidget not loaded');"),e.push(" return;"),e.push(" }"),e.push(""),e.push(" const widgetConfig = createWidgetConfig(agentWidget);"),e.push(""),e.push(" // Load saved state"),e.push(" const savedState = localStorage.getItem(STORAGE_KEY);"),e.push(" if (savedState) {"),e.push(" try {"),e.push(" const { messages } = JSON.parse(savedState);"),e.push(" widgetConfig.initialMessages = messages || [];"),e.push(" } catch (e) {"),e.push(" console.error('Failed to load saved state:', e);"),e.push(" }"),e.push(" }"),e.push(""),e.push(" // Initialize widget with DOM context"),e.push(" const handle = agentWidget.initAgentWidget({"),e.push(" target: 'body',"),e.push(" useShadowDom: false,"),e.push(" config: widgetConfig"),e.push(" });"),e.push(""),e.push(" // Save state on message events"),e.push(" window.addEventListener('vanilla-agent:message', (event) => {"),e.push(" const session = handle.getSession?.();"),e.push(" if (session) {"),e.push(" localStorage.setItem(STORAGE_KEY, JSON.stringify({"),e.push(" messages: session.messages,"),e.push(" timestamp: new Date().toISOString()"),e.push(" }));"),e.push(" }"),e.push(" });"),e.push(""),e.push(" // Clear state on clear chat"),e.push(" window.addEventListener('vanilla-agent:clear-chat', () => {"),e.push(" localStorage.removeItem(STORAGE_KEY);"),e.push(" localStorage.removeItem(PROCESSED_ACTIONS_KEY);"),e.push(" });"),e.push(" }"),e.push(""),e.push(" // Initialize when DOM is ready"),e.push(" if (document.readyState === 'loading') {"),e.push(" document.addEventListener('DOMContentLoaded', init);"),e.push(" } else {"),e.push(" init();"),e.push(" }"),e.push(" })();"),e.push("</script>"),e.join(`
|
|
66
|
-
`)}var
|
|
60
|
+
`}if(!he){let Ut="max-height: -moz-available !important; max-height: stretch !important;",Jt=a?"":"padding-top: 1.25em !important;";B.style.cssText+=Ut+Jt}};wt(),In(n,t);let Ie=[],ot=Lo(ne),Ue=null,R,dt=!1,Se=!0,Oe=0,te=0,Ae=null,Te=!1,ze=0,Ye=!1,xt=125,Lt=2e3,yt=5,Et=50,St=new Map,ye={active:!1,manuallyDeactivated:!1,lastUserMessageWasVoice:!1},Bt=(ds=(ls=t.voiceRecognition)==null?void 0:ls.autoResume)!=null?ds:!1,ke=a=>{o.emit("voice:state",{active:ye.active,source:a,timestamp:Date.now()})},Je=()=>{f(a=>({...a,voiceState:{active:ye.active,timestamp:Date.now(),manuallyDeactivated:ye.manuallyDeactivated}}))},At=()=>{var O,k;if(((O=t.voiceRecognition)==null?void 0:O.enabled)===!1)return;let a=ts(l.voiceState),p=!!a.active,E=Number((k=a.timestamp)!=null?k:0);ye.manuallyDeactivated=!!a.manuallyDeactivated,p&&Date.now()-E<hr&&setTimeout(()=>{ye.active||(ye.manuallyDeactivated=!1,Ne("restore"))},1e3)},Nt=()=>R?Po(R.getMessages()).filter(a=>!a.__skipPersist):[];function Mt(a){if(!(i!=null&&i.save))return;let E={messages:a?Po(a):R?Nt():[],metadata:l};try{let O=i.save(E);O instanceof Promise&&O.catch(k=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to persist state:",k)})}catch(O){typeof console!="undefined"&&console.error("[AgentWidget] Failed to persist state:",O)}}let Ot=(a=!1)=>{if(!Se)return;let p=Date.now();Te&&p<ze&&!a||(Te&&p>=ze&&(Te=!1),!(!a&&!dt)&&(p-te<xt||(te=p,Ae&&cancelAnimationFrame(Ae),Ae=requestAnimationFrame(()=>{Te||!Se||(Ye=!0,K.scrollTop=K.scrollHeight,Oe=K.scrollTop,requestAnimationFrame(()=>{Ye=!1}),Ae=null)}))))},Wt=null,gn=()=>B.querySelector("#vanilla-agent-scroll-container")||K,hn=(a,p=500)=>{let E=a.scrollTop,O=a.clientHeight,k=a.scrollHeight,ee=k-E;if(E+O>=k-2||Math.abs(ee)<5)return;Wt!==null&&(cancelAnimationFrame(Wt),Wt=null);let T=performance.now(),G=P=>1-Math.pow(1-P,3),z=P=>{let J=a.scrollHeight;J!==k&&(k=J,ee=k-E);let Le=P-T,he=Math.min(Le/p,1),ae=G(he),Re=E+ee*ae;a.scrollTop=Re,he<1?Wt=requestAnimationFrame(z):(a.scrollTop=a.scrollHeight,Wt=null)};Wt=requestAnimationFrame(z)},mn=a=>{let p=new Map;a.forEach(E=>{let O=St.get(E.id);p.set(E.id,{streaming:E.streaming,role:E.role}),!O&&E.role==="assistant"&&o.emit("assistant:message",E),E.role==="assistant"&&(O!=null&&O.streaming)&&E.streaming===!1&&o.emit("assistant:complete",E)}),St.clear(),p.forEach((E,O)=>{St.set(O,E)})},Dt=(a,p,E)=>{a.innerHTML="";let O=document.createDocumentFragment();p.forEach(T=>{var Le,he;let G=null,z=r.find(ae=>!!(T.variant==="reasoning"&&ae.renderReasoning||T.variant==="tool"&&ae.renderToolCall||!T.variant&&ae.renderMessage)),P=(Le=t.layout)==null?void 0:Le.messages;if(z)if(T.variant==="reasoning"&&T.reasoning&&z.renderReasoning){if(!v)return;G=z.renderReasoning({message:T,defaultRenderer:()=>Dn(T),config:t})}else if(T.variant==="tool"&&T.toolCall&&z.renderToolCall){if(!D)return;G=z.renderToolCall({message:T,defaultRenderer:()=>_n(T,t),config:t})}else z.renderMessage&&(G=z.renderMessage({message:T,defaultRenderer:()=>{let ae=un(T,E,P,t.messageActions,x);return T.role!=="user"&&qn(ae,T,t,R),ae},config:t}));if(!G&&T.role==="assistant"&&!T.variant&&t.enableComponentStreaming!==!1&&Gn(T)){let Re=Zn(T);if(Re){let ct=Vn(Re,{config:t,message:T,transform:E});if(ct){let le=document.createElement("div");if(le.className=["vanilla-message-bubble","tvw-max-w-[85%]","tvw-rounded-2xl","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-p-4"].join(" "),le.setAttribute("data-message-id",T.id),T.content&&T.content.trim()){let ut=document.createElement("div");ut.className="tvw-mb-3 tvw-text-sm tvw-leading-relaxed",ut.innerHTML=E({text:T.content,message:T,streaming:!!T.streaming,raw:T.rawContent}),le.appendChild(ut)}le.appendChild(ct),G=le}}}if(!G)if(T.variant==="reasoning"&&T.reasoning){if(!v)return;G=Dn(T)}else if(T.variant==="tool"&&T.toolCall){if(!D)return;G=_n(T,t)}else{let ae=(he=t.layout)==null?void 0:he.messages;ae!=null&&ae.renderUserMessage&&T.role==="user"?G=ae.renderUserMessage({message:T,config:t,streaming:!!T.streaming}):ae!=null&&ae.renderAssistantMessage&&T.role==="assistant"?G=ae.renderAssistantMessage({message:T,config:t,streaming:!!T.streaming}):G=un(T,E,ae,t.messageActions,x),T.role!=="user"&&G&&qn(G,T,t,R)}let J=document.createElement("div");J.className="tvw-flex",T.role==="user"&&J.classList.add("tvw-justify-end"),J.appendChild(G),O.appendChild(J)});let k=p.some(T=>T.role==="assistant"&&T.streaming),ee=p[p.length-1],N=(ee==null?void 0:ee.role)==="assistant"&&!ee.streaming;if(dt&&p.some(T=>T.role==="user")&&!k&&!N){let T=Cn(),G=document.createElement("div");G.className=["tvw-max-w-[85%]","tvw-rounded-2xl","tvw-text-sm","tvw-leading-relaxed","tvw-shadow-sm","tvw-bg-cw-surface","tvw-border","tvw-border-cw-message-border","tvw-text-cw-primary","tvw-px-5","tvw-py-3"].join(" "),G.appendChild(T);let z=document.createElement("div");z.className="tvw-flex",z.appendChild(G),O.appendChild(z)}a.appendChild(O),requestAnimationFrame(()=>{requestAnimationFrame(()=>{let T=gn();hn(T)})})},jt=()=>{g&&(b?(B.classList.remove("tvw-pointer-events-none","tvw-opacity-0"),j.classList.remove("tvw-scale-95","tvw-opacity-0"),j.classList.add("tvw-scale-100","tvw-opacity-100"),y?y.element.style.display="none":F&&(F.style.display="none")):(B.classList.add("tvw-pointer-events-none","tvw-opacity-0"),j.classList.remove("tvw-scale-100","tvw-opacity-100"),j.classList.add("tvw-scale-95","tvw-opacity-0"),y?y.element.style.display="":F&&(F.style.display="")))},Ke=(a,p="user")=>{if(!g||b===a)return;let E=b;b=a,jt(),b&&(be(),Ot(!0));let O={open:b,source:p,timestamp:Date.now()};b&&!E?o.emit("widget:opened",O):!b&&E&&o.emit("widget:closed",O),o.emit("widget:state",{open:b,launcherEnabled:g,voiceActive:ye.active,streaming:R.isStreaming()})},Yt=a=>{q.disabled=a,H&&(H.disabled=a),ot.buttons.forEach(p=>{p.disabled=a})},nn=()=>{var k,ee,N,T,G,z,P,J,Le,he,ae,Re,ct,le;bt.textContent=(ee=(k=t.copy)==null?void 0:k.welcomeTitle)!=null?ee:"Hello \u{1F44B}",Ct.textContent=(T=(N=t.copy)==null?void 0:N.welcomeSubtitle)!=null?T:"Ask anything about your account or products.",re.placeholder=(z=(G=t.copy)==null?void 0:G.inputPlaceholder)!=null?z:"How can I help...",((J=(P=t.sendButton)==null?void 0:P.useIcon)!=null?J:!1)||(q.textContent=(he=(Le=t.copy)==null?void 0:Le.sendButtonLabel)!=null?he:"Send");let p=(Re=(ae=t.theme)==null?void 0:ae.inputFontFamily)!=null?Re:"sans-serif",E=(le=(ct=t.theme)==null?void 0:ct.inputFontWeight)!=null?le:"400",O=ut=>{switch(ut){case"serif":return'Georgia, "Times New Roman", Times, serif';case"mono":return'"Courier New", Courier, "Lucida Console", Monaco, monospace';case"sans-serif":default:return'-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif'}};re.style.fontFamily=O(p),re.style.fontWeight=E};R=new an(t,{onMessagesChanged(a){Dt(Q,a,W),R&&(a.some(O=>O.role==="user")?ot.render([],R,re,a):ot.render(t.suggestionChips,R,re,a,t.suggestionChipsConfig)),Ot(!dt),mn(a);let p=[...a].reverse().find(E=>E.role==="user");ye.lastUserMessageWasVoice=!!(p!=null&&p.viaVoice),Mt(a)},onStatusChanged(a){var O;let p=(O=t.statusIndicator)!=null?O:{},E=k=>{var ee,N,T,G;return k==="idle"?(ee=p.idleText)!=null?ee:Xe.idle:k==="connecting"?(N=p.connectingText)!=null?N:Xe.connecting:k==="connected"?(T=p.connectedText)!=null?T:Xe.connected:k==="error"?(G=p.errorText)!=null?G:Xe.error:Xe[k]};nt.textContent=E(a)},onStreamingChanged(a){dt=a,Yt(a),R&&Dt(Q,R.getMessages(),W),a||Ot(!0)}}),c&&c.then(a=>{var p;a&&(a.metadata&&(l=ts(a.metadata),C.syncFromMetadata()),(p=a.messages)!=null&&p.length&&R.hydrateMessages(a.messages))}).catch(a=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to hydrate stored state:",a)});let sn=a=>{a.preventDefault();let p=re.value.trim();p&&(re.value="",R.sendMessage(p))},on=a=>{a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),q.click())},A=null,V=!1,ie=null,ve=null,Fe=()=>typeof window=="undefined"?null:window.webkitSpeechRecognition||window.SpeechRecognition||null,Ne=(a="user")=>{var ee,N,T,G;if(V||R.isStreaming())return;let p=Fe();if(!p)return;A=new p;let O=(N=((ee=t.voiceRecognition)!=null?ee:{}).pauseDuration)!=null?N:2e3;A.continuous=!0,A.interimResults=!0,A.lang="en-US";let k=re.value;A.onresult=z=>{let P="",J="";for(let he=0;he<z.results.length;he++){let ae=z.results[he],Re=ae[0].transcript;ae.isFinal?P+=Re+" ":J=Re}let Le=k+P+J;re.value=Le,ie&&clearTimeout(ie),(P||J)&&(ie=window.setTimeout(()=>{let he=re.value.trim();he&&A&&V&&(ue(),re.value="",R.sendMessage(he,{viaVoice:!0}))},O))},A.onerror=z=>{z.error!=="no-speech"&&ue()},A.onend=()=>{if(V){let z=re.value.trim();z&&z!==k.trim()&&(re.value="",R.sendMessage(z,{viaVoice:!0})),ue()}};try{if(A.start(),V=!0,ye.active=!0,a!=="system"&&(ye.manuallyDeactivated=!1),ke(a),Je(),H){ve={backgroundColor:H.style.backgroundColor,color:H.style.color,borderColor:H.style.borderColor};let z=(T=t.voiceRecognition)!=null?T:{},P=(G=z.recordingBackgroundColor)!=null?G:"#ef4444",J=z.recordingIconColor,Le=z.recordingBorderColor;if(H.classList.add("tvw-voice-recording"),H.style.backgroundColor=P,J){H.style.color=J;let he=H.querySelector("svg");he&&he.setAttribute("stroke",J)}Le&&(H.style.borderColor=Le),H.setAttribute("aria-label","Stop voice recognition")}}catch{ue("system")}},ue=(a="user")=>{if(V){if(V=!1,ie&&(clearTimeout(ie),ie=null),A){try{A.stop()}catch{}A=null}if(ye.active=!1,ke(a),Je(),H){if(H.classList.remove("tvw-voice-recording"),ve){H.style.backgroundColor=ve.backgroundColor,H.style.color=ve.color,H.style.borderColor=ve.borderColor;let p=H.querySelector("svg");p&&p.setAttribute("stroke",ve.color||"currentColor"),ve=null}H.setAttribute("aria-label","Start voice recognition")}}},$=(a,p)=>{var Re,ct,le,ut,Ht,$t,kt;if(!(typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined")))return null;let O=m("div","tvw-send-button-wrapper"),k=m("button","tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer");k.type="button",k.setAttribute("aria-label","Start voice recognition");let ee=(Re=a==null?void 0:a.iconName)!=null?Re:"mic",N=(ct=p==null?void 0:p.size)!=null?ct:"40px",T=(le=a==null?void 0:a.iconSize)!=null?le:N,G=parseFloat(T)||24,z=(ut=a==null?void 0:a.backgroundColor)!=null?ut:p==null?void 0:p.backgroundColor,P=(Ht=a==null?void 0:a.iconColor)!=null?Ht:p==null?void 0:p.textColor;k.style.width=T,k.style.height=T,k.style.minWidth=T,k.style.minHeight=T,k.style.fontSize="18px",k.style.lineHeight="1";let J=P||"currentColor",Le=ce(ee,G,J,1.5);Le?(k.appendChild(Le),k.style.color=J):(k.textContent="\u{1F3A4}",k.style.color=J),z?k.style.backgroundColor=z:k.classList.add("tvw-bg-cw-primary"),P?k.style.color=P:!P&&!(p!=null&&p.textColor)&&k.classList.add("tvw-text-white"),a!=null&&a.borderWidth&&(k.style.borderWidth=a.borderWidth,k.style.borderStyle="solid"),a!=null&&a.borderColor&&(k.style.borderColor=a.borderColor),a!=null&&a.paddingX&&(k.style.paddingLeft=a.paddingX,k.style.paddingRight=a.paddingX),a!=null&&a.paddingY&&(k.style.paddingTop=a.paddingY,k.style.paddingBottom=a.paddingY),O.appendChild(k);let he=($t=a==null?void 0:a.tooltipText)!=null?$t:"Start voice recognition";if(((kt=a==null?void 0:a.showTooltip)!=null?kt:!1)&&he){let _t=m("div","tvw-send-button-tooltip");_t.textContent=he,O.appendChild(_t)}return{micButton:k,micButtonWrapper:O}},rt=()=>{if(V){let a=re.value.trim();ye.manuallyDeactivated=!0,Je(),ue("user"),a&&(re.value="",R.sendMessage(a))}else ye.manuallyDeactivated=!1,Je(),Ne("user")};H&&(H.addEventListener("click",rt),Ie.push(()=>{ue("system"),H&&H.removeEventListener("click",rt)}));let se=o.on("assistant:complete",()=>{Bt&&(ye.active||ye.manuallyDeactivated||Bt==="assistant"&&!ye.lastUserMessageWasVoice||setTimeout(()=>{!ye.active&&!ye.manuallyDeactivated&&Ne("auto")},600))});Ie.push(se);let M=()=>{Ke(!b,"user")},y=null,F=null;if(g){let a=r.find(p=>p.renderLauncher);if(a!=null&&a.renderLauncher){let p=a.renderLauncher({config:t,defaultRenderer:()=>ln(t,M).element,onToggle:M});p&&(F=p)}F||(y=ln(t,M))}y?n.appendChild(y.element):F&&n.appendChild(F),jt(),ot.render(t.suggestionChips,R,re,void 0,t.suggestionChipsConfig),nn(),Yt(R.isStreaming()),Ot(!0),At();let be=()=>{var E,O,k,ee,N,T,G,z;let a=(O=(E=t.launcher)==null?void 0:E.sidebarMode)!=null?O:!1,p=a||((ee=(k=t.launcher)==null?void 0:k.fullHeight)!=null?ee:!1);if(!g){j.style.height="",j.style.width="";return}if(!a){let P=(T=(N=t==null?void 0:t.launcher)==null?void 0:N.width)!=null?T:t==null?void 0:t.launcherWidth,J=P!=null?P:"min(400px, calc(100vw - 24px))";j.style.width=J,j.style.maxWidth=J}if(!p){let P=window.innerHeight,J=64,Le=(z=(G=t.launcher)==null?void 0:G.heightOffset)!=null?z:0,he=Math.max(200,P-J),ae=Math.min(640,he),Re=Math.max(200,ae-Le);j.style.height=`${Re}px`}};be(),window.addEventListener("resize",be),Ie.push(()=>window.removeEventListener("resize",be)),Oe=K.scrollTop;let Ee=()=>{let a=K.scrollTop,p=K.scrollHeight,E=K.clientHeight,O=p-a-E,k=Math.abs(a-Oe);if(Oe=a,!Ye&&!(k<=yt)){if(!Se&&O<Et){Te=!1,Se=!0;return}Se&&O>Et&&(Te=!0,ze=Date.now()+Lt,Se=!1)}};K.addEventListener("scroll",Ee,{passive:!0}),Ie.push(()=>K.removeEventListener("scroll",Ee)),Ie.push(()=>{Ae&&cancelAnimationFrame(Ae)});let Ze=()=>{Y&&(Ue&&(Y.removeEventListener("click",Ue),Ue=null),g?(Y.style.display="",Ue=()=>{b=!1,jt()},Y.addEventListener("click",Ue)):Y.style.display="none")};Ze(),(()=>{let{clearChatButton:a}=Z;a&&a.addEventListener("click",()=>{R.clearMessages();try{localStorage.removeItem(Gt),t.debug&&console.log(`[AgentWidget] Cleared default localStorage key: ${Gt}`)}catch(E){console.error("[AgentWidget] Failed to clear default localStorage:",E)}if(t.clearChatHistoryStorageKey&&t.clearChatHistoryStorageKey!==Gt)try{localStorage.removeItem(t.clearChatHistoryStorageKey),t.debug&&console.log(`[AgentWidget] Cleared custom localStorage key: ${t.clearChatHistoryStorageKey}`)}catch(E){console.error("[AgentWidget] Failed to clear custom localStorage:",E)}let p=new CustomEvent("vanilla-agent:clear-chat",{detail:{timestamp:new Date().toISOString()}});if(window.dispatchEvent(p),i!=null&&i.clear)try{let E=i.clear();E instanceof Promise&&E.catch(O=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",O)})}catch(E){typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",E)}l={},C.syncFromMetadata()})})(),Ve.addEventListener("submit",sn),re.addEventListener("keydown",on),Ie.push(()=>{Ve.removeEventListener("submit",sn),re.removeEventListener("keydown",on)}),Ie.push(()=>{R.cancel()}),y?Ie.push(()=>{y==null||y.destroy()}):F&&Ie.push(()=>{F==null||F.remove()});let Ce={update(a){var rn,Ut,Jt,us,ps,gs,hs,ms,fs,ws,ys,vs,bs,Cs,xs,Ss,As,Ts,Es,Ms,Ws,ks,Ls,Bs,Hs,$s,Ps,Rs,Is,Fs,Ns,Os,Ds,js,_s,qs,Us,zs,Ys,Js,Ks,Xs,Vs,Gs,Zs,Qs,eo,to,no,so,oo,ro,io,ao,lo,co,uo;let p=t.toolCall;t={...t,...a},wt(),In(n,t);let E=xn.getForInstance(t.plugins);if(r.length=0,r.push(...E),g=(Ut=(rn=t.launcher)==null?void 0:rn.enabled)!=null?Ut:!0,U=(us=(Jt=t.launcher)==null?void 0:Jt.autoExpand)!=null?us:!1,v=(gs=(ps=t.features)==null?void 0:ps.showReasoning)!=null?gs:!0,D=(ms=(hs=t.features)==null?void 0:hs.showToolCalls)!=null?ms:!0,((fs=t.launcher)==null?void 0:fs.enabled)===!1&&y&&(y.destroy(),y=null),((ws=t.launcher)==null?void 0:ws.enabled)===!1&&F&&(F.remove(),F=null),((ys=t.launcher)==null?void 0:ys.enabled)!==!1&&!y&&!F){let L=r.find(we=>we.renderLauncher);if(L!=null&&L.renderLauncher){let we=L.renderLauncher({config:t,defaultRenderer:()=>ln(t,M).element,onToggle:M});we&&(F=we,n.appendChild(F))}F||(y=ln(t,M),n.appendChild(y.element))}y&&y.update(t),mt&&((vs=t.launcher)==null?void 0:vs.title)!==void 0&&(mt.textContent=t.launcher.title),ft&&((bs=t.launcher)==null?void 0:bs.subtitle)!==void 0&&(ft.textContent=t.launcher.subtitle),g!==h?g?Ke(U,"auto"):(b=!0,jt()):U!==I&&Ke(U,"auto"),I=U,h=g,be(),Ze(),JSON.stringify(a.toolCall)!==JSON.stringify(p)&&R&&Dt(Q,R.getMessages(),W);let N=(Cs=t.launcher)!=null?Cs:{},T=(xs=N.headerIconHidden)!=null?xs:!1,G=N.headerIconName,z=(Ss=N.headerIconSize)!=null?Ss:"48px";if(fe){let L=_.querySelector(".tvw-border-b-cw-divider"),we=L==null?void 0:L.querySelector(".tvw-flex-col");if(T)fe.style.display="none",L&&we&&!L.contains(we)&&L.insertBefore(we,L.firstChild);else{if(fe.style.display="",fe.style.height=z,fe.style.width=z,L&&we&&(L.contains(fe)?fe.nextSibling!==we&&(fe.remove(),L.insertBefore(fe,we)):L.insertBefore(fe,we)),G){let We=parseFloat(z)||24,xe=ce(G,We*.6,"#ffffff",2);xe?fe.replaceChildren(xe):fe.textContent=(As=N.agentIconText)!=null?As:"\u{1F4AC}"}else if(N.iconUrl){let We=fe.querySelector("img");if(We)We.src=N.iconUrl,We.style.height=z,We.style.width=z;else{let xe=document.createElement("img");xe.src=N.iconUrl,xe.alt="",xe.className="tvw-rounded-xl tvw-object-cover",xe.style.height=z,xe.style.width=z,fe.replaceChildren(xe)}}else{let We=fe.querySelector("svg"),xe=fe.querySelector("img");(We||xe)&&fe.replaceChildren(),fe.textContent=(Ts=N.agentIconText)!=null?Ts:"\u{1F4AC}"}let oe=fe.querySelector("img");oe&&(oe.style.height=z,oe.style.width=z)}}if(Y){let L=(Es=N.closeButtonSize)!=null?Es:"32px",we=(Ms=N.closeButtonPlacement)!=null?Ms:"inline";Y.style.height=L,Y.style.width=L;let{closeButtonWrapper:oe}=Z,We=we==="top-right",xe=oe==null?void 0:oe.classList.contains("tvw-absolute");if(oe&&We!==xe)if(oe.remove(),We)oe.className="tvw-absolute tvw-top-4 tvw-right-4 tvw-z-50",_.style.position="relative",_.appendChild(oe);else{let me=(ks=(Ws=N.clearChat)==null?void 0:Ws.placement)!=null?ks:"inline",et=(Bs=(Ls=N.clearChat)==null?void 0:Ls.enabled)!=null?Bs:!0;oe.className=et&&me==="inline"?"":"tvw-ml-auto";let tt=_.querySelector(".tvw-border-b-cw-divider");tt&&tt.appendChild(oe)}if(N.closeButtonColor?(Y.style.color=N.closeButtonColor,Y.classList.remove("tvw-text-cw-muted")):(Y.style.color="",Y.classList.add("tvw-text-cw-muted")),N.closeButtonBackgroundColor?(Y.style.backgroundColor=N.closeButtonBackgroundColor,Y.classList.remove("hover:tvw-bg-gray-100")):(Y.style.backgroundColor="",Y.classList.add("hover:tvw-bg-gray-100")),N.closeButtonBorderWidth||N.closeButtonBorderColor){let me=N.closeButtonBorderWidth||"0px",et=N.closeButtonBorderColor||"transparent";Y.style.border=`${me} solid ${et}`,Y.classList.remove("tvw-border-none")}else Y.style.border="",Y.classList.add("tvw-border-none");N.closeButtonBorderRadius?(Y.style.borderRadius=N.closeButtonBorderRadius,Y.classList.remove("tvw-rounded-full")):(Y.style.borderRadius="",Y.classList.add("tvw-rounded-full")),N.closeButtonPaddingX?(Y.style.paddingLeft=N.closeButtonPaddingX,Y.style.paddingRight=N.closeButtonPaddingX):(Y.style.paddingLeft="",Y.style.paddingRight=""),N.closeButtonPaddingY?(Y.style.paddingTop=N.closeButtonPaddingY,Y.style.paddingBottom=N.closeButtonPaddingY):(Y.style.paddingTop="",Y.style.paddingBottom="");let Qe=(Hs=N.closeButtonIconName)!=null?Hs:"x",_e=($s=N.closeButtonIconText)!=null?$s:"\xD7";Y.innerHTML="";let gt=ce(Qe,"20px",N.closeButtonColor||"",2);gt?Y.appendChild(gt):Y.textContent=_e;let Ft=(Ps=N.closeButtonTooltipText)!=null?Ps:"Close chat",Me=(Rs=N.closeButtonShowTooltip)!=null?Rs:!0;if(Y.setAttribute("aria-label",Ft),oe&&(oe._cleanupTooltip&&(oe._cleanupTooltip(),delete oe._cleanupTooltip),Me&&Ft)){let me=null,et=()=>{if(me||!Y)return;me=m("div","tvw-clear-chat-tooltip"),me.textContent=Ft;let Kt=m("div");Kt.className="tvw-clear-chat-tooltip-arrow",me.appendChild(Kt);let Mn=Y.getBoundingClientRect();me.style.position="fixed",me.style.left=`${Mn.left+Mn.width/2}px`,me.style.top=`${Mn.top-8}px`,me.style.transform="translate(-50%, -100%)",document.body.appendChild(me)},tt=()=>{me&&me.parentNode&&(me.parentNode.removeChild(me),me=null)};oe.addEventListener("mouseenter",et),oe.addEventListener("mouseleave",tt),Y.addEventListener("focus",et),Y.addEventListener("blur",tt),oe._cleanupTooltip=()=>{tt(),oe&&(oe.removeEventListener("mouseenter",et),oe.removeEventListener("mouseleave",tt)),Y&&(Y.removeEventListener("focus",et),Y.removeEventListener("blur",tt))}}}let{clearChatButton:P,clearChatButtonWrapper:J}=Z;if(P){let L=(Is=N.clearChat)!=null?Is:{},we=(Fs=L.enabled)!=null?Fs:!0,oe=(Ns=L.placement)!=null?Ns:"inline";if(J){J.style.display=we?"":"none";let We=oe==="top-right",xe=J.classList.contains("tvw-absolute");if(We!==xe&&we){if(J.remove(),We)J.className="tvw-absolute tvw-top-4 tvw-z-50",J.style.right="48px",_.style.position="relative",_.appendChild(J);else{J.className="tvw-relative tvw-ml-auto tvw-clear-chat-button-wrapper",J.style.right="";let _e=_.querySelector(".tvw-border-b-cw-divider"),gt=Z.closeButtonWrapper;_e&>&>.parentElement===_e?_e.insertBefore(J,gt):_e&&_e.appendChild(J)}let Qe=Z.closeButtonWrapper;Qe&&!Qe.classList.contains("tvw-absolute")&&(We?Qe.classList.add("tvw-ml-auto"):Qe.classList.remove("tvw-ml-auto"))}}if(we){let We=(Os=L.size)!=null?Os:"32px";P.style.height=We,P.style.width=We;let xe=(Ds=L.iconName)!=null?Ds:"refresh-cw",Qe=(js=L.iconColor)!=null?js:"";P.innerHTML="";let _e=ce(xe,"20px",Qe||"",2);if(_e&&P.appendChild(_e),Qe?(P.style.color=Qe,P.classList.remove("tvw-text-cw-muted")):(P.style.color="",P.classList.add("tvw-text-cw-muted")),L.backgroundColor?(P.style.backgroundColor=L.backgroundColor,P.classList.remove("hover:tvw-bg-gray-100")):(P.style.backgroundColor="",P.classList.add("hover:tvw-bg-gray-100")),L.borderWidth||L.borderColor){let Me=L.borderWidth||"0px",me=L.borderColor||"transparent";P.style.border=`${Me} solid ${me}`,P.classList.remove("tvw-border-none")}else P.style.border="",P.classList.add("tvw-border-none");L.borderRadius?(P.style.borderRadius=L.borderRadius,P.classList.remove("tvw-rounded-full")):(P.style.borderRadius="",P.classList.add("tvw-rounded-full")),L.paddingX?(P.style.paddingLeft=L.paddingX,P.style.paddingRight=L.paddingX):(P.style.paddingLeft="",P.style.paddingRight=""),L.paddingY?(P.style.paddingTop=L.paddingY,P.style.paddingBottom=L.paddingY):(P.style.paddingTop="",P.style.paddingBottom="");let gt=(_s=L.tooltipText)!=null?_s:"Clear chat",Ft=(qs=L.showTooltip)!=null?qs:!0;if(P.setAttribute("aria-label",gt),J&&(J._cleanupTooltip&&(J._cleanupTooltip(),delete J._cleanupTooltip),Ft&>)){let Me=null,me=()=>{if(Me||!P)return;Me=m("div","tvw-clear-chat-tooltip"),Me.textContent=gt;let tt=m("div");tt.className="tvw-clear-chat-tooltip-arrow",Me.appendChild(tt);let Kt=P.getBoundingClientRect();Me.style.position="fixed",Me.style.left=`${Kt.left+Kt.width/2}px`,Me.style.top=`${Kt.top-8}px`,Me.style.transform="translate(-50%, -100%)",document.body.appendChild(Me)},et=()=>{Me&&Me.parentNode&&(Me.parentNode.removeChild(Me),Me=null)};J.addEventListener("mouseenter",me),J.addEventListener("mouseleave",et),P.addEventListener("focus",me),P.addEventListener("blur",et),J._cleanupTooltip=()=>{et(),J&&(J.removeEventListener("mouseenter",me),J.removeEventListener("mouseleave",et)),P&&(P.removeEventListener("focus",me),P.removeEventListener("blur",et))}}}}let Le=t.actionParsers&&t.actionParsers.length?t.actionParsers:[Sn],he=t.actionHandlers&&t.actionHandlers.length?t.actionHandlers:[Vt.message,Vt.messageAndClick];C=An({parsers:Le,handlers:he,getMetadata:d,updateMetadata:f,emit:o.emit,documentRef:typeof document!="undefined"?document:null}),W=Ro(t,C),R.updateConfig(t),Dt(Q,R.getMessages(),W),ot.render(t.suggestionChips,R,re,void 0,t.suggestionChipsConfig),nn(),Yt(R.isStreaming());let ae=((Us=t.voiceRecognition)==null?void 0:Us.enabled)===!0,Re=typeof window!="undefined"&&(typeof window.webkitSpeechRecognition!="undefined"||typeof window.SpeechRecognition!="undefined"),ct=ae&ℜif(Ve.classList.remove("tvw-gap-1","tvw-gap-3"),Ve.classList.add(ct?"tvw-gap-1":"tvw-gap-3"),ae&&Re)if(!H||!He){let L=$(t.voiceRecognition,t.sendButton);L&&(H=L.micButton,He=L.micButtonWrapper,Ve.insertBefore(He,qe),H.addEventListener("click",rt),H.disabled=R.isStreaming())}else{let L=(zs=t.voiceRecognition)!=null?zs:{},we=(Ys=t.sendButton)!=null?Ys:{},oe=(Js=L.iconName)!=null?Js:"mic",We=(Ks=we.size)!=null?Ks:"40px",xe=(Xs=L.iconSize)!=null?Xs:We,Qe=parseFloat(xe)||24;H.style.width=xe,H.style.height=xe,H.style.minWidth=xe,H.style.minHeight=xe;let _e=(Gs=(Vs=L.iconColor)!=null?Vs:we.textColor)!=null?Gs:"currentColor";H.innerHTML="";let gt=ce(oe,Qe,_e,2);gt?H.appendChild(gt):H.textContent="\u{1F3A4}";let Ft=(Zs=L.backgroundColor)!=null?Zs:we.backgroundColor;Ft?(H.style.backgroundColor=Ft,H.classList.remove("tvw-bg-cw-primary")):(H.style.backgroundColor="",H.classList.add("tvw-bg-cw-primary")),_e?(H.style.color=_e,H.classList.remove("tvw-text-white")):!_e&&!we.textColor&&(H.style.color="",H.classList.add("tvw-text-white")),L.borderWidth?(H.style.borderWidth=L.borderWidth,H.style.borderStyle="solid"):(H.style.borderWidth="",H.style.borderStyle=""),L.borderColor?H.style.borderColor=L.borderColor:H.style.borderColor="",L.paddingX?(H.style.paddingLeft=L.paddingX,H.style.paddingRight=L.paddingX):(H.style.paddingLeft="",H.style.paddingRight=""),L.paddingY?(H.style.paddingTop=L.paddingY,H.style.paddingBottom=L.paddingY):(H.style.paddingTop="",H.style.paddingBottom="");let Me=He==null?void 0:He.querySelector(".tvw-send-button-tooltip"),me=(Qs=L.tooltipText)!=null?Qs:"Start voice recognition";if(((eo=L.showTooltip)!=null?eo:!1)&&me)if(Me)Me.textContent=me,Me.style.display="";else{let tt=document.createElement("div");tt.className="tvw-send-button-tooltip",tt.textContent=me,He==null||He.insertBefore(tt,H)}else Me&&(Me.style.display="none");He.style.display="",H.disabled=R.isStreaming()}else H&&He&&(He.style.display="none",V&&ue());let le=(to=t.sendButton)!=null?to:{},ut=(no=le.useIcon)!=null?no:!1,Ht=(so=le.iconText)!=null?so:"\u2191",$t=le.iconName,kt=(oo=le.tooltipText)!=null?oo:"Send message",_t=(ro=le.showTooltip)!=null?ro:!1,Pt=(io=le.size)!=null?io:"40px",qt=le.backgroundColor,pt=le.textColor;if(ut){if(q.style.width=Pt,q.style.height=Pt,q.style.minWidth=Pt,q.style.minHeight=Pt,q.style.fontSize="18px",q.style.lineHeight="1",q.innerHTML="",$t){let L=parseFloat(Pt)||24,we=pt&&typeof pt=="string"&&pt.trim()?pt.trim():"currentColor",oe=ce($t,L,we,2);oe?(q.appendChild(oe),q.style.color=we):(q.textContent=Ht,pt?q.style.color=pt:q.classList.add("tvw-text-white"))}else q.textContent=Ht,pt?q.style.color=pt:q.classList.add("tvw-text-white");q.className="tvw-rounded-button tvw-flex tvw-items-center tvw-justify-center disabled:tvw-opacity-50 tvw-cursor-pointer",qt?(q.style.backgroundColor=qt,q.classList.remove("tvw-bg-cw-primary")):q.classList.add("tvw-bg-cw-primary")}else q.textContent=(lo=(ao=t.copy)==null?void 0:ao.sendButtonLabel)!=null?lo:"Send",q.style.width="",q.style.height="",q.style.minWidth="",q.style.minHeight="",q.style.fontSize="",q.style.lineHeight="",q.className="tvw-rounded-button tvw-bg-cw-accent tvw-px-4 tvw-py-2 tvw-text-sm tvw-font-semibold tvw-text-white disabled:tvw-opacity-50 tvw-cursor-pointer",qt?(q.style.backgroundColor=qt,q.classList.remove("tvw-bg-cw-accent")):q.classList.add("tvw-bg-cw-accent"),pt?q.style.color=pt:q.classList.add("tvw-text-white");le.borderWidth?(q.style.borderWidth=le.borderWidth,q.style.borderStyle="solid"):(q.style.borderWidth="",q.style.borderStyle=""),le.borderColor?q.style.borderColor=le.borderColor:q.style.borderColor="",le.paddingX?(q.style.paddingLeft=le.paddingX,q.style.paddingRight=le.paddingX):(q.style.paddingLeft="",q.style.paddingRight=""),le.paddingY?(q.style.paddingTop=le.paddingY,q.style.paddingBottom=le.paddingY):(q.style.paddingTop="",q.style.paddingBottom="");let Rt=qe==null?void 0:qe.querySelector(".tvw-send-button-tooltip");if(_t&&kt)if(Rt)Rt.textContent=kt,Rt.style.display="";else{let L=document.createElement("div");L.className="tvw-send-button-tooltip",L.textContent=kt,qe==null||qe.insertBefore(L,q)}else Rt&&(Rt.style.display="none");let It=(co=t.statusIndicator)!=null?co:{},fn=(uo=It.visible)!=null?uo:!0;if(nt.style.display=fn?"":"none",R){let L=R.getStatus(),we=oe=>{var We,xe,Qe,_e;return oe==="idle"?(We=It.idleText)!=null?We:Xe.idle:oe==="connecting"?(xe=It.connectingText)!=null?xe:Xe.connecting:oe==="connected"?(Qe=It.connectedText)!=null?Qe:Xe.connected:oe==="error"?(_e=It.errorText)!=null?_e:Xe.error:Xe[oe]};nt.textContent=we(L)}},open(){g&&Ke(!0,"api")},close(){g&&Ke(!1,"api")},toggle(){g&&Ke(!b,"api")},clearChat(){R.clearMessages();try{localStorage.removeItem(Gt),t.debug&&console.log(`[AgentWidget] Cleared default localStorage key: ${Gt}`)}catch(p){console.error("[AgentWidget] Failed to clear default localStorage:",p)}if(t.clearChatHistoryStorageKey&&t.clearChatHistoryStorageKey!==Gt)try{localStorage.removeItem(t.clearChatHistoryStorageKey),t.debug&&console.log(`[AgentWidget] Cleared custom localStorage key: ${t.clearChatHistoryStorageKey}`)}catch(p){console.error("[AgentWidget] Failed to clear custom localStorage:",p)}let a=new CustomEvent("vanilla-agent:clear-chat",{detail:{timestamp:new Date().toISOString()}});if(window.dispatchEvent(a),i!=null&&i.clear)try{let p=i.clear();p instanceof Promise&&p.catch(E=>{typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",E)})}catch(p){typeof console!="undefined"&&console.error("[AgentWidget] Failed to clear storage adapter:",p)}l={},C.syncFromMetadata()},setMessage(a){return!re||R.isStreaming()?!1:(!b&&g&&Ke(!0,"system"),re.value=a,re.dispatchEvent(new Event("input",{bubbles:!0})),!0)},submitMessage(a){if(R.isStreaming())return!1;let p=(a==null?void 0:a.trim())||re.value.trim();return p?(!b&&g&&Ke(!0,"system"),re.value="",R.sendMessage(p),!0):!1},startVoiceRecognition(){return V||R.isStreaming()||!Fe()?!1:(!b&&g&&Ke(!0,"system"),ye.manuallyDeactivated=!1,Je(),Ne("user"),!0)},stopVoiceRecognition(){return V?(ye.manuallyDeactivated=!0,Je(),ue("user"),!0):!1},injectTestMessage(a){!b&&g&&Ke(!0,"system"),R.injectTestEvent(a)},getMessages(){return R.getMessages()},getStatus(){return R.getStatus()},getPersistentMetadata(){return{...l}},updatePersistentMetadata(a){f(a)},on(a,p){return o.on(a,p)},off(a,p){o.off(a,p)},isOpen(){return g&&b},isVoiceActive(){return ye.active},getState(){return{open:g&&b,launcherEnabled:g,voiceActive:ye.active,streaming:R.isStreaming()}},showCSATFeedback(a){!b&&g&&Ke(!0,"system");let p=Q.querySelector(".tvw-feedback-container");p&&p.remove();let E=Qn({onSubmit:async(O,k)=>{var ee;R.isClientTokenMode()&&await R.submitCSATFeedback(O,k),(ee=a==null?void 0:a.onSubmit)==null||ee.call(a,O,k)},onDismiss:a==null?void 0:a.onDismiss,...a});Q.appendChild(E),E.scrollIntoView({behavior:"smooth",block:"end"})},showNPSFeedback(a){!b&&g&&Ke(!0,"system");let p=Q.querySelector(".tvw-feedback-container");p&&p.remove();let E=es({onSubmit:async(O,k)=>{var ee;R.isClientTokenMode()&&await R.submitNPSFeedback(O,k),(ee=a==null?void 0:a.onSubmit)==null||ee.call(a,O,k)},onDismiss:a==null?void 0:a.onDismiss,...a});Q.appendChild(E),E.scrollIntoView({behavior:"smooth",block:"end"})},async submitCSATFeedback(a,p){return R.submitCSATFeedback(a,p)},async submitNPSFeedback(a,p){return R.submitNPSFeedback(a,p)},destroy(){Ie.forEach(a=>a()),B.remove(),y==null||y.destroy(),F==null||F.remove(),Ue&&Y.removeEventListener("click",Ue)}};if((((cs=s==null?void 0:s.debugTools)!=null?cs:!1)||!!t.debug)&&typeof window!="undefined"){let a=window.AgentWidgetBrowser,p={controller:Ce,getMessages:Ce.getMessages,getStatus:Ce.getStatus,getMetadata:Ce.getPersistentMetadata,updateMetadata:Ce.updatePersistentMetadata,clearHistory:()=>Ce.clearChat(),setVoiceActive:E=>E?Ce.startVoiceRecognition():Ce.stopVoiceRecognition()};window.AgentWidgetBrowser=p,Ie.push(()=>{window.AgentWidgetBrowser===p&&(window.AgentWidgetBrowser=a)})}return Ce};var ss={},mr=n=>{if(typeof window=="undefined"||typeof document=="undefined")throw new Error("Chat widget can only be mounted in a browser environment");if(typeof n=="string"){let e=document.querySelector(n);if(!e)throw new Error(`Chat widget target "${n}" was not found`);return e}return n},fr=()=>{try{if(typeof ss!="undefined"&&ss.url)return new URL("../widget.css",ss.url).href}catch{}return null},Io=n=>{let e=fr(),s=()=>{if(!(n instanceof ShadowRoot)||n.querySelector("link[data-vanilla-agent]"))return;let t=document.head.querySelector("link[data-vanilla-agent]");if(!t)return;let r=t.cloneNode(!0);n.insertBefore(r,n.firstChild)};if(n instanceof ShadowRoot)if(e){let t=document.createElement("link");t.rel="stylesheet",t.href=e,t.setAttribute("data-vanilla-agent","true"),n.insertBefore(t,n.firstChild)}else s();else if(!document.head.querySelector("link[data-vanilla-agent]")&&e){let r=document.createElement("link");r.rel="stylesheet",r.href=e,r.setAttribute("data-vanilla-agent","true"),document.head.appendChild(r)}},Fo=n=>{var d,f,w,u;let e=mr(n.target),s=document.createElement("div");s.className="vanilla-agent-host";let t=(w=(f=(d=n.config)==null?void 0:d.launcher)==null?void 0:f.enabled)!=null?w:!0;t||(s.style.height="100%"),e.appendChild(s);let r=n.useShadowDom===!0,o,i;if(r){let C=s.attachShadow({mode:"open"});i=C,o=document.createElement("div"),o.id="vanilla-agent-root",t||(o.style.height="100%",o.style.display="flex",o.style.flexDirection="column",o.style.flex="1",o.style.minHeight="0"),C.appendChild(o),Io(C)}else i=s,o=document.createElement("div"),o.id="vanilla-agent-root",t||(o.style.height="100%",o.style.display="flex",o.style.flexDirection="column",o.style.flex="1",o.style.minHeight="0"),s.appendChild(o),Io(s);let l=ns(o,n.config,{debugTools:n.debugTools});(u=n.onReady)==null||u.call(n);let c={...l,host:s,destroy(){l.destroy(),s.remove(),n.windowKey&&typeof window!="undefined"&&delete window[n.windowKey]}};return n.windowKey&&typeof window!="undefined"&&(window[n.windowKey]=c),c};function wr(n){if(!n)return null;let e=n.toString();return e.includes("createJsonStreamParser")||e.includes("partial-json")?"json":e.includes("createRegexJsonParser")||e.includes("regex")?"regex-json":e.includes("createXmlParser")||e.includes("<text>")?"xml":null}function Tn(n){var e,s;return(s=(e=n.parserType)!=null?e:wr(n.streamParser))!=null?s:"plain"}function Zt(n,e){let s=[];return n.toolCall&&(s.push(`${e}toolCall: {`),Object.entries(n.toolCall).forEach(([t,r])=>{typeof r=="string"&&s.push(`${e} ${t}: "${r}",`)}),s.push(`${e}},`)),s}function Qt(n,e){let s=[];return n.messageActions&&Object.entries(n.messageActions).some(([r,o])=>r!=="onFeedback"&&r!=="onCopy"&&o!==void 0)&&(s.push(`${e}messageActions: {`),Object.entries(n.messageActions).forEach(([r,o])=>{r==="onFeedback"||r==="onCopy"||(typeof o=="string"?s.push(`${e} ${r}: "${o}",`):typeof o=="boolean"&&s.push(`${e} ${r}: ${o},`))}),s.push(`${e}},`)),s}function en(n,e){let s=[];if(n.markdown){let t=n.markdown.options&&Object.keys(n.markdown.options).length>0,r=n.markdown.disableDefaultStyles!==void 0;(t||r)&&(s.push(`${e}markdown: {`),t&&(s.push(`${e} options: {`),Object.entries(n.markdown.options).forEach(([o,i])=>{typeof i=="string"?s.push(`${e} ${o}: "${i}",`):typeof i=="boolean"&&s.push(`${e} ${o}: ${i},`)}),s.push(`${e} },`)),r&&s.push(`${e} disableDefaultStyles: ${n.markdown.disableDefaultStyles},`),s.push(`${e}},`))}return s}function tn(n,e){let s=[];if(n.layout){let t=n.layout.header&&Object.keys(n.layout.header).some(o=>o!=="render"),r=n.layout.messages&&Object.keys(n.layout.messages).some(o=>o!=="renderUserMessage"&&o!=="renderAssistantMessage");(t||r)&&(s.push(`${e}layout: {`),t&&(s.push(`${e} header: {`),Object.entries(n.layout.header).forEach(([o,i])=>{o!=="render"&&(typeof i=="string"?s.push(`${e} ${o}: "${i}",`):typeof i=="boolean"&&s.push(`${e} ${o}: ${i},`))}),s.push(`${e} },`)),r&&(s.push(`${e} messages: {`),Object.entries(n.layout.messages).forEach(([o,i])=>{o==="renderUserMessage"||o==="renderAssistantMessage"||(o==="avatar"&&typeof i=="object"&&i!==null?(s.push(`${e} avatar: {`),Object.entries(i).forEach(([l,c])=>{typeof c=="string"?s.push(`${e} ${l}: "${c}",`):typeof c=="boolean"&&s.push(`${e} ${l}: ${c},`)}),s.push(`${e} },`)):o==="timestamp"&&typeof i=="object"&&i!==null?Object.entries(i).some(([c])=>c!=="format")&&(s.push(`${e} timestamp: {`),Object.entries(i).forEach(([c,d])=>{c!=="format"&&(typeof d=="string"?s.push(`${e} ${c}: "${d}",`):typeof d=="boolean"&&s.push(`${e} ${c}: ${d},`))}),s.push(`${e} },`)):typeof i=="string"?s.push(`${e} ${o}: "${i}",`):typeof i=="boolean"&&s.push(`${e} ${o}: ${i},`))}),s.push(`${e} },`)),s.push(`${e}},`))}return s}function yr(n,e="esm"){let s={...n};return delete s.postprocessMessage,delete s.initialMessages,e==="esm"?vr(s):e==="script-installer"?xr(s):e==="script-advanced"?Ar(s):e==="react-component"?br(s):e==="react-advanced"?Cr(s):Sr(s)}function vr(n){let e=Tn(n),s=e!=="plain",t=["import 'vanilla-agent/widget.css';","import { initAgentWidget, markdownPostprocessor } from 'vanilla-agent';","","initAgentWidget({"," target: 'body',"," config: {"];return n.apiUrl&&t.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&t.push(` flowId: "${n.flowId}",`),s&&t.push(` parserType: "${e}",`),n.theme&&(t.push(" theme: {"),Object.entries(n.theme).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.launcher&&(t.push(" launcher: {"),Object.entries(n.launcher).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.copy&&(t.push(" copy: {"),Object.entries(n.copy).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.sendButton&&(t.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.voiceRecognition&&(t.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"?t.push(` ${r}: ${o},`):typeof o=="number"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.statusIndicator&&(t.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.features&&(t.push(" features: {"),Object.entries(n.features).forEach(([r,o])=>{t.push(` ${r}: ${o},`)}),t.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(t.push(" suggestionChips: ["),n.suggestionChips.forEach(r=>{t.push(` "${r}",`)}),t.push(" ],")),n.suggestionChipsConfig&&(t.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&t.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&t.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&t.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&t.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),t.push(" },")),t.push(...Zt(n," ")),t.push(...Qt(n," ")),t.push(...en(n," ")),t.push(...tn(n," ")),n.debug&&t.push(` debug: ${n.debug},`),t.push(" postprocessMessage: ({ text }) => markdownPostprocessor(text)"),t.push(" }"),t.push("});"),t.join(`
|
|
61
|
+
`)}function br(n){let e=Tn(n),s=e!=="plain",t=["// ChatWidget.tsx","'use client'; // Required for Next.js - remove for Vite/CRA","","import { useEffect } from 'react';","import 'vanilla-agent/widget.css';","import { initAgentWidget, markdownPostprocessor } from 'vanilla-agent';","import type { AgentWidgetInitHandle } from 'vanilla-agent';","","export function ChatWidget() {"," useEffect(() => {"," let handle: AgentWidgetInitHandle | null = null;",""," handle = initAgentWidget({"," target: 'body',"," config: {"];return n.apiUrl&&t.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&t.push(` flowId: "${n.flowId}",`),s&&t.push(` parserType: "${e}",`),n.theme&&(t.push(" theme: {"),Object.entries(n.theme).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.launcher&&(t.push(" launcher: {"),Object.entries(n.launcher).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.copy&&(t.push(" copy: {"),Object.entries(n.copy).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.sendButton&&(t.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.voiceRecognition&&(t.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"?t.push(` ${r}: ${o},`):typeof o=="number"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.statusIndicator&&(t.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.features&&(t.push(" features: {"),Object.entries(n.features).forEach(([r,o])=>{t.push(` ${r}: ${o},`)}),t.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(t.push(" suggestionChips: ["),n.suggestionChips.forEach(r=>{t.push(` "${r}",`)}),t.push(" ],")),n.suggestionChipsConfig&&(t.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&t.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&t.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&t.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&t.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),t.push(" },")),t.push(...Zt(n," ")),t.push(...Qt(n," ")),t.push(...en(n," ")),t.push(...tn(n," ")),n.debug&&t.push(` debug: ${n.debug},`),t.push(" postprocessMessage: ({ text }) => markdownPostprocessor(text)"),t.push(" }"),t.push(" });"),t.push(""),t.push(" // Cleanup on unmount"),t.push(" return () => {"),t.push(" if (handle) {"),t.push(" handle.destroy();"),t.push(" }"),t.push(" };"),t.push(" }, []);"),t.push(""),t.push(" return null; // Widget injects itself into the DOM"),t.push("}"),t.push(""),t.push("// Usage in your app:"),t.push("// import { ChatWidget } from './components/ChatWidget';"),t.push("//"),t.push("// export default function App() {"),t.push("// return ("),t.push("// <div>"),t.push("// {/* Your app content */}"),t.push("// <ChatWidget />"),t.push("// </div>"),t.push("// );"),t.push("// }"),t.join(`
|
|
62
|
+
`)}function Cr(n){let e=["// ChatWidgetAdvanced.tsx","'use client'; // Required for Next.js - remove for Vite/CRA","","import { useEffect } from 'react';","import 'vanilla-agent/widget.css';","import {"," initAgentWidget,"," createFlexibleJsonStreamParser,"," defaultJsonActionParser,"," defaultActionHandlers,"," markdownPostprocessor","} from 'vanilla-agent';","import type { AgentWidgetInitHandle } from 'vanilla-agent';","","const STORAGE_KEY = 'chat-widget-state';","const PROCESSED_ACTIONS_KEY = 'chat-widget-processed-actions';","","// Types for DOM elements","interface PageElement {"," type: string;"," tagName: string;"," selector: string;"," innerText: string;"," href?: string;","}","","interface DOMContext {"," page_elements: PageElement[];"," page_element_count: number;"," element_types: Record<string, number>;"," page_url: string;"," page_title: string;"," timestamp: string;","}","","// DOM context provider - extracts page elements for AI context","const collectDOMContext = (): DOMContext => {"," const selectors = {",` products: '[data-product-id], .product-card, .product-item, [role="article"]',`,` buttons: 'button, [role="button"], .btn',`," links: 'a[href]',"," inputs: 'input, textarea, select'"," };",""," const elements: PageElement[] = [];"," Object.entries(selectors).forEach(([type, selector]) => {"," document.querySelectorAll(selector).forEach((element) => {"," if (!(element instanceof HTMLElement)) return;"," "," // Exclude elements within the widget"," const widgetHost = element.closest('.vanilla-agent-host');"," if (widgetHost) return;"," "," const text = element.innerText?.trim();"," if (!text) return;",""," const selectorString ="," element.id ? `#${element.id}` :"," element.getAttribute('data-testid') ? `[data-testid=\"${element.getAttribute('data-testid')}\"]` :"," element.getAttribute('data-product-id') ? `[data-product-id=\"${element.getAttribute('data-product-id')}\"]` :"," element.tagName.toLowerCase();",""," const elementData: PageElement = {"," type,"," tagName: element.tagName.toLowerCase(),"," selector: selectorString,"," innerText: text.substring(0, 200)"," };",""," if (type === 'links' && element instanceof HTMLAnchorElement && element.href) {"," elementData.href = element.href;"," }",""," elements.push(elementData);"," });"," });",""," const counts = elements.reduce((acc, el) => {"," acc[el.type] = (acc[el.type] || 0) + 1;"," return acc;"," }, {} as Record<string, number>);",""," return {"," page_elements: elements.slice(0, 50),"," page_element_count: elements.length,"," element_types: counts,"," page_url: window.location.href,"," page_title: document.title,"," timestamp: new Date().toISOString()"," };","};","","export function ChatWidgetAdvanced() {"," useEffect(() => {"," let handle: AgentWidgetInitHandle | null = null;",""," // Load saved state"," const loadSavedMessages = () => {"," const savedState = localStorage.getItem(STORAGE_KEY);"," if (savedState) {"," try {"," const { messages } = JSON.parse(savedState);"," return messages || [];"," } catch (e) {"," console.error('Failed to load saved state:', e);"," }"," }"," return [];"," };",""," handle = initAgentWidget({"," target: 'body',"," config: {"];return n.apiUrl&&e.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&e.push(` flowId: "${n.flowId}",`),n.theme&&(e.push(" theme: {"),Object.entries(n.theme).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.launcher&&(e.push(" launcher: {"),Object.entries(n.launcher).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.copy&&(e.push(" copy: {"),Object.entries(n.copy).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.sendButton&&(e.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.voiceRecognition&&(e.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"?e.push(` ${s}: ${t},`):typeof t=="number"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.statusIndicator&&(e.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.features&&(e.push(" features: {"),Object.entries(n.features).forEach(([s,t])=>{e.push(` ${s}: ${t},`)}),e.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(e.push(" suggestionChips: ["),n.suggestionChips.forEach(s=>{e.push(` "${s}",`)}),e.push(" ],")),n.suggestionChipsConfig&&(e.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&e.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&e.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&e.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&e.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),e.push(" },")),e.push(...Zt(n," ")),e.push(...Qt(n," ")),e.push(...en(n," ")),e.push(...tn(n," ")),n.debug&&e.push(` debug: ${n.debug},`),e.push(" initialMessages: loadSavedMessages(),"),e.push(" // Flexible JSON stream parser for handling structured actions"),e.push(" streamParser: () => createFlexibleJsonStreamParser((parsed: any) => {"),e.push(" if (!parsed || typeof parsed !== 'object') return null;"),e.push(" // Extract display text based on action type"),e.push(" if (parsed.action === 'nav_then_click') return 'Navigating...';"),e.push(" if (parsed.action === 'message') return parsed.text || '';"),e.push(" if (parsed.action === 'message_and_click') return parsed.text || 'Processing...';"),e.push(" return parsed.text || null;"),e.push(" }),"),e.push(" // Action parsers to detect JSON actions in responses"),e.push(" actionParsers: ["),e.push(" defaultJsonActionParser,"),e.push(" // Custom parser for markdown-wrapped JSON"),e.push(" ({ text, message }: any) => {"),e.push(" const jsonSource = (message as any).rawContent || text || message.content;"),e.push(" if (!jsonSource || typeof jsonSource !== 'string') return null;"),e.push(" // Strip markdown code fences"),e.push(" let cleanJson = jsonSource"),e.push(" .replace(/^```(?:json)?\\s*\\n?/, '')"),e.push(" .replace(/\\n?```\\s*$/, '')"),e.push(" .trim();"),e.push(" if (!cleanJson.startsWith('{') || !cleanJson.endsWith('}')) return null;"),e.push(" try {"),e.push(" const parsed = JSON.parse(cleanJson);"),e.push(" if (parsed.action) return { type: parsed.action, payload: parsed };"),e.push(" } catch (e) { return null; }"),e.push(" return null;"),e.push(" }"),e.push(" ],"),e.push(" // Action handlers for navigation and other actions"),e.push(" actionHandlers: ["),e.push(" defaultActionHandlers.message,"),e.push(" defaultActionHandlers.messageAndClick,"),e.push(" // Handler for nav_then_click action"),e.push(" (action: any, context: any) => {"),e.push(" if (action.type !== 'nav_then_click') return;"),e.push(" const payload = action.payload || action.raw || {};"),e.push(" const url = payload?.page;"),e.push(" const text = payload?.on_load_text || 'Navigating...';"),e.push(" if (!url) return { handled: true, displayText: text };"),e.push(" // Check if already processed"),e.push(" const messageId = context.message?.id;"),e.push(" const processedActions = JSON.parse(localStorage.getItem(PROCESSED_ACTIONS_KEY) || '[]');"),e.push(" const actionKey = `nav_${messageId}_${url}`;"),e.push(" if (processedActions.includes(actionKey)) {"),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" processedActions.push(actionKey);"),e.push(" localStorage.setItem(PROCESSED_ACTIONS_KEY, JSON.stringify(processedActions));"),e.push(" const targetUrl = url.startsWith('http') ? url : new URL(url, window.location.origin).toString();"),e.push(" window.location.href = targetUrl;"),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" ],"),e.push(" postprocessMessage: ({ text }) => markdownPostprocessor(text),"),e.push(" requestMiddleware: ({ payload }) => {"),e.push(" return {"),e.push(" ...payload,"),e.push(" metadata: collectDOMContext()"),e.push(" };"),e.push(" }"),e.push(" }"),e.push(" });"),e.push(""),e.push(" // Save state on message events"),e.push(" const handleMessage = () => {"),e.push(" const session = handle?.getSession?.();"),e.push(" if (session) {"),e.push(" localStorage.setItem(STORAGE_KEY, JSON.stringify({"),e.push(" messages: session.messages,"),e.push(" timestamp: new Date().toISOString()"),e.push(" }));"),e.push(" }"),e.push(" };"),e.push(""),e.push(" // Clear state on clear chat"),e.push(" const handleClearChat = () => {"),e.push(" localStorage.removeItem(STORAGE_KEY);"),e.push(" localStorage.removeItem(PROCESSED_ACTIONS_KEY);"),e.push(" };"),e.push(""),e.push(" window.addEventListener('vanilla-agent:message', handleMessage);"),e.push(" window.addEventListener('vanilla-agent:clear-chat', handleClearChat);"),e.push(""),e.push(" // Cleanup on unmount"),e.push(" return () => {"),e.push(" window.removeEventListener('vanilla-agent:message', handleMessage);"),e.push(" window.removeEventListener('vanilla-agent:clear-chat', handleClearChat);"),e.push(" if (handle) {"),e.push(" handle.destroy();"),e.push(" }"),e.push(" };"),e.push(" }, []);"),e.push(""),e.push(" return null; // Widget injects itself into the DOM"),e.push("}"),e.push(""),e.push("// Usage: Collects DOM context for AI-powered navigation"),e.push("// Features:"),e.push("// - Extracts page elements (products, buttons, links)"),e.push("// - Persists chat history across page loads"),e.push("// - Handles navigation actions (nav_then_click)"),e.push("// - Processes structured JSON actions from AI"),e.push("//"),e.push("// Example usage in Next.js:"),e.push("// import { ChatWidgetAdvanced } from './components/ChatWidgetAdvanced';"),e.push("//"),e.push("// export default function RootLayout({ children }) {"),e.push("// return ("),e.push('// <html lang="en">'),e.push("// <body>"),e.push("// {children}"),e.push("// <ChatWidgetAdvanced />"),e.push("// </body>"),e.push("// </html>"),e.push("// );"),e.push("// }"),e.join(`
|
|
63
|
+
`)}function xr(n){let e=Tn(n),s=e!=="plain",t=["<script>"," window.siteAgentConfig = {"," target: 'body',"," config: {"];return n.apiUrl&&t.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&t.push(` flowId: "${n.flowId}",`),s&&t.push(` parserType: "${e}",`),n.theme&&(t.push(" theme: {"),Object.entries(n.theme).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.launcher&&(t.push(" launcher: {"),Object.entries(n.launcher).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.copy&&(t.push(" copy: {"),Object.entries(n.copy).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.sendButton&&(t.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.voiceRecognition&&(t.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"?t.push(` ${r}: ${o},`):typeof o=="number"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.statusIndicator&&(t.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.features&&(t.push(" features: {"),Object.entries(n.features).forEach(([r,o])=>{t.push(` ${r}: ${o},`)}),t.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(t.push(" suggestionChips: ["),n.suggestionChips.forEach(r=>{t.push(` "${r}",`)}),t.push(" ],")),n.suggestionChipsConfig&&(t.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&t.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&t.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&t.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&t.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),t.push(" },")),t.push(...Zt(n," ")),t.push(...Qt(n," ")),t.push(...en(n," ")),t.push(...tn(n," ")),n.debug&&t.push(` debug: ${n.debug},`),t.push(" postprocessMessage: ({ text }) => window.AgentWidget.markdownPostprocessor(text)"),t.push(" }"),t.push(" };"),t.push("</script>"),t.push('<script src="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/install.global.js"></script>'),t.join(`
|
|
64
|
+
`)}function Sr(n){let e=Tn(n),s=e!=="plain",t=["<!-- Load CSS -->",'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/widget.css" />',"","<!-- Load JavaScript -->",'<script src="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/index.global.js"></script>',"","<!-- Initialize widget -->","<script>"," window.AgentWidget.initAgentWidget({"," target: 'body',"," config: {"];return n.apiUrl&&t.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&t.push(` flowId: "${n.flowId}",`),s&&t.push(` parserType: "${e}",`),n.theme&&(t.push(" theme: {"),Object.entries(n.theme).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.launcher&&(t.push(" launcher: {"),Object.entries(n.launcher).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.copy&&(t.push(" copy: {"),Object.entries(n.copy).forEach(([r,o])=>{t.push(` ${r}: "${o}",`)}),t.push(" },")),n.sendButton&&(t.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.voiceRecognition&&(t.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"?t.push(` ${r}: ${o},`):typeof o=="number"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.statusIndicator&&(t.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([r,o])=>{typeof o=="string"?t.push(` ${r}: "${o}",`):typeof o=="boolean"&&t.push(` ${r}: ${o},`)}),t.push(" },")),n.features&&(t.push(" features: {"),Object.entries(n.features).forEach(([r,o])=>{t.push(` ${r}: ${o},`)}),t.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(t.push(" suggestionChips: ["),n.suggestionChips.forEach(r=>{t.push(` "${r}",`)}),t.push(" ],")),n.suggestionChipsConfig&&(t.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&t.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&t.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&t.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&t.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),t.push(" },")),t.push(...Zt(n," ")),t.push(...Qt(n," ")),t.push(...en(n," ")),t.push(...tn(n," ")),n.debug&&t.push(` debug: ${n.debug},`),t.push(" postprocessMessage: ({ text }) => window.AgentWidget.markdownPostprocessor(text)"),t.push(" }"),t.push(" });"),t.push("</script>"),t.join(`
|
|
65
|
+
`)}function Ar(n){let e=["<!-- Load CSS -->",'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/widget.css" />',"","<!-- Chat Widget Configuration -->","<script>"," window.ChatWidgetConfig = {"];return n.apiUrl&&e.push(` apiUrl: "${n.apiUrl}",`),n.flowId&&e.push(` flowId: "${n.flowId}",`),n.theme&&(e.push(" theme: {"),Object.entries(n.theme).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.launcher&&(e.push(" launcher: {"),Object.entries(n.launcher).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.copy&&(e.push(" copy: {"),Object.entries(n.copy).forEach(([s,t])=>{e.push(` ${s}: "${t}",`)}),e.push(" },")),n.sendButton&&(e.push(" sendButton: {"),Object.entries(n.sendButton).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.voiceRecognition&&(e.push(" voiceRecognition: {"),Object.entries(n.voiceRecognition).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"?e.push(` ${s}: ${t},`):typeof t=="number"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.statusIndicator&&(e.push(" statusIndicator: {"),Object.entries(n.statusIndicator).forEach(([s,t])=>{typeof t=="string"?e.push(` ${s}: "${t}",`):typeof t=="boolean"&&e.push(` ${s}: ${t},`)}),e.push(" },")),n.features&&(e.push(" features: {"),Object.entries(n.features).forEach(([s,t])=>{e.push(` ${s}: ${t},`)}),e.push(" },")),n.suggestionChips&&n.suggestionChips.length>0&&(e.push(" suggestionChips: ["),n.suggestionChips.forEach(s=>{e.push(` "${s}",`)}),e.push(" ],")),n.suggestionChipsConfig&&(e.push(" suggestionChipsConfig: {"),n.suggestionChipsConfig.fontFamily&&e.push(` fontFamily: "${n.suggestionChipsConfig.fontFamily}",`),n.suggestionChipsConfig.fontWeight&&e.push(` fontWeight: "${n.suggestionChipsConfig.fontWeight}",`),n.suggestionChipsConfig.paddingX&&e.push(` paddingX: "${n.suggestionChipsConfig.paddingX}",`),n.suggestionChipsConfig.paddingY&&e.push(` paddingY: "${n.suggestionChipsConfig.paddingY}",`),e.push(" },")),e.push(...Zt(n," ")),e.push(...Qt(n," ")),e.push(...en(n," ")),e.push(...tn(n," ")),e.push(" };"),e.push("</script>"),e.push(""),e.push("<!-- Load the widget library -->"),e.push('<script src="https://cdn.jsdelivr.net/npm/vanilla-agent@latest/dist/index.global.js"></script>'),e.push(""),e.push("<!-- Chat Widget Script with DOM Helper -->"),e.push("<script>"),e.push(" (function () {"),e.push(" 'use strict';"),e.push(" "),e.push(" const STORAGE_KEY = 'chat-widget-state';"),e.push(" const PROCESSED_ACTIONS_KEY = 'chat-widget-processed-actions';"),e.push(""),e.push(" // DOM context provider - extracts page elements for AI context"),e.push(" const domContextProvider = () => {"),e.push(" const selectors = {"),e.push(` products: '[data-product-id], .product-card, .product-item, [role="article"]',`),e.push(` buttons: 'button, [role="button"], .btn',`),e.push(" links: 'a[href]',"),e.push(" inputs: 'input, textarea, select'"),e.push(" };"),e.push(""),e.push(" const elements = [];"),e.push(" Object.entries(selectors).forEach(([type, selector]) => {"),e.push(" document.querySelectorAll(selector).forEach((element) => {"),e.push(" if (!(element instanceof HTMLElement)) return;"),e.push(" "),e.push(" // Exclude elements within the widget"),e.push(" const widgetHost = element.closest('.vanilla-agent-host');"),e.push(" if (widgetHost) return;"),e.push(" "),e.push(" const text = element.innerText?.trim();"),e.push(" if (!text) return;"),e.push(""),e.push(" const selectorString ="),e.push(" element.id ? `#${element.id}` :"),e.push(" element.getAttribute('data-testid') ? `[data-testid=\"${element.getAttribute('data-testid')}\"]` :"),e.push(" element.getAttribute('data-product-id') ? `[data-product-id=\"${element.getAttribute('data-product-id')}\"]` :"),e.push(" element.tagName.toLowerCase();"),e.push(""),e.push(" const elementData = {"),e.push(" type,"),e.push(" tagName: element.tagName.toLowerCase(),"),e.push(" selector: selectorString,"),e.push(" innerText: text.substring(0, 200)"),e.push(" };"),e.push(""),e.push(" if (type === 'links' && element instanceof HTMLAnchorElement && element.href) {"),e.push(" elementData.href = element.href;"),e.push(" }"),e.push(""),e.push(" elements.push(elementData);"),e.push(" });"),e.push(" });"),e.push(""),e.push(" const counts = elements.reduce((acc, el) => {"),e.push(" acc[el.type] = (acc[el.type] || 0) + 1;"),e.push(" return acc;"),e.push(" }, {});"),e.push(""),e.push(" return {"),e.push(" page_elements: elements.slice(0, 50),"),e.push(" page_element_count: elements.length,"),e.push(" element_types: counts,"),e.push(" page_url: window.location.href,"),e.push(" page_title: document.title,"),e.push(" timestamp: new Date().toISOString()"),e.push(" };"),e.push(" };"),e.push(""),e.push(" const createWidgetConfig = (agentWidget) => ({"),e.push(" ...window.ChatWidgetConfig,"),e.push(" // Flexible JSON stream parser for handling structured actions"),e.push(" streamParser: () => agentWidget.createFlexibleJsonStreamParser((parsed) => {"),e.push(" if (!parsed || typeof parsed !== 'object') return null;"),e.push(" "),e.push(" // Extract display text based on action type"),e.push(" if (parsed.action === 'nav_then_click') {"),e.push(" return 'Navigating...';"),e.push(" } else if (parsed.action === 'message') {"),e.push(" return parsed.text || '';"),e.push(" } else if (parsed.action === 'message_and_click') {"),e.push(" return parsed.text || 'Processing...';"),e.push(" }"),e.push(" "),e.push(" return parsed.text || null;"),e.push(" }),"),e.push(" // Action parsers to detect JSON actions in responses"),e.push(" actionParsers: ["),e.push(" agentWidget.defaultJsonActionParser,"),e.push(" // Custom parser for markdown-wrapped JSON"),e.push(" ({ text, message }) => {"),e.push(" const jsonSource = message.rawContent || text || message.content;"),e.push(" if (!jsonSource || typeof jsonSource !== 'string') return null;"),e.push(" "),e.push(" // Strip markdown code fences"),e.push(" let cleanJson = jsonSource"),e.push(" .replace(/^```(?:json)?\\s*\\n?/, '')"),e.push(" .replace(/\\n?```\\s*$/, '')"),e.push(" .trim();"),e.push(" "),e.push(" if (!cleanJson.startsWith('{') || !cleanJson.endsWith('}')) return null;"),e.push(" "),e.push(" try {"),e.push(" const parsed = JSON.parse(cleanJson);"),e.push(" if (parsed.action) {"),e.push(" return { type: parsed.action, payload: parsed };"),e.push(" }"),e.push(" } catch (e) {"),e.push(" return null;"),e.push(" }"),e.push(" return null;"),e.push(" }"),e.push(" ],"),e.push(" // Action handlers for navigation and other actions"),e.push(" actionHandlers: ["),e.push(" agentWidget.defaultActionHandlers.message,"),e.push(" agentWidget.defaultActionHandlers.messageAndClick,"),e.push(" // Handler for nav_then_click action"),e.push(" (action, context) => {"),e.push(" if (action.type !== 'nav_then_click') return;"),e.push(" "),e.push(" const payload = action.payload || action.raw || {};"),e.push(" const url = payload?.page;"),e.push(" const text = payload?.on_load_text || 'Navigating...';"),e.push(" "),e.push(" if (!url) return { handled: true, displayText: text };"),e.push(" "),e.push(" // Check if already processed"),e.push(" const messageId = context.message?.id;"),e.push(" const processedActions = JSON.parse(localStorage.getItem(PROCESSED_ACTIONS_KEY) || '[]');"),e.push(" const actionKey = `nav_${messageId}_${url}`;"),e.push(" "),e.push(" if (processedActions.includes(actionKey)) {"),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" "),e.push(" processedActions.push(actionKey);"),e.push(" localStorage.setItem(PROCESSED_ACTIONS_KEY, JSON.stringify(processedActions));"),e.push(" "),e.push(" const targetUrl = url.startsWith('http')"),e.push(" ? url"),e.push(" : new URL(url, window.location.origin).toString();"),e.push(" "),e.push(" window.location.href = targetUrl;"),e.push(" "),e.push(" return { handled: true, displayText: text };"),e.push(" }"),e.push(" ],"),e.push(" // Send DOM context with each request"),e.push(" requestMiddleware: ({ payload }) => ({"),e.push(" ...payload,"),e.push(" metadata: domContextProvider()"),e.push(" }),"),e.push(" postprocessMessage: ({ text }) => agentWidget.markdownPostprocessor(text)"),e.push(" });"),e.push(""),e.push(" // Initialize widget when DOM is loaded"),e.push(" function init() {"),e.push(" const agentWidget = window.AgentWidget;"),e.push(" if (!agentWidget) {"),e.push(" console.error('AgentWidget not loaded');"),e.push(" return;"),e.push(" }"),e.push(""),e.push(" const widgetConfig = createWidgetConfig(agentWidget);"),e.push(""),e.push(" // Load saved state"),e.push(" const savedState = localStorage.getItem(STORAGE_KEY);"),e.push(" if (savedState) {"),e.push(" try {"),e.push(" const { messages } = JSON.parse(savedState);"),e.push(" widgetConfig.initialMessages = messages || [];"),e.push(" } catch (e) {"),e.push(" console.error('Failed to load saved state:', e);"),e.push(" }"),e.push(" }"),e.push(""),e.push(" // Initialize widget with DOM context"),e.push(" const handle = agentWidget.initAgentWidget({"),e.push(" target: 'body',"),e.push(" useShadowDom: false,"),e.push(" config: widgetConfig"),e.push(" });"),e.push(""),e.push(" // Save state on message events"),e.push(" window.addEventListener('vanilla-agent:message', (event) => {"),e.push(" const session = handle.getSession?.();"),e.push(" if (session) {"),e.push(" localStorage.setItem(STORAGE_KEY, JSON.stringify({"),e.push(" messages: session.messages,"),e.push(" timestamp: new Date().toISOString()"),e.push(" }));"),e.push(" }"),e.push(" });"),e.push(""),e.push(" // Clear state on clear chat"),e.push(" window.addEventListener('vanilla-agent:clear-chat', () => {"),e.push(" localStorage.removeItem(STORAGE_KEY);"),e.push(" localStorage.removeItem(PROCESSED_ACTIONS_KEY);"),e.push(" });"),e.push(" }"),e.push(""),e.push(" // Initialize when DOM is ready"),e.push(" if (document.readyState === 'loading') {"),e.push(" document.addEventListener('DOMContentLoaded', init);"),e.push(" } else {"),e.push(" init();"),e.push(" }"),e.push(" })();"),e.push("</script>"),e.join(`
|
|
66
|
+
`)}var ha=Fo;export{Xt as AgentWidgetClient,an as AgentWidgetSession,Be as DEFAULT_WIDGET_CONFIG,dn as attachHeaderToContainer,cn as buildComposer,xo as buildDefaultHeader,Ao as buildExpandedHeader,zt as buildHeader,Nn as buildHeaderWithLayout,So as buildMinimalHeader,pn as componentRegistry,An as createActionManager,ns as createAgentExperience,tr as createBubbleWithLayout,Qn as createCSATFeedback,pr as createComponentMiddleware,Xn as createComponentStreamParser,jo as createDirectivePostprocessor,Yo as createFlexibleJsonStreamParser,Hn as createJsonStreamParser,Jn as createLocalStorageAdapter,wn as createMarkdownProcessor,yn as createMarkdownProcessorFromConfig,ko as createMessageActions,es as createNPSFeedback,Ln as createPlainTextParser,Bn as createRegexJsonParser,un as createStandardBubble,Cn as createTypingIndicator,$n as createXmlParser,ha as default,Vt as defaultActionHandlers,Sn as defaultJsonActionParser,_o as directivePostprocessor,Wn as escapeHtml,Zn as extractComponentDirectiveFromMessage,Rn as generateAssistantMessageId,yr as generateCodeSnippet,Xo as generateMessageId,Pn as generateUserMessageId,To as getHeaderLayout,Gn as hasComponentDirective,Fn as headerLayouts,Fo as initAgentWidget,ur as isComponentDirectiveType,go as markdownPostprocessor,zn as mergeWithDefaults,xn as pluginRegistry,Vn as renderComponentDirective};
|
|
67
67
|
//# sourceMappingURL=index.js.map
|