@makemore/agent-frontend 2.4.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +82 -21
- package/README.md +10 -1
- package/dist/chat-widget.css +442 -1
- package/dist/chat-widget.js +357 -160
- package/package.json +1 -2
- package/src/components/ChatWidget.js +73 -27
- package/src/components/Message.js +156 -4
- package/src/components/MessageList.js +10 -4
- package/src/components/TaskList.js +183 -0
- package/src/hooks/useChat.js +92 -4
- package/src/hooks/useTasks.js +164 -0
- package/src/utils/api.js +24 -9
package/dist/chat-widget.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var At=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var Dt=(e,t)=>{for(var n in t)be(e,n,{get:t[n],enumerable:!0})},Rt=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of At(t))!Pt.call(e,r)&&r!==n&&be(e,r,{get:()=>t[r],enumerable:!(s=Et(t,r))||s.enumerable});return e};var Ht=e=>Rt(be({},"__esModule",{value:!0}),e);var ln={};Dt(ln,{ChatWidget:()=>$e,default:()=>an});var ce,A,Be,Nt,Z,Fe,Ke,ze,Je,Te,ke,Ce,Ot,te={},Ve=[],Ft=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ue=Array.isArray;function X(e,t){for(var n in t)e[n]=t[n];return e}function Me(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function de(e,t,n){var s,r,o,i={};for(o in t)o=="key"?s=t[o]:o=="ref"?r=t[o]:i[o]=t[o];if(arguments.length>2&&(i.children=arguments.length>3?ce.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(o in e.defaultProps)i[o]===void 0&&(i[o]=e.defaultProps[o]);return ie(e,i,s,r,null)}function ie(e,t,n,s,r){var o={type:e,props:t,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:r??++Be,__i:-1,__u:0};return r==null&&A.vnode!=null&&A.vnode(o),o}function _e(e){return e.children}function ee(e,t){this.props=e,this.context=t}function Y(e,t){if(t==null)return e.__?Y(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?Y(e):null}function je(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return je(e)}}function We(e){(!e.__d&&(e.__d=!0)&&Z.push(e)&&!le.__r++||Fe!=A.debounceRendering)&&((Fe=A.debounceRendering)||Ke)(le)}function le(){for(var e,t,n,s,r,o,i,c=1;Z.length;)Z.length>c&&Z.sort(ze),e=Z.shift(),c=Z.length,e.__d&&(n=void 0,s=void 0,r=(s=(t=e).__v).__e,o=[],i=[],t.__P&&((n=X({},s)).__v=s.__v+1,A.vnode&&A.vnode(n),xe(t.__P,n,s,t.__n,t.__P.namespaceURI,32&s.__u?[r]:null,o,r??Y(s),!!(32&s.__u),i),n.__v=s.__v,n.__.__k[n.__i]=n,Xe(o,n,i),s.__e=s.__=null,n.__e!=r&&je(n)));le.__r=0}function qe(e,t,n,s,r,o,i,c,h,l,u){var a,p,d,v,S,w,y,$=s&&s.__k||Ve,R=t.length;for(h=Wt(n,t,$,h,R),a=0;a<R;a++)(d=n.__k[a])!=null&&(p=d.__i==-1?te:$[d.__i]||te,d.__i=a,w=xe(e,d,p,r,o,i,c,h,l,u),v=d.__e,d.ref&&p.ref!=d.ref&&(p.ref&&Ie(p.ref,null,d),u.push(d.ref,d.__c||v,d)),S==null&&v!=null&&(S=v),(y=!!(4&d.__u))||p.__k===d.__k?h=Ge(d,h,e,y):typeof d.type=="function"&&w!==void 0?h=w:v&&(h=v.nextSibling),d.__u&=-7);return n.__e=S,h}function Wt(e,t,n,s,r){var o,i,c,h,l,u=n.length,a=u,p=0;for(e.__k=new Array(r),o=0;o<r;o++)(i=t[o])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[o]=ie(null,i,null,null,null):ue(i)?i=e.__k[o]=ie(_e,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[o]=ie(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[o]=i,h=o+p,i.__=e,i.__b=e.__b+1,c=null,(l=i.__i=Ut(i,n,h,a))!=-1&&(a--,(c=n[l])&&(c.__u|=2)),c==null||c.__v==null?(l==-1&&(r>u?p--:r<u&&p++),typeof i.type!="function"&&(i.__u|=4)):l!=h&&(l==h-1?p--:l==h+1?p++:(l>h?p--:p++,i.__u|=4))):e.__k[o]=null;if(a)for(o=0;o<u;o++)(c=n[o])!=null&&!(2&c.__u)&&(c.__e==s&&(s=Y(c)),Ze(c,c));return s}function Ge(e,t,n,s){var r,o;if(typeof e.type=="function"){for(r=e.__k,o=0;r&&o<r.length;o++)r[o]&&(r[o].__=e,t=Ge(r[o],t,n,s));return t}e.__e!=t&&(s&&(t&&e.type&&!t.parentNode&&(t=Y(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function Ut(e,t,n,s){var r,o,i,c=e.key,h=e.type,l=t[n],u=l!=null&&(2&l.__u)==0;if(l===null&&c==null||u&&c==l.key&&h==l.type)return n;if(s>(u?1:0)){for(r=n-1,o=n+1;r>=0||o<t.length;)if((l=t[i=r>=0?r--:o++])!=null&&!(2&l.__u)&&c==l.key&&h==l.type)return i}return-1}function Ue(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||Ft.test(t)?n:n+"px"}function ae(e,t,n,s,r){var o,i;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof s=="string"&&(e.style.cssText=s=""),s)for(t in s)n&&t in n||Ue(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||Ue(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")o=t!=(t=t.replace(Je,"$1")),i=t.toLowerCase(),t=i in e||t=="onFocusOut"||t=="onFocusIn"?i.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n.u=s.u:(n.u=Te,e.addEventListener(t,o?Ce:ke,o)):e.removeEventListener(t,o?Ce:ke,o);else{if(r=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function Le(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=Te++;else if(t.t<n.u)return;return n(A.event?A.event(t):t)}}}function xe(e,t,n,s,r,o,i,c,h,l){var u,a,p,d,v,S,w,y,$,R,T,L,P,J,V,B,m,b=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(h=!!(32&n.__u),o=[c=t.__e=n.__e]),(u=A.__b)&&u(t);e:if(typeof b=="function")try{if(y=t.props,$="prototype"in b&&b.prototype.render,R=(u=b.contextType)&&s[u.__c],T=u?R?R.props.value:u.__:s,n.__c?w=(a=t.__c=n.__c).__=a.__E:($?t.__c=a=new b(y,T):(t.__c=a=new ee(y,T),a.constructor=b,a.render=Bt),R&&R.sub(a),a.state||(a.state={}),a.__n=s,p=a.__d=!0,a.__h=[],a._sb=[]),$&&a.__s==null&&(a.__s=a.state),$&&b.getDerivedStateFromProps!=null&&(a.__s==a.state&&(a.__s=X({},a.__s)),X(a.__s,b.getDerivedStateFromProps(y,a.__s))),d=a.props,v=a.state,a.__v=t,p)$&&b.getDerivedStateFromProps==null&&a.componentWillMount!=null&&a.componentWillMount(),$&&a.componentDidMount!=null&&a.__h.push(a.componentDidMount);else{if($&&b.getDerivedStateFromProps==null&&y!==d&&a.componentWillReceiveProps!=null&&a.componentWillReceiveProps(y,T),t.__v==n.__v||!a.__e&&a.shouldComponentUpdate!=null&&a.shouldComponentUpdate(y,a.__s,T)===!1){for(t.__v!=n.__v&&(a.props=y,a.state=a.__s,a.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(D){D&&(D.__=t)}),L=0;L<a._sb.length;L++)a.__h.push(a._sb[L]);a._sb=[],a.__h.length&&i.push(a);break e}a.componentWillUpdate!=null&&a.componentWillUpdate(y,a.__s,T),$&&a.componentDidUpdate!=null&&a.__h.push(function(){a.componentDidUpdate(d,v,S)})}if(a.context=T,a.props=y,a.__P=e,a.__e=!1,P=A.__r,J=0,$){for(a.state=a.__s,a.__d=!1,P&&P(t),u=a.render(a.props,a.state,a.context),V=0;V<a._sb.length;V++)a.__h.push(a._sb[V]);a._sb=[]}else do a.__d=!1,P&&P(t),u=a.render(a.props,a.state,a.context),a.state=a.__s;while(a.__d&&++J<25);a.state=a.__s,a.getChildContext!=null&&(s=X(X({},s),a.getChildContext())),$&&!p&&a.getSnapshotBeforeUpdate!=null&&(S=a.getSnapshotBeforeUpdate(d,v)),B=u,u!=null&&u.type===_e&&u.key==null&&(B=Qe(u.props.children)),c=qe(e,ue(B)?B:[B],t,n,s,r,o,i,c,h,l),a.base=t.__e,t.__u&=-161,a.__h.length&&i.push(a),w&&(a.__E=a.__=null)}catch(D){if(t.__v=null,h||o!=null)if(D.then){for(t.__u|=h?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,t.__e=c}else{for(m=o.length;m--;)Me(o[m]);Se(t)}else t.__e=n.__e,t.__k=n.__k,D.then||Se(t);A.__e(D,t,n)}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=Lt(n.__e,t,n,s,r,o,i,h,l);return(u=A.diffed)&&u(t),128&t.__u?void 0:c}function Se(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(Se)}function Xe(e,t,n){for(var s=0;s<n.length;s++)Ie(n[s],n[++s],n[++s]);A.__c&&A.__c(t,e),e.some(function(r){try{e=r.__h,r.__h=[],e.some(function(o){o.call(r)})}catch(o){A.__e(o,r.__v)}})}function Qe(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:ue(e)?e.map(Qe):X({},e)}function Lt(e,t,n,s,r,o,i,c,h){var l,u,a,p,d,v,S,w=n.props||te,y=t.props,$=t.type;if($=="svg"?r="http://www.w3.org/2000/svg":$=="math"?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),o!=null){for(l=0;l<o.length;l++)if((d=o[l])&&"setAttribute"in d==!!$&&($?d.localName==$:d.nodeType==3)){e=d,o[l]=null;break}}if(e==null){if($==null)return document.createTextNode(y);e=document.createElementNS(r,$,y.is&&y),c&&(A.__m&&A.__m(t,o),c=!1),o=null}if($==null)w===y||c&&e.data==y||(e.data=y);else{if(o=o&&ce.call(e.childNodes),!c&&o!=null)for(w={},l=0;l<e.attributes.length;l++)w[(d=e.attributes[l]).name]=d.value;for(l in w)if(d=w[l],l!="children"){if(l=="dangerouslySetInnerHTML")a=d;else if(!(l in y)){if(l=="value"&&"defaultValue"in y||l=="checked"&&"defaultChecked"in y)continue;ae(e,l,null,d,r)}}for(l in y)d=y[l],l=="children"?p=d:l=="dangerouslySetInnerHTML"?u=d:l=="value"?v=d:l=="checked"?S=d:c&&typeof d!="function"||w[l]===d||ae(e,l,d,w[l],r);if(u)c||a&&(u.__html==a.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(a&&(e.innerHTML=""),qe(t.type=="template"?e.content:e,ue(p)?p:[p],t,n,s,$=="foreignObject"?"http://www.w3.org/1999/xhtml":r,o,i,o?o[0]:n.__k&&Y(n,0),c,h),o!=null)for(l=o.length;l--;)Me(o[l]);c||(l="value",$=="progress"&&v==null?e.removeAttribute("value"):v!=null&&(v!==e[l]||$=="progress"&&!v||$=="option"&&v!=w[l])&&ae(e,l,v,w[l],r),l="checked",S!=null&&S!=e[l]&&ae(e,l,S,w[l],r))}return e}function Ie(e,t,n){try{if(typeof e=="function"){var s=typeof e.__u=="function";s&&e.__u(),s&&t==null||(e.__u=e(t))}else e.current=t}catch(r){A.__e(r,n)}}function Ze(e,t,n){var s,r;if(A.unmount&&A.unmount(e),(s=e.ref)&&(s.current&&s.current!=e.__e||Ie(s,null,t)),(s=e.__c)!=null){if(s.componentWillUnmount)try{s.componentWillUnmount()}catch(o){A.__e(o,t)}s.base=s.__P=null}if(s=e.__k)for(r=0;r<s.length;r++)s[r]&&Ze(s[r],t,n||typeof e.type!="function");n||Me(e.__e),e.__c=e.__=e.__e=void 0}function Bt(e,t,n){return this.constructor(e,n)}function pe(e,t,n){var s,r,o,i;t==document&&(t=document.documentElement),A.__&&A.__(e,t),r=(s=typeof n=="function")?null:n&&n.__k||t.__k,o=[],i=[],xe(t,e=(!s&&n||t).__k=de(_e,null,[e]),r||te,te,t.namespaceURI,!s&&n?[n]:r?null:t.firstChild?ce.call(t.childNodes):null,o,!s&&n?n:r?r.__e:t.firstChild,s,i),Xe(o,e,i)}ce=Ve.slice,A={__e:function(e,t,n,s){for(var r,o,i;t=t.__;)if((r=t.__c)&&!r.__)try{if((o=r.constructor)&&o.getDerivedStateFromError!=null&&(r.setState(o.getDerivedStateFromError(e)),i=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(e,s||{}),i=r.__d),i)return r.__E=r}catch(c){e=c}throw e}},Be=0,Nt=function(e){return e!=null&&e.constructor===void 0},ee.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=X({},this.state),typeof e=="function"&&(e=e(X({},n),this.props)),e&&X(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),We(this))},ee.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),We(this))},ee.prototype.render=_e,Z=[],Ke=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,ze=function(e,t){return e.__v.__b-t.__v.__b},le.__r=0,Je=/(PointerCapture)$|Capture$/i,Te=0,ke=Le(!1),Ce=Le(!0),Ot=0;var et=function(e,t,n,s){var r;t[0]=0;for(var o=1;o<t.length;o++){var i=t[o++],c=t[o]?(t[0]|=i?1:2,n[t[o++]]):t[++o];i===3?s[0]=c:i===4?s[1]=Object.assign(s[1]||{},c):i===5?(s[1]=s[1]||{})[t[++o]]=c:i===6?s[1][t[++o]]+=c+"":i?(r=e.apply(c,et(e,c,n,["",null])),s.push(r),c[0]?t[0]|=2:(t[o-2]=0,t[o]=r)):s.push(c)}return s},Ye=new Map;function tt(e){var t=Ye.get(this);return t||(t=new Map,Ye.set(this,t)),(t=et(this,t.get(e)||(t.set(e,t=function(n){for(var s,r,o=1,i="",c="",h=[0],l=function(p){o===1&&(p||(i=i.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?h.push(0,p,i):o===3&&(p||i)?(h.push(3,p,i),o=2):o===2&&i==="..."&&p?h.push(4,p,0):o===2&&i&&!p?h.push(5,0,!0,i):o>=5&&((i||!p&&o===5)&&(h.push(o,0,i,r),o=6),p&&(h.push(o,p,0,r),o=6)),i=""},u=0;u<n.length;u++){u&&(o===1&&l(),l(u));for(var a=0;a<n[u].length;a++)s=n[u][a],o===1?s==="<"?(l(),h=[h],o=3):i+=s:o===4?i==="--"&&s===">"?(o=1,i=""):i=s+i[0]:c?s===c?c="":i+=s:s==='"'||s==="'"?c=s:s===">"?(l(),o=1):o&&(s==="="?(o=5,r=i,i=""):s==="/"&&(o<5||n[u][a+1]===">")?(l(),o===3&&(h=h[0]),o=h,(h=h[0]).push(2,0,o),o=0):s===" "||s===" "||s===`
|
|
2
|
-
`||s==="\r"?(l(),o=2):i+=s),o===3&&i==="!--"&&(o=4,
|
|
1
|
+
var ChatWidgetModule=(()=>{var Te=Object.defineProperty;var Ht=Object.getOwnPropertyDescriptor;var Nt=Object.getOwnPropertyNames;var Lt=Object.prototype.hasOwnProperty;var Ut=(e,t)=>{for(var n in t)Te(e,n,{get:t[n],enumerable:!0})},Kt=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Nt(t))!Lt.call(e,a)&&a!==n&&Te(e,a,{get:()=>t[a],enumerable:!(s=Ht(t,a))||s.enumerable});return e};var Wt=e=>Kt(Te({},"__esModule",{value:!0}),e);var vn={};Ut(vn,{ChatWidget:()=>Se,default:()=>yn});var pe,O,Je,Bt,ee,We,Ve,qe,Ge,Ie,Me,xe,jt,se={},Xe=[],zt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,he=Array.isArray;function Z(e,t){for(var n in t)e[n]=t[n];return e}function Ae(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function fe(e,t,n){var s,a,o,i={};for(o in t)o=="key"?s=t[o]:o=="ref"?a=t[o]:i[o]=t[o];if(arguments.length>2&&(i.children=arguments.length>3?pe.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(o in e.defaultProps)i[o]===void 0&&(i[o]=e.defaultProps[o]);return de(e,i,s,a,null)}function de(e,t,n,s,a){var o={type:e,props:t,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:a??++Je,__i:-1,__u:0};return a==null&&O.vnode!=null&&O.vnode(o),o}function me(e){return e.children}function ne(e,t){this.props=e,this.context=t}function te(e,t){if(t==null)return e.__?te(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?te(e):null}function Qe(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return Qe(e)}}function Be(e){(!e.__d&&(e.__d=!0)&&ee.push(e)&&!_e.__r++||We!=O.debounceRendering)&&((We=O.debounceRendering)||Ve)(_e)}function _e(){for(var e,t,n,s,a,o,i,c=1;ee.length;)ee.length>c&&ee.sort(qe),e=ee.shift(),c=ee.length,e.__d&&(n=void 0,s=void 0,a=(s=(t=e).__v).__e,o=[],i=[],t.__P&&((n=Z({},s)).__v=s.__v+1,O.vnode&&O.vnode(n),De(t.__P,n,s,t.__n,t.__P.namespaceURI,32&s.__u?[a]:null,o,a??te(s),!!(32&s.__u),i),n.__v=s.__v,n.__.__k[n.__i]=n,et(o,n,i),s.__e=s.__=null,n.__e!=a&&Qe(n)));_e.__r=0}function Ze(e,t,n,s,a,o,i,c,d,l,u){var r,_,p,v,w,y,g,k=s&&s.__k||Xe,I=t.length;for(d=Jt(n,t,k,d,I),r=0;r<I;r++)(p=n.__k[r])!=null&&(_=p.__i==-1?se:k[p.__i]||se,p.__i=r,y=De(e,p,_,a,o,i,c,d,l,u),v=p.__e,p.ref&&_.ref!=p.ref&&(_.ref&&Re(_.ref,null,p),u.push(p.ref,p.__c||v,p)),w==null&&v!=null&&(w=v),(g=!!(4&p.__u))||_.__k===p.__k?d=Ye(p,d,e,g):typeof p.type=="function"&&y!==void 0?d=y:v&&(d=v.nextSibling),p.__u&=-7);return n.__e=w,d}function Jt(e,t,n,s,a){var o,i,c,d,l,u=n.length,r=u,_=0;for(e.__k=new Array(a),o=0;o<a;o++)(i=t[o])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[o]=de(null,i,null,null,null):he(i)?i=e.__k[o]=de(me,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[o]=de(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[o]=i,d=o+_,i.__=e,i.__b=e.__b+1,c=null,(l=i.__i=Vt(i,n,d,r))!=-1&&(r--,(c=n[l])&&(c.__u|=2)),c==null||c.__v==null?(l==-1&&(a>u?_--:a<u&&_++),typeof i.type!="function"&&(i.__u|=4)):l!=d&&(l==d-1?_--:l==d+1?_++:(l>d?_--:_++,i.__u|=4))):e.__k[o]=null;if(r)for(o=0;o<u;o++)(c=n[o])!=null&&!(2&c.__u)&&(c.__e==s&&(s=te(c)),nt(c,c));return s}function Ye(e,t,n,s){var a,o;if(typeof e.type=="function"){for(a=e.__k,o=0;a&&o<a.length;o++)a[o]&&(a[o].__=e,t=Ye(a[o],t,n,s));return t}e.__e!=t&&(s&&(t&&e.type&&!t.parentNode&&(t=te(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function Vt(e,t,n,s){var a,o,i,c=e.key,d=e.type,l=t[n],u=l!=null&&(2&l.__u)==0;if(l===null&&c==null||u&&c==l.key&&d==l.type)return n;if(s>(u?1:0)){for(a=n-1,o=n+1;a>=0||o<t.length;)if((l=t[i=a>=0?a--:o++])!=null&&!(2&l.__u)&&c==l.key&&d==l.type)return i}return-1}function je(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||zt.test(t)?n:n+"px"}function ue(e,t,n,s,a){var o,i;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof s=="string"&&(e.style.cssText=s=""),s)for(t in s)n&&t in n||je(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||je(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")o=t!=(t=t.replace(Ge,"$1")),i=t.toLowerCase(),t=i in e||t=="onFocusOut"||t=="onFocusIn"?i.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n.u=s.u:(n.u=Ie,e.addEventListener(t,o?xe:Me,o)):e.removeEventListener(t,o?xe:Me,o);else{if(a=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function ze(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=Ie++;else if(t.t<n.u)return;return n(O.event?O.event(t):t)}}}function De(e,t,n,s,a,o,i,c,d,l){var u,r,_,p,v,w,y,g,k,I,N,J,z,V,W,B,q,H=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),o=[c=t.__e=n.__e]),(u=O.__b)&&u(t);e:if(typeof H=="function")try{if(g=t.props,k="prototype"in H&&H.prototype.render,I=(u=H.contextType)&&s[u.__c],N=u?I?I.props.value:u.__:s,n.__c?y=(r=t.__c=n.__c).__=r.__E:(k?t.__c=r=new H(g,N):(t.__c=r=new ne(g,N),r.constructor=H,r.render=Gt),I&&I.sub(r),r.state||(r.state={}),r.__n=s,_=r.__d=!0,r.__h=[],r._sb=[]),k&&r.__s==null&&(r.__s=r.state),k&&H.getDerivedStateFromProps!=null&&(r.__s==r.state&&(r.__s=Z({},r.__s)),Z(r.__s,H.getDerivedStateFromProps(g,r.__s))),p=r.props,v=r.state,r.__v=t,_)k&&H.getDerivedStateFromProps==null&&r.componentWillMount!=null&&r.componentWillMount(),k&&r.componentDidMount!=null&&r.__h.push(r.componentDidMount);else{if(k&&H.getDerivedStateFromProps==null&&g!==p&&r.componentWillReceiveProps!=null&&r.componentWillReceiveProps(g,N),t.__v==n.__v||!r.__e&&r.shouldComponentUpdate!=null&&r.shouldComponentUpdate(g,r.__s,N)===!1){for(t.__v!=n.__v&&(r.props=g,r.state=r.__s,r.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(h){h&&(h.__=t)}),J=0;J<r._sb.length;J++)r.__h.push(r._sb[J]);r._sb=[],r.__h.length&&i.push(r);break e}r.componentWillUpdate!=null&&r.componentWillUpdate(g,r.__s,N),k&&r.componentDidUpdate!=null&&r.__h.push(function(){r.componentDidUpdate(p,v,w)})}if(r.context=N,r.props=g,r.__P=e,r.__e=!1,z=O.__r,V=0,k){for(r.state=r.__s,r.__d=!1,z&&z(t),u=r.render(r.props,r.state,r.context),W=0;W<r._sb.length;W++)r.__h.push(r._sb[W]);r._sb=[]}else do r.__d=!1,z&&z(t),u=r.render(r.props,r.state,r.context),r.state=r.__s;while(r.__d&&++V<25);r.state=r.__s,r.getChildContext!=null&&(s=Z(Z({},s),r.getChildContext())),k&&!_&&r.getSnapshotBeforeUpdate!=null&&(w=r.getSnapshotBeforeUpdate(p,v)),B=u,u!=null&&u.type===me&&u.key==null&&(B=tt(u.props.children)),c=Ze(e,he(B)?B:[B],t,n,s,a,o,i,c,d,l),r.base=t.__e,t.__u&=-161,r.__h.length&&i.push(r),y&&(r.__E=r.__=null)}catch(h){if(t.__v=null,d||o!=null)if(h.then){for(t.__u|=d?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,t.__e=c}else{for(q=o.length;q--;)Ae(o[q]);Ee(t)}else t.__e=n.__e,t.__k=n.__k,h.then||Ee(t);O.__e(h,t,n)}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=qt(n.__e,t,n,s,a,o,i,d,l);return(u=O.diffed)&&u(t),128&t.__u?void 0:c}function Ee(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(Ee)}function et(e,t,n){for(var s=0;s<n.length;s++)Re(n[s],n[++s],n[++s]);O.__c&&O.__c(t,e),e.some(function(a){try{e=a.__h,a.__h=[],e.some(function(o){o.call(a)})}catch(o){O.__e(o,a.__v)}})}function tt(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:he(e)?e.map(tt):Z({},e)}function qt(e,t,n,s,a,o,i,c,d){var l,u,r,_,p,v,w,y=n.props||se,g=t.props,k=t.type;if(k=="svg"?a="http://www.w3.org/2000/svg":k=="math"?a="http://www.w3.org/1998/Math/MathML":a||(a="http://www.w3.org/1999/xhtml"),o!=null){for(l=0;l<o.length;l++)if((p=o[l])&&"setAttribute"in p==!!k&&(k?p.localName==k:p.nodeType==3)){e=p,o[l]=null;break}}if(e==null){if(k==null)return document.createTextNode(g);e=document.createElementNS(a,k,g.is&&g),c&&(O.__m&&O.__m(t,o),c=!1),o=null}if(k==null)y===g||c&&e.data==g||(e.data=g);else{if(o=o&&pe.call(e.childNodes),!c&&o!=null)for(y={},l=0;l<e.attributes.length;l++)y[(p=e.attributes[l]).name]=p.value;for(l in y)if(p=y[l],l!="children"){if(l=="dangerouslySetInnerHTML")r=p;else if(!(l in g)){if(l=="value"&&"defaultValue"in g||l=="checked"&&"defaultChecked"in g)continue;ue(e,l,null,p,a)}}for(l in g)p=g[l],l=="children"?_=p:l=="dangerouslySetInnerHTML"?u=p:l=="value"?v=p:l=="checked"?w=p:c&&typeof p!="function"||y[l]===p||ue(e,l,p,y[l],a);if(u)c||r&&(u.__html==r.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(r&&(e.innerHTML=""),Ze(t.type=="template"?e.content:e,he(_)?_:[_],t,n,s,k=="foreignObject"?"http://www.w3.org/1999/xhtml":a,o,i,o?o[0]:n.__k&&te(n,0),c,d),o!=null)for(l=o.length;l--;)Ae(o[l]);c||(l="value",k=="progress"&&v==null?e.removeAttribute("value"):v!=null&&(v!==e[l]||k=="progress"&&!v||k=="option"&&v!=y[l])&&ue(e,l,v,y[l],a),l="checked",w!=null&&w!=e[l]&&ue(e,l,w,y[l],a))}return e}function Re(e,t,n){try{if(typeof e=="function"){var s=typeof e.__u=="function";s&&e.__u(),s&&t==null||(e.__u=e(t))}else e.current=t}catch(a){O.__e(a,n)}}function nt(e,t,n){var s,a;if(O.unmount&&O.unmount(e),(s=e.ref)&&(s.current&&s.current!=e.__e||Re(s,null,t)),(s=e.__c)!=null){if(s.componentWillUnmount)try{s.componentWillUnmount()}catch(o){O.__e(o,t)}s.base=s.__P=null}if(s=e.__k)for(a=0;a<s.length;a++)s[a]&&nt(s[a],t,n||typeof e.type!="function");n||Ae(e.__e),e.__c=e.__=e.__e=void 0}function Gt(e,t,n){return this.constructor(e,n)}function ge(e,t,n){var s,a,o,i;t==document&&(t=document.documentElement),O.__&&O.__(e,t),a=(s=typeof n=="function")?null:n&&n.__k||t.__k,o=[],i=[],De(t,e=(!s&&n||t).__k=fe(me,null,[e]),a||se,se,t.namespaceURI,!s&&n?[n]:a?null:t.firstChild?pe.call(t.childNodes):null,o,!s&&n?n:a?a.__e:t.firstChild,s,i),et(o,e,i)}pe=Xe.slice,O={__e:function(e,t,n,s){for(var a,o,i;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&o.getDerivedStateFromError!=null&&(a.setState(o.getDerivedStateFromError(e)),i=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(e,s||{}),i=a.__d),i)return a.__E=a}catch(c){e=c}throw e}},Je=0,Bt=function(e){return e!=null&&e.constructor===void 0},ne.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=Z({},this.state),typeof e=="function"&&(e=e(Z({},n),this.props)),e&&Z(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Be(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Be(this))},ne.prototype.render=me,ee=[],Ve=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,qe=function(e,t){return e.__v.__b-t.__v.__b},_e.__r=0,Ge=/(PointerCapture)$|Capture$/i,Ie=0,Me=ze(!1),xe=ze(!0),jt=0;var ot=function(e,t,n,s){var a;t[0]=0;for(var o=1;o<t.length;o++){var i=t[o++],c=t[o]?(t[0]|=i?1:2,n[t[o++]]):t[++o];i===3?s[0]=c:i===4?s[1]=Object.assign(s[1]||{},c):i===5?(s[1]=s[1]||{})[t[++o]]=c:i===6?s[1][t[++o]]+=c+"":i?(a=e.apply(c,ot(e,c,n,["",null])),s.push(a),c[0]?t[0]|=2:(t[o-2]=0,t[o]=a)):s.push(c)}return s},st=new Map;function at(e){var t=st.get(this);return t||(t=new Map,st.set(this,t)),(t=ot(this,t.get(e)||(t.set(e,t=function(n){for(var s,a,o=1,i="",c="",d=[0],l=function(_){o===1&&(_||(i=i.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?d.push(0,_,i):o===3&&(_||i)?(d.push(3,_,i),o=2):o===2&&i==="..."&&_?d.push(4,_,0):o===2&&i&&!_?d.push(5,0,!0,i):o>=5&&((i||!_&&o===5)&&(d.push(o,0,i,a),o=6),_&&(d.push(o,_,0,a),o=6)),i=""},u=0;u<n.length;u++){u&&(o===1&&l(),l(u));for(var r=0;r<n[u].length;r++)s=n[u][r],o===1?s==="<"?(l(),d=[d],o=3):i+=s:o===4?i==="--"&&s===">"?(o=1,i=""):i=s+i[0]:c?s===c?c="":i+=s:s==='"'||s==="'"?c=s:s===">"?(l(),o=1):o&&(s==="="?(o=5,a=i,i=""):s==="/"&&(o<5||n[u][r+1]===">")?(l(),o===3&&(d=d[0]),o=d,(d=d[0]).push(2,0,o),o=0):s===" "||s===" "||s===`
|
|
2
|
+
`||s==="\r"?(l(),o=2):i+=s),o===3&&i==="!--"&&(o=4,d=d[0])}return l(),d}(e)),t),arguments,[])).length>1?t:t[0]}var f=at.bind(fe);var oe,L,Pe,rt,ae=0,ht=[],U=O,it=U.__b,lt=U.__r,ct=U.diffed,ut=U.__c,dt=U.unmount,_t=U.__;function Oe(e,t){U.__h&&U.__h(L,e,ae||t),ae=0;var n=L.__H||(L.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function C(e){return ae=1,Xt(mt,e)}function Xt(e,t,n){var s=Oe(oe++,2);if(s.t=e,!s.__c&&(s.__=[n?n(t):mt(void 0,t),function(c){var d=s.__N?s.__N[0]:s.__[0],l=s.t(d,c);d!==l&&(s.__N=[l,s.__[1]],s.__c.setState({}))}],s.__c=L,!L.__f)){var a=function(c,d,l){if(!s.__c.__H)return!0;var u=s.__c.__H.__.filter(function(_){return!!_.__c});if(u.every(function(_){return!_.__N}))return!o||o.call(this,c,d,l);var r=s.__c.props!==c;return u.forEach(function(_){if(_.__N){var p=_.__[0];_.__=_.__N,_.__N=void 0,p!==_.__[0]&&(r=!0)}}),o&&o.call(this,c,d,l)||r};L.__f=!0;var o=L.shouldComponentUpdate,i=L.componentWillUpdate;L.componentWillUpdate=function(c,d,l){if(this.__e){var u=o;o=void 0,a(c,d,l),o=u}i&&i.call(this,c,d,l)},L.shouldComponentUpdate=a}return s.__N||s.__}function K(e,t){var n=Oe(oe++,3);!U.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,L.__H.__h.push(n))}function X(e){return ae=5,re(function(){return{current:e}},[])}function re(e,t){var n=Oe(oe++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function A(e,t){return ae=8,re(function(){return e},t)}function Qt(){for(var e;e=ht.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(ye),e.__H.__h.forEach(Fe),e.__H.__h=[]}catch(t){e.__H.__h=[],U.__e(t,e.__v)}}U.__b=function(e){L=null,it&&it(e)},U.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),_t&&_t(e,t)},U.__r=function(e){lt&<(e),oe=0;var t=(L=e.__c).__H;t&&(Pe===L?(t.__h=[],L.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.forEach(ye),t.__h.forEach(Fe),t.__h=[],oe=0)),Pe=L},U.diffed=function(e){ct&&ct(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(ht.push(t)!==1&&rt===U.requestAnimationFrame||((rt=U.requestAnimationFrame)||Zt)(Qt)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Pe=L=null},U.__c=function(e,t){t.some(function(n){try{n.__h.forEach(ye),n.__h=n.__h.filter(function(s){return!s.__||Fe(s)})}catch(s){t.some(function(a){a.__h&&(a.__h=[])}),t=[],U.__e(s,n.__v)}}),ut&&ut(e,t)},U.unmount=function(e){dt&&dt(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(s){try{ye(s)}catch(a){t=a}}),n.__H=void 0,t&&U.__e(t,n.__v))};var pt=typeof requestAnimationFrame=="function";function Zt(e){var t,n=function(){clearTimeout(s),pt&&cancelAnimationFrame(t),setTimeout(e)},s=setTimeout(n,35);pt&&(t=requestAnimationFrame(n))}function ye(e){var t=L,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),L=t}function Fe(e){var t=L;e.__c=e.__(),L=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,s){return n!==e[s]})}function mt(e,t){return typeof t=="function"?t(e):t}function Yt(e){return e.replace(/_([a-z])/g,(t,n)=>n.toUpperCase())}function He(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function ve(e){return Array.isArray(e)?e.map(ve):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[Yt(t),ve(n)])):e}function we(e){return Array.isArray(e)?e.map(we):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[He(t),we(n)])):e}function $e(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function j(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function gt(e){if(!e)return"";try{let t=new Date(e),s=new Date-t,a=Math.floor(s/6e4),o=Math.floor(s/36e5),i=Math.floor(s/864e5);return a<1?"Just now":a<60?`${a}m ago`:o<24?`${o}h ago`:i<7?`${i}d ago`:t.toLocaleDateString()}catch{return""}}function yt(e,t=null){if(t)return t(e);let n=j(e);return n=n.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),n=n.replace(/__(.+?)__/g,"<strong>$1</strong>"),n=n.replace(/\*(.+?)\*/g,"<em>$1</em>"),n=n.replace(/_(.+?)_/g,"<em>$1</em>"),n=n.replace(/`(.+?)`/g,"<code>$1</code>"),n=n.replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),n=n.replace(/\n/g,"<br>"),n}function vt(e=""){let t=n=>e?`${n}_${e}`:n;return{get(n){try{return localStorage.getItem(t(n))}catch{return null}},set(n,s){try{let a=t(n);s===null?localStorage.removeItem(a):localStorage.setItem(a,s)}catch{}}}}function wt(e="csrftoken"){let t=document.cookie.split(";");for(let s of t){let[a,o]=s.trim().split("=");if(a===e)return decodeURIComponent(o)}let n=document.querySelector('meta[name="csrf-token"]');return n?n.getAttribute("content"):null}function ke(e){if(e===0)return"0 B";let t=1024,n=["B","KB","MB","GB"],s=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,s)).toFixed(1))+" "+n[s]}function be(e){return e?e.startsWith("image/")?"\u{1F5BC}\uFE0F":e.startsWith("video/")?"\u{1F3AC}":e.startsWith("audio/")?"\u{1F3B5}":e.includes("pdf")?"\u{1F4D5}":e.includes("spreadsheet")||e.includes("excel")?"\u{1F4CA}":e.includes("document")||e.includes("word")?"\u{1F4DD}":e.includes("presentation")||e.includes("powerpoint")?"\u{1F4FD}\uFE0F":e.includes("zip")||e.includes("compressed")?"\u{1F5DC}\uFE0F":(e.includes("text/"),"\u{1F4C4}"):"\u{1F4C4}"}function $t({config:e,debugMode:t,isExpanded:n,isSpeaking:s,messagesCount:a,isLoading:o,currentAgent:i,onClose:c,onToggleExpand:d,onToggleDebug:l,onToggleTTS:u,onClear:r,onToggleSidebar:_}){let{title:p,primaryColor:v,embedded:w,showConversationSidebar:y,showClearButton:g,showDebugButton:k,enableDebugMode:I,showTTSButton:N,showExpandButton:J,enableTTS:z,elevenLabsApiKey:V,ttsProxyUrl:W}=e,B=V||W;return f`
|
|
3
3
|
<div class="cw-header" style=${{backgroundColor:v}}>
|
|
4
|
-
${
|
|
4
|
+
${y&&f`
|
|
5
5
|
<button
|
|
6
6
|
class="cw-header-btn cw-hamburger"
|
|
7
|
-
onClick=${
|
|
7
|
+
onClick=${_}
|
|
8
8
|
title="Conversations"
|
|
9
9
|
>
|
|
10
10
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16">
|
|
@@ -16,26 +16,26 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
16
16
|
`}
|
|
17
17
|
|
|
18
18
|
<div class="cw-title-container">
|
|
19
|
-
<span class="cw-title">${
|
|
20
|
-
${i&&
|
|
19
|
+
<span class="cw-title">${j(p)}</span>
|
|
20
|
+
${i&&f`
|
|
21
21
|
<span class="cw-current-agent" title="Currently active agent">
|
|
22
22
|
<span class="cw-agent-indicator">🤖</span>
|
|
23
|
-
<span class="cw-agent-name">${
|
|
23
|
+
<span class="cw-agent-name">${j(i.name||i.key)}</span>
|
|
24
24
|
</span>
|
|
25
25
|
`}
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
28
|
<div class="cw-header-actions">
|
|
29
|
-
${
|
|
29
|
+
${g&&f`
|
|
30
30
|
<button
|
|
31
31
|
class="cw-header-btn"
|
|
32
|
-
onClick=${
|
|
32
|
+
onClick=${r}
|
|
33
33
|
title="Clear"
|
|
34
|
-
disabled=${o||
|
|
34
|
+
disabled=${o||a===0}
|
|
35
35
|
>🗑️</button>
|
|
36
36
|
`}
|
|
37
37
|
|
|
38
|
-
${
|
|
38
|
+
${k&&I&&f`
|
|
39
39
|
<button
|
|
40
40
|
class="cw-header-btn ${t?"cw-btn-active":""}"
|
|
41
41
|
onClick=${l}
|
|
@@ -43,23 +43,23 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
43
43
|
>🐛</button>
|
|
44
44
|
`}
|
|
45
45
|
|
|
46
|
-
${
|
|
46
|
+
${N&&B&&f`
|
|
47
47
|
<button
|
|
48
|
-
class="cw-header-btn ${
|
|
48
|
+
class="cw-header-btn ${z?"cw-btn-active":""}"
|
|
49
49
|
onClick=${u}
|
|
50
50
|
title="TTS"
|
|
51
|
-
>${
|
|
51
|
+
>${z?"\u{1F50A}":"\u{1F507}"}</button>
|
|
52
52
|
`}
|
|
53
53
|
|
|
54
|
-
${
|
|
54
|
+
${J&&!w&&f`
|
|
55
55
|
<button
|
|
56
56
|
class="cw-header-btn"
|
|
57
|
-
onClick=${
|
|
57
|
+
onClick=${d}
|
|
58
58
|
title=${n?"Minimize":"Expand"}
|
|
59
59
|
>${n?"\u2296":"\u2295"}</button>
|
|
60
60
|
`}
|
|
61
61
|
|
|
62
|
-
${!
|
|
62
|
+
${!w&&f`
|
|
63
63
|
<button
|
|
64
64
|
class="cw-header-btn"
|
|
65
65
|
onClick=${c}
|
|
@@ -68,87 +68,172 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
68
68
|
`}
|
|
69
69
|
</div>
|
|
70
70
|
</div>
|
|
71
|
-
`}function
|
|
71
|
+
`}function Ne({msg:e,show:t,onToggle:n}){return t?f`
|
|
72
72
|
<div class="cw-debug-payload">
|
|
73
73
|
<button class="cw-debug-payload-close" onClick=${n}>×</button>
|
|
74
74
|
<pre class="cw-debug-payload-content">${JSON.stringify(e,null,2)}</pre>
|
|
75
75
|
</div>
|
|
76
|
-
`:
|
|
76
|
+
`:f`
|
|
77
77
|
<button
|
|
78
78
|
class="cw-debug-payload-btn"
|
|
79
79
|
onClick=${n}
|
|
80
80
|
title="Show message payload"
|
|
81
81
|
>{ }</button>
|
|
82
|
-
`}function
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
`}function kt({onEdit:e,onRetry:t,isLoading:n,position:s,showEdit:a=!0}){return n?null:f`
|
|
83
|
+
<div class="cw-message-actions cw-message-actions-${s||"left"}">
|
|
84
|
+
${a&&f`
|
|
85
|
+
<button
|
|
86
|
+
class="cw-message-action-btn"
|
|
87
|
+
onClick=${e}
|
|
88
|
+
title="Edit message"
|
|
89
|
+
>
|
|
90
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
91
|
+
<path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path>
|
|
92
|
+
</svg>
|
|
93
|
+
</button>
|
|
94
|
+
`}
|
|
95
|
+
<button
|
|
96
|
+
class="cw-message-action-btn"
|
|
97
|
+
onClick=${t}
|
|
98
|
+
title="Retry from here"
|
|
99
|
+
>
|
|
100
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
101
|
+
<path d="M21 2v6h-6"></path>
|
|
102
|
+
<path d="M3 12a9 9 0 0 1 15-6.7L21 8"></path>
|
|
103
|
+
<path d="M3 22v-6h6"></path>
|
|
104
|
+
<path d="M21 12a9 9 0 0 1-15 6.7L3 16"></path>
|
|
105
|
+
</svg>
|
|
106
|
+
</button>
|
|
107
|
+
</div>
|
|
108
|
+
`}function en({initialContent:e,onSave:t,onCancel:n}){let[s,a]=C(e),o=X(null);return K(()=>{o.current&&(o.current.focus(),o.current.setSelectionRange(s.length,s.length),o.current.style.height="auto",o.current.style.height=o.current.scrollHeight+"px")},[]),f`
|
|
109
|
+
<div class="cw-inline-edit">
|
|
110
|
+
<textarea
|
|
111
|
+
ref=${o}
|
|
112
|
+
class="cw-inline-edit-input"
|
|
113
|
+
value=${s}
|
|
114
|
+
onInput=${d=>{a(d.target.value),d.target.style.height="auto",d.target.style.height=d.target.scrollHeight+"px"}}
|
|
115
|
+
onKeyDown=${d=>{d.key==="Enter"&&!d.shiftKey?(d.preventDefault(),s.trim()&&t(s.trim())):d.key==="Escape"&&n()}}
|
|
116
|
+
rows="1"
|
|
117
|
+
/>
|
|
118
|
+
<div class="cw-inline-edit-actions">
|
|
119
|
+
<button
|
|
120
|
+
class="cw-inline-edit-btn cw-inline-edit-cancel"
|
|
121
|
+
onClick=${n}
|
|
122
|
+
title="Cancel (Esc)"
|
|
123
|
+
>Cancel</button>
|
|
124
|
+
<button
|
|
125
|
+
class="cw-inline-edit-btn cw-inline-edit-save"
|
|
126
|
+
onClick=${()=>s.trim()&&t(s.trim())}
|
|
127
|
+
disabled=${!s.trim()}
|
|
128
|
+
title="Save & Resend (Enter)"
|
|
129
|
+
>Save & Send</button>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
`}function bt({msg:e,debugMode:t,markdownParser:n,onEdit:s,onRetry:a,isLoading:o,messageIndex:i}){let[c,d]=C(!1),[l,u]=C(!1),[r,_]=C(!1),p=e.role==="user",v=e.role==="system",w=e.type==="tool_call",y=e.type==="tool_result",g=e.type==="error",k=e.type==="sub_agent_start",I=e.type==="sub_agent_end",N=e.type==="agent_context";if(v&&!t)return null;if(k||I||N)return f`
|
|
133
|
+
<div class="cw-agent-context ${k?"cw-agent-delegating":""} ${I?"cw-agent-returned":""}" style="position: relative;">
|
|
134
|
+
<span class="cw-agent-context-icon">${k?"\u{1F517}":I?"\u2713":"\u{1F916}"}</span>
|
|
85
135
|
<span class="cw-agent-context-text">${e.content}</span>
|
|
86
|
-
${e.metadata?.agentName&&
|
|
136
|
+
${e.metadata?.agentName&&f`
|
|
87
137
|
<span class="cw-agent-context-name">${e.metadata.agentName}</span>
|
|
88
138
|
`}
|
|
89
|
-
${t&&
|
|
139
|
+
${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
|
|
90
140
|
</div>
|
|
91
|
-
`;if(
|
|
92
|
-
<div class="cw-tool-message ${
|
|
93
|
-
<span class="cw-tool-label" onClick=${()=>
|
|
141
|
+
`;if(w||y){let S=e.metadata?.arguments||e.metadata?.result,E=$=>{if(typeof $=="string")try{return JSON.stringify(JSON.parse($),null,2)}catch{return $}return JSON.stringify($,null,2)};return f`
|
|
142
|
+
<div class="cw-tool-message ${y?"cw-tool-result":"cw-tool-call"}" style="position: relative;">
|
|
143
|
+
<span class="cw-tool-label" onClick=${()=>S&&d(!c)}>
|
|
94
144
|
${e.content}
|
|
95
|
-
${
|
|
145
|
+
${S&&f`<span class="cw-tool-expand">${c?"\u25BC":"\u25B6"}</span>`}
|
|
96
146
|
</span>
|
|
97
|
-
${
|
|
98
|
-
<pre class="cw-tool-details">${
|
|
147
|
+
${c&&S&&f`
|
|
148
|
+
<pre class="cw-tool-details">${j(E(w?e.metadata.arguments:e.metadata.result))}</pre>
|
|
99
149
|
`}
|
|
100
|
-
${t&&
|
|
150
|
+
${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
|
|
101
151
|
</div>
|
|
102
|
-
`}let
|
|
103
|
-
<div class=${w} style="position: relative;">
|
|
104
|
-
${$?g`
|
|
152
|
+
`}let J=["cw-message",p&&"cw-message-user",g&&"cw-message-error"].filter(Boolean).join(" "),z=`cw-message-row ${p?"cw-message-row-user":""}`,V=e.role==="assistant"?yt(e.content,n):j(e.content),W=e.files&&e.files.length>0,B=()=>W?f`
|
|
105
153
|
<div class="cw-message-attachments">
|
|
106
|
-
${e.files.map(
|
|
107
|
-
<a class="cw-attachment-thumbnail" href=${
|
|
108
|
-
<img src=${
|
|
154
|
+
${e.files.map(S=>S.type&&S.type.startsWith("image/")?f`
|
|
155
|
+
<a class="cw-attachment-thumbnail" href=${S.url} target="_blank" title=${S.name}>
|
|
156
|
+
<img src=${S.url} alt=${S.name} />
|
|
109
157
|
</a>
|
|
110
|
-
`:
|
|
111
|
-
<a class="cw-attachment-file" href=${
|
|
112
|
-
<span class="cw-attachment-icon">${
|
|
158
|
+
`:f`
|
|
159
|
+
<a class="cw-attachment-file" href=${S.url} target="_blank" title=${S.name}>
|
|
160
|
+
<span class="cw-attachment-icon">${be(S.type)}</span>
|
|
113
161
|
<span class="cw-attachment-info">
|
|
114
|
-
<span class="cw-attachment-name">${
|
|
115
|
-
<span class="cw-attachment-size">${
|
|
162
|
+
<span class="cw-attachment-name">${S.name}</span>
|
|
163
|
+
<span class="cw-attachment-size">${ke(S.size)}</span>
|
|
116
164
|
</span>
|
|
117
165
|
</a>
|
|
118
166
|
`)}
|
|
119
167
|
</div>
|
|
120
|
-
`:null}
|
|
121
|
-
<div class=${
|
|
122
|
-
|
|
168
|
+
`:null,q=S=>{_(!1),s&&s(i,S)},H=()=>{a&&a(i)};if(p&&r)return f`
|
|
169
|
+
<div class=${z} style="position: relative;">
|
|
170
|
+
${B()}
|
|
171
|
+
<${en}
|
|
172
|
+
initialContent=${e.content}
|
|
173
|
+
onSave=${q}
|
|
174
|
+
onCancel=${()=>_(!1)}
|
|
175
|
+
/>
|
|
176
|
+
</div>
|
|
177
|
+
`;let h=p&&s&&a,T=e.role==="assistant"&&a&&!o;return f`
|
|
178
|
+
<div class="${z} ${h||T?"cw-message-row-with-actions":""}">
|
|
179
|
+
${B()}
|
|
180
|
+
${h&&f`
|
|
181
|
+
<div class="cw-user-actions-wrapper">
|
|
182
|
+
<${kt}
|
|
183
|
+
onEdit=${()=>_(!0)}
|
|
184
|
+
onRetry=${H}
|
|
185
|
+
isLoading=${o}
|
|
186
|
+
position="left"
|
|
187
|
+
showEdit=${!0}
|
|
188
|
+
/>
|
|
189
|
+
<div class=${J} dangerouslySetInnerHTML=${{__html:V}} />
|
|
190
|
+
</div>
|
|
191
|
+
`}
|
|
192
|
+
${!h&&f`
|
|
193
|
+
<div class=${J} dangerouslySetInnerHTML=${{__html:V}} />
|
|
194
|
+
`}
|
|
195
|
+
${T&&f`
|
|
196
|
+
<${kt}
|
|
197
|
+
onRetry=${H}
|
|
198
|
+
isLoading=${o}
|
|
199
|
+
position="right"
|
|
200
|
+
showEdit=${!1}
|
|
201
|
+
/>
|
|
202
|
+
`}
|
|
203
|
+
${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
|
|
123
204
|
</div>
|
|
124
|
-
`}function
|
|
125
|
-
<div class="cw-messages" ref=${
|
|
126
|
-
${
|
|
205
|
+
`}function Ct({messages:e,isLoading:t,hasMoreMessages:n,loadingMoreMessages:s,onLoadMore:a,onEditMessage:o,onRetryMessage:i,debugMode:c,markdownParser:d,emptyStateTitle:l,emptyStateMessage:u}){let r=X(null),_=X(!0),p=w=>{let y=w.target,g=y.scrollHeight-y.scrollTop-y.clientHeight<100;if(_.current=g,y.scrollTop<50&&n&&!s){let k=y.scrollHeight;a().then(()=>{let I=y.scrollHeight;y.scrollTop=I-k+y.scrollTop})}};K(()=>{let w=r.current;w&&_.current&&requestAnimationFrame(()=>{w.scrollTop=w.scrollHeight})},[e,t]),K(()=>{let w=r.current;w&&e.length<=2&&(_.current=!0,requestAnimationFrame(()=>{w.scrollTop=w.scrollHeight}))},[e.length]);let v=e.length===0;return f`
|
|
206
|
+
<div class="cw-messages" ref=${r} onScroll=${p}>
|
|
207
|
+
${v&&f`
|
|
127
208
|
<div class="cw-empty-state">
|
|
128
209
|
<svg class="cw-empty-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
129
210
|
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
130
211
|
</svg>
|
|
131
|
-
<h3>${
|
|
132
|
-
<p>${
|
|
212
|
+
<h3>${j(l)}</h3>
|
|
213
|
+
<p>${j(u)}</p>
|
|
133
214
|
</div>
|
|
134
215
|
`}
|
|
135
216
|
|
|
136
|
-
${!
|
|
137
|
-
<div class="cw-load-more" onClick=${
|
|
138
|
-
${s?
|
|
217
|
+
${!v&&n&&f`
|
|
218
|
+
<div class="cw-load-more" onClick=${a}>
|
|
219
|
+
${s?f`<span class="cw-spinner"></span><span>Loading...</span>`:f`<span>↑ Scroll up or click to load older messages</span>`}
|
|
139
220
|
</div>
|
|
140
221
|
`}
|
|
141
222
|
|
|
142
|
-
${e.map(
|
|
143
|
-
<${
|
|
144
|
-
key=${
|
|
145
|
-
msg=${
|
|
146
|
-
|
|
147
|
-
|
|
223
|
+
${e.map((w,y)=>f`
|
|
224
|
+
<${bt}
|
|
225
|
+
key=${w.id}
|
|
226
|
+
msg=${w}
|
|
227
|
+
messageIndex=${y}
|
|
228
|
+
debugMode=${c}
|
|
229
|
+
markdownParser=${d}
|
|
230
|
+
onEdit=${o}
|
|
231
|
+
onRetry=${i}
|
|
232
|
+
isLoading=${t}
|
|
148
233
|
/>
|
|
149
234
|
`)}
|
|
150
235
|
|
|
151
|
-
${t&&
|
|
236
|
+
${t&&f`
|
|
152
237
|
<div class="cw-message-row">
|
|
153
238
|
<div class="cw-typing">
|
|
154
239
|
<span class="cw-spinner"></span>
|
|
@@ -157,41 +242,41 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
157
242
|
</div>
|
|
158
243
|
`}
|
|
159
244
|
</div>
|
|
160
|
-
`}var
|
|
245
|
+
`}var Le=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function St({onSend:e,onCancel:t,isLoading:n,placeholder:s,primaryColor:a,enableVoice:o=!0,enableFiles:i=!0}){let[c,d]=C(""),[l,u]=C([]),[r,_]=C(!1),[p,v]=C(!1),[w]=C(()=>!!Le),y=X(null),g=X(null),k=X(null),I=X(!1);K(()=>{!n&&y.current&&y.current.focus()},[n]),K(()=>{y.current&&(y.current.style.height="auto",y.current.style.height=Math.min(y.current.scrollHeight,150)+"px")},[c]),K(()=>()=>{I.current=!1,k.current&&k.current.abort()},[]);let N=$=>{$.preventDefault(),(c.trim()||l.length>0)&&!n&&(e(c,l),d(""),u([]),y.current&&(y.current.style.height="auto"),g.current&&(g.current.value=""))},J=$=>{let D=Array.from($.target.files||[]);D.length>0&&u(F=>[...F,...D])},z=$=>{u(D=>D.filter((F,m)=>m!==$))},V=$=>{$.preventDefault(),g.current&&!n&&g.current.click()},W=$=>{$.key==="Enter"&&!$.shiftKey&&($.preventDefault(),N($))},B=$=>{n&&t&&($.preventDefault(),t())},q=()=>{if(!Le||n)return;I.current=!0;let $=new Le;$.continuous=!0,$.interimResults=!0,$.lang=navigator.language||"en-US";let D=c,F="";$.onstart=()=>{v(!0)},$.onresult=m=>{F="";for(let b=m.resultIndex;b<m.results.length;b++){let R=m.results[b][0].transcript;m.results[b].isFinal?D+=(D?" ":"")+R:F+=R}d(D+(F?" "+F:""))},$.onerror=m=>{if(m.error==="no-speech"||m.error==="aborted"){console.log("[ChatWidget] Speech recognition:",m.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",m.error),I.current=!1,v(!1),d(D||c)},$.onend=()=>{if(I.current){console.log("[ChatWidget] Recognition paused, restarting...");try{$.start();return}catch(m){console.warn("[ChatWidget] Could not restart recognition:",m)}}v(!1),D&&d(D),k.current=null},k.current=$,$.start()},H=()=>{I.current=!1,k.current&&k.current.stop()},h=$=>{$.preventDefault(),p?H():q()},x=f`
|
|
161
246
|
<svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
|
|
162
247
|
<rect x="2" y="2" width="10" height="10" rx="1" />
|
|
163
248
|
</svg>
|
|
164
|
-
`,
|
|
249
|
+
`,T=f`
|
|
165
250
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
166
251
|
<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path>
|
|
167
252
|
<path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>
|
|
168
253
|
<line x1="12" y1="19" x2="12" y2="23"></line>
|
|
169
254
|
<line x1="8" y1="23" x2="16" y2="23"></line>
|
|
170
255
|
</svg>
|
|
171
|
-
`,M=
|
|
256
|
+
`,M=f`
|
|
172
257
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
173
258
|
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path>
|
|
174
259
|
</svg>
|
|
175
|
-
`,
|
|
176
|
-
<form class="cw-input-form" onSubmit=${
|
|
260
|
+
`,S=o&&w,E=i;return f`
|
|
261
|
+
<form class="cw-input-form" onSubmit=${N}>
|
|
177
262
|
<input
|
|
178
263
|
type="file"
|
|
179
|
-
ref=${
|
|
264
|
+
ref=${g}
|
|
180
265
|
style="display: none"
|
|
181
266
|
multiple
|
|
182
|
-
onChange=${
|
|
267
|
+
onChange=${J}
|
|
183
268
|
/>
|
|
184
|
-
${l.length>0&&
|
|
269
|
+
${l.length>0&&f`
|
|
185
270
|
<div class="cw-file-chips">
|
|
186
|
-
${l.map((
|
|
187
|
-
<div class="cw-file-chip" key=${
|
|
188
|
-
<span class="cw-file-chip-icon">${
|
|
189
|
-
<span class="cw-file-chip-name" title=${
|
|
190
|
-
<span class="cw-file-chip-size">(${
|
|
271
|
+
${l.map(($,D)=>f`
|
|
272
|
+
<div class="cw-file-chip" key=${D}>
|
|
273
|
+
<span class="cw-file-chip-icon">${be($.type)}</span>
|
|
274
|
+
<span class="cw-file-chip-name" title=${$.name}>${$.name.length>20?$.name.substring(0,17)+"...":$.name}</span>
|
|
275
|
+
<span class="cw-file-chip-size">(${ke($.size)})</span>
|
|
191
276
|
<button
|
|
192
277
|
type="button"
|
|
193
278
|
class="cw-file-chip-remove"
|
|
194
|
-
onClick=${()=>
|
|
279
|
+
onClick=${()=>z(D)}
|
|
195
280
|
title="Remove file"
|
|
196
281
|
>×</button>
|
|
197
282
|
</div>
|
|
@@ -199,54 +284,54 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
199
284
|
</div>
|
|
200
285
|
`}
|
|
201
286
|
<textarea
|
|
202
|
-
ref=${
|
|
287
|
+
ref=${y}
|
|
203
288
|
class="cw-input"
|
|
204
|
-
placeholder=${
|
|
289
|
+
placeholder=${j(s)}
|
|
205
290
|
value=${c}
|
|
206
|
-
onInput=${
|
|
207
|
-
onKeyDown=${
|
|
291
|
+
onInput=${$=>d($.target.value)}
|
|
292
|
+
onKeyDown=${W}
|
|
208
293
|
disabled=${n}
|
|
209
294
|
rows="1"
|
|
210
295
|
/>
|
|
211
|
-
${
|
|
296
|
+
${E&&f`
|
|
212
297
|
<button
|
|
213
298
|
type="button"
|
|
214
299
|
class="cw-attach-btn"
|
|
215
|
-
onClick=${
|
|
300
|
+
onClick=${V}
|
|
216
301
|
disabled=${n}
|
|
217
302
|
title="Attach files"
|
|
218
303
|
>
|
|
219
304
|
${M}
|
|
220
305
|
</button>
|
|
221
306
|
`}
|
|
222
|
-
${
|
|
307
|
+
${S&&f`
|
|
223
308
|
<button
|
|
224
309
|
type="button"
|
|
225
|
-
class=${`cw-voice-btn ${
|
|
226
|
-
onClick=${
|
|
310
|
+
class=${`cw-voice-btn ${p?"cw-voice-btn-recording":""}`}
|
|
311
|
+
onClick=${h}
|
|
227
312
|
disabled=${n}
|
|
228
|
-
title=${
|
|
313
|
+
title=${p?"Stop recording":"Voice input"}
|
|
229
314
|
>
|
|
230
|
-
${
|
|
315
|
+
${T}
|
|
231
316
|
</button>
|
|
232
317
|
`}
|
|
233
318
|
<button
|
|
234
319
|
type=${n?"button":"submit"}
|
|
235
|
-
class=${`cw-send-btn ${n?"cw-send-btn-loading":""} ${n&&
|
|
236
|
-
style=${{backgroundColor:n&&
|
|
320
|
+
class=${`cw-send-btn ${n?"cw-send-btn-loading":""} ${n&&r?"cw-send-btn-stop":""}`}
|
|
321
|
+
style=${{backgroundColor:n&&r?"#dc2626":a}}
|
|
237
322
|
onClick=${B}
|
|
238
|
-
onMouseEnter=${()=>
|
|
239
|
-
onMouseLeave=${()=>
|
|
323
|
+
onMouseEnter=${()=>_(!0)}
|
|
324
|
+
onMouseLeave=${()=>_(!1)}
|
|
240
325
|
title=${n?"Stop":"Send"}
|
|
241
326
|
>
|
|
242
|
-
${n?
|
|
327
|
+
${n?r?x:f`<span class="cw-spinner"></span>`:"\u27A4"}
|
|
243
328
|
</button>
|
|
244
329
|
</form>
|
|
245
|
-
`}function
|
|
330
|
+
`}function Tt({isOpen:e,conversations:t,conversationsLoading:n,currentConversationId:s,onClose:a,onNewConversation:o,onSwitchConversation:i}){return f`
|
|
246
331
|
<div class="cw-sidebar ${e?"cw-sidebar-open":""}">
|
|
247
332
|
<div class="cw-sidebar-header">
|
|
248
333
|
<span>Conversations</span>
|
|
249
|
-
<button class="cw-sidebar-close" onClick=${
|
|
334
|
+
<button class="cw-sidebar-close" onClick=${a}>✕</button>
|
|
250
335
|
</div>
|
|
251
336
|
|
|
252
337
|
<button class="cw-new-conversation" onClick=${o}>
|
|
@@ -254,24 +339,24 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
254
339
|
</button>
|
|
255
340
|
|
|
256
341
|
<div class="cw-conversation-list">
|
|
257
|
-
${n&&
|
|
342
|
+
${n&&f`
|
|
258
343
|
<div class="cw-sidebar-loading">
|
|
259
344
|
<span class="cw-spinner"></span>
|
|
260
345
|
</div>
|
|
261
346
|
`}
|
|
262
347
|
|
|
263
|
-
${!n&&t.length===0&&
|
|
348
|
+
${!n&&t.length===0&&f`
|
|
264
349
|
<div class="cw-sidebar-empty">No conversations yet</div>
|
|
265
350
|
`}
|
|
266
351
|
|
|
267
|
-
${t.map(c=>
|
|
352
|
+
${t.map(c=>f`
|
|
268
353
|
<div
|
|
269
354
|
key=${c.id}
|
|
270
355
|
class="cw-conversation-item ${c.id===s?"cw-conversation-active":""}"
|
|
271
356
|
onClick=${()=>i(c.id)}
|
|
272
357
|
>
|
|
273
|
-
<div class="cw-conversation-title">${
|
|
274
|
-
<div class="cw-conversation-date">${
|
|
358
|
+
<div class="cw-conversation-title">${j(c.title||"Untitled")}</div>
|
|
359
|
+
<div class="cw-conversation-date">${gt(c.updatedAt||c.createdAt)}</div>
|
|
275
360
|
</div>
|
|
276
361
|
`)}
|
|
277
362
|
</div>
|
|
@@ -279,40 +364,120 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
279
364
|
|
|
280
365
|
<div
|
|
281
366
|
class="cw-sidebar-overlay ${e?"cw-sidebar-overlay-visible":""}"
|
|
282
|
-
onClick=${
|
|
367
|
+
onClick=${a}
|
|
283
368
|
/>
|
|
284
|
-
`}function
|
|
369
|
+
`}function Mt({availableModels:e,selectedModel:t,onSelectModel:n,disabled:s}){let[a,o]=C(!1);if(!e||e.length===0)return null;let c=e.find(u=>u.id===t)?.name||"Select Model",d=()=>{s||o(!a)},l=u=>{n(u),o(!1)};return f`
|
|
285
370
|
<div class="cw-model-selector">
|
|
286
371
|
<button
|
|
287
372
|
class="cw-model-btn"
|
|
288
|
-
onClick=${
|
|
373
|
+
onClick=${d}
|
|
289
374
|
disabled=${s}
|
|
290
375
|
title="Select Model"
|
|
291
376
|
>
|
|
292
377
|
<span class="cw-model-icon">🤖</span>
|
|
293
|
-
<span class="cw-model-name">${
|
|
294
|
-
<span class="cw-model-chevron">${
|
|
378
|
+
<span class="cw-model-name">${j(c)}</span>
|
|
379
|
+
<span class="cw-model-chevron">${a?"\u25B2":"\u25BC"}</span>
|
|
295
380
|
</button>
|
|
296
381
|
|
|
297
|
-
${
|
|
382
|
+
${a&&f`
|
|
298
383
|
<div class="cw-model-dropdown">
|
|
299
|
-
${e.map(u=>
|
|
384
|
+
${e.map(u=>f`
|
|
300
385
|
<button
|
|
301
386
|
key=${u.id}
|
|
302
387
|
class="cw-model-option ${u.id===t?"cw-model-option-selected":""}"
|
|
303
388
|
onClick=${()=>l(u.id)}
|
|
304
389
|
>
|
|
305
|
-
<span class="cw-model-option-name">${
|
|
306
|
-
<span class="cw-model-option-provider">${
|
|
307
|
-
${u.description&&
|
|
308
|
-
<span class="cw-model-option-desc">${
|
|
390
|
+
<span class="cw-model-option-name">${j(u.name)}</span>
|
|
391
|
+
<span class="cw-model-option-provider">${j(u.provider)}</span>
|
|
392
|
+
${u.description&&f`
|
|
393
|
+
<span class="cw-model-option-desc">${j(u.description)}</span>
|
|
309
394
|
`}
|
|
310
395
|
</button>
|
|
311
396
|
`)}
|
|
312
397
|
</div>
|
|
313
398
|
`}
|
|
314
399
|
</div>
|
|
315
|
-
`}function kt(e,t,n){let[s,r]=C([]),[o,i]=C(!1),[c,h]=C(null),[l,u]=C(()=>n?.get(e.conversationIdKey)||null),[a,p]=C(!1),[d,v]=C(!1),[S,w]=C(0),y=q(null),$=q(null);W(()=>{l&&n?.set(e.conversationIdKey,l)},[l,e.conversationIdKey,n]);let R=K(async(m,b,D)=>{y.current&&y.current.close();let E=e.apiPaths.runEvents.replace("{runId}",m),U=`${e.backendUrl}${E}`;b&&(U+=`?anonymous_token=${encodeURIComponent(b)}`);let M=new EventSource(U);y.current=M;let N="";M.addEventListener("assistant.message",_=>{try{let f=JSON.parse(_.data);e.onEvent&&e.onEvent("assistant.message",f.payload);let k=f.payload.content;k&&(N+=k,r(x=>{let z=x[x.length-1];return z?.role==="assistant"&&z.id.startsWith("assistant-stream-")?[...x.slice(0,-1),{...z,content:N}]:[...x,{id:"assistant-stream-"+Date.now(),role:"assistant",content:N,timestamp:new Date,type:"message"}]}))}catch(f){console.error("[ChatWidget] Parse error:",f)}}),M.addEventListener("tool.call",_=>{try{let f=JSON.parse(_.data);e.onEvent&&e.onEvent("tool.call",f.payload),r(k=>[...k,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${f.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:f.payload.name,arguments:f.payload.arguments,toolCallId:f.payload.id}}])}catch(f){console.error("[ChatWidget] Parse error:",f)}}),M.addEventListener("tool.result",_=>{try{let f=JSON.parse(_.data);e.onEvent&&e.onEvent("tool.result",f.payload);let k=f.payload.result,x=k?.error;r(z=>[...z,{id:"tool-result-"+Date.now(),role:"system",content:x?`\u274C ${k.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:f.payload.name,result:k,toolCallId:f.payload.tool_call_id}}])}catch(f){console.error("[ChatWidget] Parse error:",f)}}),M.addEventListener("custom",_=>{try{let f=JSON.parse(_.data);e.onEvent&&e.onEvent("custom",f.payload),f.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(f.payload),f.payload?.type==="agent_context"&&r(k=>[...k,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${f.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:f.payload.agent_key,agentName:f.payload.agent_name,action:f.payload.action}}])}catch(f){console.error("[ChatWidget] Parse error:",f)}}),M.addEventListener("sub_agent.start",_=>{try{let f=JSON.parse(_.data);e.onEvent&&e.onEvent("sub_agent.start",f.payload),r(k=>[...k,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${f.payload.agent_name||f.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:f.payload.sub_agent_key,agentName:f.payload.agent_name,invocationMode:f.payload.invocation_mode}}])}catch(f){console.error("[ChatWidget] Parse error:",f)}}),M.addEventListener("sub_agent.end",_=>{try{let f=JSON.parse(_.data);e.onEvent&&e.onEvent("sub_agent.end",f.payload),r(k=>[...k,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${f.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:f.payload.sub_agent_key,agentName:f.payload.agent_name}}])}catch(f){console.error("[ChatWidget] Parse error:",f)}});let j=_=>{try{let f=JSON.parse(_.data);if(e.onEvent&&e.onEvent(f.type,f.payload),f.type==="run.failed"){let k=f.payload.error||"Agent run failed";h(k),r(x=>[...x,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${k}`,timestamp:new Date,type:"error"}])}}catch(f){console.error("[ChatWidget] Parse error:",f)}i(!1),M.close(),y.current=null,N&&D&&D(N)};M.addEventListener("run.succeeded",j),M.addEventListener("run.failed",j),M.addEventListener("run.cancelled",j),M.addEventListener("run.timed_out",j),M.onerror=()=>{i(!1),M.close(),y.current=null}},[e]),T=K(async(m,b={},D={})=>{if(!m.trim()||o)return;let E=[],U={};typeof b=="function"?U={onAssistantMessage:b}:Array.isArray(b)?(E=b,U=D):U=b||{};let{model:M,onAssistantMessage:N}=U;i(!0),h(null);let j={id:ge(),role:"user",content:m.trim(),timestamp:new Date,type:"message",files:E.length>0?E.map(_=>({name:_.name,size:_.size,type:_.type})):void 0};r(_=>[..._,j]);try{let _=await t.getOrCreateSession(),f;if(E.length>0){let G=e.apiCaseStyle!=="camel",Oe=re=>G?De(re):re,Q=new FormData;Q.append(Oe("agentKey"),e.agentKey),l&&Q.append(Oe("conversationId"),l),Q.append("messages",JSON.stringify([{role:"user",content:m.trim()}])),Q.append("metadata",JSON.stringify(G?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),M&&Q.append("model",M),E.forEach(re=>{Q.append("files",re)}),f=t.getFetchOptions({method:"POST",body:Q},_)}else{let G=t.transformRequest({agentKey:e.agentKey,conversationId:l,messages:[{role:"user",content:m.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...M&&{model:M}});f=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(G)},_)}let k=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,f);if(!k.ok){let G=await k.json().catch(()=>({}));throw new Error(G.error||`HTTP ${k.status}`)}let x=await k.json(),z=t.transformResponse(x);$.current=z.id,!l&&z.conversationId&&u(z.conversationId),await R(z.id,_,N)}catch(_){h(_.message||"Failed to send message"),i(!1)}finally{$.current=null}},[e,t,l,o,R]),L=K(async()=>{let m=$.current;if(!(!m||!o))try{let b=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",m):`${e.apiPaths.runs}${m}/cancel/`;(await fetch(`${e.backendUrl}${b}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(y.current&&(y.current.close(),y.current=null),i(!1),$.current=null,r(E=>[...E,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(b){console.error("[ChatWidget] Failed to cancel run:",b)}},[e,t,o]),P=K(()=>{r([]),u(null),h(null),p(!1),w(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),J=m=>{let b={id:ge(),role:m.role,timestamp:m.timestamp?new Date(m.timestamp):new Date};if(m.role==="tool")return{...b,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:m.content,toolCallId:m.toolCallId}};if(m.role==="assistant"&&m.toolCalls&&m.toolCalls.length>0)return m.toolCalls.map(E=>({id:ge(),role:"assistant",content:`\u{1F527} ${E.function?.name||E.name||"tool"}`,timestamp:b.timestamp,type:"tool_call",metadata:{toolName:E.function?.name||E.name,arguments:E.function?.arguments||E.arguments,toolCallId:E.id}}));let D=typeof m.content=="string"?m.content:JSON.stringify(m.content);return m.role==="assistant"&&!D?.trim()?null:{...b,content:D,type:"message"}},V=K(async m=>{i(!0),r([]),u(m);try{let b=await t.getOrCreateSession(),E=`${e.backendUrl}${e.apiPaths.conversations}${m}/?limit=10&offset=0`,U=await fetch(E,t.getFetchOptions({method:"GET"},b));if(U.ok){let M=await U.json(),N=t.transformResponse(M);N.messages&&r(N.messages.flatMap(J).filter(Boolean)),p(N.hasMore||!1),w(N.messages?.length||0)}else U.status===404&&(u(null),n?.set(e.conversationIdKey,null))}catch(b){console.error("[ChatWidget] Failed to load conversation:",b)}finally{i(!1)}},[e,t,n]),B=K(async()=>{if(!(!l||d||!a)){v(!0);try{let m=await t.getOrCreateSession(),D=`${e.backendUrl}${e.apiPaths.conversations}${l}/?limit=10&offset=${S}`,E=await fetch(D,t.getFetchOptions({method:"GET"},m));if(E.ok){let U=await E.json(),M=t.transformResponse(U);if(M.messages?.length>0){let N=M.messages.flatMap(J).filter(Boolean);r(j=>[...N,...j]),w(j=>j+M.messages.length),p(M.hasMore||!1)}else p(!1)}}catch(m){console.error("[ChatWidget] Failed to load more messages:",m)}finally{v(!1)}}},[e,t,l,S,d,a]);return W(()=>()=>{y.current&&y.current.close()},[]),{messages:s,isLoading:o,error:c,conversationId:l,hasMoreMessages:a,loadingMoreMessages:d,sendMessage:T,cancelRun:L,clearMessages:P,loadConversation:V,loadMoreMessages:B,setConversationId:u}}function Ct(e,t,n){let[s,r]=C([]),[o,i]=C(null),[c,h]=C(null),[l,u]=C(!1);W(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let v=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(v.ok){let S=await v.json(),w=S.models||[];r(w),h(S.default);let y=n?.get(e.modelKey);y&&w.some($=>$.id===y)?i(y):i(S.default)}}catch(v){console.warn("[ChatWidget] Failed to load models:",v)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let a=K(d=>{i(d),n?.set(e.modelKey,d)},[e.modelKey,n]),p=K(()=>s.find(d=>d.id===o)||null,[s,o]);return{availableModels:s,selectedModel:o,defaultModel:c,isLoading:l,selectModel:a,getSelectedModelInfo:p}}function St(e,t,n){let s=l=>!l||typeof l!="object"||e.apiCaseStyle==="camel"?l:me(l),r=l=>!l||typeof l!="object"||e.apiCaseStyle==="snake"?l:he(l),o=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",i=(l=null)=>{let u=o(),a={},p=l||e.authToken||t().authToken;if(u==="token"&&p){let d=e.authHeader||"Authorization",v=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";a[d]=v?`${v} ${p}`:p}else if(u==="jwt"&&p){let d=e.authHeader||"Authorization",v=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";a[d]=v?`${v} ${p}`:p}else if(u==="anonymous"&&p){let d=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";a[d]=p}if(u==="session"){let d=mt(e.csrfCookieName);d&&(a["X-CSRFToken"]=d)}return a};return{getAuthStrategy:o,getAuthHeaders:i,getFetchOptions:(l={},u=null)=>{let a=o(),p={...l};return p.headers={...p.headers,...i(u)},a==="session"&&(p.credentials="include"),p},getOrCreateSession:async()=>{let l=o(),u=t();if(l!=="anonymous")return e.authToken||u.authToken;if(u.authToken)return u.authToken;let a=e.anonymousTokenKey||e.sessionTokenKey,p=u.storage?.get(a);if(p)return n(d=>({...d,authToken:p})),p;try{let d=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,v=await fetch(`${e.backendUrl}${d}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(v.ok){let S=await v.json();return n(w=>({...w,authToken:S.token})),u.storage?.set(a,S.token),S.token}}catch(d){console.warn("[ChatWidget] Failed to create session:",d)}return null},transformRequest:s,transformResponse:r}}function Tt({config:e,onStateChange:t,markdownParser:n,apiRef:s}){let[r,o]=C(e.embedded||e.forceOpen===!0),[i,c]=C(!1),[h,l]=C(!1),[u,a]=C(!1),[p,d]=C([]),[v,S]=C(!1),[w,y]=C(e.enableTTS),[$,R]=C(!1),[T,L]=C(null);W(()=>{e.forceOpen!==void 0&&o(e.forceOpen)},[e.forceOpen]);let P=se(()=>ht(e.containerId),[e.containerId]),[J,V]=C(e.authToken||null),B=se(()=>St(e,()=>({authToken:J,storage:P}),k=>{let x=k({authToken:J,storage:P});x.authToken!==J&&V(x.authToken)}),[e,J,P]),m=kt(e,B,P),b=Ct(e,B,P);W(()=>{for(let _=m.messages.length-1;_>=0;_--){let f=m.messages[_];if(f.type==="sub_agent_start"){L({key:f.metadata?.subAgentKey,name:f.metadata?.agentName});return}if(f.type==="sub_agent_end"){L(null);return}}},[m.messages]),W(()=>{let _=P.get(e.conversationIdKey);_&&m.loadConversation(_)},[]),W(()=>{t&&t({isOpen:r,isExpanded:i,debugMode:h,messages:m.messages,conversationId:m.conversationId,isLoading:m.isLoading,error:m.error})},[r,i,h,m.messages,m.conversationId,m.isLoading,m.error]);let D=K(async()=>{if(e.showConversationSidebar){S(!0);try{let _=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(e.agentKey)}`,f=await fetch(_,B.getFetchOptions({method:"GET"}));if(f.ok){let k=await f.json();d(k.results||k)}}catch(_){console.error("[ChatWidget] Failed to load conversations:",_),d([])}finally{S(!1)}}},[e,B]),E=K(()=>{let _=!u;a(_),_&&D()},[u,D]),U=K(_=>{_!==m.conversationId&&m.loadConversation(_),a(!1)},[m]),M=K(()=>{m.clearMessages(),a(!1)},[m]),N=K(_=>{m.sendMessage(_,{model:b.selectedModel,onAssistantMessage:f=>{}})},[m,w,b.selectedModel]);if(W(()=>{s&&(s.current={open:()=>o(!0),close:()=>o(!1),send:_=>N(_),clearMessages:()=>m.clearMessages(),toggleTTS:()=>y(_=>!_),stopSpeech:()=>R(!1),setAuth:_=>{_.token!==void 0&&V(_.token)},clearAuth:()=>V(null)})},[m,s,N]),!e.embedded&&!r)return g`
|
|
400
|
+
`}var tn={not_started:"\u25CB",in_progress:"\u25D0",complete:"\u25CF",cancelled:"\u2298"},nn={not_started:"Not Started",in_progress:"In Progress",complete:"Complete",cancelled:"Cancelled"};function sn({task:e,onUpdate:t,onRemove:n,depth:s=0}){let[a,o]=C(!1),[i,c]=C(e.name),d=A(()=>{let _={not_started:"in_progress",in_progress:"complete",complete:"not_started",cancelled:"not_started"};t(e.id,{state:_[e.state]||"not_started"})},[e,t]),l=A(()=>{i.trim()&&i!==e.name&&t(e.id,{name:i.trim()}),o(!1)},[e,i,t]),u=A(_=>{_.key==="Enter"&&l(),_.key==="Escape"&&(c(e.name),o(!1))},[l,e.name]),r=`cw-task-state-${e.state.replace("_","-")}`;return f`
|
|
401
|
+
<div class="cw-task-item ${r}" style=${{paddingLeft:`${s*16+8}px`}}>
|
|
402
|
+
<button
|
|
403
|
+
class="cw-task-state-btn"
|
|
404
|
+
onClick=${d}
|
|
405
|
+
title=${nn[e.state]}
|
|
406
|
+
>
|
|
407
|
+
${tn[e.state]}
|
|
408
|
+
</button>
|
|
409
|
+
|
|
410
|
+
${a?f`
|
|
411
|
+
<input
|
|
412
|
+
type="text"
|
|
413
|
+
class="cw-task-edit-input"
|
|
414
|
+
value=${i}
|
|
415
|
+
onInput=${_=>c(_.target.value)}
|
|
416
|
+
onBlur=${l}
|
|
417
|
+
onKeyDown=${u}
|
|
418
|
+
autoFocus
|
|
419
|
+
/>
|
|
420
|
+
`:f`
|
|
421
|
+
<span
|
|
422
|
+
class="cw-task-name"
|
|
423
|
+
onClick=${()=>o(!0)}
|
|
424
|
+
title="Click to edit"
|
|
425
|
+
>
|
|
426
|
+
${e.name}
|
|
427
|
+
</span>
|
|
428
|
+
`}
|
|
429
|
+
|
|
430
|
+
<button
|
|
431
|
+
class="cw-task-remove-btn"
|
|
432
|
+
onClick=${()=>n(e.id)}
|
|
433
|
+
title="Remove task"
|
|
434
|
+
>
|
|
435
|
+
×
|
|
436
|
+
</button>
|
|
437
|
+
</div>
|
|
438
|
+
`}function xt({tasks:e,progress:t,isLoading:n,error:s,onUpdate:a,onRemove:o,onClear:i,onRefresh:c}){let d=A(r=>{let _=new Map,p=[];return r.forEach(v=>{_.set(v.id,{...v,children:[]})}),r.forEach(v=>{let w=_.get(v.id);v.parent_id&&_.has(v.parent_id)?_.get(v.parent_id).children.push(w):p.push(w)}),p},[]),l=A((r,_=0)=>f`
|
|
439
|
+
<${sn}
|
|
440
|
+
key=${r.id}
|
|
441
|
+
task=${r}
|
|
442
|
+
depth=${_}
|
|
443
|
+
onUpdate=${a}
|
|
444
|
+
onRemove=${o}
|
|
445
|
+
/>
|
|
446
|
+
${r.children?.map(p=>l(p,_+1))}
|
|
447
|
+
`,[a,o]),u=d(e);return n&&e.length===0?f`<div class="cw-tasks-loading">Loading tasks...</div>`:f`
|
|
448
|
+
<div class="cw-tasks-container">
|
|
449
|
+
<div class="cw-tasks-header">
|
|
450
|
+
<div class="cw-tasks-progress">
|
|
451
|
+
<span class="cw-tasks-progress-text">
|
|
452
|
+
${t.completed}/${t.total} complete
|
|
453
|
+
</span>
|
|
454
|
+
<div class="cw-tasks-progress-bar">
|
|
455
|
+
<div
|
|
456
|
+
class="cw-tasks-progress-fill"
|
|
457
|
+
style=${{width:`${t.percent_complete}%`}}
|
|
458
|
+
/>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
<div class="cw-tasks-actions">
|
|
462
|
+
<button class="cw-tasks-action-btn" onClick=${c} title="Refresh">↻</button>
|
|
463
|
+
${e.length>0&&f`
|
|
464
|
+
<button class="cw-tasks-action-btn" onClick=${i} title="Clear all">🗑</button>
|
|
465
|
+
`}
|
|
466
|
+
</div>
|
|
467
|
+
</div>
|
|
468
|
+
|
|
469
|
+
${s&&f`<div class="cw-tasks-error">${s}</div>`}
|
|
470
|
+
|
|
471
|
+
<div class="cw-tasks-list">
|
|
472
|
+
${u.length===0?f`
|
|
473
|
+
<div class="cw-tasks-empty">
|
|
474
|
+
<p>No tasks yet</p>
|
|
475
|
+
<p class="cw-tasks-empty-hint">Tasks will appear here when the agent creates them</p>
|
|
476
|
+
</div>
|
|
477
|
+
`:u.map(r=>l(r))}
|
|
478
|
+
</div>
|
|
479
|
+
</div>
|
|
480
|
+
`}function Et(e,t,n){let[s,a]=C([]),[o,i]=C(!1),[c,d]=C(null),[l,u]=C(()=>n?.get(e.conversationIdKey)||null),[r,_]=C(!1),[p,v]=C(!1),[w,y]=C(0),g=X(null),k=X(null);K(()=>{l&&n?.set(e.conversationIdKey,l)},[l,e.conversationIdKey,n]);let I=A(async(h,x,T)=>{g.current&&g.current.close();let M=e.apiPaths.runEvents.replace("{runId}",h),S=`${e.backendUrl}${M}`;x&&(S+=`?anonymous_token=${encodeURIComponent(x)}`);let E=new EventSource(S);g.current=E;let $="";E.addEventListener("assistant.message",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("assistant.message",m.payload);let b=m.payload.content;b&&($+=b,a(R=>{let G=R[R.length-1];return G?.role==="assistant"&&G.id.startsWith("assistant-stream-")?[...R.slice(0,-1),{...G,content:$}]:[...R,{id:"assistant-stream-"+Date.now(),role:"assistant",content:$,timestamp:new Date,type:"message"}]}))}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("tool.call",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.call",m.payload),a(b=>[...b,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${m.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:m.payload.name,arguments:m.payload.arguments,toolCallId:m.payload.id}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("tool.result",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.result",m.payload);let b=m.payload.result,R=b?.error;a(G=>[...G,{id:"tool-result-"+Date.now(),role:"system",content:R?`\u274C ${b.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:m.payload.name,result:b,toolCallId:m.payload.tool_call_id}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("custom",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("custom",m.payload),m.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(m.payload),m.payload?.type==="agent_context"&&a(b=>[...b,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${m.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:m.payload.agent_key,agentName:m.payload.agent_name,action:m.payload.action}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("sub_agent.start",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.start",m.payload),a(b=>[...b,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${m.payload.agent_name||m.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:m.payload.sub_agent_key,agentName:m.payload.agent_name,invocationMode:m.payload.invocation_mode}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("sub_agent.end",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.end",m.payload),a(b=>[...b,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${m.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:m.payload.sub_agent_key,agentName:m.payload.agent_name}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}});let D=F=>{try{let m=JSON.parse(F.data);if(e.onEvent&&e.onEvent(m.type,m.payload),m.type==="run.failed"){let b=m.payload.error||"Agent run failed";d(b),a(R=>[...R,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${b}`,timestamp:new Date,type:"error"}])}}catch(m){console.error("[ChatWidget] Parse error:",m)}i(!1),E.close(),g.current=null,$&&T&&T($)};E.addEventListener("run.succeeded",D),E.addEventListener("run.failed",D),E.addEventListener("run.cancelled",D),E.addEventListener("run.timed_out",D),E.onerror=()=>{i(!1),E.close(),g.current=null}},[e]),N=A(async(h,x={},T={})=>{if(!h.trim()||o)return;let M=[],S={};typeof x=="function"?S={onAssistantMessage:x}:Array.isArray(x)?(M=x,S=T):S=x||{};let{model:E,onAssistantMessage:$,supersedeFromMessageIndex:D}=S;i(!0),d(null);let F={id:$e(),role:"user",content:h.trim(),timestamp:new Date,type:"message",files:M.length>0?M.map(m=>({name:m.name,size:m.size,type:m.type})):void 0};a(m=>[...m,F]);try{let m=await t.getOrCreateSession(),b;if(M.length>0){let Q=e.apiCaseStyle!=="camel",Ke=ce=>Q?He(ce):ce,Y=new FormData;Y.append(Ke("agentKey"),e.agentKey),l&&Y.append(Ke("conversationId"),l),Y.append("messages",JSON.stringify([{role:"user",content:h.trim()}])),Y.append("metadata",JSON.stringify(Q?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&Y.append("model",E),M.forEach(ce=>{Y.append("files",ce)}),b=t.getFetchOptions({method:"POST",body:Y},m)}else{let Q=t.transformRequest({agentKey:e.agentKey,conversationId:l,messages:[{role:"user",content:h.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...E&&{model:E},...D!==void 0&&{supersedeFromMessageIndex:D}});b=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Q)},m)}let R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,b),G=m;if(R.status===401){t.clearSession();let Q=await t.getOrCreateSession(!0);Q&&(G=Q,M.length>0?b=t.getFetchOptions({method:"POST",body:b.body},Q):b=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:b.body},Q),R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,b))}if(!R.ok){let Q=await R.json().catch(()=>({}));throw new Error(Q.error||Q.detail||`HTTP ${R.status}`)}let ie=await R.json(),le=t.transformResponse(ie);k.current=le.id,!l&&le.conversationId&&u(le.conversationId),await I(le.id,G,$)}catch(m){d(m.message||"Failed to send message"),i(!1)}finally{k.current=null}},[e,t,l,o,I]),J=A(async()=>{let h=k.current;if(!(!h||!o))try{let x=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",h):`${e.apiPaths.runs}${h}/cancel/`;(await fetch(`${e.backendUrl}${x}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(g.current&&(g.current.close(),g.current=null),i(!1),k.current=null,a(M=>[...M,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(x){console.error("[ChatWidget] Failed to cancel run:",x)}},[e,t,o]),z=A(()=>{a([]),u(null),d(null),_(!1),y(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),V=h=>{let x={id:$e(),role:h.role,timestamp:h.timestamp?new Date(h.timestamp):new Date};if(h.role==="tool")return{...x,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:h.content,toolCallId:h.toolCallId}};if(h.role==="assistant"&&h.toolCalls&&h.toolCalls.length>0)return h.toolCalls.map(M=>({id:$e(),role:"assistant",content:`\u{1F527} ${M.function?.name||M.name||"tool"}`,timestamp:x.timestamp,type:"tool_call",metadata:{toolName:M.function?.name||M.name,arguments:M.function?.arguments||M.arguments,toolCallId:M.id}}));let T=typeof h.content=="string"?h.content:JSON.stringify(h.content);return h.role==="assistant"&&!T?.trim()?null:{...x,content:T,type:"message"}},W=A(async h=>{i(!0),a([]),u(h);try{let x=await t.getOrCreateSession(),M=`${e.backendUrl}${e.apiPaths.conversations}${h}/?limit=10&offset=0`,S=await fetch(M,t.getFetchOptions({method:"GET"},x));if(S.ok){let E=await S.json(),$=t.transformResponse(E);$.messages&&a($.messages.flatMap(V).filter(Boolean)),_($.hasMore||!1),y($.messages?.length||0)}else S.status===404&&(u(null),n?.set(e.conversationIdKey,null))}catch(x){console.error("[ChatWidget] Failed to load conversation:",x)}finally{i(!1)}},[e,t,n]),B=A(async()=>{if(!(!l||p||!r)){v(!0);try{let h=await t.getOrCreateSession(),T=`${e.backendUrl}${e.apiPaths.conversations}${l}/?limit=10&offset=${w}`,M=await fetch(T,t.getFetchOptions({method:"GET"},h));if(M.ok){let S=await M.json(),E=t.transformResponse(S);if(E.messages?.length>0){let $=E.messages.flatMap(V).filter(Boolean);a(D=>[...$,...D]),y(D=>D+E.messages.length),_(E.hasMore||!1)}else _(!1)}}catch(h){console.error("[ChatWidget] Failed to load more messages:",h)}finally{v(!1)}}},[e,t,l,w,p,r]),q=A(async(h,x,T={})=>{if(o)return;let M=s[h];if(!M||M.role!=="user")return;let S=s.slice(0,h);a(S),await N(x,{...T,supersedeFromMessageIndex:h})},[s,o,N]),H=A(async(h,x={})=>{if(o)return;let T=s[h];if(!T)return;let M=h,S=T;if(T.role==="assistant"){for(let $=h-1;$>=0;$--)if(s[$].role==="user"){M=$,S=s[$];break}if(S.role!=="user")return}else if(T.role!=="user")return;let E=s.slice(0,M);a(E),await N(S.content,{...x,supersedeFromMessageIndex:M})},[s,o,N]);return K(()=>()=>{g.current&&g.current.close()},[]),{messages:s,isLoading:o,error:c,conversationId:l,hasMoreMessages:r,loadingMoreMessages:p,sendMessage:N,cancelRun:J,clearMessages:z,loadConversation:W,loadMoreMessages:B,setConversationId:u,editMessage:q,retryMessage:H}}function It(e,t,n){let[s,a]=C([]),[o,i]=C(null),[c,d]=C(null),[l,u]=C(!1);K(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let v=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(v.ok){let w=await v.json(),y=w.models||[];a(y),d(w.default);let g=n?.get(e.modelKey);g&&y.some(k=>k.id===g)?i(g):i(w.default)}}catch(v){console.warn("[ChatWidget] Failed to load models:",v)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let r=A(p=>{i(p),n?.set(e.modelKey,p)},[e.modelKey,n]),_=A(()=>s.find(p=>p.id===o)||null,[s,o]);return{availableModels:s,selectedModel:o,defaultModel:c,isLoading:l,selectModel:r,getSelectedModelInfo:_}}function At(e,t){let[n,s]=C(null),[a,o]=C(!1),[i,c]=C(null),d=e.apiPaths?.tasks||"/api/agent/tasks/",l=A(async()=>{o(!0),c(null);try{let w=`${e.backendUrl}${d}`,y=await fetch(w,t.getFetchOptions({method:"GET"}));if(y.ok){let g=await y.json();s(g)}else{let g=await y.json().catch(()=>({}));c(g.error||"Failed to load tasks")}}catch(w){console.error("[useTasks] Failed to load task list:",w),c("Failed to load tasks")}finally{o(!1)}},[e.backendUrl,d,t]),u=A(async w=>{if(!n)return null;try{let y=`${e.backendUrl}${d}${n.id}/add_task/`,g=await fetch(y,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)}));if(g.ok){let k=await g.json();return await l(),k}else{let k=await g.json().catch(()=>({}));return c(k.error||"Failed to add task"),null}}catch(y){return console.error("[useTasks] Failed to add task:",y),c("Failed to add task"),null}},[e.backendUrl,d,n,t,l]),r=A(async(w,y)=>{if(!n)return null;try{let g=`${e.backendUrl}${d}${n.id}/update_task/${w}/`,k=await fetch(g,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)}));if(k.ok){let I=await k.json();return await l(),I}else{let I=await k.json().catch(()=>({}));return c(I.error||"Failed to update task"),null}}catch(g){return console.error("[useTasks] Failed to update task:",g),c("Failed to update task"),null}},[e.backendUrl,d,n,t,l]),_=A(async w=>{if(!n)return!1;try{let y=`${e.backendUrl}${d}${n.id}/remove_task/${w}/`,g=await fetch(y,t.getFetchOptions({method:"DELETE"}));if(g.ok)return await l(),!0;{let k=await g.json().catch(()=>({}));return c(k.error||"Failed to remove task"),!1}}catch(y){return console.error("[useTasks] Failed to remove task:",y),c("Failed to remove task"),!1}},[e.backendUrl,d,n,t,l]),p=A(async()=>{if(!n)return!1;try{let w=`${e.backendUrl}${d}${n.id}/clear/`,y=await fetch(w,t.getFetchOptions({method:"POST"}));if(y.ok)return await l(),!0;{let g=await y.json().catch(()=>({}));return c(g.error||"Failed to clear tasks"),!1}}catch(w){return console.error("[useTasks] Failed to clear tasks:",w),c("Failed to clear tasks"),!1}},[e.backendUrl,d,n,t,l]),v=A(()=>c(null),[]);return{taskList:n,tasks:n?.tasks||[],progress:n?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:i,loadTaskList:l,addTask:u,updateTask:r,removeTask:_,clearTasks:p,clearError:v}}function Dt(e,t,n){let s=u=>!u||typeof u!="object"||e.apiCaseStyle==="camel"?u:we(u),a=u=>!u||typeof u!="object"||e.apiCaseStyle==="snake"?u:ve(u),o=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",i=(u=null)=>{let r=o(),_={},p=u||e.authToken||t().authToken;if(r==="token"&&p){let v=e.authHeader||"Authorization",w=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";_[v]=w?`${w} ${p}`:p}else if(r==="jwt"&&p){let v=e.authHeader||"Authorization",w=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";_[v]=w?`${w} ${p}`:p}else if(r==="anonymous"&&p){let v=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";_[v]=p}if(r==="session"){let v=wt(e.csrfCookieName);v&&(_["X-CSRFToken"]=v)}return _};return{getAuthStrategy:o,getAuthHeaders:i,getFetchOptions:(u={},r=null)=>{let _=o(),p={...u},v=i(r);return console.log("[ChatWidget] getFetchOptions - strategy:",_,"overrideToken:",r,"authHeaders:",v),p.headers={...p.headers,...v},_==="session"&&(p.credentials="include"),p},getOrCreateSession:async(u=!1)=>{let r=o(),_=t(),p=e.anonymousTokenKey||e.sessionTokenKey;if(r!=="anonymous")return e.authToken||_.authToken;if(!u){if(_.authToken)return _.authToken;let v=_.storage?.get(p);if(v)return n(w=>({...w,authToken:v})),v}try{let v=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,w=await fetch(`${e.backendUrl}${v}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(w.ok){let y=await w.json();return n(g=>({...g,authToken:y.token})),_.storage?.set(p,y.token),y.token}}catch(v){console.warn("[ChatWidget] Failed to create session:",v)}return null},clearSession:()=>{let u=e.anonymousTokenKey||e.sessionTokenKey,r=t();n(_=>({..._,authToken:null})),r.storage?.set(u,null)},transformRequest:s,transformResponse:a}}function Rt({config:e,onStateChange:t,markdownParser:n,apiRef:s}){let[a,o]=C(e.embedded||e.forceOpen===!0),[i,c]=C(!1),[d,l]=C(!1),[u,r]=C(!1),[_,p]=C([]),[v,w]=C("chat"),[y,g]=C(!1),[k,I]=C(e.enableTTS),[N,J]=C(!1),[z,V]=C(null);K(()=>{e.forceOpen!==void 0&&o(e.forceOpen)},[e.forceOpen]);let W=re(()=>vt(e.containerId),[e.containerId]),[B,q]=C(e.authToken||null),H=re(()=>Dt(e,()=>({authToken:B,storage:W}),G=>{let ie=G({authToken:B,storage:W});ie.authToken!==B&&q(ie.authToken)}),[e,B,W]),h=Et(e,H,W),x=It(e,H,W),T=At(e,H);K(()=>{for(let b=h.messages.length-1;b>=0;b--){let R=h.messages[b];if(R.type==="sub_agent_start"){V({key:R.metadata?.subAgentKey,name:R.metadata?.agentName});return}if(R.type==="sub_agent_end"){V(null);return}}},[h.messages]),K(()=>{let b=W.get(e.conversationIdKey);b&&h.loadConversation(b)},[]),K(()=>{t&&t({isOpen:a,isExpanded:i,debugMode:d,messages:h.messages,conversationId:h.conversationId,isLoading:h.isLoading,error:h.error})},[a,i,d,h.messages,h.conversationId,h.isLoading,h.error]);let M=A(async()=>{if(e.showConversationSidebar){g(!0);try{let b=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(e.agentKey)}`,R=await fetch(b,H.getFetchOptions({method:"GET"}));if(R.ok){let G=await R.json();p(G.results||G)}}catch(b){console.error("[ChatWidget] Failed to load conversations:",b),p([])}finally{g(!1)}}},[e,H]),S=A(()=>{let b=!u;r(b),b&&M()},[u,M]),E=A(b=>{b!==h.conversationId&&h.loadConversation(b),r(!1)},[h]),$=A(()=>{h.clearMessages(),r(!1)},[h]),D=A(b=>{h.sendMessage(b,{model:x.selectedModel,onAssistantMessage:R=>{}})},[h,k,x.selectedModel]),F=A(b=>{w(b),b==="tasks"&&T.loadTaskList()},[T]);if(K(()=>{s&&(s.current={open:()=>o(!0),close:()=>o(!1),send:b=>D(b),clearMessages:()=>h.clearMessages(),toggleTTS:()=>I(b=>!b),stopSpeech:()=>J(!1),setAuth:b=>{b.token!==void 0&&q(b.token)},clearAuth:()=>q(null)})},[h,s,D]),!e.embedded&&!a)return f`
|
|
316
481
|
<button
|
|
317
482
|
class="cw-fab"
|
|
318
483
|
style=${{backgroundColor:e.primaryColor}}
|
|
@@ -322,73 +487,105 @@ var ChatWidgetModule=(()=>{var be=Object.defineProperty;var Et=Object.getOwnProp
|
|
|
322
487
|
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
323
488
|
</svg>
|
|
324
489
|
</button>
|
|
325
|
-
`;let
|
|
326
|
-
<div class=${
|
|
327
|
-
${e.showConversationSidebar&&
|
|
328
|
-
<${
|
|
490
|
+
`;let m=["cw-widget",i&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" ");return f`
|
|
491
|
+
<div class=${m} style=${{"--cw-primary":e.primaryColor}}>
|
|
492
|
+
${e.showConversationSidebar&&f`
|
|
493
|
+
<${Tt}
|
|
329
494
|
isOpen=${u}
|
|
330
|
-
conversations=${
|
|
331
|
-
conversationsLoading=${
|
|
332
|
-
currentConversationId=${
|
|
333
|
-
onClose=${()=>
|
|
334
|
-
onNewConversation=${
|
|
335
|
-
onSwitchConversation=${
|
|
495
|
+
conversations=${_}
|
|
496
|
+
conversationsLoading=${y}
|
|
497
|
+
currentConversationId=${h.conversationId}
|
|
498
|
+
onClose=${()=>r(!1)}
|
|
499
|
+
onNewConversation=${$}
|
|
500
|
+
onSwitchConversation=${E}
|
|
336
501
|
/>
|
|
337
502
|
`}
|
|
338
503
|
|
|
339
|
-
<${
|
|
504
|
+
<${$t}
|
|
340
505
|
config=${e}
|
|
341
|
-
debugMode=${
|
|
506
|
+
debugMode=${d}
|
|
342
507
|
isExpanded=${i}
|
|
343
|
-
isSpeaking=${
|
|
344
|
-
messagesCount=${
|
|
345
|
-
isLoading=${
|
|
346
|
-
currentAgent=${
|
|
508
|
+
isSpeaking=${N}
|
|
509
|
+
messagesCount=${h.messages.length}
|
|
510
|
+
isLoading=${h.isLoading}
|
|
511
|
+
currentAgent=${z}
|
|
347
512
|
onClose=${()=>o(!1)}
|
|
348
513
|
onToggleExpand=${()=>c(!i)}
|
|
349
|
-
onToggleDebug=${()=>l(!
|
|
350
|
-
onToggleTTS=${()=>
|
|
351
|
-
onClear=${
|
|
352
|
-
onToggleSidebar=${
|
|
514
|
+
onToggleDebug=${()=>l(!d)}
|
|
515
|
+
onToggleTTS=${()=>I(!k)}
|
|
516
|
+
onClear=${h.clearMessages}
|
|
517
|
+
onToggleSidebar=${S}
|
|
353
518
|
/>
|
|
354
519
|
|
|
355
|
-
${
|
|
520
|
+
${e.showTasksTab!==!1&&f`
|
|
521
|
+
<div class="cw-tabs">
|
|
522
|
+
<button
|
|
523
|
+
class=${`cw-tab ${v==="chat"?"cw-tab-active":""}`}
|
|
524
|
+
onClick=${()=>F("chat")}
|
|
525
|
+
>
|
|
526
|
+
Chat
|
|
527
|
+
</button>
|
|
528
|
+
<button
|
|
529
|
+
class=${`cw-tab ${v==="tasks"?"cw-tab-active":""}`}
|
|
530
|
+
onClick=${()=>F("tasks")}
|
|
531
|
+
>
|
|
532
|
+
Tasks ${T.progress.total>0?f`<span class="cw-tab-badge">${T.progress.completed}/${T.progress.total}</span>`:""}
|
|
533
|
+
</button>
|
|
534
|
+
</div>
|
|
535
|
+
`}
|
|
356
536
|
|
|
357
|
-
|
|
358
|
-
messages=${m.messages}
|
|
359
|
-
isLoading=${m.isLoading}
|
|
360
|
-
hasMoreMessages=${m.hasMoreMessages}
|
|
361
|
-
loadingMoreMessages=${m.loadingMoreMessages}
|
|
362
|
-
onLoadMore=${m.loadMoreMessages}
|
|
363
|
-
debugMode=${h}
|
|
364
|
-
markdownParser=${n}
|
|
365
|
-
emptyStateTitle=${e.emptyStateTitle}
|
|
366
|
-
emptyStateMessage=${e.emptyStateMessage}
|
|
367
|
-
/>
|
|
537
|
+
${d&&f`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
|
|
368
538
|
|
|
369
|
-
${
|
|
539
|
+
${v==="chat"?f`
|
|
540
|
+
<${Ct}
|
|
541
|
+
messages=${h.messages}
|
|
542
|
+
isLoading=${h.isLoading}
|
|
543
|
+
hasMoreMessages=${h.hasMoreMessages}
|
|
544
|
+
loadingMoreMessages=${h.loadingMoreMessages}
|
|
545
|
+
onLoadMore=${h.loadMoreMessages}
|
|
546
|
+
onEditMessage=${h.editMessage}
|
|
547
|
+
onRetryMessage=${h.retryMessage}
|
|
548
|
+
debugMode=${d}
|
|
549
|
+
markdownParser=${n}
|
|
550
|
+
emptyStateTitle=${e.emptyStateTitle}
|
|
551
|
+
emptyStateMessage=${e.emptyStateMessage}
|
|
552
|
+
/>
|
|
370
553
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
554
|
+
${h.error&&f`<div class="cw-error-bar">${h.error}</div>`}
|
|
555
|
+
|
|
556
|
+
${e.showModelSelector&&x.availableModels.length>0&&f`
|
|
557
|
+
<${Mt}
|
|
558
|
+
availableModels=${x.availableModels}
|
|
559
|
+
selectedModel=${x.selectedModel}
|
|
560
|
+
onSelectModel=${x.selectModel}
|
|
561
|
+
disabled=${h.isLoading}
|
|
562
|
+
/>
|
|
563
|
+
`}
|
|
564
|
+
|
|
565
|
+
<${St}
|
|
566
|
+
onSend=${D}
|
|
567
|
+
onCancel=${h.cancelRun}
|
|
568
|
+
isLoading=${h.isLoading}
|
|
569
|
+
placeholder=${e.placeholder}
|
|
570
|
+
primaryColor=${e.primaryColor}
|
|
571
|
+
enableVoice=${e.enableVoice}
|
|
572
|
+
/>
|
|
573
|
+
`:f`
|
|
574
|
+
<${xt}
|
|
575
|
+
tasks=${T.tasks}
|
|
576
|
+
progress=${T.progress}
|
|
577
|
+
isLoading=${T.isLoading}
|
|
578
|
+
error=${T.error}
|
|
579
|
+
onUpdate=${T.updateTask}
|
|
580
|
+
onRemove=${T.removeTask}
|
|
581
|
+
onClear=${T.clearTasks}
|
|
582
|
+
onRefresh=${T.loadTaskList}
|
|
377
583
|
/>
|
|
378
584
|
`}
|
|
379
|
-
|
|
380
|
-
<${wt}
|
|
381
|
-
onSend=${N}
|
|
382
|
-
onCancel=${m.cancelRun}
|
|
383
|
-
isLoading=${m.isLoading}
|
|
384
|
-
placeholder=${e.placeholder}
|
|
385
|
-
primaryColor=${e.primaryColor}
|
|
386
|
-
enableVoice=${e.enableVoice}
|
|
387
|
-
/>
|
|
388
585
|
</div>
|
|
389
|
-
`}var
|
|
586
|
+
`}var Pt={backendUrl:"http://localhost:8000",agentKey:"default-agent",title:"Chat Assistant",subtitle:"How can we help you today?",primaryColor:"#0066cc",position:"bottom-right",defaultJourneyType:"general",enableDebugMode:!0,enableAutoRun:!0,journeyTypes:{},customerPrompts:{},placeholder:"Type your message...",emptyStateTitle:"Start a Conversation",emptyStateMessage:"Send a message to get started.",authStrategy:null,authToken:null,authHeader:null,authTokenPrefix:null,anonymousSessionEndpoint:null,anonymousTokenKey:"chat_widget_anonymous_token",onAuthError:null,anonymousTokenHeader:"X-Anonymous-Token",conversationIdKey:"chat_widget_conversation_id",sessionTokenKey:"chat_widget_session_token",apiPaths:{anonymousSession:"/api/accounts/anonymous-session/",conversations:"/api/agent-runtime/conversations/",runs:"/api/agent-runtime/runs/",runEvents:"/api/agent-runtime/runs/{runId}/events/",simulateCustomer:"/api/agent-runtime/simulate-customer/",ttsVoices:"/api/tts/voices/",ttsSetVoice:"/api/tts/set-voice/",models:"/api/agent-runtime/models/"},apiCaseStyle:"auto",showConversationSidebar:!0,showClearButton:!0,showDebugButton:!0,showTTSButton:!0,showVoiceSettings:!0,showExpandButton:!0,showModelSelector:!1,enableVoice:!0,modelKey:"chat_widget_selected_model",autoRunDelay:1e3,autoRunMode:"automatic",enableTTS:!1,ttsProxyUrl:null,elevenLabsApiKey:null,ttsVoices:{assistant:null,user:null},ttsModel:"eleven_turbo_v2_5",ttsSettings:{stability:.5,similarity_boost:.75,style:0,use_speaker_boost:!0},availableVoices:[],onEvent:null,containerId:null,embedded:!1,metadata:{}};function Ft(e){let t={...Pt.apiPaths,...e.apiPaths||{}};return{...Pt,...e,apiPaths:t}}var Ce=new Map,on=0,P=null,Ue=class{constructor(t={}){this.instanceId=`cw-${++on}`,this.config=Ft(t),this.container=null,this._state={},this._apiRef={current:null},Ce.set(this.instanceId,this)}_handleStateChange=t=>{this._state=t};init(){if(this.config.containerId){if(this.container=document.getElementById(this.config.containerId),!this.container)return console.error(`[ChatWidget] Container not found: ${this.config.containerId}`),this;this.container.classList.add("cw-container-embedded")}else this.container=document.createElement("div"),this.container.id=this.instanceId,this.container.className=`cw-container cw-position-${this.config.position}`,document.body.appendChild(this.container);return this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} initialized`),this}_render(t={}){this.container&&ge(f`<${Rt}
|
|
390
587
|
config=${{...this.config,...t}}
|
|
391
588
|
onStateChange=${this._handleStateChange}
|
|
392
|
-
markdownParser=${
|
|
589
|
+
markdownParser=${Se._enhancedMarkdownParser}
|
|
393
590
|
apiRef=${this._apiRef}
|
|
394
|
-
/>`,this.container)}destroy(){this.container&&(
|
|
591
|
+
/>`,this.container)}destroy(){this.container&&(ge(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),Ce.delete(this.instanceId),console.log(`[ChatWidget] Instance ${this.instanceId} destroyed`)}open(){this._apiRef.current?this._apiRef.current.open():this._render({forceOpen:!0})}close(){this._apiRef.current?this._apiRef.current.close():this._render({forceOpen:!1})}send(t){this._apiRef.current&&this._apiRef.current.send(t)}clearMessages(){this._apiRef.current&&this._apiRef.current.clearMessages()}toggleTTS(){this._apiRef.current&&this._apiRef.current.toggleTTS()}stopSpeech(){this._apiRef.current&&this._apiRef.current.stopSpeech()}setAuth(t){this._apiRef.current&&this._apiRef.current.setAuth(t)}clearAuth(){this._apiRef.current&&this._apiRef.current.clearAuth()}getState(){return{...this._state}}getConfig(){return{...this.config}}updateMetadata(t){this.config.metadata={...this.config.metadata,...t},this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} metadata updated:`,t)}updateConfig(t){this.config={...this.config,...t},this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} config updated`)}};function Ot(e={}){return new Ue(e).init()}function an(e={}){return P&&P.destroy(),P=Ot(e),P}function rn(){P&&(P.destroy(),P=null)}function ln(){P&&P.open()}function cn(){P&&P.close()}function un(e){P&&P.send(e)}function dn(){P&&P.clearMessages()}function _n(){P&&P.toggleTTS()}function pn(){P&&P.stopSpeech()}function hn(e){P&&P.setAuth(e)}function fn(){P&&P.clearAuth()}function mn(){return P?P.getState():null}function gn(){return P?P.getConfig():null}var Se={createInstance:Ot,getInstance:e=>Ce.get(e),getAllInstances:()=>Array.from(Ce.values()),init:an,destroy:rn,open:ln,close:cn,send:un,clearMessages:dn,toggleTTS:_n,stopSpeech:pn,setAuth:hn,clearAuth:fn,getState:mn,getConfig:gn,_enhancedMarkdownParser:null};var yn=Se;typeof window<"u"&&(window.ChatWidget=Se);return Wt(vn);})();
|