@makemore/agent-frontend 2.10.0 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat-widget.cjs.js +374 -276
- package/dist/chat-widget.css +323 -1
- package/dist/chat-widget.esm.js +384 -286
- package/dist/chat-widget.js +302 -204
- package/dist/react.cjs.js +366 -268
- package/dist/react.esm.js +379 -281
- package/package.json +1 -1
- package/src/components/ChatWidget.js +1 -0
- package/src/components/ContentBlocks.js +203 -0
- package/src/components/Message.js +27 -1
- package/src/components/MessageList.js +2 -0
- package/src/hooks/useChat.js +20 -0
package/dist/chat-widget.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var qt=Object.getOwnPropertyNames;var Gt=Object.prototype.hasOwnProperty;var Yt=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Xt=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},Qt=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of qt(t))!Gt.call(e,a)&&a!==n&&de(e,a,{get:()=>t[a],enumerable:!(s=Jt(t,a))||s.enumerable});return e};var Zt=e=>Qt(de({},"__esModule",{value:!0}),e);var je=(e,t,n)=>(Yt(e,typeof t!="symbol"?t+"":t,n),n);var An={};Xt(An,{ChatWidget:()=>Ee,default:()=>In});var fe,W,Ye,en,se,ze,Xe,Qe,Ze,De,xe,Ie,tn,le={},et=[],nn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,me=Array.isArray;function te(e,t){for(var n in t)e[n]=t[n];return e}function Pe(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function ge(e,t,n){var s,a,o,l={};for(o in t)o=="key"?s=t[o]:o=="ref"?a=t[o]:l[o]=t[o];if(arguments.length>2&&(l.children=arguments.length>3?fe.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(o in e.defaultProps)l[o]===void 0&&(l[o]=e.defaultProps[o]);return _e(e,l,s,a,null)}function _e(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??++Ye,__i:-1,__u:0};return a==null&&W.vnode!=null&&W.vnode(o),o}function ye(e){return e.children}function re(e,t){this.props=e,this.context=t}function oe(e,t){if(t==null)return e.__?oe(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"?oe(e):null}function tt(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 tt(e)}}function Je(e){(!e.__d&&(e.__d=!0)&&se.push(e)&&!he.__r++||ze!=W.debounceRendering)&&((ze=W.debounceRendering)||Xe)(he)}function he(){for(var e,t,n,s,a,o,l,i=1;se.length;)se.length>i&&se.sort(Qe),e=se.shift(),i=se.length,e.__d&&(n=void 0,s=void 0,a=(s=(t=e).__v).__e,o=[],l=[],t.__P&&((n=te({},s)).__v=s.__v+1,W.vnode&&W.vnode(n),Fe(t.__P,n,s,t.__n,t.__P.namespaceURI,32&s.__u?[a]:null,o,a??oe(s),!!(32&s.__u),l),n.__v=s.__v,n.__.__k[n.__i]=n,ot(o,n,l),s.__e=s.__=null,n.__e!=a&&tt(n)));he.__r=0}function nt(e,t,n,s,a,o,l,i,u,c,p){var r,d,h,f,y,g,m,k=s&&s.__k||et,$=t.length;for(u=sn(n,t,k,u,$),r=0;r<$;r++)(h=n.__k[r])!=null&&(d=h.__i==-1?le:k[h.__i]||le,h.__i=r,g=Fe(e,h,d,a,o,l,i,u,c,p),f=h.__e,h.ref&&d.ref!=h.ref&&(d.ref&&Re(d.ref,null,h),p.push(h.ref,h.__c||f,h)),y==null&&f!=null&&(y=f),(m=!!(4&h.__u))||d.__k===h.__k?u=st(h,u,e,m):typeof h.type=="function"&&g!==void 0?u=g:f&&(u=f.nextSibling),h.__u&=-7);return n.__e=y,u}function sn(e,t,n,s,a){var o,l,i,u,c,p=n.length,r=p,d=0;for(e.__k=new Array(a),o=0;o<a;o++)(l=t[o])!=null&&typeof l!="boolean"&&typeof l!="function"?(typeof l=="string"||typeof l=="number"||typeof l=="bigint"||l.constructor==String?l=e.__k[o]=_e(null,l,null,null,null):me(l)?l=e.__k[o]=_e(ye,{children:l},null,null,null):l.constructor===void 0&&l.__b>0?l=e.__k[o]=_e(l.type,l.props,l.key,l.ref?l.ref:null,l.__v):e.__k[o]=l,u=o+d,l.__=e,l.__b=e.__b+1,i=null,(c=l.__i=on(l,n,u,r))!=-1&&(r--,(i=n[c])&&(i.__u|=2)),i==null||i.__v==null?(c==-1&&(a>p?d--:a<p&&d++),typeof l.type!="function"&&(l.__u|=4)):c!=u&&(c==u-1?d--:c==u+1?d++:(c>u?d--:d++,l.__u|=4))):e.__k[o]=null;if(r)for(o=0;o<p;o++)(i=n[o])!=null&&!(2&i.__u)&&(i.__e==s&&(s=oe(i)),rt(i,i));return s}function st(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=st(a[o],t,n,s));return t}e.__e!=t&&(s&&(t&&e.type&&!t.parentNode&&(t=oe(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function on(e,t,n,s){var a,o,l,i=e.key,u=e.type,c=t[n],p=c!=null&&(2&c.__u)==0;if(c===null&&i==null||p&&i==c.key&&u==c.type)return n;if(s>(p?1:0)){for(a=n-1,o=n+1;a>=0||o<t.length;)if((c=t[l=a>=0?a--:o++])!=null&&!(2&c.__u)&&i==c.key&&u==c.type)return l}return-1}function qe(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||nn.test(t)?n:n+"px"}function pe(e,t,n,s,a){var o,l;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||qe(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||qe(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")o=t!=(t=t.replace(Ze,"$1")),l=t.toLowerCase(),t=l in e||t=="onFocusOut"||t=="onFocusIn"?l.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n.u=s.u:(n.u=De,e.addEventListener(t,o?Ie:xe,o)):e.removeEventListener(t,o?Ie:xe,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 Ge(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=De++;else if(t.t<n.u)return;return n(W.event?W.event(t):t)}}}function Fe(e,t,n,s,a,o,l,i,u,c){var p,r,d,h,f,y,g,m,k,$,N,j,I,H,F,R,J,O=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(u=!!(32&n.__u),o=[i=t.__e=n.__e]),(p=W.__b)&&p(t);e:if(typeof O=="function")try{if(m=t.props,k="prototype"in O&&O.prototype.render,$=(p=O.contextType)&&s[p.__c],N=p?$?$.props.value:p.__:s,n.__c?g=(r=t.__c=n.__c).__=r.__E:(k?t.__c=r=new O(m,N):(t.__c=r=new re(m,N),r.constructor=O,r.render=rn),$&&$.sub(r),r.state||(r.state={}),r.__n=s,d=r.__d=!0,r.__h=[],r._sb=[]),k&&r.__s==null&&(r.__s=r.state),k&&O.getDerivedStateFromProps!=null&&(r.__s==r.state&&(r.__s=te({},r.__s)),te(r.__s,O.getDerivedStateFromProps(m,r.__s))),h=r.props,f=r.state,r.__v=t,d)k&&O.getDerivedStateFromProps==null&&r.componentWillMount!=null&&r.componentWillMount(),k&&r.componentDidMount!=null&&r.__h.push(r.componentDidMount);else{if(k&&O.getDerivedStateFromProps==null&&m!==h&&r.componentWillReceiveProps!=null&&r.componentWillReceiveProps(m,N),t.__v==n.__v||!r.__e&&r.shouldComponentUpdate!=null&&r.shouldComponentUpdate(m,r.__s,N)===!1){for(t.__v!=n.__v&&(r.props=m,r.state=r.__s,r.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(w){w&&(w.__=t)}),j=0;j<r._sb.length;j++)r.__h.push(r._sb[j]);r._sb=[],r.__h.length&&l.push(r);break e}r.componentWillUpdate!=null&&r.componentWillUpdate(m,r.__s,N),k&&r.componentDidUpdate!=null&&r.__h.push(function(){r.componentDidUpdate(h,f,y)})}if(r.context=N,r.props=m,r.__P=e,r.__e=!1,I=W.__r,H=0,k){for(r.state=r.__s,r.__d=!1,I&&I(t),p=r.render(r.props,r.state,r.context),F=0;F<r._sb.length;F++)r.__h.push(r._sb[F]);r._sb=[]}else do r.__d=!1,I&&I(t),p=r.render(r.props,r.state,r.context),r.state=r.__s;while(r.__d&&++H<25);r.state=r.__s,r.getChildContext!=null&&(s=te(te({},s),r.getChildContext())),k&&!d&&r.getSnapshotBeforeUpdate!=null&&(y=r.getSnapshotBeforeUpdate(h,f)),R=p,p!=null&&p.type===ye&&p.key==null&&(R=at(p.props.children)),i=nt(e,me(R)?R:[R],t,n,s,a,o,l,i,u,c),r.base=t.__e,t.__u&=-161,r.__h.length&&l.push(r),g&&(r.__E=r.__=null)}catch(w){if(t.__v=null,u||o!=null)if(w.then){for(t.__u|=u?160:128;i&&i.nodeType==8&&i.nextSibling;)i=i.nextSibling;o[o.indexOf(i)]=null,t.__e=i}else{for(J=o.length;J--;)Pe(o[J]);Ae(t)}else t.__e=n.__e,t.__k=n.__k,w.then||Ae(t);W.__e(w,t,n)}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):i=t.__e=an(n.__e,t,n,s,a,o,l,u,c);return(p=W.diffed)&&p(t),128&t.__u?void 0:i}function Ae(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(Ae)}function ot(e,t,n){for(var s=0;s<n.length;s++)Re(n[s],n[++s],n[++s]);W.__c&&W.__c(t,e),e.some(function(a){try{e=a.__h,a.__h=[],e.some(function(o){o.call(a)})}catch(o){W.__e(o,a.__v)}})}function at(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:me(e)?e.map(at):te({},e)}function an(e,t,n,s,a,o,l,i,u){var c,p,r,d,h,f,y,g=n.props||le,m=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(c=0;c<o.length;c++)if((h=o[c])&&"setAttribute"in h==!!k&&(k?h.localName==k:h.nodeType==3)){e=h,o[c]=null;break}}if(e==null){if(k==null)return document.createTextNode(m);e=document.createElementNS(a,k,m.is&&m),i&&(W.__m&&W.__m(t,o),i=!1),o=null}if(k==null)g===m||i&&e.data==m||(e.data=m);else{if(o=o&&fe.call(e.childNodes),!i&&o!=null)for(g={},c=0;c<e.attributes.length;c++)g[(h=e.attributes[c]).name]=h.value;for(c in g)if(h=g[c],c!="children"){if(c=="dangerouslySetInnerHTML")r=h;else if(!(c in m)){if(c=="value"&&"defaultValue"in m||c=="checked"&&"defaultChecked"in m)continue;pe(e,c,null,h,a)}}for(c in m)h=m[c],c=="children"?d=h:c=="dangerouslySetInnerHTML"?p=h:c=="value"?f=h:c=="checked"?y=h:i&&typeof h!="function"||g[c]===h||pe(e,c,h,g[c],a);if(p)i||r&&(p.__html==r.__html||p.__html==e.innerHTML)||(e.innerHTML=p.__html),t.__k=[];else if(r&&(e.innerHTML=""),nt(t.type=="template"?e.content:e,me(d)?d:[d],t,n,s,k=="foreignObject"?"http://www.w3.org/1999/xhtml":a,o,l,o?o[0]:n.__k&&oe(n,0),i,u),o!=null)for(c=o.length;c--;)Pe(o[c]);i||(c="value",k=="progress"&&f==null?e.removeAttribute("value"):f!=null&&(f!==e[c]||k=="progress"&&!f||k=="option"&&f!=g[c])&&pe(e,c,f,g[c],a),c="checked",y!=null&&y!=e[c]&&pe(e,c,y,g[c],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){W.__e(a,n)}}function rt(e,t,n){var s,a;if(W.unmount&&W.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){W.__e(o,t)}s.base=s.__P=null}if(s=e.__k)for(a=0;a<s.length;a++)s[a]&&rt(s[a],t,n||typeof e.type!="function");n||Pe(e.__e),e.__c=e.__=e.__e=void 0}function rn(e,t,n){return this.constructor(e,n)}function ve(e,t,n){var s,a,o,l;t==document&&(t=document.documentElement),W.__&&W.__(e,t),a=(s=typeof n=="function")?null:n&&n.__k||t.__k,o=[],l=[],Fe(t,e=(!s&&n||t).__k=ge(ye,null,[e]),a||le,le,t.namespaceURI,!s&&n?[n]:a?null:t.firstChild?fe.call(t.childNodes):null,o,!s&&n?n:a?a.__e:t.firstChild,s,l),ot(o,e,l)}fe=et.slice,W={__e:function(e,t,n,s){for(var a,o,l;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&o.getDerivedStateFromError!=null&&(a.setState(o.getDerivedStateFromError(e)),l=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(e,s||{}),l=a.__d),l)return a.__E=a}catch(i){e=i}throw e}},Ye=0,en=function(e){return e!=null&&e.constructor===void 0},re.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=te({},this.state),typeof e=="function"&&(e=e(te({},n),this.props)),e&&te(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Je(this))},re.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Je(this))},re.prototype.render=ye,se=[],Xe=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Qe=function(e,t){return e.__v.__b-t.__v.__b},he.__r=0,Ze=/(PointerCapture)$|Capture$/i,De=0,xe=Ge(!1),Ie=Ge(!0),tn=0;var it=function(e,t,n,s){var a;t[0]=0;for(var o=1;o<t.length;o++){var l=t[o++],i=t[o]?(t[0]|=l?1:2,n[t[o++]]):t[++o];l===3?s[0]=i:l===4?s[1]=Object.assign(s[1]||{},i):l===5?(s[1]=s[1]||{})[t[++o]]=i:l===6?s[1][t[++o]]+=i+"":l?(a=e.apply(i,it(e,i,n,["",null])),s.push(a),i[0]?t[0]|=2:(t[o-2]=0,t[o]=a)):s.push(i)}return s},lt=new Map;function ct(e){var t=lt.get(this);return t||(t=new Map,lt.set(this,t)),(t=it(this,t.get(e)||(t.set(e,t=function(n){for(var s,a,o=1,l="",i="",u=[0],c=function(d){o===1&&(d||(l=l.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?u.push(0,d,l):o===3&&(d||l)?(u.push(3,d,l),o=2):o===2&&l==="..."&&d?u.push(4,d,0):o===2&&l&&!d?u.push(5,0,!0,l):o>=5&&((l||!d&&o===5)&&(u.push(o,0,l,a),o=6),d&&(u.push(o,d,0,a),o=6)),l=""},p=0;p<n.length;p++){p&&(o===1&&c(),c(p));for(var r=0;r<n[p].length;r++)s=n[p][r],o===1?s==="<"?(c(),u=[u],o=3):l+=s:o===4?l==="--"&&s===">"?(o=1,l=""):l=s+l[0]:i?s===i?i="":l+=s:s==='"'||s==="'"?i=s:s===">"?(c(),o=1):o&&(s==="="?(o=5,a=l,l=""):s==="/"&&(o<5||n[p][r+1]===">")?(c(),o===3&&(u=u[0]),o=u,(u=u[0]).push(2,0,o),o=0):s===" "||s===" "||s===`
|
|
2
|
-
`||s==="\r"?(
|
|
1
|
+
var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Yt=Object.getOwnPropertyDescriptor;var Xt=Object.getOwnPropertyNames;var Qt=Object.prototype.hasOwnProperty;var Zt=(e,t,n)=>t in e?de(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var en=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},tn=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Xt(t))!Qt.call(e,a)&&a!==n&&de(e,a,{get:()=>t[a],enumerable:!(s=Yt(t,a))||s.enumerable});return e};var nn=e=>tn(de({},"__esModule",{value:!0}),e);var je=(e,t,n)=>(Zt(e,typeof t!="symbol"?t+"":t,n),n);var Vn={};en(Vn,{ChatWidget:()=>xe,default:()=>Bn});var fe,U,Ye,sn,se,Je,Xe,Qe,Ze,Pe,Ae,Ie,on,le={},et=[],an=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,me=Array.isArray;function te(e,t){for(var n in t)e[n]=t[n];return e}function Re(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function ge(e,t,n){var s,a,o,l={};for(o in t)o=="key"?s=t[o]:o=="ref"?a=t[o]:l[o]=t[o];if(arguments.length>2&&(l.children=arguments.length>3?fe.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(o in e.defaultProps)l[o]===void 0&&(l[o]=e.defaultProps[o]);return _e(e,l,s,a,null)}function _e(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??++Ye,__i:-1,__u:0};return a==null&&U.vnode!=null&&U.vnode(o),o}function ve(e){return e.children}function re(e,t){this.props=e,this.context=t}function oe(e,t){if(t==null)return e.__?oe(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"?oe(e):null}function tt(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 tt(e)}}function ze(e){(!e.__d&&(e.__d=!0)&&se.push(e)&&!he.__r++||Je!=U.debounceRendering)&&((Je=U.debounceRendering)||Xe)(he)}function he(){for(var e,t,n,s,a,o,l,c=1;se.length;)se.length>c&&se.sort(Qe),e=se.shift(),c=se.length,e.__d&&(n=void 0,s=void 0,a=(s=(t=e).__v).__e,o=[],l=[],t.__P&&((n=te({},s)).__v=s.__v+1,U.vnode&&U.vnode(n),Fe(t.__P,n,s,t.__n,t.__P.namespaceURI,32&s.__u?[a]:null,o,a??oe(s),!!(32&s.__u),l),n.__v=s.__v,n.__.__k[n.__i]=n,ot(o,n,l),s.__e=s.__=null,n.__e!=a&&tt(n)));he.__r=0}function nt(e,t,n,s,a,o,l,c,d,u,p){var r,_,h,f,b,v,m,k=s&&s.__k||et,$=t.length;for(d=rn(n,t,k,d,$),r=0;r<$;r++)(h=n.__k[r])!=null&&(_=h.__i==-1?le:k[h.__i]||le,h.__i=r,v=Fe(e,h,_,a,o,l,c,d,u,p),f=h.__e,h.ref&&_.ref!=h.ref&&(_.ref&&Oe(_.ref,null,h),p.push(h.ref,h.__c||f,h)),b==null&&f!=null&&(b=f),(m=!!(4&h.__u))||_.__k===h.__k?d=st(h,d,e,m):typeof h.type=="function"&&v!==void 0?d=v:f&&(d=f.nextSibling),h.__u&=-7);return n.__e=b,d}function rn(e,t,n,s,a){var o,l,c,d,u,p=n.length,r=p,_=0;for(e.__k=new Array(a),o=0;o<a;o++)(l=t[o])!=null&&typeof l!="boolean"&&typeof l!="function"?(typeof l=="string"||typeof l=="number"||typeof l=="bigint"||l.constructor==String?l=e.__k[o]=_e(null,l,null,null,null):me(l)?l=e.__k[o]=_e(ve,{children:l},null,null,null):l.constructor===void 0&&l.__b>0?l=e.__k[o]=_e(l.type,l.props,l.key,l.ref?l.ref:null,l.__v):e.__k[o]=l,d=o+_,l.__=e,l.__b=e.__b+1,c=null,(u=l.__i=ln(l,n,d,r))!=-1&&(r--,(c=n[u])&&(c.__u|=2)),c==null||c.__v==null?(u==-1&&(a>p?_--:a<p&&_++),typeof l.type!="function"&&(l.__u|=4)):u!=d&&(u==d-1?_--:u==d+1?_++:(u>d?_--:_++,l.__u|=4))):e.__k[o]=null;if(r)for(o=0;o<p;o++)(c=n[o])!=null&&!(2&c.__u)&&(c.__e==s&&(s=oe(c)),rt(c,c));return s}function st(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=st(a[o],t,n,s));return t}e.__e!=t&&(s&&(t&&e.type&&!t.parentNode&&(t=oe(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function ln(e,t,n,s){var a,o,l,c=e.key,d=e.type,u=t[n],p=u!=null&&(2&u.__u)==0;if(u===null&&c==null||p&&c==u.key&&d==u.type)return n;if(s>(p?1:0)){for(a=n-1,o=n+1;a>=0||o<t.length;)if((u=t[l=a>=0?a--:o++])!=null&&!(2&u.__u)&&c==u.key&&d==u.type)return l}return-1}function qe(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||an.test(t)?n:n+"px"}function pe(e,t,n,s,a){var o,l;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||qe(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||qe(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")o=t!=(t=t.replace(Ze,"$1")),l=t.toLowerCase(),t=l in e||t=="onFocusOut"||t=="onFocusIn"?l.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n.u=s.u:(n.u=Pe,e.addEventListener(t,o?Ie:Ae,o)):e.removeEventListener(t,o?Ie:Ae,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 Ge(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=Pe++;else if(t.t<n.u)return;return n(U.event?U.event(t):t)}}}function Fe(e,t,n,s,a,o,l,c,d,u){var p,r,_,h,f,b,v,m,k,$,O,q,P,H,F,L,j,N=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),o=[c=t.__e=n.__e]),(p=U.__b)&&p(t);e:if(typeof N=="function")try{if(m=t.props,k="prototype"in N&&N.prototype.render,$=(p=N.contextType)&&s[p.__c],O=p?$?$.props.value:p.__:s,n.__c?v=(r=t.__c=n.__c).__=r.__E:(k?t.__c=r=new N(m,O):(t.__c=r=new re(m,O),r.constructor=N,r.render=un),$&&$.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&&N.getDerivedStateFromProps!=null&&(r.__s==r.state&&(r.__s=te({},r.__s)),te(r.__s,N.getDerivedStateFromProps(m,r.__s))),h=r.props,f=r.state,r.__v=t,_)k&&N.getDerivedStateFromProps==null&&r.componentWillMount!=null&&r.componentWillMount(),k&&r.componentDidMount!=null&&r.__h.push(r.componentDidMount);else{if(k&&N.getDerivedStateFromProps==null&&m!==h&&r.componentWillReceiveProps!=null&&r.componentWillReceiveProps(m,O),t.__v==n.__v||!r.__e&&r.shouldComponentUpdate!=null&&r.shouldComponentUpdate(m,r.__s,O)===!1){for(t.__v!=n.__v&&(r.props=m,r.state=r.__s,r.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(w){w&&(w.__=t)}),q=0;q<r._sb.length;q++)r.__h.push(r._sb[q]);r._sb=[],r.__h.length&&l.push(r);break e}r.componentWillUpdate!=null&&r.componentWillUpdate(m,r.__s,O),k&&r.componentDidUpdate!=null&&r.__h.push(function(){r.componentDidUpdate(h,f,b)})}if(r.context=O,r.props=m,r.__P=e,r.__e=!1,P=U.__r,H=0,k){for(r.state=r.__s,r.__d=!1,P&&P(t),p=r.render(r.props,r.state,r.context),F=0;F<r._sb.length;F++)r.__h.push(r._sb[F]);r._sb=[]}else do r.__d=!1,P&&P(t),p=r.render(r.props,r.state,r.context),r.state=r.__s;while(r.__d&&++H<25);r.state=r.__s,r.getChildContext!=null&&(s=te(te({},s),r.getChildContext())),k&&!_&&r.getSnapshotBeforeUpdate!=null&&(b=r.getSnapshotBeforeUpdate(h,f)),L=p,p!=null&&p.type===ve&&p.key==null&&(L=at(p.props.children)),c=nt(e,me(L)?L:[L],t,n,s,a,o,l,c,d,u),r.base=t.__e,t.__u&=-161,r.__h.length&&l.push(r),v&&(r.__E=r.__=null)}catch(w){if(t.__v=null,d||o!=null)if(w.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(j=o.length;j--;)Re(o[j]);De(t)}else t.__e=n.__e,t.__k=n.__k,w.then||De(t);U.__e(w,t,n)}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=cn(n.__e,t,n,s,a,o,l,d,u);return(p=U.diffed)&&p(t),128&t.__u?void 0:c}function De(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(De)}function ot(e,t,n){for(var s=0;s<n.length;s++)Oe(n[s],n[++s],n[++s]);U.__c&&U.__c(t,e),e.some(function(a){try{e=a.__h,a.__h=[],e.some(function(o){o.call(a)})}catch(o){U.__e(o,a.__v)}})}function at(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:me(e)?e.map(at):te({},e)}function cn(e,t,n,s,a,o,l,c,d){var u,p,r,_,h,f,b,v=n.props||le,m=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(u=0;u<o.length;u++)if((h=o[u])&&"setAttribute"in h==!!k&&(k?h.localName==k:h.nodeType==3)){e=h,o[u]=null;break}}if(e==null){if(k==null)return document.createTextNode(m);e=document.createElementNS(a,k,m.is&&m),c&&(U.__m&&U.__m(t,o),c=!1),o=null}if(k==null)v===m||c&&e.data==m||(e.data=m);else{if(o=o&&fe.call(e.childNodes),!c&&o!=null)for(v={},u=0;u<e.attributes.length;u++)v[(h=e.attributes[u]).name]=h.value;for(u in v)if(h=v[u],u!="children"){if(u=="dangerouslySetInnerHTML")r=h;else if(!(u in m)){if(u=="value"&&"defaultValue"in m||u=="checked"&&"defaultChecked"in m)continue;pe(e,u,null,h,a)}}for(u in m)h=m[u],u=="children"?_=h:u=="dangerouslySetInnerHTML"?p=h:u=="value"?f=h:u=="checked"?b=h:c&&typeof h!="function"||v[u]===h||pe(e,u,h,v[u],a);if(p)c||r&&(p.__html==r.__html||p.__html==e.innerHTML)||(e.innerHTML=p.__html),t.__k=[];else if(r&&(e.innerHTML=""),nt(t.type=="template"?e.content:e,me(_)?_:[_],t,n,s,k=="foreignObject"?"http://www.w3.org/1999/xhtml":a,o,l,o?o[0]:n.__k&&oe(n,0),c,d),o!=null)for(u=o.length;u--;)Re(o[u]);c||(u="value",k=="progress"&&f==null?e.removeAttribute("value"):f!=null&&(f!==e[u]||k=="progress"&&!f||k=="option"&&f!=v[u])&&pe(e,u,f,v[u],a),u="checked",b!=null&&b!=e[u]&&pe(e,u,b,v[u],a))}return e}function Oe(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){U.__e(a,n)}}function rt(e,t,n){var s,a;if(U.unmount&&U.unmount(e),(s=e.ref)&&(s.current&&s.current!=e.__e||Oe(s,null,t)),(s=e.__c)!=null){if(s.componentWillUnmount)try{s.componentWillUnmount()}catch(o){U.__e(o,t)}s.base=s.__P=null}if(s=e.__k)for(a=0;a<s.length;a++)s[a]&&rt(s[a],t,n||typeof e.type!="function");n||Re(e.__e),e.__c=e.__=e.__e=void 0}function un(e,t,n){return this.constructor(e,n)}function ye(e,t,n){var s,a,o,l;t==document&&(t=document.documentElement),U.__&&U.__(e,t),a=(s=typeof n=="function")?null:n&&n.__k||t.__k,o=[],l=[],Fe(t,e=(!s&&n||t).__k=ge(ve,null,[e]),a||le,le,t.namespaceURI,!s&&n?[n]:a?null:t.firstChild?fe.call(t.childNodes):null,o,!s&&n?n:a?a.__e:t.firstChild,s,l),ot(o,e,l)}fe=et.slice,U={__e:function(e,t,n,s){for(var a,o,l;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&o.getDerivedStateFromError!=null&&(a.setState(o.getDerivedStateFromError(e)),l=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(e,s||{}),l=a.__d),l)return a.__E=a}catch(c){e=c}throw e}},Ye=0,sn=function(e){return e!=null&&e.constructor===void 0},re.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=te({},this.state),typeof e=="function"&&(e=e(te({},n),this.props)),e&&te(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),ze(this))},re.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ze(this))},re.prototype.render=ve,se=[],Xe=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Qe=function(e,t){return e.__v.__b-t.__v.__b},he.__r=0,Ze=/(PointerCapture)$|Capture$/i,Pe=0,Ae=Ge(!1),Ie=Ge(!0),on=0;var it=function(e,t,n,s){var a;t[0]=0;for(var o=1;o<t.length;o++){var l=t[o++],c=t[o]?(t[0]|=l?1:2,n[t[o++]]):t[++o];l===3?s[0]=c:l===4?s[1]=Object.assign(s[1]||{},c):l===5?(s[1]=s[1]||{})[t[++o]]=c:l===6?s[1][t[++o]]+=c+"":l?(a=e.apply(c,it(e,c,n,["",null])),s.push(a),c[0]?t[0]|=2:(t[o-2]=0,t[o]=a)):s.push(c)}return s},lt=new Map;function ct(e){var t=lt.get(this);return t||(t=new Map,lt.set(this,t)),(t=it(this,t.get(e)||(t.set(e,t=function(n){for(var s,a,o=1,l="",c="",d=[0],u=function(_){o===1&&(_||(l=l.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?d.push(0,_,l):o===3&&(_||l)?(d.push(3,_,l),o=2):o===2&&l==="..."&&_?d.push(4,_,0):o===2&&l&&!_?d.push(5,0,!0,l):o>=5&&((l||!_&&o===5)&&(d.push(o,0,l,a),o=6),_&&(d.push(o,_,0,a),o=6)),l=""},p=0;p<n.length;p++){p&&(o===1&&u(),u(p));for(var r=0;r<n[p].length;r++)s=n[p][r],o===1?s==="<"?(u(),d=[d],o=3):l+=s:o===4?l==="--"&&s===">"?(o=1,l=""):l=s+l[0]:c?s===c?c="":l+=s:s==='"'||s==="'"?c=s:s===">"?(u(),o=1):o&&(s==="="?(o=5,a=l,l=""):s==="/"&&(o<5||n[p][r+1]===">")?(u(),o===3&&(d=d[0]),o=d,(d=d[0]).push(2,0,o),o=0):s===" "||s===" "||s===`
|
|
2
|
+
`||s==="\r"?(u(),o=2):l+=s),o===3&&l==="!--"&&(o=4,d=d[0])}return u(),d}(e)),t),arguments,[])).length>1?t:t[0]}var i=ct.bind(ge);var ie,J,He,ut,ce=0,vt=[],G=U,dt=G.__b,pt=G.__r,_t=G.diffed,ht=G.__c,ft=G.unmount,mt=G.__;function Ne(e,t){G.__h&&G.__h(J,e,ce||t),ce=0;var n=J.__H||(J.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function S(e){return ce=1,dn($t,e)}function dn(e,t,n){var s=Ne(ie++,2);if(s.t=e,!s.__c&&(s.__=[n?n(t):$t(void 0,t),function(c){var d=s.__N?s.__N[0]:s.__[0],u=s.t(d,c);d!==u&&(s.__N=[u,s.__[1]],s.__c.setState({}))}],s.__c=J,!J.__f)){var a=function(c,d,u){if(!s.__c.__H)return!0;var p=s.__c.__H.__.filter(function(_){return!!_.__c});if(p.every(function(_){return!_.__N}))return!o||o.call(this,c,d,u);var r=s.__c.props!==c;return p.forEach(function(_){if(_.__N){var h=_.__[0];_.__=_.__N,_.__N=void 0,h!==_.__[0]&&(r=!0)}}),o&&o.call(this,c,d,u)||r};J.__f=!0;var o=J.shouldComponentUpdate,l=J.componentWillUpdate;J.componentWillUpdate=function(c,d,u){if(this.__e){var p=o;o=void 0,a(c,d,u),o=p}l&&l.call(this,c,d,u)},J.shouldComponentUpdate=a}return s.__N||s.__}function B(e,t){var n=Ne(ie++,3);!G.__s&&yt(n.__H,t)&&(n.__=e,n.u=t,J.__H.__h.push(n))}function Q(e){return ce=5,ae(function(){return{current:e}},[])}function ae(e,t){var n=Ne(ie++,7);return yt(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function x(e,t){return ce=8,ae(function(){return e},t)}function pn(){for(var e;e=vt.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach($e),e.__H.__h.forEach(Le),e.__H.__h=[]}catch(t){e.__H.__h=[],G.__e(t,e.__v)}}G.__b=function(e){J=null,dt&&dt(e)},G.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),mt&&mt(e,t)},G.__r=function(e){pt&&pt(e),ie=0;var t=(J=e.__c).__H;t&&(He===J?(t.__h=[],J.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.forEach($e),t.__h.forEach(Le),t.__h=[],ie=0)),He=J},G.diffed=function(e){_t&&_t(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(vt.push(t)!==1&&ut===G.requestAnimationFrame||((ut=G.requestAnimationFrame)||_n)(pn)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),He=J=null},G.__c=function(e,t){t.some(function(n){try{n.__h.forEach($e),n.__h=n.__h.filter(function(s){return!s.__||Le(s)})}catch(s){t.some(function(a){a.__h&&(a.__h=[])}),t=[],G.__e(s,n.__v)}}),ht&&ht(e,t)},G.unmount=function(e){ft&&ft(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(s){try{$e(s)}catch(a){t=a}}),n.__H=void 0,t&&G.__e(t,n.__v))};var gt=typeof requestAnimationFrame=="function";function _n(e){var t,n=function(){clearTimeout(s),gt&&cancelAnimationFrame(t),setTimeout(e)},s=setTimeout(n,35);gt&&(t=requestAnimationFrame(n))}function $e(e){var t=J,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),J=t}function Le(e){var t=J;e.__c=e.__(),J=t}function yt(e,t){return!e||e.length!==t.length||t.some(function(n,s){return n!==e[s]})}function $t(e,t){return typeof t=="function"?t(e):t}function hn(e){return e.replace(/_([a-z])/g,(t,n)=>n.toUpperCase())}function Ke(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function we(e){return Array.isArray(e)?e.map(we):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[hn(t),we(n)])):e}function ke(e){return Array.isArray(e)?e.map(ke):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[Ke(t),ke(n)])):e}function be(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function z(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function wt(e){if(!e)return"";try{let t=new Date(e),s=new Date-t,a=Math.floor(s/6e4),o=Math.floor(s/36e5),l=Math.floor(s/864e5);return a<1?"Just now":a<60?`${a}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:t.toLocaleDateString()}catch{return""}}function kt(e,t=null){if(t)return t(e);let n=z(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 bt(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 Ct(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 Ce(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 Se(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 fn(e){if(!e||typeof e!="string")return 0;let t=e.replace("#","");if(t.length!==6&&t.length!==3)return 0;let n=t.length===3?t.split("").map(c=>c+c).join(""):t,s=parseInt(n.substr(0,2),16)/255,a=parseInt(n.substr(2,2),16)/255,o=parseInt(n.substr(4,2),16)/255,l=c=>c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4);return .2126*l(s)+.7152*l(a)+.0722*l(o)}function St(e){return fn(e)>.179?"#000000":"#ffffff"}function Tt({config:e,debugMode:t,isExpanded:n,isSpeaking:s,messagesCount:a,isLoading:o,currentAgent:l,onClose:c,onToggleExpand:d,onToggleDebug:u,onToggleTTS:p,onClear:r,onToggleSidebar:_}){let{title:h,primaryColor:f,embedded:b,showConversationSidebar:v,showClearButton:m,showDebugButton:k,enableDebugMode:$,showTTSButton:O,showExpandButton:q,enableTTS:P,elevenLabsApiKey:H,ttsProxyUrl:F}=e,L=H||F;return i`
|
|
3
3
|
<div class="cw-header" style=${{backgroundColor:f}}>
|
|
4
|
-
${
|
|
4
|
+
${v&&i`
|
|
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,17 +16,17 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
16
16
|
`}
|
|
17
17
|
|
|
18
18
|
<div class="cw-title-container">
|
|
19
|
-
<span class="cw-title">${
|
|
20
|
-
${l&&
|
|
19
|
+
<span class="cw-title">${z(h)}</span>
|
|
20
|
+
${l&&i`
|
|
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">${z(l.name||l.key)}</span>
|
|
24
24
|
</span>
|
|
25
25
|
`}
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
28
|
<div class="cw-header-actions">
|
|
29
|
-
${m&&
|
|
29
|
+
${m&&i`
|
|
30
30
|
<button
|
|
31
31
|
class="cw-header-btn"
|
|
32
32
|
onClick=${r}
|
|
@@ -35,53 +35,140 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
35
35
|
>🗑️</button>
|
|
36
36
|
`}
|
|
37
37
|
|
|
38
|
-
${k&&$&&
|
|
38
|
+
${k&&$&&i`
|
|
39
39
|
<button
|
|
40
40
|
class="cw-header-btn ${t?"cw-btn-active":""}"
|
|
41
|
-
onClick=${
|
|
41
|
+
onClick=${u}
|
|
42
42
|
title="Debug"
|
|
43
43
|
>🐛</button>
|
|
44
44
|
`}
|
|
45
45
|
|
|
46
|
-
${
|
|
46
|
+
${O&&L&&i`
|
|
47
47
|
<button
|
|
48
|
-
class="cw-header-btn ${
|
|
48
|
+
class="cw-header-btn ${P?"cw-btn-active":""}"
|
|
49
49
|
onClick=${p}
|
|
50
50
|
title="TTS"
|
|
51
|
-
>${
|
|
51
|
+
>${P?"\u{1F50A}":"\u{1F507}"}</button>
|
|
52
52
|
`}
|
|
53
53
|
|
|
54
|
-
${
|
|
54
|
+
${q&&!b&&i`
|
|
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
|
+
${!b&&i`
|
|
63
63
|
<button
|
|
64
64
|
class="cw-header-btn"
|
|
65
|
-
onClick=${
|
|
65
|
+
onClick=${c}
|
|
66
66
|
title="Close"
|
|
67
67
|
>✕</button>
|
|
68
68
|
`}
|
|
69
69
|
</div>
|
|
70
70
|
</div>
|
|
71
|
-
`}function
|
|
71
|
+
`}function Mt({block:e,onAction:t,markdownParser:n}){return i`
|
|
72
|
+
<div class="cw-block-card">
|
|
73
|
+
${e.image&&i`<img class="cw-block-card-image" src=${e.image} alt=${e.title||""} />`}
|
|
74
|
+
<div class="cw-block-card-body">
|
|
75
|
+
${e.badge&&i`<span class="cw-block-card-badge">${e.badge}</span>`}
|
|
76
|
+
${e.title&&i`<div class="cw-block-card-title">${e.title}</div>`}
|
|
77
|
+
${e.subtitle&&i`<div class="cw-block-card-subtitle">${e.subtitle}</div>`}
|
|
78
|
+
${e.metadata&&e.metadata.length>0&&i`
|
|
79
|
+
<div class="cw-block-card-meta">
|
|
80
|
+
${e.metadata.map(s=>i`
|
|
81
|
+
<span class="cw-block-meta-pair">
|
|
82
|
+
<span class="cw-block-meta-label">${s.label}:</span> ${s.value}
|
|
83
|
+
</span>
|
|
84
|
+
`)}
|
|
85
|
+
</div>
|
|
86
|
+
`}
|
|
87
|
+
${e.actions&&e.actions.length>0&&i`
|
|
88
|
+
<div class="cw-block-card-actions">
|
|
89
|
+
${e.actions.map(s=>i`<${Et} action=${s} onAction=${t} />`)}
|
|
90
|
+
</div>
|
|
91
|
+
`}
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
`}function mn({block:e,onAction:t,markdownParser:n}){let s=e.layout||"vertical";return i`
|
|
95
|
+
<div class="cw-block-card-list cw-block-card-list-${s}">
|
|
96
|
+
${(e.items||[]).map(a=>i`
|
|
97
|
+
<${Mt} block=${{type:"card",...a}} onAction=${t} markdownParser=${n} />
|
|
98
|
+
`)}
|
|
99
|
+
</div>
|
|
100
|
+
`}function Et({action:e,onAction:t}){let n=e.style||"primary",s=()=>{t&&t(e)};return e.type==="link"?i`<a class="cw-block-btn cw-block-btn-${n}" href=${e.url} target="_blank" rel="noopener">${e.label}</a>`:i`<button class="cw-block-btn cw-block-btn-${n}" onClick=${s}>${e.label}</button>`}function gn({block:e,onAction:t}){return i`
|
|
101
|
+
<div class="cw-block-action-buttons">
|
|
102
|
+
${(e.buttons||[]).map(n=>i`<${Et} action=${n} onAction=${t} />`)}
|
|
103
|
+
</div>
|
|
104
|
+
`}function vn({block:e}){let t=e.style||"info";return i`
|
|
105
|
+
<div class="cw-block-callout cw-block-callout-${t}">
|
|
106
|
+
<span class="cw-block-callout-icon">${{info:"\u2139\uFE0F",success:"\u2705",warning:"\u26A0\uFE0F"}[t]||"\u2139\uFE0F"}</span>
|
|
107
|
+
<div class="cw-block-callout-content">
|
|
108
|
+
${e.title&&i`<strong>${e.title}</strong>`}
|
|
109
|
+
${e.body&&i`<span>${e.body}</span>`}
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
`}function yn({block:e}){return i`
|
|
113
|
+
<figure class="cw-block-image">
|
|
114
|
+
<img src=${e.url} alt=${e.alt||""} />
|
|
115
|
+
${e.caption&&i`<figcaption>${e.caption}</figcaption>`}
|
|
116
|
+
</figure>
|
|
117
|
+
`}function $n(){return i`<hr class="cw-block-divider" />`}function wn({block:e}){return i`
|
|
118
|
+
<div class="cw-block-table-wrapper">
|
|
119
|
+
<table class="cw-block-table">
|
|
120
|
+
${e.headers&&e.headers.length>0&&i`
|
|
121
|
+
<thead><tr>${e.headers.map(t=>i`<th>${t}</th>`)}</tr></thead>
|
|
122
|
+
`}
|
|
123
|
+
<tbody>
|
|
124
|
+
${(e.rows||[]).map(t=>i`
|
|
125
|
+
<tr>${t.map(n=>i`<td>${n}</td>`)}</tr>
|
|
126
|
+
`)}
|
|
127
|
+
</tbody>
|
|
128
|
+
</table>
|
|
129
|
+
</div>
|
|
130
|
+
`}function kn({block:e}){let[t,n]=S(!1),s=()=>{navigator.clipboard.writeText(e.code).then(()=>{n(!0),setTimeout(()=>n(!1),1500)})};return i`
|
|
131
|
+
<div class="cw-block-code">
|
|
132
|
+
${e.filename&&i`<div class="cw-block-code-filename">${e.filename}</div>`}
|
|
133
|
+
<pre><code>${z(e.code)}</code></pre>
|
|
134
|
+
${e.copyable!==!1&&i`
|
|
135
|
+
<button class="cw-block-code-copy" onClick=${s}>${t?"\u2713":"\u2398"}</button>
|
|
136
|
+
`}
|
|
137
|
+
</div>
|
|
138
|
+
`}function bn({block:e}){let[t,n]=S(e.defaultOpen||!1);return i`
|
|
139
|
+
<details class="cw-block-collapsible" open=${t} onClick=${s=>{s.preventDefault(),n(!t)}}>
|
|
140
|
+
<summary>${e.title}</summary>
|
|
141
|
+
<div class="cw-block-collapsible-body">${e.body}</div>
|
|
142
|
+
</details>
|
|
143
|
+
`}function Cn({block:e}){let t={loading:"\u23F3",success:"\u2705",error:"\u274C",warning:"\u26A0\uFE0F",info:"\u2139\uFE0F"};return i`
|
|
144
|
+
<div class="cw-block-status cw-block-status-${e.state||"info"}">
|
|
145
|
+
<span class="cw-block-status-icon">${t[e.state]||"\u2139\uFE0F"}</span>
|
|
146
|
+
<div>
|
|
147
|
+
<strong>${e.title}</strong>
|
|
148
|
+
${e.body&&i`<div>${e.body}</div>`}
|
|
149
|
+
${e.progress!=null&&i`
|
|
150
|
+
<div class="cw-block-progress"><div class="cw-block-progress-bar" style=${{width:`${e.progress*100}%`}}></div></div>
|
|
151
|
+
`}
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
`}var Sn={card:Mt,cardList:mn,actionButtons:gn,callout:vn,image:yn,divider:$n,table:wn,code:kn,collapsible:bn,status:Cn};function xt({blocks:e,onAction:t,markdownParser:n}){return!e||e.length===0?null:i`
|
|
155
|
+
<div class="cw-content-blocks">
|
|
156
|
+
${e.map((s,a)=>{let o=Sn[s.type];return o?i`<${o} key=${a} block=${s} onAction=${t} markdownParser=${n} />`:null})}
|
|
157
|
+
</div>
|
|
158
|
+
`}function Te({msg:e,show:t,onToggle:n}){return t?i`
|
|
72
159
|
<div class="cw-debug-payload">
|
|
73
160
|
<button class="cw-debug-payload-close" onClick=${n}>×</button>
|
|
74
161
|
<pre class="cw-debug-payload-content">${JSON.stringify(e,null,2)}</pre>
|
|
75
162
|
</div>
|
|
76
|
-
`:
|
|
163
|
+
`:i`
|
|
77
164
|
<button
|
|
78
165
|
class="cw-debug-payload-btn"
|
|
79
166
|
onClick=${n}
|
|
80
167
|
title="Show message payload"
|
|
81
168
|
>{ }</button>
|
|
82
|
-
`}function
|
|
169
|
+
`}function At({onEdit:e,onRetry:t,isLoading:n,position:s,showEdit:a=!0}){return n?null:i`
|
|
83
170
|
<div class="cw-message-actions cw-message-actions-${s||"left"}">
|
|
84
|
-
${a&&
|
|
171
|
+
${a&&i`
|
|
85
172
|
<button
|
|
86
173
|
class="cw-message-action-btn"
|
|
87
174
|
onClick=${e}
|
|
@@ -105,14 +192,14 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
105
192
|
</svg>
|
|
106
193
|
</button>
|
|
107
194
|
</div>
|
|
108
|
-
`}function
|
|
195
|
+
`}function Tn({initialContent:e,onSave:t,onCancel:n}){let[s,a]=S(e),o=Q(null);return B(()=>{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")},[]),i`
|
|
109
196
|
<div class="cw-inline-edit">
|
|
110
197
|
<textarea
|
|
111
198
|
ref=${o}
|
|
112
199
|
class="cw-inline-edit-input"
|
|
113
200
|
value=${s}
|
|
114
|
-
onInput=${
|
|
115
|
-
onKeyDown=${
|
|
201
|
+
onInput=${d=>{a(d.target.value),d.target.style.height="auto",d.target.style.height=d.target.scrollHeight+"px"}}
|
|
202
|
+
onKeyDown=${d=>{d.key==="Enter"&&!d.shiftKey?(d.preventDefault(),s.trim()&&t(s.trim())):d.key==="Escape"&&n()}}
|
|
116
203
|
rows="1"
|
|
117
204
|
/>
|
|
118
205
|
<div class="cw-inline-edit-actions">
|
|
@@ -129,111 +216,121 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
129
216
|
>Save & Send</button>
|
|
130
217
|
</div>
|
|
131
218
|
</div>
|
|
132
|
-
`}function
|
|
133
|
-
<div class="cw-agent-context ${
|
|
134
|
-
<span class="cw-agent-context-icon">${
|
|
219
|
+
`}function It({msg:e,debugMode:t,markdownParser:n,onEdit:s,onRetry:a,onSendMessage:o,isLoading:l,messageIndex:c}){let[d,u]=S(!1),[p,r]=S(!1),[_,h]=S(!1),f=e.role==="user",b=e.role==="system",v=e.type==="tool_call",m=e.type==="tool_result",k=e.type==="error",$=e.type==="sub_agent_start",O=e.type==="sub_agent_end",q=e.type==="agent_context";if(b&&!t)return null;if($||O||q)return i`
|
|
220
|
+
<div class="cw-agent-context ${$?"cw-agent-delegating":""} ${O?"cw-agent-returned":""}" style="position: relative;">
|
|
221
|
+
<span class="cw-agent-context-icon">${$?"\u{1F517}":O?"\u2713":"\u{1F916}"}</span>
|
|
135
222
|
<span class="cw-agent-context-text">${e.content}</span>
|
|
136
|
-
${e.metadata?.agentName&&
|
|
223
|
+
${e.metadata?.agentName&&i`
|
|
137
224
|
<span class="cw-agent-context-name">${e.metadata.agentName}</span>
|
|
138
225
|
`}
|
|
139
|
-
${t&&
|
|
226
|
+
${t&&i`<${Te} msg=${e} show=${p} onToggle=${()=>r(!p)} />`}
|
|
227
|
+
</div>
|
|
228
|
+
`;if(e.type==="content_blocks"&&e.metadata?.blocks){let T=y=>{y.type==="message"&&o&&o(y.message),y.type==="callback"&&e._onCallback&&e._onCallback(y.callbackId),y.type==="link"&&y.url&&window.open(y.url,"_blank","noopener")};return i`
|
|
229
|
+
<div class="cw-message-row" style="position: relative;">
|
|
230
|
+
<${xt}
|
|
231
|
+
blocks=${e.metadata.blocks}
|
|
232
|
+
onAction=${T}
|
|
233
|
+
markdownParser=${n}
|
|
234
|
+
/>
|
|
235
|
+
${t&&i`<${Te} msg=${e} show=${p} onToggle=${()=>r(!p)} />`}
|
|
140
236
|
</div>
|
|
141
|
-
|
|
142
|
-
<div class="cw-tool-message ${
|
|
143
|
-
<span class="cw-tool-label" onClick=${()=>
|
|
237
|
+
`}if(v||m){let T=e.metadata?.arguments||e.metadata?.result,y=R=>{if(typeof R=="string")try{return JSON.stringify(JSON.parse(R),null,2)}catch{return R}return JSON.stringify(R,null,2)};return i`
|
|
238
|
+
<div class="cw-tool-message ${m?"cw-tool-result":"cw-tool-call"}" style="position: relative;">
|
|
239
|
+
<span class="cw-tool-label" onClick=${()=>T&&u(!d)}>
|
|
144
240
|
${e.content}
|
|
145
|
-
${
|
|
241
|
+
${T&&i`<span class="cw-tool-expand">${d?"\u25BC":"\u25B6"}</span>`}
|
|
146
242
|
</span>
|
|
147
|
-
${
|
|
148
|
-
<pre class="cw-tool-details">${
|
|
243
|
+
${d&&T&&i`
|
|
244
|
+
<pre class="cw-tool-details">${z(y(v?e.metadata.arguments:e.metadata.result))}</pre>
|
|
149
245
|
`}
|
|
150
|
-
${t&&
|
|
246
|
+
${t&&i`<${Te} msg=${e} show=${p} onToggle=${()=>r(!p)} />`}
|
|
151
247
|
</div>
|
|
152
|
-
`}let
|
|
248
|
+
`}let P=["cw-message",f&&"cw-message-user",k&&"cw-message-error"].filter(Boolean).join(" "),H=`cw-message-row ${f?"cw-message-row-user":""}`,F=e.role==="assistant"?kt(e.content,n):z(e.content),L=e.files&&e.files.length>0,j=()=>L?i`
|
|
153
249
|
<div class="cw-message-attachments">
|
|
154
|
-
${e.files.map(
|
|
155
|
-
<a class="cw-attachment-thumbnail" href=${
|
|
156
|
-
<img src=${
|
|
250
|
+
${e.files.map(T=>T.type&&T.type.startsWith("image/")?i`
|
|
251
|
+
<a class="cw-attachment-thumbnail" href=${T.url} target="_blank" title=${T.name}>
|
|
252
|
+
<img src=${T.url} alt=${T.name} />
|
|
157
253
|
</a>
|
|
158
|
-
`:
|
|
159
|
-
<a class="cw-attachment-file" href=${
|
|
160
|
-
<span class="cw-attachment-icon">${Se(
|
|
254
|
+
`:i`
|
|
255
|
+
<a class="cw-attachment-file" href=${T.url} target="_blank" title=${T.name}>
|
|
256
|
+
<span class="cw-attachment-icon">${Se(T.type)}</span>
|
|
161
257
|
<span class="cw-attachment-info">
|
|
162
|
-
<span class="cw-attachment-name">${
|
|
163
|
-
<span class="cw-attachment-size">${Ce(
|
|
258
|
+
<span class="cw-attachment-name">${T.name}</span>
|
|
259
|
+
<span class="cw-attachment-size">${Ce(T.size)}</span>
|
|
164
260
|
</span>
|
|
165
261
|
</a>
|
|
166
262
|
`)}
|
|
167
263
|
</div>
|
|
168
|
-
`:null,
|
|
169
|
-
<div class=${
|
|
170
|
-
${
|
|
171
|
-
<${
|
|
264
|
+
`:null,N=T=>{h(!1),s&&s(c,T)},w=()=>{a&&a(c)};if(f&&_)return i`
|
|
265
|
+
<div class=${H} style="position: relative;">
|
|
266
|
+
${j()}
|
|
267
|
+
<${Tn}
|
|
172
268
|
initialContent=${e.content}
|
|
173
|
-
onSave=${
|
|
174
|
-
onCancel=${()=>
|
|
269
|
+
onSave=${N}
|
|
270
|
+
onCancel=${()=>h(!1)}
|
|
175
271
|
/>
|
|
176
272
|
</div>
|
|
177
|
-
`;let
|
|
178
|
-
<div class="${
|
|
179
|
-
${
|
|
180
|
-
${
|
|
273
|
+
`;let E=f&&s&&a,M=e.role==="assistant"&&a&&!l;return i`
|
|
274
|
+
<div class="${H} ${E||M?"cw-message-row-with-actions":""}">
|
|
275
|
+
${j()}
|
|
276
|
+
${E&&i`
|
|
181
277
|
<div class="cw-user-actions-wrapper">
|
|
182
|
-
<${
|
|
183
|
-
onEdit=${()=>
|
|
184
|
-
onRetry=${
|
|
185
|
-
isLoading=${
|
|
278
|
+
<${At}
|
|
279
|
+
onEdit=${()=>h(!0)}
|
|
280
|
+
onRetry=${w}
|
|
281
|
+
isLoading=${l}
|
|
186
282
|
position="left"
|
|
187
283
|
showEdit=${!0}
|
|
188
284
|
/>
|
|
189
|
-
<div class=${
|
|
285
|
+
<div class=${P} dangerouslySetInnerHTML=${{__html:F}} />
|
|
190
286
|
</div>
|
|
191
287
|
`}
|
|
192
|
-
${!
|
|
193
|
-
<div class=${
|
|
288
|
+
${!E&&i`
|
|
289
|
+
<div class=${P} dangerouslySetInnerHTML=${{__html:F}} />
|
|
194
290
|
`}
|
|
195
|
-
${
|
|
196
|
-
<${
|
|
197
|
-
onRetry=${
|
|
198
|
-
isLoading=${
|
|
291
|
+
${M&&i`
|
|
292
|
+
<${At}
|
|
293
|
+
onRetry=${w}
|
|
294
|
+
isLoading=${l}
|
|
199
295
|
position="right"
|
|
200
296
|
showEdit=${!1}
|
|
201
297
|
/>
|
|
202
298
|
`}
|
|
203
|
-
${t&&
|
|
299
|
+
${t&&i`<${Te} msg=${e} show=${p} onToggle=${()=>r(!p)} />`}
|
|
204
300
|
</div>
|
|
205
|
-
`}function
|
|
206
|
-
<div class="cw-messages" ref=${
|
|
207
|
-
${
|
|
301
|
+
`}function Dt({messages:e,isLoading:t,hasMoreMessages:n,loadingMoreMessages:s,onLoadMore:a,onEditMessage:o,onRetryMessage:l,onSendMessage:c,debugMode:d,markdownParser:u,emptyStateTitle:p,emptyStateMessage:r}){let _=Q(null),h=Q(!0),f=v=>{let m=v.target,k=m.scrollHeight-m.scrollTop-m.clientHeight<100;if(h.current=k,m.scrollTop<50&&n&&!s){let $=m.scrollHeight;a().then(()=>{let O=m.scrollHeight;m.scrollTop=O-$+m.scrollTop})}};B(()=>{let v=_.current;v&&h.current&&requestAnimationFrame(()=>{v.scrollTop=v.scrollHeight})},[e,t]),B(()=>{let v=_.current;v&&e.length<=2&&(h.current=!0,requestAnimationFrame(()=>{v.scrollTop=v.scrollHeight}))},[e.length]);let b=e.length===0;return i`
|
|
302
|
+
<div class="cw-messages" ref=${_} onScroll=${f}>
|
|
303
|
+
${b&&i`
|
|
208
304
|
<div class="cw-empty-state">
|
|
209
305
|
<svg class="cw-empty-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
210
306
|
<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>
|
|
211
307
|
</svg>
|
|
212
|
-
<h3>${
|
|
213
|
-
<p>${
|
|
308
|
+
<h3>${z(p)}</h3>
|
|
309
|
+
<p>${z(r)}</p>
|
|
214
310
|
</div>
|
|
215
311
|
`}
|
|
216
312
|
|
|
217
|
-
${!
|
|
313
|
+
${!b&&n&&i`
|
|
218
314
|
<div class="cw-load-more" onClick=${a}>
|
|
219
|
-
${s?
|
|
315
|
+
${s?i`<span class="cw-spinner"></span><span>Loading...</span>`:i`<span>↑ Scroll up or click to load older messages</span>`}
|
|
220
316
|
</div>
|
|
221
317
|
`}
|
|
222
318
|
|
|
223
|
-
${e.map((
|
|
224
|
-
<${
|
|
225
|
-
key=${
|
|
226
|
-
msg=${
|
|
227
|
-
messageIndex=${
|
|
228
|
-
debugMode=${
|
|
319
|
+
${e.map((v,m)=>i`
|
|
320
|
+
<${It}
|
|
321
|
+
key=${v.id}
|
|
322
|
+
msg=${v}
|
|
323
|
+
messageIndex=${m}
|
|
324
|
+
debugMode=${d}
|
|
229
325
|
markdownParser=${u}
|
|
230
326
|
onEdit=${o}
|
|
231
327
|
onRetry=${l}
|
|
328
|
+
onSendMessage=${c}
|
|
232
329
|
isLoading=${t}
|
|
233
330
|
/>
|
|
234
331
|
`)}
|
|
235
332
|
|
|
236
|
-
${t&&
|
|
333
|
+
${t&&i`
|
|
237
334
|
<div class="cw-message-row">
|
|
238
335
|
<div class="cw-typing">
|
|
239
336
|
<span class="cw-spinner"></span>
|
|
@@ -242,41 +339,41 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
242
339
|
</div>
|
|
243
340
|
`}
|
|
244
341
|
</div>
|
|
245
|
-
`}var
|
|
342
|
+
`}var We=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function Pt({onSend:e,onCancel:t,isLoading:n,placeholder:s,primaryColor:a,enableVoice:o=!0,enableFiles:l=!0}){let[c,d]=S(""),[u,p]=S([]),[r,_]=S(!1),[h,f]=S(!1),[b]=S(()=>!!We),v=Q(null),m=Q(null),k=Q(null),$=Q(!1);B(()=>{!n&&v.current&&v.current.focus()},[n]),B(()=>{v.current&&(v.current.style.height="auto",v.current.style.height=Math.min(v.current.scrollHeight,150)+"px")},[c]),B(()=>()=>{$.current=!1,k.current&&k.current.abort()},[]);let O=y=>{y.preventDefault(),(c.trim()||u.length>0)&&!n&&(e(c,u),d(""),p([]),v.current&&(v.current.style.height="auto"),m.current&&(m.current.value=""))},q=y=>{let R=Array.from(y.target.files||[]);R.length>0&&p(K=>[...K,...R])},P=y=>{p(R=>R.filter((K,g)=>g!==y))},H=y=>{y.preventDefault(),m.current&&!n&&m.current.click()},F=y=>{y.key==="Enter"&&!y.shiftKey&&(y.preventDefault(),O(y))},L=y=>{n&&t&&(y.preventDefault(),t())},j=()=>{if(!We||n)return;$.current=!0;let y=new We;y.continuous=!0,y.interimResults=!0,y.lang=navigator.language||"en-US";let R=c,K="";y.onstart=()=>{f(!0)},y.onresult=g=>{K="";for(let A=g.resultIndex;A<g.results.length;A++){let V=g.results[A][0].transcript;g.results[A].isFinal?R+=(R?" ":"")+V:K+=V}d(R+(K?" "+K:""))},y.onerror=g=>{if(g.error==="no-speech"||g.error==="aborted"){console.log("[ChatWidget] Speech recognition:",g.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",g.error),$.current=!1,f(!1),d(R||c)},y.onend=()=>{if($.current){console.log("[ChatWidget] Recognition paused, restarting...");try{y.start();return}catch(g){console.warn("[ChatWidget] Could not restart recognition:",g)}}f(!1),R&&d(R),k.current=null},k.current=y,y.start()},N=()=>{$.current=!1,k.current&&k.current.stop()},w=y=>{y.preventDefault(),h?N():j()},E=i`
|
|
246
343
|
<svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
|
|
247
344
|
<rect x="2" y="2" width="10" height="10" rx="1" />
|
|
248
345
|
</svg>
|
|
249
|
-
`,C=
|
|
346
|
+
`,C=i`
|
|
250
347
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
251
348
|
<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path>
|
|
252
349
|
<path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>
|
|
253
350
|
<line x1="12" y1="19" x2="12" y2="23"></line>
|
|
254
351
|
<line x1="8" y1="23" x2="16" y2="23"></line>
|
|
255
352
|
</svg>
|
|
256
|
-
`,M=
|
|
353
|
+
`,M=i`
|
|
257
354
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
258
355
|
<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>
|
|
259
356
|
</svg>
|
|
260
|
-
`,
|
|
261
|
-
<form class="cw-input-form" onSubmit=${
|
|
357
|
+
`,I=o&&b,T=l;return i`
|
|
358
|
+
<form class="cw-input-form" onSubmit=${O}>
|
|
262
359
|
<input
|
|
263
360
|
type="file"
|
|
264
361
|
ref=${m}
|
|
265
362
|
style="display: none"
|
|
266
363
|
multiple
|
|
267
|
-
onChange=${
|
|
364
|
+
onChange=${q}
|
|
268
365
|
/>
|
|
269
|
-
${
|
|
366
|
+
${u.length>0&&i`
|
|
270
367
|
<div class="cw-file-chips">
|
|
271
|
-
${
|
|
272
|
-
<div class="cw-file-chip" key=${
|
|
273
|
-
<span class="cw-file-chip-icon">${Se(
|
|
274
|
-
<span class="cw-file-chip-name" title=${
|
|
275
|
-
<span class="cw-file-chip-size">(${Ce(
|
|
368
|
+
${u.map((y,R)=>i`
|
|
369
|
+
<div class="cw-file-chip" key=${R}>
|
|
370
|
+
<span class="cw-file-chip-icon">${Se(y.type)}</span>
|
|
371
|
+
<span class="cw-file-chip-name" title=${y.name}>${y.name.length>20?y.name.substring(0,17)+"...":y.name}</span>
|
|
372
|
+
<span class="cw-file-chip-size">(${Ce(y.size)})</span>
|
|
276
373
|
<button
|
|
277
374
|
type="button"
|
|
278
375
|
class="cw-file-chip-remove"
|
|
279
|
-
onClick=${()=>
|
|
376
|
+
onClick=${()=>P(R)}
|
|
280
377
|
title="Remove file"
|
|
281
378
|
>×</button>
|
|
282
379
|
</div>
|
|
@@ -284,16 +381,16 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
284
381
|
</div>
|
|
285
382
|
`}
|
|
286
383
|
<textarea
|
|
287
|
-
ref=${
|
|
384
|
+
ref=${v}
|
|
288
385
|
class="cw-input"
|
|
289
|
-
placeholder=${
|
|
290
|
-
value=${
|
|
291
|
-
onInput=${
|
|
386
|
+
placeholder=${z(s)}
|
|
387
|
+
value=${c}
|
|
388
|
+
onInput=${y=>d(y.target.value)}
|
|
292
389
|
onKeyDown=${F}
|
|
293
390
|
disabled=${n}
|
|
294
391
|
rows="1"
|
|
295
392
|
/>
|
|
296
|
-
${
|
|
393
|
+
${T&&i`
|
|
297
394
|
<button
|
|
298
395
|
type="button"
|
|
299
396
|
class="cw-attach-btn"
|
|
@@ -304,7 +401,7 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
304
401
|
${M}
|
|
305
402
|
</button>
|
|
306
403
|
`}
|
|
307
|
-
${
|
|
404
|
+
${I&&i`
|
|
308
405
|
<button
|
|
309
406
|
type="button"
|
|
310
407
|
class=${`cw-voice-btn ${h?"cw-voice-btn-recording":""}`}
|
|
@@ -319,15 +416,15 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
319
416
|
type=${n?"button":"submit"}
|
|
320
417
|
class=${`cw-send-btn ${n?"cw-send-btn-loading":""} ${n&&r?"cw-send-btn-stop":""}`}
|
|
321
418
|
style=${{backgroundColor:n&&r?"#dc2626":a}}
|
|
322
|
-
onClick=${
|
|
323
|
-
onMouseEnter=${()=>
|
|
324
|
-
onMouseLeave=${()=>
|
|
419
|
+
onClick=${L}
|
|
420
|
+
onMouseEnter=${()=>_(!0)}
|
|
421
|
+
onMouseLeave=${()=>_(!1)}
|
|
325
422
|
title=${n?"Stop":"Send"}
|
|
326
423
|
>
|
|
327
|
-
${n?r?
|
|
424
|
+
${n?r?E:i`<span class="cw-spinner"></span>`:"\u27A4"}
|
|
328
425
|
</button>
|
|
329
426
|
</form>
|
|
330
|
-
`}function
|
|
427
|
+
`}function Rt({isOpen:e,conversations:t,conversationsLoading:n,currentConversationId:s,onClose:a,onNewConversation:o,onSwitchConversation:l}){return i`
|
|
331
428
|
<div class="cw-sidebar ${e?"cw-sidebar-open":""}">
|
|
332
429
|
<div class="cw-sidebar-header">
|
|
333
430
|
<span>Conversations</span>
|
|
@@ -339,24 +436,24 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
339
436
|
</button>
|
|
340
437
|
|
|
341
438
|
<div class="cw-conversation-list">
|
|
342
|
-
${n&&
|
|
439
|
+
${n&&i`
|
|
343
440
|
<div class="cw-sidebar-loading">
|
|
344
441
|
<span class="cw-spinner"></span>
|
|
345
442
|
</div>
|
|
346
443
|
`}
|
|
347
444
|
|
|
348
|
-
${!n&&t.length===0&&
|
|
445
|
+
${!n&&t.length===0&&i`
|
|
349
446
|
<div class="cw-sidebar-empty">No conversations yet</div>
|
|
350
447
|
`}
|
|
351
448
|
|
|
352
|
-
${t.map(i
|
|
449
|
+
${t.map(c=>i`
|
|
353
450
|
<div
|
|
354
|
-
key=${
|
|
355
|
-
class="cw-conversation-item ${
|
|
356
|
-
onClick=${()=>l(
|
|
451
|
+
key=${c.id}
|
|
452
|
+
class="cw-conversation-item ${c.id===s?"cw-conversation-active":""}"
|
|
453
|
+
onClick=${()=>l(c.id)}
|
|
357
454
|
>
|
|
358
|
-
<div class="cw-conversation-title">${
|
|
359
|
-
<div class="cw-conversation-date">${wt(
|
|
455
|
+
<div class="cw-conversation-title">${z(c.title||"Untitled")}</div>
|
|
456
|
+
<div class="cw-conversation-date">${wt(c.updatedAt||c.createdAt)}</div>
|
|
360
457
|
</div>
|
|
361
458
|
`)}
|
|
362
459
|
</div>
|
|
@@ -366,7 +463,7 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
366
463
|
class="cw-sidebar-overlay ${e?"cw-sidebar-overlay-visible":""}"
|
|
367
464
|
onClick=${a}
|
|
368
465
|
/>
|
|
369
|
-
`}function
|
|
466
|
+
`}function Ft({availableModels:e,selectedModel:t,onSelectModel:n,thinkingEnabled:s,onToggleThinking:a,disabled:o}){let[l,c]=S(!1);if(!e||e.length===0)return null;let d=e.find(f=>f.id===t),u=d?.name||"Select Model",p=d?.supports_thinking||!1,r=()=>{o||c(!l)},_=f=>{n(f),c(!1)},h=f=>{f.stopPropagation(),a&&p&&a(!s)};return i`
|
|
370
467
|
<div class="cw-model-selector">
|
|
371
468
|
<button
|
|
372
469
|
class="cw-model-btn"
|
|
@@ -375,11 +472,11 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
375
472
|
title="Select Model"
|
|
376
473
|
>
|
|
377
474
|
<span class="cw-model-icon">🤖</span>
|
|
378
|
-
<span class="cw-model-name">${
|
|
475
|
+
<span class="cw-model-name">${z(u)}</span>
|
|
379
476
|
<span class="cw-model-chevron">${l?"\u25B2":"\u25BC"}</span>
|
|
380
477
|
</button>
|
|
381
478
|
|
|
382
|
-
${p&&a&&
|
|
479
|
+
${p&&a&&i`
|
|
383
480
|
<button
|
|
384
481
|
class="cw-thinking-toggle ${s?"cw-thinking-enabled":""}"
|
|
385
482
|
onClick=${h}
|
|
@@ -390,48 +487,48 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
390
487
|
</button>
|
|
391
488
|
`}
|
|
392
489
|
|
|
393
|
-
${l&&
|
|
490
|
+
${l&&i`
|
|
394
491
|
<div class="cw-model-dropdown">
|
|
395
|
-
${e.map(f=>
|
|
492
|
+
${e.map(f=>i`
|
|
396
493
|
<button
|
|
397
494
|
key=${f.id}
|
|
398
495
|
class="cw-model-option ${f.id===t?"cw-model-option-selected":""}"
|
|
399
|
-
onClick=${()=>
|
|
496
|
+
onClick=${()=>_(f.id)}
|
|
400
497
|
>
|
|
401
498
|
<span class="cw-model-option-name">
|
|
402
|
-
${
|
|
403
|
-
${f.supports_thinking&&
|
|
499
|
+
${z(f.name)}
|
|
500
|
+
${f.supports_thinking&&i`<span class="cw-thinking-badge" title="Supports extended thinking">🧠</span>`}
|
|
404
501
|
</span>
|
|
405
|
-
<span class="cw-model-option-provider">${
|
|
406
|
-
${f.description&&
|
|
407
|
-
<span class="cw-model-option-desc">${
|
|
502
|
+
<span class="cw-model-option-provider">${z(f.provider)}</span>
|
|
503
|
+
${f.description&&i`
|
|
504
|
+
<span class="cw-model-option-desc">${z(f.description)}</span>
|
|
408
505
|
`}
|
|
409
506
|
</button>
|
|
410
507
|
`)}
|
|
411
508
|
</div>
|
|
412
509
|
`}
|
|
413
510
|
</div>
|
|
414
|
-
`}var
|
|
511
|
+
`}var Mn={not_started:"\u25CB",in_progress:"\u25D0",complete:"\u25CF",cancelled:"\u2298"},En={not_started:"Not Started",in_progress:"In Progress",complete:"Complete",cancelled:"Cancelled"};function xn({task:e,onUpdate:t,onRemove:n,depth:s=0}){let[a,o]=S(!1),[l,c]=S(e.name),d=x(()=>{let _={not_started:"in_progress",in_progress:"complete",complete:"not_started",cancelled:"not_started"};t(e.id,{state:_[e.state]||"not_started"})},[e,t]),u=x(()=>{l.trim()&&l!==e.name&&t(e.id,{name:l.trim()}),o(!1)},[e,l,t]),p=x(_=>{_.key==="Enter"&&u(),_.key==="Escape"&&(c(e.name),o(!1))},[u,e.name]),r=`cw-task-state-${e.state.replace("_","-")}`;return i`
|
|
415
512
|
<div class="cw-task-item ${r}" style=${{paddingLeft:`${s*16+8}px`}}>
|
|
416
513
|
<button
|
|
417
514
|
class="cw-task-state-btn"
|
|
418
|
-
onClick=${
|
|
419
|
-
title=${
|
|
515
|
+
onClick=${d}
|
|
516
|
+
title=${En[e.state]}
|
|
420
517
|
>
|
|
421
|
-
${
|
|
518
|
+
${Mn[e.state]}
|
|
422
519
|
</button>
|
|
423
520
|
|
|
424
|
-
${a?
|
|
521
|
+
${a?i`
|
|
425
522
|
<input
|
|
426
523
|
type="text"
|
|
427
524
|
class="cw-task-edit-input"
|
|
428
525
|
value=${l}
|
|
429
|
-
onInput=${
|
|
430
|
-
onBlur=${
|
|
526
|
+
onInput=${_=>c(_.target.value)}
|
|
527
|
+
onBlur=${u}
|
|
431
528
|
onKeyDown=${p}
|
|
432
529
|
autoFocus
|
|
433
530
|
/>
|
|
434
|
-
`:
|
|
531
|
+
`:i`
|
|
435
532
|
<span
|
|
436
533
|
class="cw-task-name"
|
|
437
534
|
onClick=${()=>o(!0)}
|
|
@@ -449,16 +546,16 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
449
546
|
×
|
|
450
547
|
</button>
|
|
451
548
|
</div>
|
|
452
|
-
`}function
|
|
453
|
-
<${
|
|
549
|
+
`}function Ot({tasks:e,progress:t,isLoading:n,error:s,onUpdate:a,onRemove:o,onClear:l,onRefresh:c}){let d=x(r=>{let _=new Map,h=[];return r.forEach(f=>{_.set(f.id,{...f,children:[]})}),r.forEach(f=>{let b=_.get(f.id);f.parent_id&&_.has(f.parent_id)?_.get(f.parent_id).children.push(b):h.push(b)}),h},[]),u=x((r,_=0)=>i`
|
|
550
|
+
<${xn}
|
|
454
551
|
key=${r.id}
|
|
455
552
|
task=${r}
|
|
456
|
-
depth=${
|
|
553
|
+
depth=${_}
|
|
457
554
|
onUpdate=${a}
|
|
458
555
|
onRemove=${o}
|
|
459
556
|
/>
|
|
460
|
-
${r.children?.map(h=>
|
|
461
|
-
`,[a,o]),p=
|
|
557
|
+
${r.children?.map(h=>u(h,_+1))}
|
|
558
|
+
`,[a,o]),p=d(e);return n&&e.length===0?i`<div class="cw-tasks-loading">Loading tasks...</div>`:i`
|
|
462
559
|
<div class="cw-tasks-container">
|
|
463
560
|
<div class="cw-tasks-header">
|
|
464
561
|
<div class="cw-tasks-progress">
|
|
@@ -473,25 +570,25 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
473
570
|
</div>
|
|
474
571
|
</div>
|
|
475
572
|
<div class="cw-tasks-actions">
|
|
476
|
-
<button class="cw-tasks-action-btn" onClick=${
|
|
477
|
-
${e.length>0&&
|
|
573
|
+
<button class="cw-tasks-action-btn" onClick=${c} title="Refresh">↻</button>
|
|
574
|
+
${e.length>0&&i`
|
|
478
575
|
<button class="cw-tasks-action-btn" onClick=${l} title="Clear all">🗑</button>
|
|
479
576
|
`}
|
|
480
577
|
</div>
|
|
481
578
|
</div>
|
|
482
579
|
|
|
483
|
-
${s&&
|
|
580
|
+
${s&&i`<div class="cw-tasks-error">${s}</div>`}
|
|
484
581
|
|
|
485
582
|
<div class="cw-tasks-list">
|
|
486
|
-
${p.length===0?
|
|
583
|
+
${p.length===0?i`
|
|
487
584
|
<div class="cw-tasks-empty">
|
|
488
585
|
<p>No tasks yet</p>
|
|
489
586
|
<p class="cw-tasks-empty-hint">Tasks will appear here when the agent creates them</p>
|
|
490
587
|
</div>
|
|
491
|
-
`:p.map(r=>
|
|
588
|
+
`:p.map(r=>u(r))}
|
|
492
589
|
</div>
|
|
493
590
|
</div>
|
|
494
|
-
`}function
|
|
591
|
+
`}function Ht({systems:e,agents:t,selectedSystem:n,selectedAgent:s,selectedSystemVersion:a,selectedAgentVersion:o,onSelectSystem:l,onSelectAgent:c,onSelectSystemVersion:d,onSelectAgentVersion:u,disabled:p}){let r=e.find($=>$.slug===n),_=t.find($=>$.slug===s),h=r?.versions||[],f=_?.versions||[];if(e.length===0&&t.length===0)return null;let b=e.length>1,v=t.length>1,m=h.length>1,k=f.length>1;return i`
|
|
495
592
|
<div class="cw-dev-toolbar">
|
|
496
593
|
<div class="cw-dev-toolbar-label">
|
|
497
594
|
<span class="cw-dev-toolbar-icon">🛠️</span>
|
|
@@ -502,20 +599,20 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
502
599
|
<!-- System -->
|
|
503
600
|
<div class="cw-dev-select-group">
|
|
504
601
|
<label class="cw-dev-label">System</label>
|
|
505
|
-
${
|
|
602
|
+
${b?i`
|
|
506
603
|
<select
|
|
507
604
|
class="cw-dev-select"
|
|
508
605
|
value=${n||""}
|
|
509
606
|
onChange=${$=>l($.target.value)}
|
|
510
607
|
disabled=${p}
|
|
511
608
|
>
|
|
512
|
-
${e.map($=>
|
|
609
|
+
${e.map($=>i`
|
|
513
610
|
<option key=${$.slug} value=${$.slug}>
|
|
514
611
|
${$.name}
|
|
515
612
|
</option>
|
|
516
613
|
`)}
|
|
517
614
|
</select>
|
|
518
|
-
`:
|
|
615
|
+
`:i`
|
|
519
616
|
<span class="cw-dev-badge">${r?.name||"\u2014"}</span>
|
|
520
617
|
`}
|
|
521
618
|
</div>
|
|
@@ -523,20 +620,20 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
523
620
|
<!-- System Version -->
|
|
524
621
|
<div class="cw-dev-select-group">
|
|
525
622
|
<label class="cw-dev-label">Sys Ver</label>
|
|
526
|
-
${m?
|
|
623
|
+
${m?i`
|
|
527
624
|
<select
|
|
528
625
|
class="cw-dev-select"
|
|
529
626
|
value=${a||""}
|
|
530
|
-
onChange=${$=>
|
|
627
|
+
onChange=${$=>d($.target.value||null)}
|
|
531
628
|
disabled=${p}
|
|
532
629
|
>
|
|
533
|
-
${h.map($=>
|
|
630
|
+
${h.map($=>i`
|
|
534
631
|
<option key=${$.version} value=${$.version}>
|
|
535
632
|
${$.version}${$.is_active?" \u2713":""}${$.is_draft?" (draft)":""}
|
|
536
633
|
</option>
|
|
537
634
|
`)}
|
|
538
635
|
</select>
|
|
539
|
-
`:
|
|
636
|
+
`:i`
|
|
540
637
|
<span class="cw-dev-badge">${h.length===1?h[0].version:"none"}</span>
|
|
541
638
|
`}
|
|
542
639
|
</div>
|
|
@@ -544,47 +641,47 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
544
641
|
<!-- Agent -->
|
|
545
642
|
<div class="cw-dev-select-group">
|
|
546
643
|
<label class="cw-dev-label">Agent</label>
|
|
547
|
-
${
|
|
644
|
+
${v?i`
|
|
548
645
|
<select
|
|
549
646
|
class="cw-dev-select"
|
|
550
647
|
value=${s||""}
|
|
551
|
-
onChange=${$=>
|
|
648
|
+
onChange=${$=>c($.target.value)}
|
|
552
649
|
disabled=${p}
|
|
553
650
|
>
|
|
554
|
-
${t.map($=>
|
|
651
|
+
${t.map($=>i`
|
|
555
652
|
<option key=${$.slug} value=${$.slug}>
|
|
556
653
|
${$.name}${r?.entry_agent?.slug===$.slug?" \u2605":""}
|
|
557
654
|
</option>
|
|
558
655
|
`)}
|
|
559
656
|
</select>
|
|
560
|
-
`:
|
|
561
|
-
<span class="cw-dev-badge">${
|
|
657
|
+
`:i`
|
|
658
|
+
<span class="cw-dev-badge">${_?.name||t[0]?.name||"\u2014"}${r?.entry_agent?.slug===(_?.slug||t[0]?.slug)?" \u2605":""}</span>
|
|
562
659
|
`}
|
|
563
660
|
</div>
|
|
564
661
|
|
|
565
662
|
<!-- Agent Version -->
|
|
566
663
|
<div class="cw-dev-select-group">
|
|
567
664
|
<label class="cw-dev-label">Agent Ver</label>
|
|
568
|
-
${k?
|
|
665
|
+
${k?i`
|
|
569
666
|
<select
|
|
570
667
|
class="cw-dev-select"
|
|
571
668
|
value=${o||""}
|
|
572
|
-
onChange=${$=>
|
|
669
|
+
onChange=${$=>u($.target.value||null)}
|
|
573
670
|
disabled=${p}
|
|
574
671
|
>
|
|
575
|
-
${f.map($=>
|
|
672
|
+
${f.map($=>i`
|
|
576
673
|
<option key=${$.version} value=${$.version}>
|
|
577
674
|
${$.version}${$.is_active?" \u2713":""}${$.is_draft?" (draft)":""}
|
|
578
675
|
</option>
|
|
579
676
|
`)}
|
|
580
677
|
</select>
|
|
581
|
-
`:
|
|
582
|
-
<span class="cw-dev-badge">${f.length===1?f[0].version:
|
|
678
|
+
`:i`
|
|
679
|
+
<span class="cw-dev-badge">${f.length===1?f[0].version:_?.active_version||"\u2014"}</span>
|
|
583
680
|
`}
|
|
584
681
|
</div>
|
|
585
682
|
</div>
|
|
586
683
|
</div>
|
|
587
|
-
`}function Rt(e,t,n){let[s,a]=T([]),[o,l]=T(!1),[i,u]=T(null),[c,p]=T(()=>n?.get(e.conversationIdKey)||null),[r,d]=T(!1),[h,f]=T(!1),[y,g]=T(0),m=Q(null),k=Q(null);V(()=>{c&&n?.set(e.conversationIdKey,c)},[c,e.conversationIdKey,n]);let $=E(async(w,A,C)=>{m.current&&m.current.close();let M=e.apiPaths.runEvents.replace("{runId}",w),S=`${e.backendUrl}${M}`;A&&(S+=`?anonymous_token=${encodeURIComponent(A)}`);let D=new EventSource(S);m.current=D;let b="";D.addEventListener("assistant.message",U=>{try{let v=JSON.parse(U.data);e.onEvent&&e.onEvent("assistant.message",v.payload);let P=v.payload.content;P&&(b+=P,a(B=>{let X=B[B.length-1];return X?.role==="assistant"&&X.id.startsWith("assistant-stream-")?[...B.slice(0,-1),{...X,content:b}]:[...B,{id:"assistant-stream-"+Date.now(),role:"assistant",content:b,timestamp:new Date,type:"message"}]}))}catch(v){console.error("[ChatWidget] Parse error:",v)}}),D.addEventListener("tool.call",U=>{try{let v=JSON.parse(U.data);e.onEvent&&e.onEvent("tool.call",v.payload),a(P=>[...P,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${v.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:v.payload.name,arguments:v.payload.arguments,toolCallId:v.payload.id}}])}catch(v){console.error("[ChatWidget] Parse error:",v)}}),D.addEventListener("tool.result",U=>{try{let v=JSON.parse(U.data);e.onEvent&&e.onEvent("tool.result",v.payload);let P=v.payload.result,B=P?.error;a(X=>[...X,{id:"tool-result-"+Date.now(),role:"system",content:B?`\u274C ${P.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:v.payload.name,result:P,toolCallId:v.payload.tool_call_id}}])}catch(v){console.error("[ChatWidget] Parse error:",v)}}),D.addEventListener("custom",U=>{try{let v=JSON.parse(U.data);e.onEvent&&e.onEvent("custom",v.payload),v.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(v.payload),v.payload?.type==="agent_context"&&a(P=>[...P,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${v.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:v.payload.agent_key,agentName:v.payload.agent_name,action:v.payload.action}}])}catch(v){console.error("[ChatWidget] Parse error:",v)}}),D.addEventListener("sub_agent.start",U=>{try{let v=JSON.parse(U.data);e.onEvent&&e.onEvent("sub_agent.start",v.payload),a(P=>[...P,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${v.payload.agent_name||v.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:v.payload.sub_agent_key,agentName:v.payload.agent_name,invocationMode:v.payload.invocation_mode}}])}catch(v){console.error("[ChatWidget] Parse error:",v)}}),D.addEventListener("sub_agent.end",U=>{try{let v=JSON.parse(U.data);e.onEvent&&e.onEvent("sub_agent.end",v.payload),a(P=>[...P,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${v.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:v.payload.sub_agent_key,agentName:v.payload.agent_name}}])}catch(v){console.error("[ChatWidget] Parse error:",v)}});let L=U=>{try{let v=JSON.parse(U.data);if(e.onEvent&&e.onEvent(v.type,v.payload),v.type==="run.failed"){let P=v.payload.error||"Agent run failed";u(P),a(B=>[...B,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${P}`,timestamp:new Date,type:"error"}])}}catch(v){console.error("[ChatWidget] Parse error:",v)}l(!1),D.close(),m.current=null,b&&C&&C(b)};D.addEventListener("run.succeeded",L),D.addEventListener("run.failed",L),D.addEventListener("run.cancelled",L),D.addEventListener("run.timed_out",L),D.onerror=()=>{l(!1),D.close(),m.current=null}},[e]),N=E(async(w,A={},C={})=>{if(!w.trim()||o)return;let M=[],S={};typeof A=="function"?S={onAssistantMessage:A}:Array.isArray(A)?(M=A,S=C):S=A||{};let{model:D,thinking:b,onAssistantMessage:L,supersedeFromMessageIndex:U}=S;l(!0),u(null);let v={id:be(),role:"user",content:w.trim(),timestamp:new Date,type:"message",files:M.length>0?M.map(P=>({name:P.name,size:P.size,type:P.type})):void 0};a(P=>[...P,v]);try{let P=await t.getOrCreateSession(),B;if(M.length>0){let Y=e.apiCaseStyle!=="camel",Be=ue=>Y?Ne(ue):ue,ne=new FormData;ne.append(Be("agentKey"),e.agentKey),c&&ne.append(Be("conversationId"),c),ne.append("messages",JSON.stringify([{role:"user",content:w.trim()}])),ne.append("metadata",JSON.stringify(Y?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),D&&ne.append("model",D),b&&ne.append("thinking","true"),M.forEach(ue=>{ne.append("files",ue)}),B=t.getFetchOptions({method:"POST",body:ne},P)}else{let Y=t.transformRequest({agentKey:e.agentKey,conversationId:c,messages:[{role:"user",content:w.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...D&&{model:D},...b&&{thinking:!0},...U!==void 0&&{supersedeFromMessageIndex:U}});B=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)},P)}let X=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,B),x=P;if(X.status===401){t.clearSession();let Y=await t.getOrCreateSession(!0);Y&&(x=Y,M.length>0?B=t.getFetchOptions({method:"POST",body:B.body},Y):B=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:B.body},Y),X=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,B))}if(!X.ok){let Y=await X.json().catch(()=>({}));throw new Error(Y.error||Y.detail||`HTTP ${X.status}`)}let Z=await X.json(),ee=t.transformResponse(Z);k.current=ee.id,!c&&ee.conversationId&&p(ee.conversationId),await $(ee.id,x,L)}catch(P){u(P.message||"Failed to send message"),l(!1)}finally{k.current=null}},[e,t,c,o,$]),j=E(async()=>{let w=k.current;if(!(!w||!o))try{let A=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",w):`${e.apiPaths.runs}${w}/cancel/`;(await fetch(`${e.backendUrl}${A}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(m.current&&(m.current.close(),m.current=null),l(!1),k.current=null,a(M=>[...M,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(A){console.error("[ChatWidget] Failed to cancel run:",A)}},[e,t,o]),I=E(()=>{a([]),p(null),u(null),d(!1),g(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),H=w=>{let A={id:be(),role:w.role,timestamp:w.timestamp?new Date(w.timestamp):new Date};if(w.role==="tool")return{...A,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:w.content,toolCallId:w.toolCallId}};if(w.role==="assistant"&&w.toolCalls&&w.toolCalls.length>0)return w.toolCalls.map(M=>({id:be(),role:"assistant",content:`\u{1F527} ${M.function?.name||M.name||"tool"}`,timestamp:A.timestamp,type:"tool_call",metadata:{toolName:M.function?.name||M.name,arguments:M.function?.arguments||M.arguments,toolCallId:M.id}}));let C=typeof w.content=="string"?w.content:JSON.stringify(w.content);return w.role==="assistant"&&!C?.trim()?null:{...A,content:C,type:"message"}},F=E(async w=>{console.log("[ChatWidget] loadConversation called with:",w),l(!0),a([]),p(w);try{let A=await t.getOrCreateSession(),M=`${e.backendUrl}${e.apiPaths.conversations}${w}/?limit=10&offset=0`;console.log("[ChatWidget] Fetching conversation from:",M);let S=await fetch(M,t.getFetchOptions({method:"GET"},A));if(console.log("[ChatWidget] Response status:",S.status),S.ok){let D=await S.json();console.log("[ChatWidget] Raw conversation:",D);let b=t.transformResponse(D);if(console.log("[ChatWidget] Transformed conversation:",b),b.messages){let L=b.messages.flatMap(H).filter(Boolean);console.log("[ChatWidget] Mapped messages:",L),a(L)}d(b.hasMore||!1),g(b.messages?.length||0)}else S.status===404?(console.log("[ChatWidget] Conversation not found, clearing"),p(null),n?.set(e.conversationIdKey,null)):console.error("[ChatWidget] Unexpected response status:",S.status)}catch(A){console.error("[ChatWidget] Failed to load conversation:",A)}finally{l(!1)}},[e,t,n]),R=E(async()=>{if(!(!c||h||!r)){f(!0);try{let w=await t.getOrCreateSession(),C=`${e.backendUrl}${e.apiPaths.conversations}${c}/?limit=10&offset=${y}`,M=await fetch(C,t.getFetchOptions({method:"GET"},w));if(M.ok){let S=await M.json(),D=t.transformResponse(S);if(D.messages?.length>0){let b=D.messages.flatMap(H).filter(Boolean);a(L=>[...b,...L]),g(L=>L+D.messages.length),d(D.hasMore||!1)}else d(!1)}}catch(w){console.error("[ChatWidget] Failed to load more messages:",w)}finally{f(!1)}}},[e,t,c,y,h,r]),J=E(async(w,A,C={})=>{if(o)return;let M=s[w];if(!M||M.role!=="user")return;let S=s.slice(0,w);a(S),await N(A,{...C,supersedeFromMessageIndex:w})},[s,o,N]),O=E(async(w,A={})=>{if(o)return;let C=s[w];if(!C)return;let M=w,S=C;if(C.role==="assistant"){for(let b=w-1;b>=0;b--)if(s[b].role==="user"){M=b,S=s[b];break}if(S.role!=="user")return}else if(C.role!=="user")return;let D=s.slice(0,M);a(D),await N(S.content,{...A,supersedeFromMessageIndex:M})},[s,o,N]);return V(()=>()=>{m.current&&m.current.close()},[]),{messages:s,isLoading:o,error:i,conversationId:c,hasMoreMessages:r,loadingMoreMessages:h,sendMessage:N,cancelRun:j,clearMessages:I,loadConversation:F,loadMoreMessages:R,setConversationId:p,editMessage:J,retryMessage:O}}var Ht="cw_thinking_enabled";function Ot(e,t,n){let[s,a]=T([]),[o,l]=T(null),[i,u]=T(null),[c,p]=T(!1),[r,d]=T(!1);V(()=>{(async()=>{if(e.showModelSelector){p(!0);try{let k=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(k.ok){let $=await k.json(),N=$.models||[];a(N),u($.default);let j=n?.get(e.modelKey);j&&N.some(H=>H.id===j)?l(j):l($.default),n?.get(Ht)==="true"&&d(!0)}}catch(k){console.warn("[ChatWidget] Failed to load models:",k)}finally{p(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let h=E(m=>{l(m),n?.set(e.modelKey,m)},[e.modelKey,n]),f=E(m=>{d(m),n?.set(Ht,m?"true":"false")},[n]),y=E(()=>s.find(m=>m.id===o)||null,[s,o]),g=E(()=>y()?.supports_thinking||!1,[y]);return{availableModels:s,selectedModel:o,defaultModel:i,isLoading:c,selectModel:h,getSelectedModelInfo:y,thinkingEnabled:r,toggleThinking:f,supportsThinking:g}}function Lt(e,t){let[n,s]=T(null),[a,o]=T(!1),[l,i]=T(null),u=e.apiPaths?.tasks||"/api/agent/tasks/",c=E(async()=>{o(!0),i(null);try{let y=`${e.backendUrl}${u}`,g=await fetch(y,t.getFetchOptions({method:"GET"}));if(g.ok){let m=await g.json();s(m)}else{let m=await g.json().catch(()=>({}));i(m.error||"Failed to load tasks")}}catch(y){console.error("[useTasks] Failed to load task list:",y),i("Failed to load tasks")}finally{o(!1)}},[e.backendUrl,u,t]),p=E(async y=>{if(!n)return null;try{let g=`${e.backendUrl}${u}${n.id}/add_task/`,m=await fetch(g,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)}));if(m.ok){let k=await m.json();return await c(),k}else{let k=await m.json().catch(()=>({}));return i(k.error||"Failed to add task"),null}}catch(g){return console.error("[useTasks] Failed to add task:",g),i("Failed to add task"),null}},[e.backendUrl,u,n,t,c]),r=E(async(y,g)=>{if(!n)return null;try{let m=`${e.backendUrl}${u}${n.id}/update_task/${y}/`,k=await fetch(m,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)}));if(k.ok){let $=await k.json();return await c(),$}else{let $=await k.json().catch(()=>({}));return i($.error||"Failed to update task"),null}}catch(m){return console.error("[useTasks] Failed to update task:",m),i("Failed to update task"),null}},[e.backendUrl,u,n,t,c]),d=E(async y=>{if(!n)return!1;try{let g=`${e.backendUrl}${u}${n.id}/remove_task/${y}/`,m=await fetch(g,t.getFetchOptions({method:"DELETE"}));if(m.ok)return await c(),!0;{let k=await m.json().catch(()=>({}));return i(k.error||"Failed to remove task"),!1}}catch(g){return console.error("[useTasks] Failed to remove task:",g),i("Failed to remove task"),!1}},[e.backendUrl,u,n,t,c]),h=E(async()=>{if(!n)return!1;try{let y=`${e.backendUrl}${u}${n.id}/clear/`,g=await fetch(y,t.getFetchOptions({method:"POST"}));if(g.ok)return await c(),!0;{let m=await g.json().catch(()=>({}));return i(m.error||"Failed to clear tasks"),!1}}catch(y){return console.error("[useTasks] Failed to clear tasks:",y),i("Failed to clear tasks"),!1}},[e.backendUrl,u,n,t,c]),f=E(()=>i(null),[]);return{taskList:n,tasks:n?.tasks||[],progress:n?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:l,loadTaskList:c,addTask:p,updateTask:r,removeTask:d,clearTasks:h,clearError:f}}var Nt="cw_selected_system",We="cw_selected_agent",Kt="cw_selected_system_version",Te="cw_selected_agent_version";function Ut(e,t,n){let[s,a]=T([]),[o,l]=T([]),[i,u]=T(null),[c,p]=T(null),[r,d]=T(null),[h,f]=T(null),[y,g]=T(!1),m=E(()=>{if(c)return c;if(i){let I=s.find(H=>H.slug===i);if(I?.entry_agent)return I.entry_agent.slug}return e.agentKey},[c,i,s,e.agentKey]);V(()=>{if(!e.showDevTools)return;(async()=>{g(!0);try{let H=await fetch(`${e.backendUrl}${e.apiPaths.systems}`,t.getFetchOptions({method:"GET"}));if(H.ok){let F=await H.json(),R=F.results||F;a(R);let J=n?.get(Nt);J&&R.some(O=>O.slug===J)?u(J):R.length===1&&u(R[0].slug)}}catch(H){console.warn("[ChatWidget] Failed to load systems:",H)}finally{g(!1)}})()},[e.backendUrl,e.apiPaths.systems,e.showDevTools,t,n]),V(()=>{if(!e.showDevTools)return;(async()=>{try{let H=i?`?system=${encodeURIComponent(i)}`:"",F=await fetch(`${e.backendUrl}${e.apiPaths.agents}${H}`,t.getFetchOptions({method:"GET"}));if(F.ok){let R=await F.json(),J=R.results||R;l(J);let O=n?.get(We);if(O&&J.some(A=>A.slug===O))p(O);else if(i){let A=s.find(C=>C.slug===i);A?.entry_agent&&p(A.entry_agent.slug)}let w=n?.get(Te);w&&f(w)}}catch(H){console.warn("[ChatWidget] Failed to load agents:",H)}})()},[e.backendUrl,e.apiPaths.agents,e.showDevTools,i,t,n,s]);let k=E(I=>{u(I),n?.set(Nt,I),p(null),f(null),n?.set(We,null),n?.set(Te,null);let F=s.find(R=>R.slug===I)?.active_version||null;d(F),n?.set(Kt,F)},[n,s]),$=E(I=>{p(I),n?.set(We,I);let F=o.find(R=>R.slug===I)?.active_version||null;f(F),n?.set(Te,F)},[n,o]),N=E(I=>{d(I),n?.set(Kt,I)},[n]),j=E(I=>{f(I),n?.set(Te,I)},[n]);return{systems:s,agents:o,selectedSystem:i,selectedAgent:c,selectedSystemVersion:r,selectedAgentVersion:h,isLoading:y,selectSystem:k,selectAgent:$,selectSystemVersion:N,selectAgentVersion:j,getEffectiveAgentKey:m}}function Wt(e,t,n){let s=p=>!p||typeof p!="object"||e.apiCaseStyle==="camel"?p:ke(p),a=p=>!p||typeof p!="object"||e.apiCaseStyle==="snake"?p:we(p),o=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",l=(p=null)=>{let r=o(),d={},h=p||e.authToken||t().authToken;if(r==="token"&&h){let f=e.authHeader||"Authorization",y=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";d[f]=y?`${y} ${h}`:h}else if(r==="jwt"&&h){let f=e.authHeader||"Authorization",y=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";d[f]=y?`${y} ${h}`:h}else if(r==="anonymous"&&h){let f=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";d[f]=h}if(r==="session"){let f=Ct(e.csrfCookieName);f&&(d["X-CSRFToken"]=f)}return d};return{getAuthStrategy:o,getAuthHeaders:l,getFetchOptions:(p={},r=null)=>{let d=o(),h={...p},f=l(r);return console.log("[ChatWidget] getFetchOptions - strategy:",d,"overrideToken:",r,"authHeaders:",f),h.headers={...h.headers,...f},d==="session"&&(h.credentials="include"),h},getOrCreateSession:async(p=!1)=>{let r=o(),d=t(),h=e.anonymousTokenKey||e.sessionTokenKey;if(r!=="anonymous")return e.authToken||d.authToken;if(!p){if(d.authToken)return d.authToken;let f=d.storage?.get(h);if(f)return n(y=>({...y,authToken:f})),f}try{let f=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,y=await fetch(`${e.backendUrl}${f}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(y.ok){let g=await y.json();return n(m=>({...m,authToken:g.token})),d.storage?.set(h,g.token),g.token}}catch(f){console.warn("[ChatWidget] Failed to create session:",f)}return null},clearSession:()=>{let p=e.anonymousTokenKey||e.sessionTokenKey,r=t();n(d=>({...d,authToken:null})),r.storage?.set(p,null)},transformRequest:s,transformResponse:a}}function Vt({config:e,onStateChange:t,markdownParser:n,apiRef:s}){console.log("[ChatWidget] Config:",{showConversationSidebar:e.showConversationSidebar,apiPaths:e.apiPaths});let[a,o]=T(e.embedded||e.forceOpen===!0),[l,i]=T(!1),[u,c]=T(!1),[p,r]=T(!1),[d,h]=T([]),[f,y]=T("chat"),[g,m]=T(!1),[k,$]=T(e.enableTTS),[N,j]=T(!1),[I,H]=T(null);V(()=>{e.forceOpen!==void 0&&o(e.forceOpen)},[e.forceOpen]);let F=ae(()=>bt(e.containerId),[e.containerId]),[R,J]=T(e.authToken||null),O=ae(()=>Wt(e,()=>({authToken:R,storage:F}),ee=>{let Y=ee({authToken:R,storage:F});Y.authToken!==R&&J(Y.authToken)}),[e,R,F]),w=Ut(e,O,F),A=ae(()=>{if(!e.showDevTools)return e;let x=w.getEffectiveAgentKey();return x&&x!==e.agentKey?{...e,agentKey:x}:e},[e,w.getEffectiveAgentKey]),C=Rt(A,O,F),M=Ot(e,O,F),S=Lt(e,O);V(()=>{for(let x=C.messages.length-1;x>=0;x--){let Z=C.messages[x];if(Z.type==="sub_agent_start"){H({key:Z.metadata?.subAgentKey,name:Z.metadata?.agentName});return}if(Z.type==="sub_agent_end"){H(null);return}}},[C.messages]),V(()=>{let x=F.get(e.conversationIdKey);console.log("[ChatWidget] Initial load - storedConvId:",x,"key:",e.conversationIdKey),console.log("[ChatWidget] apiPaths.conversations:",e.apiPaths.conversations),x&&(console.log("[ChatWidget] Loading conversation:",x),C.loadConversation(x))},[]),V(()=>{t&&t({isOpen:a,isExpanded:l,debugMode:u,messages:C.messages,conversationId:C.conversationId,isLoading:C.isLoading,error:C.error})},[a,l,u,C.messages,C.conversationId,C.isLoading,C.error]);let D=E(async()=>{if(e.showConversationSidebar){m(!0);try{let x=A.agentKey,Z=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(x)}`,ee=await fetch(Z,O.getFetchOptions({method:"GET"}));if(ee.ok){let Y=await ee.json();h(Y.results||Y)}}catch(x){console.error("[ChatWidget] Failed to load conversations:",x),h([])}finally{m(!1)}}},[e,A,O]),b=E(()=>{let x=!p;r(x),x&&D()},[p,D]),L=E(x=>{x!==C.conversationId&&C.loadConversation(x),r(!1)},[C]),U=E(()=>{C.clearMessages(),r(!1)},[C]),v=E(x=>{C.sendMessage(x,{model:M.selectedModel,thinking:M.thinkingEnabled&&M.supportsThinking(),onAssistantMessage:Z=>{}})},[C,k,M.selectedModel,M.thinkingEnabled,M.supportsThinking]),P=E(x=>{y(x),x==="tasks"&&S.loadTaskList()},[S]);if(V(()=>{s&&(s.current={open:()=>o(!0),close:()=>o(!1),send:x=>v(x),clearMessages:()=>C.clearMessages(),toggleTTS:()=>$(x=>!x),stopSpeech:()=>j(!1),setAuth:x=>{x.token!==void 0&&J(x.token)},clearAuth:()=>J(null)})},[C,s,v]),!e.embedded&&!a)return _`
|
|
684
|
+
`}function Lt(e,t,n){let[s,a]=S([]),[o,l]=S(!1),[c,d]=S(null),[u,p]=S(()=>n?.get(e.conversationIdKey)||null),[r,_]=S(!1),[h,f]=S(!1),[b,v]=S(0),m=Q(null),k=Q(null);B(()=>{u&&n?.set(e.conversationIdKey,u)},[u,e.conversationIdKey,n]);let $=x(async(w,E,C)=>{m.current&&m.current.close();let M=e.apiPaths.runEvents.replace("{runId}",w),I=`${e.backendUrl}${M}`;E&&(I+=`?anonymous_token=${encodeURIComponent(E)}`);let T=new EventSource(I);m.current=T;let y="";T.addEventListener("assistant.message",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("assistant.message",g.payload);let A=g.payload.content;A&&(y+=A,a(V=>{let X=V[V.length-1];return X?.role==="assistant"&&X.id.startsWith("assistant-stream-")?[...V.slice(0,-1),{...X,content:y}]:[...V,{id:"assistant-stream-"+Date.now(),role:"assistant",content:y,timestamp:new Date,type:"message"}]}))}catch(g){console.error("[ChatWidget] Parse error:",g)}}),T.addEventListener("tool.call",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("tool.call",g.payload),a(A=>[...A,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${g.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:g.payload.name,arguments:g.payload.arguments,toolCallId:g.payload.id}}])}catch(g){console.error("[ChatWidget] Parse error:",g)}}),T.addEventListener("tool.result",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("tool.result",g.payload);let A=g.payload.result,V=A?.error;a(X=>[...X,{id:"tool-result-"+Date.now(),role:"system",content:V?`\u274C ${A.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:g.payload.name,result:A,toolCallId:g.payload.tool_call_id}}])}catch(g){console.error("[ChatWidget] Parse error:",g)}}),T.addEventListener("custom",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("custom",g.payload),g.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(g.payload),g.payload?.type==="agent_context"&&a(A=>[...A,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${g.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:g.payload.agent_key,agentName:g.payload.agent_name,action:g.payload.action}}])}catch(g){console.error("[ChatWidget] Parse error:",g)}}),T.addEventListener("sub_agent.start",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("sub_agent.start",g.payload),a(A=>[...A,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${g.payload.agent_name||g.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:g.payload.sub_agent_key,agentName:g.payload.agent_name,invocationMode:g.payload.invocation_mode}}])}catch(g){console.error("[ChatWidget] Parse error:",g)}}),T.addEventListener("sub_agent.end",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("sub_agent.end",g.payload),a(A=>[...A,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${g.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:g.payload.sub_agent_key,agentName:g.payload.agent_name}}])}catch(g){console.error("[ChatWidget] Parse error:",g)}}),T.addEventListener("content.blocks",K=>{try{let g=JSON.parse(K.data);e.onEvent&&e.onEvent("content.blocks",g.payload),a(A=>[...A,{id:"content-blocks-"+Date.now(),role:"assistant",content:"",timestamp:new Date,type:"content_blocks",metadata:{toolName:g.payload.tool_name,toolCallId:g.payload.tool_call_id,blocks:g.payload.blocks}}])}catch(g){console.error("[ChatWidget] Parse error:",g)}});let R=K=>{try{let g=JSON.parse(K.data);if(e.onEvent&&e.onEvent(g.type,g.payload),g.type==="run.failed"){let A=g.payload.error||"Agent run failed";d(A),a(V=>[...V,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${A}`,timestamp:new Date,type:"error"}])}}catch(g){console.error("[ChatWidget] Parse error:",g)}l(!1),T.close(),m.current=null,y&&C&&C(y)};T.addEventListener("run.succeeded",R),T.addEventListener("run.failed",R),T.addEventListener("run.cancelled",R),T.addEventListener("run.timed_out",R),T.onerror=()=>{l(!1),T.close(),m.current=null}},[e]),O=x(async(w,E={},C={})=>{if(!w.trim()||o)return;let M=[],I={};typeof E=="function"?I={onAssistantMessage:E}:Array.isArray(E)?(M=E,I=C):I=E||{};let{model:T,thinking:y,onAssistantMessage:R,supersedeFromMessageIndex:K}=I;l(!0),d(null);let g={id:be(),role:"user",content:w.trim(),timestamp:new Date,type:"message",files:M.length>0?M.map(A=>({name:A.name,size:A.size,type:A.type})):void 0};a(A=>[...A,g]);try{let A=await t.getOrCreateSession(),V;if(M.length>0){let Y=e.apiCaseStyle!=="camel",Ve=ue=>Y?Ke(ue):ue,ne=new FormData;ne.append(Ve("agentKey"),e.agentKey),u&&ne.append(Ve("conversationId"),u),ne.append("messages",JSON.stringify([{role:"user",content:w.trim()}])),ne.append("metadata",JSON.stringify(Y?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),T&&ne.append("model",T),y&&ne.append("thinking","true"),M.forEach(ue=>{ne.append("files",ue)}),V=t.getFetchOptions({method:"POST",body:ne},A)}else{let Y=t.transformRequest({agentKey:e.agentKey,conversationId:u,messages:[{role:"user",content:w.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...T&&{model:T},...y&&{thinking:!0},...K!==void 0&&{supersedeFromMessageIndex:K}});V=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)},A)}let X=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,V),D=A;if(X.status===401){t.clearSession();let Y=await t.getOrCreateSession(!0);Y&&(D=Y,M.length>0?V=t.getFetchOptions({method:"POST",body:V.body},Y):V=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:V.body},Y),X=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,V))}if(!X.ok){let Y=await X.json().catch(()=>({}));throw new Error(Y.error||Y.detail||`HTTP ${X.status}`)}let Z=await X.json(),ee=t.transformResponse(Z);k.current=ee.id,!u&&ee.conversationId&&p(ee.conversationId),await $(ee.id,D,R)}catch(A){d(A.message||"Failed to send message"),l(!1)}finally{k.current=null}},[e,t,u,o,$]),q=x(async()=>{let w=k.current;if(!(!w||!o))try{let E=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",w):`${e.apiPaths.runs}${w}/cancel/`;(await fetch(`${e.backendUrl}${E}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(m.current&&(m.current.close(),m.current=null),l(!1),k.current=null,a(M=>[...M,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(E){console.error("[ChatWidget] Failed to cancel run:",E)}},[e,t,o]),P=x(()=>{a([]),p(null),d(null),_(!1),v(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),H=w=>{let E={id:be(),role:w.role,timestamp:w.timestamp?new Date(w.timestamp):new Date};if(w.role==="tool")return{...E,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:w.content,toolCallId:w.toolCallId}};if(w.role==="assistant"&&w.toolCalls&&w.toolCalls.length>0)return w.toolCalls.map(M=>({id:be(),role:"assistant",content:`\u{1F527} ${M.function?.name||M.name||"tool"}`,timestamp:E.timestamp,type:"tool_call",metadata:{toolName:M.function?.name||M.name,arguments:M.function?.arguments||M.arguments,toolCallId:M.id}}));let C=typeof w.content=="string"?w.content:JSON.stringify(w.content);return w.role==="assistant"&&!C?.trim()?null:{...E,content:C,type:"message"}},F=x(async w=>{console.log("[ChatWidget] loadConversation called with:",w),l(!0),a([]),p(w);try{let E=await t.getOrCreateSession(),M=`${e.backendUrl}${e.apiPaths.conversations}${w}/?limit=10&offset=0`;console.log("[ChatWidget] Fetching conversation from:",M);let I=await fetch(M,t.getFetchOptions({method:"GET"},E));if(console.log("[ChatWidget] Response status:",I.status),I.ok){let T=await I.json();console.log("[ChatWidget] Raw conversation:",T);let y=t.transformResponse(T);if(console.log("[ChatWidget] Transformed conversation:",y),y.messages){let R=y.messages.flatMap(H).filter(Boolean);console.log("[ChatWidget] Mapped messages:",R),a(R)}_(y.hasMore||!1),v(y.messages?.length||0)}else I.status===404?(console.log("[ChatWidget] Conversation not found, clearing"),p(null),n?.set(e.conversationIdKey,null)):console.error("[ChatWidget] Unexpected response status:",I.status)}catch(E){console.error("[ChatWidget] Failed to load conversation:",E)}finally{l(!1)}},[e,t,n]),L=x(async()=>{if(!(!u||h||!r)){f(!0);try{let w=await t.getOrCreateSession(),C=`${e.backendUrl}${e.apiPaths.conversations}${u}/?limit=10&offset=${b}`,M=await fetch(C,t.getFetchOptions({method:"GET"},w));if(M.ok){let I=await M.json(),T=t.transformResponse(I);if(T.messages?.length>0){let y=T.messages.flatMap(H).filter(Boolean);a(R=>[...y,...R]),v(R=>R+T.messages.length),_(T.hasMore||!1)}else _(!1)}}catch(w){console.error("[ChatWidget] Failed to load more messages:",w)}finally{f(!1)}}},[e,t,u,b,h,r]),j=x(async(w,E,C={})=>{if(o)return;let M=s[w];if(!M||M.role!=="user")return;let I=s.slice(0,w);a(I),await O(E,{...C,supersedeFromMessageIndex:w})},[s,o,O]),N=x(async(w,E={})=>{if(o)return;let C=s[w];if(!C)return;let M=w,I=C;if(C.role==="assistant"){for(let y=w-1;y>=0;y--)if(s[y].role==="user"){M=y,I=s[y];break}if(I.role!=="user")return}else if(C.role!=="user")return;let T=s.slice(0,M);a(T),await O(I.content,{...E,supersedeFromMessageIndex:M})},[s,o,O]);return B(()=>()=>{m.current&&m.current.close()},[]),{messages:s,isLoading:o,error:c,conversationId:u,hasMoreMessages:r,loadingMoreMessages:h,sendMessage:O,cancelRun:q,clearMessages:P,loadConversation:F,loadMoreMessages:L,setConversationId:p,editMessage:j,retryMessage:N}}var Nt="cw_thinking_enabled";function Kt(e,t,n){let[s,a]=S([]),[o,l]=S(null),[c,d]=S(null),[u,p]=S(!1),[r,_]=S(!1);B(()=>{(async()=>{if(e.showModelSelector){p(!0);try{let k=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(k.ok){let $=await k.json(),O=$.models||[];a(O),d($.default);let q=n?.get(e.modelKey);q&&O.some(H=>H.id===q)?l(q):l($.default),n?.get(Nt)==="true"&&_(!0)}}catch(k){console.warn("[ChatWidget] Failed to load models:",k)}finally{p(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let h=x(m=>{l(m),n?.set(e.modelKey,m)},[e.modelKey,n]),f=x(m=>{_(m),n?.set(Nt,m?"true":"false")},[n]),b=x(()=>s.find(m=>m.id===o)||null,[s,o]),v=x(()=>b()?.supports_thinking||!1,[b]);return{availableModels:s,selectedModel:o,defaultModel:c,isLoading:u,selectModel:h,getSelectedModelInfo:b,thinkingEnabled:r,toggleThinking:f,supportsThinking:v}}function Wt(e,t){let[n,s]=S(null),[a,o]=S(!1),[l,c]=S(null),d=e.apiPaths?.tasks||"/api/agent/tasks/",u=x(async()=>{o(!0),c(null);try{let b=`${e.backendUrl}${d}`,v=await fetch(b,t.getFetchOptions({method:"GET"}));if(v.ok){let m=await v.json();s(m)}else{let m=await v.json().catch(()=>({}));c(m.error||"Failed to load tasks")}}catch(b){console.error("[useTasks] Failed to load task list:",b),c("Failed to load tasks")}finally{o(!1)}},[e.backendUrl,d,t]),p=x(async b=>{if(!n)return null;try{let v=`${e.backendUrl}${d}${n.id}/add_task/`,m=await fetch(v,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}));if(m.ok){let k=await m.json();return await u(),k}else{let k=await m.json().catch(()=>({}));return c(k.error||"Failed to add task"),null}}catch(v){return console.error("[useTasks] Failed to add task:",v),c("Failed to add task"),null}},[e.backendUrl,d,n,t,u]),r=x(async(b,v)=>{if(!n)return null;try{let m=`${e.backendUrl}${d}${n.id}/update_task/${b}/`,k=await fetch(m,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)}));if(k.ok){let $=await k.json();return await u(),$}else{let $=await k.json().catch(()=>({}));return c($.error||"Failed to update task"),null}}catch(m){return console.error("[useTasks] Failed to update task:",m),c("Failed to update task"),null}},[e.backendUrl,d,n,t,u]),_=x(async b=>{if(!n)return!1;try{let v=`${e.backendUrl}${d}${n.id}/remove_task/${b}/`,m=await fetch(v,t.getFetchOptions({method:"DELETE"}));if(m.ok)return await u(),!0;{let k=await m.json().catch(()=>({}));return c(k.error||"Failed to remove task"),!1}}catch(v){return console.error("[useTasks] Failed to remove task:",v),c("Failed to remove task"),!1}},[e.backendUrl,d,n,t,u]),h=x(async()=>{if(!n)return!1;try{let b=`${e.backendUrl}${d}${n.id}/clear/`,v=await fetch(b,t.getFetchOptions({method:"POST"}));if(v.ok)return await u(),!0;{let m=await v.json().catch(()=>({}));return c(m.error||"Failed to clear tasks"),!1}}catch(b){return console.error("[useTasks] Failed to clear tasks:",b),c("Failed to clear tasks"),!1}},[e.backendUrl,d,n,t,u]),f=x(()=>c(null),[]);return{taskList:n,tasks:n?.tasks||[],progress:n?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:l,loadTaskList:u,addTask:p,updateTask:r,removeTask:_,clearTasks:h,clearError:f}}var Ut="cw_selected_system",Ue="cw_selected_agent",Bt="cw_selected_system_version",Me="cw_selected_agent_version";function Vt(e,t,n){let[s,a]=S([]),[o,l]=S([]),[c,d]=S(null),[u,p]=S(null),[r,_]=S(null),[h,f]=S(null),[b,v]=S(!1),m=x(()=>{if(u)return u;if(c){let P=s.find(H=>H.slug===c);if(P?.entry_agent)return P.entry_agent.slug}return e.agentKey},[u,c,s,e.agentKey]);B(()=>{if(!e.showDevTools)return;(async()=>{v(!0);try{let H=await fetch(`${e.backendUrl}${e.apiPaths.systems}`,t.getFetchOptions({method:"GET"}));if(H.ok){let F=await H.json(),L=F.results||F;a(L);let j=n?.get(Ut);j&&L.some(N=>N.slug===j)?d(j):L.length===1&&d(L[0].slug)}}catch(H){console.warn("[ChatWidget] Failed to load systems:",H)}finally{v(!1)}})()},[e.backendUrl,e.apiPaths.systems,e.showDevTools,t,n]),B(()=>{if(!e.showDevTools)return;(async()=>{try{let H=c?`?system=${encodeURIComponent(c)}`:"",F=await fetch(`${e.backendUrl}${e.apiPaths.agents}${H}`,t.getFetchOptions({method:"GET"}));if(F.ok){let L=await F.json(),j=L.results||L;l(j);let N=n?.get(Ue);if(N&&j.some(E=>E.slug===N))p(N);else if(c){let E=s.find(C=>C.slug===c);E?.entry_agent&&p(E.entry_agent.slug)}let w=n?.get(Me);w&&f(w)}}catch(H){console.warn("[ChatWidget] Failed to load agents:",H)}})()},[e.backendUrl,e.apiPaths.agents,e.showDevTools,c,t,n,s]);let k=x(P=>{d(P),n?.set(Ut,P),p(null),f(null),n?.set(Ue,null),n?.set(Me,null);let F=s.find(L=>L.slug===P)?.active_version||null;_(F),n?.set(Bt,F)},[n,s]),$=x(P=>{p(P),n?.set(Ue,P);let F=o.find(L=>L.slug===P)?.active_version||null;f(F),n?.set(Me,F)},[n,o]),O=x(P=>{_(P),n?.set(Bt,P)},[n]),q=x(P=>{f(P),n?.set(Me,P)},[n]);return{systems:s,agents:o,selectedSystem:c,selectedAgent:u,selectedSystemVersion:r,selectedAgentVersion:h,isLoading:b,selectSystem:k,selectAgent:$,selectSystemVersion:O,selectAgentVersion:q,getEffectiveAgentKey:m}}function jt(e,t,n){let s=p=>!p||typeof p!="object"||e.apiCaseStyle==="camel"?p:ke(p),a=p=>!p||typeof p!="object"||e.apiCaseStyle==="snake"?p:we(p),o=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",l=(p=null)=>{let r=o(),_={},h=p||e.authToken||t().authToken;if(r==="token"&&h){let f=e.authHeader||"Authorization",b=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";_[f]=b?`${b} ${h}`:h}else if(r==="jwt"&&h){let f=e.authHeader||"Authorization",b=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";_[f]=b?`${b} ${h}`:h}else if(r==="anonymous"&&h){let f=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";_[f]=h}if(r==="session"){let f=Ct(e.csrfCookieName);f&&(_["X-CSRFToken"]=f)}return _};return{getAuthStrategy:o,getAuthHeaders:l,getFetchOptions:(p={},r=null)=>{let _=o(),h={...p},f=l(r);return console.log("[ChatWidget] getFetchOptions - strategy:",_,"overrideToken:",r,"authHeaders:",f),h.headers={...h.headers,...f},_==="session"&&(h.credentials="include"),h},getOrCreateSession:async(p=!1)=>{let r=o(),_=t(),h=e.anonymousTokenKey||e.sessionTokenKey;if(r!=="anonymous")return e.authToken||_.authToken;if(!p){if(_.authToken)return _.authToken;let f=_.storage?.get(h);if(f)return n(b=>({...b,authToken:f})),f}try{let f=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,b=await fetch(`${e.backendUrl}${f}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(b.ok){let v=await b.json();return n(m=>({...m,authToken:v.token})),_.storage?.set(h,v.token),v.token}}catch(f){console.warn("[ChatWidget] Failed to create session:",f)}return null},clearSession:()=>{let p=e.anonymousTokenKey||e.sessionTokenKey,r=t();n(_=>({..._,authToken:null})),r.storage?.set(p,null)},transformRequest:s,transformResponse:a}}function Jt({config:e,onStateChange:t,markdownParser:n,apiRef:s}){console.log("[ChatWidget] Config:",{showConversationSidebar:e.showConversationSidebar,apiPaths:e.apiPaths});let[a,o]=S(e.embedded||e.forceOpen===!0),[l,c]=S(!1),[d,u]=S(!1),[p,r]=S(!1),[_,h]=S([]),[f,b]=S("chat"),[v,m]=S(!1),[k,$]=S(e.enableTTS),[O,q]=S(!1),[P,H]=S(null);B(()=>{e.forceOpen!==void 0&&o(e.forceOpen)},[e.forceOpen]);let F=ae(()=>bt(e.containerId),[e.containerId]),[L,j]=S(e.authToken||null),N=ae(()=>jt(e,()=>({authToken:L,storage:F}),ee=>{let Y=ee({authToken:L,storage:F});Y.authToken!==L&&j(Y.authToken)}),[e,L,F]),w=Vt(e,N,F),E=ae(()=>{if(!e.showDevTools)return e;let D=w.getEffectiveAgentKey();return D&&D!==e.agentKey?{...e,agentKey:D}:e},[e,w.getEffectiveAgentKey]),C=Lt(E,N,F),M=Kt(e,N,F),I=Wt(e,N);B(()=>{for(let D=C.messages.length-1;D>=0;D--){let Z=C.messages[D];if(Z.type==="sub_agent_start"){H({key:Z.metadata?.subAgentKey,name:Z.metadata?.agentName});return}if(Z.type==="sub_agent_end"){H(null);return}}},[C.messages]),B(()=>{let D=F.get(e.conversationIdKey);console.log("[ChatWidget] Initial load - storedConvId:",D,"key:",e.conversationIdKey),console.log("[ChatWidget] apiPaths.conversations:",e.apiPaths.conversations),D&&(console.log("[ChatWidget] Loading conversation:",D),C.loadConversation(D))},[]),B(()=>{t&&t({isOpen:a,isExpanded:l,debugMode:d,messages:C.messages,conversationId:C.conversationId,isLoading:C.isLoading,error:C.error})},[a,l,d,C.messages,C.conversationId,C.isLoading,C.error]);let T=x(async()=>{if(e.showConversationSidebar){m(!0);try{let D=E.agentKey,Z=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(D)}`,ee=await fetch(Z,N.getFetchOptions({method:"GET"}));if(ee.ok){let Y=await ee.json();h(Y.results||Y)}}catch(D){console.error("[ChatWidget] Failed to load conversations:",D),h([])}finally{m(!1)}}},[e,E,N]),y=x(()=>{let D=!p;r(D),D&&T()},[p,T]),R=x(D=>{D!==C.conversationId&&C.loadConversation(D),r(!1)},[C]),K=x(()=>{C.clearMessages(),r(!1)},[C]),g=x(D=>{C.sendMessage(D,{model:M.selectedModel,thinking:M.thinkingEnabled&&M.supportsThinking(),onAssistantMessage:Z=>{}})},[C,k,M.selectedModel,M.thinkingEnabled,M.supportsThinking]),A=x(D=>{b(D),D==="tasks"&&I.loadTaskList()},[I]);if(B(()=>{s&&(s.current={open:()=>o(!0),close:()=>o(!1),send:D=>g(D),clearMessages:()=>C.clearMessages(),toggleTTS:()=>$(D=>!D),stopSpeech:()=>q(!1),setAuth:D=>{D.token!==void 0&&j(D.token)},clearAuth:()=>j(null)})},[C,s,g]),!e.embedded&&!a)return i`
|
|
588
685
|
<button
|
|
589
686
|
class="cw-fab"
|
|
590
687
|
style=${{backgroundColor:e.primaryColor}}
|
|
@@ -594,40 +691,40 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
594
691
|
<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>
|
|
595
692
|
</svg>
|
|
596
693
|
</button>
|
|
597
|
-
`;let
|
|
598
|
-
<div class=${
|
|
599
|
-
${e.showConversationSidebar&&
|
|
600
|
-
<${
|
|
694
|
+
`;let V=["cw-widget",l&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" "),X=e.headerTextColor||St(e.primaryColor);return i`
|
|
695
|
+
<div class=${V} style=${{"--cw-primary":e.primaryColor,"--cw-header-text":X}}>
|
|
696
|
+
${e.showConversationSidebar&&i`
|
|
697
|
+
<${Rt}
|
|
601
698
|
isOpen=${p}
|
|
602
|
-
conversations=${
|
|
603
|
-
conversationsLoading=${
|
|
699
|
+
conversations=${_}
|
|
700
|
+
conversationsLoading=${v}
|
|
604
701
|
currentConversationId=${C.conversationId}
|
|
605
702
|
onClose=${()=>r(!1)}
|
|
606
|
-
onNewConversation=${
|
|
607
|
-
onSwitchConversation=${
|
|
703
|
+
onNewConversation=${K}
|
|
704
|
+
onSwitchConversation=${R}
|
|
608
705
|
/>
|
|
609
706
|
`}
|
|
610
707
|
|
|
611
|
-
${e.showHeader!==!1&&
|
|
708
|
+
${e.showHeader!==!1&&i`
|
|
612
709
|
<${Tt}
|
|
613
710
|
config=${e}
|
|
614
|
-
debugMode=${
|
|
711
|
+
debugMode=${d}
|
|
615
712
|
isExpanded=${l}
|
|
616
|
-
isSpeaking=${
|
|
713
|
+
isSpeaking=${O}
|
|
617
714
|
messagesCount=${C.messages.length}
|
|
618
715
|
isLoading=${C.isLoading}
|
|
619
|
-
currentAgent=${
|
|
716
|
+
currentAgent=${P}
|
|
620
717
|
onClose=${()=>o(!1)}
|
|
621
|
-
onToggleExpand=${()=>
|
|
622
|
-
onToggleDebug=${()=>
|
|
718
|
+
onToggleExpand=${()=>c(!l)}
|
|
719
|
+
onToggleDebug=${()=>u(!d)}
|
|
623
720
|
onToggleTTS=${()=>$(!k)}
|
|
624
721
|
onClear=${C.clearMessages}
|
|
625
|
-
onToggleSidebar=${
|
|
722
|
+
onToggleSidebar=${y}
|
|
626
723
|
/>
|
|
627
724
|
`}
|
|
628
725
|
|
|
629
|
-
${e.showDevTools&&
|
|
630
|
-
<${
|
|
726
|
+
${e.showDevTools&&i`
|
|
727
|
+
<${Ht}
|
|
631
728
|
systems=${w.systems}
|
|
632
729
|
agents=${w.agents}
|
|
633
730
|
selectedSystem=${w.selectedSystem}
|
|
@@ -642,27 +739,27 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
642
739
|
/>
|
|
643
740
|
`}
|
|
644
741
|
|
|
645
|
-
${e.showTasksTab!==!1&&
|
|
742
|
+
${e.showTasksTab!==!1&&i`
|
|
646
743
|
<div class="cw-tabs">
|
|
647
744
|
<button
|
|
648
745
|
class=${`cw-tab ${f==="chat"?"cw-tab-active":""}`}
|
|
649
|
-
onClick=${()=>
|
|
746
|
+
onClick=${()=>A("chat")}
|
|
650
747
|
>
|
|
651
748
|
Chat
|
|
652
749
|
</button>
|
|
653
750
|
<button
|
|
654
751
|
class=${`cw-tab ${f==="tasks"?"cw-tab-active":""}`}
|
|
655
|
-
onClick=${()=>
|
|
752
|
+
onClick=${()=>A("tasks")}
|
|
656
753
|
>
|
|
657
|
-
Tasks ${
|
|
754
|
+
Tasks ${I.progress.total>0?i`<span class="cw-tab-badge">${I.progress.completed}/${I.progress.total}</span>`:""}
|
|
658
755
|
</button>
|
|
659
756
|
</div>
|
|
660
757
|
`}
|
|
661
758
|
|
|
662
|
-
${
|
|
759
|
+
${d&&i`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
|
|
663
760
|
|
|
664
|
-
${f==="chat"?
|
|
665
|
-
<${
|
|
761
|
+
${f==="chat"?i`
|
|
762
|
+
<${Dt}
|
|
666
763
|
messages=${C.messages}
|
|
667
764
|
isLoading=${C.isLoading}
|
|
668
765
|
hasMoreMessages=${C.hasMoreMessages}
|
|
@@ -670,16 +767,17 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
670
767
|
onLoadMore=${C.loadMoreMessages}
|
|
671
768
|
onEditMessage=${C.editMessage}
|
|
672
769
|
onRetryMessage=${C.retryMessage}
|
|
673
|
-
|
|
770
|
+
onSendMessage=${g}
|
|
771
|
+
debugMode=${d}
|
|
674
772
|
markdownParser=${n}
|
|
675
773
|
emptyStateTitle=${e.emptyStateTitle}
|
|
676
774
|
emptyStateMessage=${e.emptyStateMessage}
|
|
677
775
|
/>
|
|
678
776
|
|
|
679
|
-
${C.error&&
|
|
777
|
+
${C.error&&i`<div class="cw-error-bar">${C.error}</div>`}
|
|
680
778
|
|
|
681
|
-
${e.showModelSelector&&M.availableModels.length>0&&
|
|
682
|
-
<${
|
|
779
|
+
${e.showModelSelector&&M.availableModels.length>0&&i`
|
|
780
|
+
<${Ft}
|
|
683
781
|
availableModels=${M.availableModels}
|
|
684
782
|
selectedModel=${M.selectedModel}
|
|
685
783
|
onSelectModel=${M.selectModel}
|
|
@@ -689,8 +787,8 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
689
787
|
/>
|
|
690
788
|
`}
|
|
691
789
|
|
|
692
|
-
<${
|
|
693
|
-
onSend=${
|
|
790
|
+
<${Pt}
|
|
791
|
+
onSend=${g}
|
|
694
792
|
onCancel=${C.cancelRun}
|
|
695
793
|
isLoading=${C.isLoading}
|
|
696
794
|
placeholder=${e.placeholder}
|
|
@@ -698,22 +796,22 @@ var ChatWidgetModule=(()=>{var de=Object.defineProperty;var Jt=Object.getOwnProp
|
|
|
698
796
|
enableVoice=${e.enableVoice}
|
|
699
797
|
enableFiles=${e.showFileAttachment!==!1}
|
|
700
798
|
/>
|
|
701
|
-
`:
|
|
702
|
-
<${
|
|
703
|
-
tasks=${
|
|
704
|
-
progress=${
|
|
705
|
-
isLoading=${
|
|
706
|
-
error=${
|
|
707
|
-
onUpdate=${
|
|
708
|
-
onRemove=${
|
|
709
|
-
onClear=${
|
|
710
|
-
onRefresh=${
|
|
799
|
+
`:i`
|
|
800
|
+
<${Ot}
|
|
801
|
+
tasks=${I.tasks}
|
|
802
|
+
progress=${I.progress}
|
|
803
|
+
isLoading=${I.isLoading}
|
|
804
|
+
error=${I.error}
|
|
805
|
+
onUpdate=${I.updateTask}
|
|
806
|
+
onRemove=${I.removeTask}
|
|
807
|
+
onClear=${I.clearTasks}
|
|
808
|
+
onRefresh=${I.loadTaskList}
|
|
711
809
|
/>
|
|
712
810
|
`}
|
|
713
811
|
</div>
|
|
714
|
-
`}var
|
|
812
|
+
`}var zt={backendUrl:"http://localhost:8000",agentKey:"default-agent",title:"Chat Assistant",subtitle:"How can we help you today?",primaryColor:"#0066cc",headerTextColor:null,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/",systems:"/api/agent-runtime/systems/",agents:"/api/agent-runtime/agents/"},apiCaseStyle:"auto",theme:"light",showHeader:!0,showFileAttachment:!0,showTasksTab:!0,showConversationSidebar:!0,showClearButton:!0,showDebugButton:!0,showTTSButton:!0,showVoiceSettings:!0,showExpandButton:!0,showModelSelector:!1,showDevTools:!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 qt(e){let t={...zt.apiPaths,...e.apiPaths||{}};return{...zt,...e,apiPaths:t}}var Ee=new Map,An=0,W=null,Be=class{constructor(t={}){je(this,"_handleStateChange",t=>{this._state=t});this.instanceId=`cw-${++An}`,this.config=qt(t),this.container=null,this._state={},this._apiRef={current:null},Ee.set(this.instanceId,this)}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._applyTheme(),this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} initialized`),this}_applyTheme(){this.container&&(this.container.classList.remove("cw-dark","cw-auto"),this.config.theme==="dark"?this.container.classList.add("cw-dark"):this.config.theme==="auto"&&this.container.classList.add("cw-auto"))}_render(t={}){this.container&&ye(i`<${Jt}
|
|
715
813
|
config=${{...this.config,...t}}
|
|
716
814
|
onStateChange=${this._handleStateChange}
|
|
717
|
-
markdownParser=${
|
|
815
|
+
markdownParser=${xe._enhancedMarkdownParser}
|
|
718
816
|
apiRef=${this._apiRef}
|
|
719
|
-
/>`,this.container)}destroy(){this.container&&(
|
|
817
|
+
/>`,this.container)}destroy(){this.container&&(ye(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),Ee.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},"theme"in t&&this._applyTheme(),this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} config updated`)}};function Gt(e={}){return new Be(e).init()}function In(e={}){return W&&W.destroy(),W=Gt(e),W}function Dn(){W&&(W.destroy(),W=null)}function Pn(){W&&W.open()}function Rn(){W&&W.close()}function Fn(e){W&&W.send(e)}function On(){W&&W.clearMessages()}function Hn(){W&&W.toggleTTS()}function Ln(){W&&W.stopSpeech()}function Nn(e){W&&W.setAuth(e)}function Kn(){W&&W.clearAuth()}function Wn(){return W?W.getState():null}function Un(){return W?W.getConfig():null}var xe={createInstance:Gt,getInstance:e=>Ee.get(e),getAllInstances:()=>Array.from(Ee.values()),init:In,destroy:Dn,open:Pn,close:Rn,send:Fn,clearMessages:On,toggleTTS:Hn,stopSpeech:Ln,setAuth:Nn,clearAuth:Kn,getState:Wn,getConfig:Un,_enhancedMarkdownParser:null};var Bn=xe;typeof window<"u"&&(window.ChatWidget=xe);return nn(Vn);})();
|