@vemly/sdk 0.1.8 → 0.1.9

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.
@@ -1 +1 @@
1
- !function(){var e,n,t,i,r,l,s,o,a,c,u={},h=[],d=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=Array.isArray;function p(e,n){for(var t in n)e[t]=n[t];return e}function m(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function y(n,t,i){var r,l,s,o={};for(s in t)"key"==s?r=t[s]:"ref"==s?l=t[s]:o[s]=t[s];if(arguments.length>2&&(o.children=arguments.length>3?e.call(arguments,2):i),"function"==typeof n&&null!=n.defaultProps)for(s in n.defaultProps)void 0===o[s]&&(o[s]=n.defaultProps[s]);return g(n,o,r,l,null)}function g(e,i,r,l,s){var o={type:e,props:i,key:r,ref:l,o:null,h:null,p:0,m:null,v:void 0,k:null,constructor:void 0,$:s??++t,_:-1,S:0};return null==s&&null!=n.vnode&&n.vnode(o),o}function v(e){return e.children}function b(e,n){this.props=e,this.context=n}function x(e,n){if(null==n)return e.h?x(e.h,e._+1):null;for(var t;n<e.o.length;n++)if(null!=(t=e.o[n])&&null!=t.m)return t.m;return"function"==typeof e.type?x(e):null}function w(e){var n,t;if(null!=(e=e.h)&&null!=e.k){for(e.m=e.k.base=null,n=0;n<e.o.length;n++)if(null!=(t=e.o[n])&&null!=t.m){e.m=e.k.base=t.m;break}return w(e)}}function k(e){(!e.v&&(e.v=!0)&&i.push(e)&&!$.N++||r!==n.debounceRendering)&&((r=n.debounceRendering)||l)($)}function $(){var e,t,r,l,o,a,c,u;for(i.sort(s);e=i.shift();)e.v&&(t=i.length,l=void 0,a=(o=(r=e).$).m,c=[],u=[],r.A&&((l=p({},o)).$=o.$+1,n.vnode&&n.vnode(l),D(r.A,l,o,r.T,r.A.namespaceURI,32&o.S?[a]:null,c,a??x(o),!!(32&o.S),u),l.$=o.$,l.h.o[l._]=l,I(c,l,u),l.m!=a&&w(l)),i.length>t&&i.sort(s));$.N=0}function _(e,n,t,i,r,l,s,o,a,c,d){var p,m,y,b,w,k=i&&i.o||h,$=n.length;for(t.v=a,function(e,n,t){var i,r,l,s,o,a=n.length,c=t.length,u=c,h=0;for(e.o=[],i=0;i<a;i++)null!=(r=n[i])&&"boolean"!=typeof r&&"function"!=typeof r?(s=i+h,(r=e.o[i]="string"==typeof r||"number"==typeof r||"bigint"==typeof r||r.constructor==String?g(null,r,null,null,null):f(r)?g(v,{children:r},null,null,null):void 0===r.constructor&&r.p>0?g(r.type,r.props,r.key,r.ref?r.ref:null,r.$):r).h=e,r.p=e.p+1,l=null,-1!==(o=r._=N(r,t,s,u))&&(u--,(l=t[o])&&(l.S|=131072)),null==l||null===l.$?(-1==o&&h--,"function"!=typeof r.type&&(r.S|=65536)):o!==s&&(o==s-1?h--:o==s+1?h++:(o>s?h--:h++,r.S|=65536))):r=e.o[i]=null;if(u)for(i=0;i<c;i++)null!=(l=t[i])&&!(131072&l.S)&&(l.m==e.v&&(e.v=x(l)),j(l,l))}(t,n,k),a=t.v,p=0;p<$;p++)null!=(y=t.o[p])&&(m=-1===y._?u:k[y._]||u,y._=p,D(e,y,m,r,l,s,o,a,c,d),b=y.m,y.ref&&m.ref!=y.ref&&(m.ref&&E(m.ref,null,y),d.push(y.ref,y.k||b,y)),null==w&&null!=b&&(w=b),65536&y.S||m.o===y.o?a=S(y,a,e):"function"==typeof y.type&&void 0!==y.v?a=y.v:b&&(a=b.nextSibling),y.v=void 0,y.S&=-196609);t.v=a,t.m=w}function S(e,n,t){var i,r;if("function"==typeof e.type){for(i=e.o,r=0;i&&r<i.length;r++)i[r]&&(i[r].h=e,n=S(i[r],n,t));return n}e.m!=n&&(n&&e.type&&!t.contains(n)&&(n=x(e)),t.insertBefore(e.m,n||null),n=e.m);do{n=n&&n.nextSibling}while(null!=n&&8===n.nodeType);return n}function z(e,n){return n=n||[],null==e||"boolean"==typeof e||(f(e)?e.some(function(e){z(e,n)}):n.push(e)),n}function N(e,n,t,i){var r=e.key,l=e.type,s=t-1,o=t+1,a=n[t];if(null===a||a&&r==a.key&&l===a.type&&!(131072&a.S))return t;if(i>(null==a||131072&a.S?0:1))for(;s>=0||o<n.length;){if(s>=0){if((a=n[s])&&!(131072&a.S)&&r==a.key&&l===a.type)return s;s--}if(o<n.length){if((a=n[o])&&!(131072&a.S)&&r==a.key&&l===a.type)return o;o++}}return-1}function A(e,n,t){"-"===n[0]?e.setProperty(n,t??""):e[n]=null==t?"":"number"!=typeof t||d.test(n)?t:t+"px"}function T(e,n,t,i,r){var l;e:if("style"===n)if("string"==typeof t)e.style.cssText=t;else{if("string"==typeof i&&(e.style.cssText=i=""),i)for(n in i)t&&n in t||A(e.style,n,"");if(t)for(n in t)i&&t[n]===i[n]||A(e.style,n,t[n])}else if("o"===n[0]&&"n"===n[1])l=n!==(n=n.replace(/(PointerCapture)$|Capture$/i,"$1")),n=n.toLowerCase()in e||"onFocusOut"===n||"onFocusIn"===n?n.toLowerCase().slice(2):n.slice(2),e.l||(e.l={}),e.l[n+l]=t,t?i?t.u=i.u:(t.u=o,e.addEventListener(n,l?c:a,l)):e.removeEventListener(n,l?c:a,l);else{if("http://www.w3.org/2000/svg"==r)n=n.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=n&&"height"!=n&&"href"!=n&&"list"!=n&&"form"!=n&&"tabIndex"!=n&&"download"!=n&&"rowSpan"!=n&&"colSpan"!=n&&"role"!=n&&"popover"!=n&&n in e)try{e[n]=t??"";break e}catch{}"function"==typeof t||(null==t||!1===t&&"-"!==n[4]?e.removeAttribute(n):e.setAttribute(n,"popover"==n&&1==t?"":t))}}function C(e){return function(t){if(this.l){var i=this.l[t.type+e];if(null==t.t)t.t=o++;else if(t.t<i.u)return;return i(n.event?n.event(t):t)}}}function D(t,i,r,l,s,o,a,c,h,d){var y,g,w,k,$,S,z,N,A,C,D,I,E,j,M,Z,O=i.type;if(void 0!==i.constructor)return null;128&r.S&&(h=!!(32&r.S),o=[c=i.m=r.m]),(y=n.p)&&y(i);e:if("function"==typeof O)try{if(N=i.props,A="prototype"in O&&O.prototype.render,C=(y=O.contextType)&&l[y.k],D=y?C?C.props.value:y.h:l,r.k?z=(g=i.k=r.k).h=g.C:(A?i.k=g=new O(N,D):(i.k=g=new b(N,D),g.constructor=O,g.render=V),C&&C.sub(g),g.props=N,g.state||(g.state={}),g.context=D,g.T=l,w=g.v=!0,g.D=[],g.I=[]),A&&null==g.j&&(g.j=g.state),A&&null!=O.getDerivedStateFromProps&&(g.j==g.state&&(g.j=p({},g.j)),p(g.j,O.getDerivedStateFromProps(N,g.j))),k=g.props,$=g.state,g.$=i,w)A&&null==O.getDerivedStateFromProps&&null!=g.componentWillMount&&g.componentWillMount(),A&&null!=g.componentDidMount&&g.D.push(g.componentDidMount);else{if(A&&null==O.getDerivedStateFromProps&&N!==k&&null!=g.componentWillReceiveProps&&g.componentWillReceiveProps(N,D),!g.m&&(null!=g.shouldComponentUpdate&&!1===g.shouldComponentUpdate(N,g.j,D)||i.$===r.$)){for(i.$!==r.$&&(g.props=N,g.state=g.j,g.v=!1),i.m=r.m,i.o=r.o,i.o.some(function(e){e&&(e.h=i)}),I=0;I<g.I.length;I++)g.D.push(g.I[I]);g.I=[],g.D.length&&a.push(g);break e}null!=g.componentWillUpdate&&g.componentWillUpdate(N,g.j,D),A&&null!=g.componentDidUpdate&&g.D.push(function(){g.componentDidUpdate(k,$,S)})}if(g.context=D,g.props=N,g.A=t,g.m=!1,E=n.N,j=0,A){for(g.state=g.j,g.v=!1,E&&E(i),y=g.render(g.props,g.state,g.context),M=0;M<g.I.length;M++)g.D.push(g.I[M]);g.I=[]}else do{g.v=!1,E&&E(i),y=g.render(g.props,g.state,g.context),g.state=g.j}while(g.v&&++j<25);g.state=g.j,null!=g.getChildContext&&(l=p(p({},l),g.getChildContext())),A&&!w&&null!=g.getSnapshotBeforeUpdate&&(S=g.getSnapshotBeforeUpdate(k,$)),_(t,f(Z=null!=y&&y.type===v&&null==y.key?y.props.children:y)?Z:[Z],i,r,l,s,o,a,c,h,d),g.base=i.m,i.S&=-161,g.D.length&&a.push(g),z&&(g.C=g.h=null)}catch(e){if(i.$=null,h||null!=o){for(i.S|=h?160:128;c&&8===c.nodeType&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,i.m=c}else i.m=r.m,i.o=r.o;n.m(e,i,r)}else null==o&&i.$===r.$?(i.o=r.o,i.m=r.m):i.m=function(t,i,r,l,s,o,a,c,h){var d,p,y,g,v,b,w,k=r.props,$=i.props,S=i.type;if("svg"===S?s="http://www.w3.org/2000/svg":"math"===S?s="http://www.w3.org/1998/Math/MathML":s||(s="http://www.w3.org/1999/xhtml"),null!=o)for(d=0;d<o.length;d++)if((v=o[d])&&"setAttribute"in v==!!S&&(S?v.localName===S:3===v.nodeType)){t=v,o[d]=null;break}if(null==t){if(null===S)return document.createTextNode($);t=document.createElementNS(s,S,$.is&&$),c&&(n.V&&n.V(i,o),c=!1),o=null}if(null===S)k===$||c&&t.data===$||(t.data=$);else{if(o=o&&e.call(t.childNodes),k=r.props||u,!c&&null!=o)for(k={},d=0;d<t.attributes.length;d++)k[(v=t.attributes[d]).name]=v.value;for(d in k)if(v=k[d],"children"!=d)if("dangerouslySetInnerHTML"==d)y=v;else if(!(d in $)){if("value"==d&&"defaultValue"in $||"checked"==d&&"defaultChecked"in $)continue;T(t,d,null,v,s)}for(d in $)v=$[d],"children"==d?g=v:"dangerouslySetInnerHTML"==d?p=v:"value"==d?b=v:"checked"==d?w=v:c&&"function"!=typeof v||k[d]===v||T(t,d,v,k[d],s);if(p)c||y&&(p.M===y.M||p.M===t.innerHTML)||(t.innerHTML=p.M),i.o=[];else if(y&&(t.innerHTML=""),_(t,f(g)?g:[g],i,r,l,"foreignObject"===S?"http://www.w3.org/1999/xhtml":s,o,a,o?o[0]:r.o&&x(r,0),c,h),null!=o)for(d=o.length;d--;)m(o[d]);c||(d="value","progress"===S&&null==b?t.removeAttribute("value"):void 0!==b&&(b!==t[d]||"progress"===S&&!b||"option"===S&&b!==k[d])&&T(t,d,b,k[d],s),d="checked",void 0!==w&&w!==t[d]&&T(t,d,w,k[d],s))}return t}(r.m,i,r,l,s,o,a,h,d);(y=n.diffed)&&y(i)}function I(e,t,i){t.v=void 0;for(var r=0;r<i.length;r++)E(i[r],i[++r],i[++r]);n.k&&n.k(t,e),e.some(function(t){try{e=t.D,t.D=[],e.some(function(e){e.call(t)})}catch(e){n.m(e,t.$)}})}function E(e,t,i){try{if("function"==typeof e){var r="function"==typeof e.S;r&&e.S(),r&&null==t||(e.S=e(t))}else e.current=t}catch(e){n.m(e,i)}}function j(e,t,i){var r,l;if(n.unmount&&n.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.m||E(r,null,t)),null!=(r=e.k)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){n.m(e,t)}r.base=r.A=null}if(r=e.o)for(l=0;l<r.length;l++)r[l]&&j(r[l],t,i||"function"!=typeof e.type);i||m(e.m),e.k=e.h=e.m=e.v=void 0}function V(e,n,t){return this.constructor(e,t)}e=h.slice,n={m:function(e,n,t,i){for(var r,l,s;n=n.h;)if((r=n.k)&&!r.h)try{if((l=r.constructor)&&null!=l.getDerivedStateFromError&&(r.setState(l.getDerivedStateFromError(e)),s=r.v),null!=r.componentDidCatch&&(r.componentDidCatch(e,i||{}),s=r.v),s)return r.C=r}catch(n){e=n}throw e}},t=0,b.prototype.setState=function(e,n){var t;t=null!=this.j&&this.j!==this.state?this.j:this.j=p({},this.state),"function"==typeof e&&(e=e(p({},t),this.props)),e&&p(t,e),null!=e&&this.$&&(n&&this.I.push(n),k(this))},b.prototype.forceUpdate=function(e){this.$&&(this.m=!0,e&&this.D.push(e),k(this))},b.prototype.render=v,i=[],l="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,s=function(e,n){return e.$.p-n.$.p},$.N=0,o=0,a=C(!1),c=C(!0);var M,Z,O,q,K=0,R=[],P=n,F=P.p,L=P.N,B=P.diffed,H=P.k,J=P.unmount,U=P.h;function W(e,n){P.D&&P.D(Z,e,K||n),K=0;var t=Z.Z||(Z.Z={h:[],D:[]});return e>=t.h.length&&t.h.push({}),t.h[e]}function Y(e){return K=1,function(e,n){var t=W(M++,2);if(t.t=e,!t.k&&(t.h=[le(void 0,n),function(e){var n=t.O?t.O[0]:t.h[0],i=t.t(n,e);n!==i&&(t.O=[i,t.h[1]],t.k.setState({}))}],t.k=Z,!Z.u)){var i=function(e,n,i){if(!t.k.Z)return!0;var l=t.k.Z.h.filter(function(e){return!!e.k});if(l.every(function(e){return!e.O}))return!r||r.call(this,e,n,i);var s=!1;return l.forEach(function(e){if(e.O){var n=e.h[0];e.h=e.O,e.O=void 0,n!==e.h[0]&&(s=!0)}}),!(!s&&t.k.props===e)&&(!r||r.call(this,e,n,i))};Z.u=!0;var r=Z.shouldComponentUpdate,l=Z.componentWillUpdate;Z.componentWillUpdate=function(e,n,t){if(this.m){var s=r;r=void 0,i(e,n,t),r=s}l&&l.call(this,e,n,t)},Z.shouldComponentUpdate=i}return t.O||t.h}(le,e)}function X(e,n){var t=W(M++,3);!P.j&&re(t.Z,n)&&(t.h=e,t.i=n,Z.Z.D.push(t))}function G(e){return K=5,function(e,n){var t=W(M++,7);return re(t.Z,n)&&(t.h=e(),t.Z=n,t.D=e),t.h}(function(){return{current:e}},[])}function Q(){for(var e;e=R.shift();)if(e.A&&e.Z)try{e.Z.D.forEach(te),e.Z.D.forEach(ie),e.Z.D=[]}catch(n){e.Z.D=[],P.m(n,e.$)}}P.p=function(e){Z=null,F&&F(e)},P.h=function(e,n){e&&n.o&&n.o.V&&(e.V=n.o.V),U&&U(e,n)},P.N=function(e){L&&L(e),M=0;var n=(Z=e.k).Z;n&&(O===Z?(n.D=[],Z.D=[],n.h.forEach(function(e){e.O&&(e.h=e.O),e.i=e.O=void 0})):(n.D.forEach(te),n.D.forEach(ie),n.D=[],M=0)),O=Z},P.diffed=function(e){B&&B(e);var n=e.k;n&&n.Z&&(n.Z.D.length&&(1!==R.push(n)&&q===P.requestAnimationFrame||((q=P.requestAnimationFrame)||ne)(Q)),n.Z.h.forEach(function(e){e.i&&(e.Z=e.i),e.i=void 0})),O=Z=null},P.k=function(e,n){n.some(function(e){try{e.D.forEach(te),e.D=e.D.filter(function(e){return!e.h||ie(e)})}catch(t){n.some(function(e){e.D&&(e.D=[])}),n=[],P.m(t,e.$)}}),H&&H(e,n)},P.unmount=function(e){J&&J(e);var n,t=e.k;t&&t.Z&&(t.Z.h.forEach(function(e){try{te(e)}catch(e){n=e}}),t.Z=void 0,n&&P.m(n,t.$))};var ee="function"==typeof requestAnimationFrame;function ne(e){var n,t=function(){clearTimeout(i),ee&&cancelAnimationFrame(n),setTimeout(e)},i=setTimeout(t,100);ee&&(n=requestAnimationFrame(t))}function te(e){var n=Z,t=e.k;"function"==typeof t&&(e.k=void 0,t()),Z=n}function ie(e){var n=Z;e.k=e.h(),Z=n}function re(e,n){return!e||e.length!==n.length||n.some(function(n,t){return n!==e[t]})}function le(e,n){return"function"==typeof n?n(e):n}var se={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},oe=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),ae=(e,n)=>{let t=({color:t="currentColor",size:i=24,strokeWidth:r=2,absoluteStrokeWidth:l,children:s,...o})=>y("svg",{...se,width:String(i),height:i,stroke:t,"stroke-width":l?24*Number(r)/Number(i):r,class:`lucide lucide-${oe(e)}`,...o},[...n.map(([e,n])=>y(e,n)),...z(s)]);return t.displayName=`${e}`,t},ce=ae("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),ue=ae("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),he=ae("MessageCircle",[["path",{d:"m3 21 1.9-5.7a8.5 8.5 0 1 1 3.8 3.8z",key:"v2veuj"}]]),de=ae("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]),fe=ae("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);var pe={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function me(e){pe=e}var ye=/[&<>"']/,ge=new RegExp(ye.source,"g"),ve=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,be=new RegExp(ve.source,"g"),xe={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},we=e=>xe[e];function ke(e,n){if(n){if(ye.test(e))return e.replace(ge,we)}else if(ve.test(e))return e.replace(be,we);return e}var $e=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function _e(e){return e.replace($e,(e,n)=>"colon"===(n=n.toLowerCase())?":":"#"===n.charAt(0)?"x"===n.charAt(1)?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1)):"")}var Se=/(^|[^\[])\^/g;function ze(e,n){e="string"==typeof e?e:e.source,n=n||"";let t={replace:(n,i)=>(i=(i="object"==typeof i&&"source"in i?i.source:i).replace(Se,"$1"),e=e.replace(n,i),t),getRegex:()=>new RegExp(e,n)};return t}function Ne(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch{return null}return e}var Ae={exec:()=>null};function Te(e,n){let t=e.replace(/\|/g,(e,n,t)=>{let i=!1,r=n;for(;--r>=0&&"\\"===t[r];)i=!i;return i?"|":" |"}).split(/ \|/),i=0;if(t[0].trim()||t.shift(),t.length>0&&!t[t.length-1].trim()&&t.pop(),n)if(t.length>n)t.splice(n);else for(;t.length<n;)t.push("");for(;i<t.length;i++)t[i]=t[i].trim().replace(/\\\|/g,"|");return t}function Ce(e,n,t){let i=e.length;if(0===i)return"";let r=0;for(;r<i&&e.charAt(i-r-1)===n;)r++;return e.slice(0,i-r)}function De(e,n,t,i){let r=n.href,l=n.title?ke(n.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){i.state.inLink=!0;let e={type:"link",raw:t,href:r,title:l,text:s,tokens:i.inlineTokens(s)};return i.state.inLink=!1,e}return{type:"image",raw:t,href:r,title:l,text:ke(s)}}var Ie=class{options;rules;lexer;constructor(e){this.options=e||pe}space(e){let n=this.rules.block.newline.exec(e);if(n&&n[0].length>0)return{type:"space",raw:n[0]}}code(e){let n=this.rules.block.code.exec(e);if(n){let e=n[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?e:Ce(e,"\n")}}}fences(e){let n=this.rules.block.fences.exec(e);if(n){let e=n[0],t=function(e,n){let t=e.match(/^(\s+)(?:```)/);if(null===t)return n;let i=t[1];return n.split("\n").map(e=>{let n=e.match(/^\s+/);if(null===n)return e;let[t]=n;return t.length>=i.length?e.slice(i.length):e}).join("\n")}(e,n[3]||"");return{type:"code",raw:e,lang:n[2]?n[2].trim().replace(this.rules.inline.q,"$1"):n[2],text:t}}}heading(e){let n=this.rules.block.heading.exec(e);if(n){let e=n[2].trim();if(/#$/.test(e)){let n=Ce(e,"#");(this.options.pedantic||!n||/ $/.test(n))&&(e=n.trim())}return{type:"heading",raw:n[0],depth:n[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let n=this.rules.block.hr.exec(e);if(n)return{type:"hr",raw:n[0]}}blockquote(e){let n=this.rules.block.blockquote.exec(e);if(n){let e=Ce(n[0].replace(/^ *>[ \t]?/gm,""),"\n"),t=this.lexer.state.top;this.lexer.state.top=!0;let i=this.lexer.blockTokens(e);return this.lexer.state.top=t,{type:"blockquote",raw:n[0],tokens:i,text:e}}}list(e){let n=this.rules.block.list.exec(e);if(n){let t=n[1].trim(),i=t.length>1,r={type:"list",raw:"",ordered:i,start:i?+t.slice(0,-1):"",loose:!1,items:[]};t=i?`\\d{1,9}\\${t.slice(-1)}`:`\\${t}`,this.options.pedantic&&(t=i?t:"[*+-]");let l=new RegExp(`^( {0,3}${t})((?:[\t ][^\\n]*)?(?:\\n|$))`),s="",o="",a=!1;for(;e;){let t=!1;if(!(n=l.exec(e))||this.rules.block.hr.test(e))break;s=n[0],e=e.substring(s.length);let i=n[2].split("\n",1)[0].replace(/^\t+/,e=>" ".repeat(3*e.length)),c=e.split("\n",1)[0],u=0;this.options.pedantic?(u=2,o=i.trimStart()):(u=n[2].search(/[^ ]/),u=u>4?1:u,o=i.slice(u),u+=n[1].length);let h=!1;if(!i&&/^ *$/.test(c)&&(s+=c+"\n",e=e.substring(c.length+1),t=!0),!t){let n=new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),t=new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\`\`\`|~~~)`),l=new RegExp(`^ {0,${Math.min(3,u-1)}}#`);for(;e;){let a=e.split("\n",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),r.test(c)||l.test(c)||n.test(c)||t.test(e))break;if(c.search(/[^ ]/)>=u||!c.trim())o+="\n"+c.slice(u);else{if(h||i.search(/[^ ]/)>=4||r.test(i)||l.test(i)||t.test(i))break;o+="\n"+c}!h&&!c.trim()&&(h=!0),s+=a+"\n",e=e.substring(a.length+1),i=c.slice(u)}}r.loose||(a?r.loose=!0:/\n *\n *$/.test(s)&&(a=!0));let d,f=null;this.options.gfm&&(f=/^\[[ xX]\] /.exec(o),f&&(d="[ ] "!==f[0],o=o.replace(/^\[[ xX]\] +/,""))),r.items.push({type:"list_item",raw:s,task:!!f,checked:d,loose:!1,text:o,tokens:[]}),r.raw+=s}r.items[r.items.length-1].raw=s.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e<r.items.length;e++)if(this.lexer.state.top=!1,r.items[e].tokens=this.lexer.blockTokens(r.items[e].text,[]),!r.loose){let n=r.items[e].tokens.filter(e=>"space"===e.type),t=n.length>0&&n.some(e=>/\n.*\n/.test(e.raw));r.loose=t}if(r.loose)for(let e=0;e<r.items.length;e++)r.items[e].loose=!0;return r}}html(e){let n=this.rules.block.html.exec(e);if(n)return{type:"html",block:!0,raw:n[0],pre:"pre"===n[1]||"script"===n[1]||"style"===n[1],text:n[0]}}def(e){let n=this.rules.block.def.exec(e);if(n){let e=n[1].toLowerCase().replace(/\s+/g," "),t=n[2]?n[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline.q,"$1"):"",i=n[3]?n[3].substring(1,n[3].length-1).replace(this.rules.inline.q,"$1"):n[3];return{type:"def",tag:e,raw:n[0],href:t,title:i}}}table(e){let n=this.rules.block.table.exec(e);if(n){if(!/[:|]/.test(n[2]))return;let e={type:"table",raw:n[0],header:Te(n[1]).map(e=>({text:e,tokens:[]})),align:n[2].replace(/^\||\| *$/g,"").split("|"),rows:n[3]&&n[3].trim()?n[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(e.header.length===e.align.length){let n,t,i,r,l=e.align.length;for(n=0;n<l;n++){let t=e.align[n];t&&(/^ *-+: *$/.test(t)?e.align[n]="right":/^ *:-+: *$/.test(t)?e.align[n]="center":/^ *:-+ *$/.test(t)?e.align[n]="left":e.align[n]=null)}for(l=e.rows.length,n=0;n<l;n++)e.rows[n]=Te(e.rows[n],e.header.length).map(e=>({text:e,tokens:[]}));for(l=e.header.length,t=0;t<l;t++)e.header[t].tokens=this.lexer.inline(e.header[t].text);for(l=e.rows.length,t=0;t<l;t++)for(r=e.rows[t],i=0;i<r.length;i++)r[i].tokens=this.lexer.inline(r[i].text);return e}}}lheading(e){let n=this.rules.block.lheading.exec(e);if(n)return{type:"heading",raw:n[0],depth:"="===n[2].charAt(0)?1:2,text:n[1],tokens:this.lexer.inline(n[1])}}paragraph(e){let n=this.rules.block.paragraph.exec(e);if(n){let e="\n"===n[1].charAt(n[1].length-1)?n[1].slice(0,-1):n[1];return{type:"paragraph",raw:n[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let n=this.rules.block.text.exec(e);if(n)return{type:"text",raw:n[0],text:n[0],tokens:this.lexer.inline(n[0])}}escape(e){let n=this.rules.inline.escape.exec(e);if(n)return{type:"escape",raw:n[0],text:ke(n[1])}}tag(e){let n=this.rules.inline.tag.exec(e);if(n)return!this.lexer.state.inLink&&/^<a /i.test(n[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(n[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(n[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(n[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:n[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:n[0]}}link(e){let n=this.rules.inline.link.exec(e);if(n){let e=n[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;let n=Ce(e.slice(0,-1),"\\");if((e.length-n.length)%2==0)return}else{let e=function(e,n){if(-1===e.indexOf(n[1]))return-1;let t=0;for(let i=0;i<e.length;i++)if("\\"===e[i])i++;else if(e[i]===n[0])t++;else if(e[i]===n[1]&&(t--,t<0))return i;return-1}(n[2],"()");if(e>-1){let t=(0===n[0].indexOf("!")?5:4)+n[1].length+e;n[2]=n[2].substring(0,e),n[0]=n[0].substring(0,t).trim(),n[3]=""}}let t=n[2],i="";if(this.options.pedantic){let e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(t);e&&(t=e[1],i=e[3])}else i=n[3]?n[3].slice(1,-1):"";return t=t.trim(),/^</.test(t)&&(t=this.options.pedantic&&!/>$/.test(e)?t.slice(1):t.slice(1,-1)),De(n,{href:t&&t.replace(this.rules.inline.q,"$1"),title:i&&i.replace(this.rules.inline.q,"$1")},n[0],this.lexer)}}reflink(e,n){let t;if((t=this.rules.inline.reflink.exec(e))||(t=this.rules.inline.nolink.exec(e))){let e=(t[2]||t[1]).replace(/\s+/g," ");if(e=n[e.toLowerCase()],!e){let e=t[0].charAt(0);return{type:"text",raw:e,text:e}}return De(t,e,t[0],this.lexer)}}emStrong(e,n,t=""){let i=this.rules.inline.emStrong.lDelim.exec(e);if(!(!i||i[3]&&t.match(/[\p{L}\p{N}]/u))&&(!i[1]&&!i[2]||!t||this.rules.inline.punctuation.exec(t))){let t,r,l=[...i[0]].length-1,s=l,o=0,a="*"===i[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(a.lastIndex=0,n=n.slice(-1*e.length+l);null!=(i=a.exec(n));){if(t=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!t)continue;if(r=[...t].length,i[3]||i[4]){s+=r;continue}if((i[5]||i[6])&&l%3&&!((l+r)%3)){o+=r;continue}if(s-=r,s>0)continue;r=Math.min(r,r+s+o);let n=[...i[0]][0].length,a=e.slice(0,l+i.index+n+r);if(Math.min(l,r)%2){let e=a.slice(1,-1);return{type:"em",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}let c=a.slice(2,-2);return{type:"strong",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){let n=this.rules.inline.code.exec(e);if(n){let e=n[2].replace(/\n/g," "),t=/[^ ]/.test(e),i=/^ /.test(e)&&/ $/.test(e);return t&&i&&(e=e.substring(1,e.length-1)),e=ke(e,!0),{type:"codespan",raw:n[0],text:e}}}br(e){let n=this.rules.inline.br.exec(e);if(n)return{type:"br",raw:n[0]}}del(e){let n=this.rules.inline.del.exec(e);if(n)return{type:"del",raw:n[0],text:n[2],tokens:this.lexer.inlineTokens(n[2])}}autolink(e){let n=this.rules.inline.autolink.exec(e);if(n){let e,t;return"@"===n[2]?(e=ke(n[1]),t="mailto:"+e):(e=ke(n[1]),t=e),{type:"link",raw:n[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let n;if(n=this.rules.inline.url.exec(e)){let e,t;if("@"===n[2])e=ke(n[0]),t="mailto:"+e;else{let i;do{i=n[0],n[0]=this.rules.inline.K.exec(n[0])[0]}while(i!==n[0]);e=ke(n[0]),t="www."===n[1]?"http://"+n[0]:n[0]}return{type:"link",raw:n[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){let n=this.rules.inline.text.exec(e);if(n){let e;return e=this.lexer.state.inRawBlock?n[0]:ke(n[0]),{type:"text",raw:n[0],text:e}}}},Ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:Ae,lheading:/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,R:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,P:/(?!\s*\])(?:\\.|[^\[\]\\])+/,F:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};Ee.def=ze(Ee.def).replace("label",Ee.P).replace("title",Ee.F).getRegex(),Ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,Ee.listItemStart=ze(/^( *)(bull) */).replace("bull",Ee.bullet).getRegex(),Ee.list=ze(Ee.list).replace(/bull/g,Ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+Ee.def.source+")").getRegex(),Ee.L="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ee.B=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,Ee.html=ze(Ee.html,"i").replace("comment",Ee.B).replace("tag",Ee.L).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Ee.lheading=ze(Ee.lheading).replace(/bull/g,Ee.bullet).getRegex(),Ee.paragraph=ze(Ee.R).replace("hr",Ee.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Ee.L).getRegex(),Ee.blockquote=ze(Ee.blockquote).replace("paragraph",Ee.paragraph).getRegex(),Ee.normal={...Ee},Ee.gfm={...Ee.normal,table:"^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},Ee.gfm.table=ze(Ee.gfm.table).replace("hr",Ee.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Ee.L).getRegex(),Ee.gfm.paragraph=ze(Ee.R).replace("hr",Ee.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ee.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Ee.L).getRegex(),Ee.pedantic={...Ee.normal,html:ze("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",Ee.B).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ae,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ze(Ee.normal.R).replace("hr",Ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",Ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};var je={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Ae,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,rDelimAst:/^[^_*]*?__[^_*]*?\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\*)[punct](\*+)(?=[\s]|$)|[^punct\s](\*+)(?!\*)(?=[punct\s]|$)|(?!\*)[punct\s](\*+)(?=[^punct\s])|[\s](\*+)(?!\*)(?=[punct])|(?!\*)[punct](\*+)(?!\*)(?=[punct])|[^punct\s](\*+)(?=[^punct\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\s]|$)|[^punct\s](_+)(?!_)(?=[punct\s]|$)|(?!_)[punct\s](_+)(?=[^punct\s])|[\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Ae,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^((?![*_])[\spunctuation])/,H:"\\p{P}$+<=>`^|~"};je.punctuation=ze(je.punctuation,"u").replace(/punctuation/g,je.H).getRegex(),je.blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,je.anyPunctuation=/\\[punct]/g,je.q=/\\([punct])/g,je.B=ze(Ee.B).replace("(?:--\x3e|$)","--\x3e").getRegex(),je.emStrong.lDelim=ze(je.emStrong.lDelim,"u").replace(/punct/g,je.H).getRegex(),je.emStrong.rDelimAst=ze(je.emStrong.rDelimAst,"gu").replace(/punct/g,je.H).getRegex(),je.emStrong.rDelimUnd=ze(je.emStrong.rDelimUnd,"gu").replace(/punct/g,je.H).getRegex(),je.anyPunctuation=ze(je.anyPunctuation,"gu").replace(/punct/g,je.H).getRegex(),je.q=ze(je.q,"gu").replace(/punct/g,je.H).getRegex(),je.J=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,je.U=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,je.autolink=ze(je.autolink).replace("scheme",je.J).replace("email",je.U).getRegex(),je.W=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,je.tag=ze(je.tag).replace("comment",je.B).replace("attribute",je.W).getRegex(),je.P=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,je.Y=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,je.F=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,je.link=ze(je.link).replace("label",je.P).replace("href",je.Y).replace("title",je.F).getRegex(),je.reflink=ze(je.reflink).replace("label",je.P).replace("ref",Ee.P).getRegex(),je.nolink=ze(je.nolink).replace("ref",Ee.P).getRegex(),je.reflinkSearch=ze(je.reflinkSearch,"g").replace("reflink",je.reflink).replace("nolink",je.nolink).getRegex(),je.normal={...je},je.pedantic={...je.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:ze(/^!?\[(label)\]\((.*?)\)/).replace("label",je.P).getRegex(),reflink:ze(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",je.P).getRegex()},je.gfm={...je.normal,escape:ze(je.escape).replace("])","~|])").getRegex(),X:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,K:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},je.gfm.url=ze(je.gfm.url,"i").replace("email",je.gfm.X).getRegex(),je.breaks={...je.gfm,br:ze(je.br).replace("{2,}","*").getRegex(),text:ze(je.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};var Ve=class e{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||pe,this.options.tokenizer=this.options.tokenizer||new Ie,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={block:Ee.normal,inline:je.normal};this.options.pedantic?(n.block=Ee.pedantic,n.inline=je.pedantic):this.options.gfm&&(n.block=Ee.gfm,this.options.breaks?n.inline=je.breaks:n.inline=je.gfm),this.tokenizer.rules=n}static get rules(){return{block:Ee,inline:je}}static lex(n,t){return new e(t).lex(n)}static lexInline(n,t){return new e(t).inlineTokens(n)}lex(e){let n;for(e=e.replace(/\r\n|\r/g,"\n"),this.blockTokens(e,this.tokens);n=this.inlineQueue.shift();)this.inlineTokens(n.src,n.tokens);return this.tokens}blockTokens(e,n=[]){let t,i,r,l;for(e=this.options.pedantic?e.replace(/\t/g," ").replace(/^ +$/gm,""):e.replace(/^( *)(\t+)/gm,(e,n,t)=>n+" ".repeat(t.length));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(i=>!!(t=i.call({lexer:this},e,n))&&(e=e.substring(t.raw.length),n.push(t),!0)))){if(t=this.tokenizer.space(e)){e=e.substring(t.raw.length),1===t.raw.length&&n.length>0?n[n.length-1].raw+="\n":n.push(t);continue}if(t=this.tokenizer.code(e)){e=e.substring(t.raw.length),i=n[n.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?n.push(t):(i.raw+="\n"+t.raw,i.text+="\n"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);continue}if(t=this.tokenizer.fences(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.heading(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.hr(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.blockquote(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.list(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.html(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.def(e)){e=e.substring(t.raw.length),i=n[n.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(i.raw+="\n"+t.raw,i.text+="\n"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);continue}if(t=this.tokenizer.table(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.lheading(e)){e=e.substring(t.raw.length),n.push(t);continue}if(r=e,this.options.extensions&&this.options.extensions.startBlock){let n,t=1/0,i=e.slice(1);this.options.extensions.startBlock.forEach(e=>{n=e.call({lexer:this},i),"number"==typeof n&&n>=0&&(t=Math.min(t,n))}),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(t=this.tokenizer.paragraph(r))){i=n[n.length-1],l&&"paragraph"===i.type?(i.raw+="\n"+t.raw,i.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):n.push(t),l=r.length!==e.length,e=e.substring(t.raw.length);continue}if(t=this.tokenizer.text(e)){e=e.substring(t.raw.length),i=n[n.length-1],i&&"text"===i.type?(i.raw+="\n"+t.raw,i.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):n.push(t);continue}if(e){let n="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(n);break}throw new Error(n)}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){let t,i,r,l,s,o,a=e;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(l=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(l=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(l=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,l.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(s||(o=""),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(i=>!!(t=i.call({lexer:this},e,n))&&(e=e.substring(t.raw.length),n.push(t),!0)))){if(t=this.tokenizer.escape(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.tag(e)){e=e.substring(t.raw.length),i=n[n.length-1],i&&"text"===t.type&&"text"===i.type?(i.raw+=t.raw,i.text+=t.text):n.push(t);continue}if(t=this.tokenizer.link(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(t.raw.length),i=n[n.length-1],i&&"text"===t.type&&"text"===i.type?(i.raw+=t.raw,i.text+=t.text):n.push(t);continue}if(t=this.tokenizer.emStrong(e,a,o)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.codespan(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.br(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.del(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.autolink(e)){e=e.substring(t.raw.length),n.push(t);continue}if(!this.state.inLink&&(t=this.tokenizer.url(e))){e=e.substring(t.raw.length),n.push(t);continue}if(r=e,this.options.extensions&&this.options.extensions.startInline){let n,t=1/0,i=e.slice(1);this.options.extensions.startInline.forEach(e=>{n=e.call({lexer:this},i),"number"==typeof n&&n>=0&&(t=Math.min(t,n))}),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(t=this.tokenizer.inlineText(r)){e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(o=t.raw.slice(-1)),s=!0,i=n[n.length-1],i&&"text"===i.type?(i.raw+=t.raw,i.text+=t.text):n.push(t);continue}if(e){let n="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(n);break}throw new Error(n)}}return n}},Me=class{options;constructor(e){this.options=e||pe}code(e,n,t){let i=(n||"").match(/^\S*/)?.[0];return e=e.replace(/\n$/,"")+"\n",i?'<pre><code class="language-'+ke(i)+'">'+(t?e:ke(e,!0))+"</code></pre>\n":"<pre><code>"+(t?e:ke(e,!0))+"</code></pre>\n"}blockquote(e){return`<blockquote>\n${e}</blockquote>\n`}html(e,n){return e}heading(e,n,t){return`<h${n}>${e}</h${n}>\n`}hr(){return"<hr>\n"}list(e,n,t){let i=n?"ol":"ul";return"<"+i+(n&&1!==t?' start="'+t+'"':"")+">\n"+e+"</"+i+">\n"}listitem(e,n,t){return`<li>${e}</li>\n`}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph(e){return`<p>${e}</p>\n`}table(e,n){return n&&(n=`<tbody>${n}</tbody>`),"<table>\n<thead>\n"+e+"</thead>\n"+n+"</table>\n"}tablerow(e){return`<tr>\n${e}</tr>\n`}tablecell(e,n){let t=n.header?"th":"td";return(n.align?`<${t} align="${n.align}">`:`<${t}>`)+e+`</${t}>\n`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return"<br>"}del(e){return`<del>${e}</del>`}link(e,n,t){let i=Ne(e);if(null===i)return t;let r='<a href="'+(e=i)+'"';return n&&(r+=' title="'+n+'"'),r+=">"+t+"</a>",r}image(e,n,t){let i=Ne(e);if(null===i)return t;let r=`<img src="${e=i}" alt="${t}"`;return n&&(r+=` title="${n}"`),r+=">",r}text(e){return e}},Ze=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,n,t){return""+t}image(e,n,t){return""+t}br(){return""}},Oe=class e{options;renderer;textRenderer;constructor(e){this.options=e||pe,this.options.renderer=this.options.renderer||new Me,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Ze}static parse(n,t){return new e(t).parse(n)}static parseInline(n,t){return new e(t).parseInline(n)}parse(e,n=!0){let t="";for(let i=0;i<e.length;i++){let r=e[i];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(!1!==n||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(e.type)){t+=n||"";continue}}switch(r.type){case"space":continue;case"hr":t+=this.renderer.hr();continue;case"heading":{let e=r;t+=this.renderer.heading(this.parseInline(e.tokens),e.depth,_e(this.parseInline(e.tokens,this.textRenderer)));continue}case"code":{let e=r;t+=this.renderer.code(e.text,e.lang,!!e.escaped);continue}case"table":{let e=r,n="",i="";for(let n=0;n<e.header.length;n++)i+=this.renderer.tablecell(this.parseInline(e.header[n].tokens),{header:!0,align:e.align[n]});n+=this.renderer.tablerow(i);let l="";for(let n=0;n<e.rows.length;n++){let t=e.rows[n];i="";for(let n=0;n<t.length;n++)i+=this.renderer.tablecell(this.parseInline(t[n].tokens),{header:!1,align:e.align[n]});l+=this.renderer.tablerow(i)}t+=this.renderer.table(n,l);continue}case"blockquote":{let e=r,n=this.parse(e.tokens);t+=this.renderer.blockquote(n);continue}case"list":{let e=r,n=e.ordered,i=e.start,l=e.loose,s="";for(let n=0;n<e.items.length;n++){let t=e.items[n],i=t.checked,r=t.task,o="";if(t.task){let e=this.renderer.checkbox(!!i);l?t.tokens.length>0&&"paragraph"===t.tokens[0].type?(t.tokens[0].text=e+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=e+" "+t.tokens[0].tokens[0].text)):t.tokens.unshift({type:"text",text:e+" "}):o+=e+" "}o+=this.parse(t.tokens,l),s+=this.renderer.listitem(o,r,!!i)}t+=this.renderer.list(s,n,i);continue}case"html":{let e=r;t+=this.renderer.html(e.text,e.block);continue}case"paragraph":{let e=r;t+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let l=r,s=l.tokens?this.parseInline(l.tokens):l.text;for(;i+1<e.length&&"text"===e[i+1].type;)l=e[++i],s+="\n"+(l.tokens?this.parseInline(l.tokens):l.text);t+=n?this.renderer.paragraph(s):s;continue}default:{let e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return console.error(e),"";throw new Error(e)}}}return t}parseInline(e,n){n=n||this.renderer;let t="";for(let i=0;i<e.length;i++){let r=e[i];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){let e=this.options.extensions.renderers[r.type].call({parser:this},r);if(!1!==e||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(r.type)){t+=e||"";continue}}switch(r.type){case"escape":{let e=r;t+=n.text(e.text);break}case"html":{let e=r;t+=n.html(e.text);break}case"link":{let e=r;t+=n.link(e.href,e.title,this.parseInline(e.tokens,n));break}case"image":{let e=r;t+=n.image(e.href,e.title,e.text);break}case"strong":{let e=r;t+=n.strong(this.parseInline(e.tokens,n));break}case"em":{let e=r;t+=n.em(this.parseInline(e.tokens,n));break}case"codespan":{let e=r;t+=n.codespan(e.text);break}case"br":t+=n.br();break;case"del":{let e=r;t+=n.del(this.parseInline(e.tokens,n));break}case"text":{let e=r;t+=n.text(e.text);break}default:{let e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return console.error(e),"";throw new Error(e)}}}return t}},qe=class{options;constructor(e){this.options=e||pe}static passThroughHooks=new Set(["preprocess","postprocess"]);preprocess(e){return e}postprocess(e){return e}},Ke=new class{defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};options=this.setOptions;parse=this.#e(Ve.lex,Oe.parse);parseInline=this.#e(Ve.lexInline,Oe.parseInline);Parser=Oe;Renderer=Me;TextRenderer=Ze;Lexer=Ve;Tokenizer=Ie;Hooks=qe;constructor(...e){this.use(...e)}walkTokens(e,n){let t=[];for(let i of e)switch(t=t.concat(n.call(this,i)),i.type){case"table":{let e=i;for(let i of e.header)t=t.concat(this.walkTokens(i.tokens,n));for(let i of e.rows)for(let e of i)t=t.concat(this.walkTokens(e.tokens,n));break}case"list":{let e=i;t=t.concat(this.walkTokens(e.items,n));break}default:{let e=i;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(i=>{t=t.concat(this.walkTokens(e[i],n))}):e.tokens&&(t=t.concat(this.walkTokens(e.tokens,n)))}}return t}use(...e){let n=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let t={...e};if(t.async=this.defaults.async||t.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){let t=n.renderers[e.name];n.renderers[e.name]=t?function(...n){let i=e.renderer.apply(this,n);return!1===i&&(i=t.apply(this,n)),i}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");let t=n[e.level];t?t.unshift(e.tokenizer):n[e.level]=[e.tokenizer],e.start&&("block"===e.level?n.startBlock?n.startBlock.push(e.start):n.startBlock=[e.start]:"inline"===e.level&&(n.startInline?n.startInline.push(e.start):n.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(n.childTokens[e.name]=e.childTokens)}),t.extensions=n),e.renderer){let n=this.defaults.renderer||new Me(this.defaults);for(let t in e.renderer){let i=e.renderer[t],r=t,l=n[r];n[r]=(...e)=>{let t=i.apply(n,e);return!1===t&&(t=l.apply(n,e)),t||""}}t.renderer=n}if(e.tokenizer){let n=this.defaults.tokenizer||new Ie(this.defaults);for(let t in e.tokenizer){let i=e.tokenizer[t],r=t,l=n[r];n[r]=(...e)=>{let t=i.apply(n,e);return!1===t&&(t=l.apply(n,e)),t}}t.tokenizer=n}if(e.hooks){let n=this.defaults.hooks||new qe;for(let t in e.hooks){let i=e.hooks[t],r=t,l=n[r];qe.passThroughHooks.has(t)?n[r]=e=>{if(this.defaults.async)return Promise.resolve(i.call(n,e)).then(e=>l.call(n,e));let t=i.call(n,e);return l.call(n,t)}:n[r]=(...e)=>{let t=i.apply(n,e);return!1===t&&(t=l.apply(n,e)),t}}t.hooks=n}if(e.walkTokens){let n=this.defaults.walkTokens,i=e.walkTokens;t.walkTokens=function(e){let t=[];return t.push(i.call(this,e)),n&&(t=t.concat(n.call(this,e))),t}}this.defaults={...this.defaults,...t}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,n){return Ve.lex(e,n??this.defaults)}parser(e,n){return Oe.parse(e,n??this.defaults)}#e(e,n){return(t,i)=>{let r={...i},l={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(l.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),l.async=!0);let s=this.#n(!!l.silent,!!l.async);if(typeof t>"u"||null===t)return s(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof t)return s(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(l.hooks&&(l.hooks.options=l),l.async)return Promise.resolve(l.hooks?l.hooks.preprocess(t):t).then(n=>e(n,l)).then(e=>l.walkTokens?Promise.all(this.walkTokens(e,l.walkTokens)).then(()=>e):e).then(e=>n(e,l)).then(e=>l.hooks?l.hooks.postprocess(e):e).catch(s);try{l.hooks&&(t=l.hooks.preprocess(t));let i=e(t,l);l.walkTokens&&this.walkTokens(i,l.walkTokens);let r=n(i,l);return l.hooks&&(r=l.hooks.postprocess(r)),r}catch(e){return s(e)}}}#n(e,n){return t=>{if(t.message+="\nPlease report this to https://github.com/markedjs/marked.",e){let e="<p>An error occurred:</p><pre>"+ke(t.message+"",!0)+"</pre>";return n?Promise.resolve(e):e}if(n)return Promise.reject(t);throw t}}};function Re(e,n){return Ke.parse(e,n)}Re.options=Re.setOptions=function(e){return Ke.setOptions(e),Re.defaults=Ke.defaults,me(Re.defaults),Re},Re.getDefaults=function(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}},Re.defaults=pe,Re.use=function(...e){return Ke.use(...e),Re.defaults=Ke.defaults,me(Re.defaults),Re},Re.walkTokens=function(e,n){return Ke.walkTokens(e,n)},Re.parseInline=Ke.parseInline,Re.Parser=Oe,Re.parser=Oe.parse,Re.Renderer=Me,Re.TextRenderer=Ze,Re.Lexer=Ve,Re.lexer=Ve.lex,Re.Tokenizer=Ie,Re.Hooks=qe,Re.parse=Re,Re.options,Re.setOptions,Re.use,Re.walkTokens,Re.parseInline,Oe.parse,Ve.lex;var Pe=0;function Fe(e,t,i,r,l,s){t||(t={});var o,a,c=t;"ref"in t&&(o=t.ref,delete t.ref);var u={type:e,props:c,key:i,ref:o,o:null,h:null,p:0,m:null,v:void 0,k:null,constructor:void 0,$:--Pe,_:-1,S:0,G:l,ee:s};if("function"==typeof e&&(o=e.defaultProps))for(a in o)void 0===c[a]&&(c[a]=o[a]);return n.vnode&&n.vnode(u),u}var Le="0.1.8";function Be({client:e}){let[n,t]=Y(!1),[i,r]=Y("home"),[l,s]=Y([]),[o,a]=Y([]),[c,u]=Y(""),[h,d]=Y(!1),[f,p]=Y(!1),[m,y]=Y(!1),[g,b]=Y(null),[x,w]=Y(null),k=G(null),[$,_]=Y(null),S=G(null),z=G(null),N=G(0);X(()=>{S.current=$},[$]);let[A,T]=Y({}),[C,D]=Y("#5046e5"),[I,E]=Y(24),[j,V]=Y("right"),[M,Z]=Y("light"),[O,q]=Y("#ffffff"),[K,R]=Y("#ffffff"),[P,F]=Y("message"),[L,B]=Y(!0),[H,J]=Y(!0),[U,W]=Y(!0),[Q,ee]=Y(!0),[ne,te]=Y(!1);X(()=>{console.log(`[Vemly SDK v${Le}] Initializing widget...`),e.getWidgetConfig().then(n=>{if(n){if(console.log(`[Vemly SDK v${Le}] Config loaded:`,n),"error"===n.status)return console.error("[Vemly SDK] Error loading widget:",n.message),J(!1),void te(!0);if(0===Object.keys(n).length)return console.warn("[Vemly SDK] Empty config received, disabling widget"),J(!1),void te(!0);void 0!==n.widgetEnabled&&J(n.widgetEnabled),void 0!==n.aiMessagingEnabled&&W(n.aiMessagingEnabled);let t=n.config||{};if(T(t),t.primaryColor&&D(t.primaryColor),t.defaultAgentName&&_(t.defaultAgentName),void 0!==t.borderRadius&&E(t.borderRadius),t.position&&V(t.position),t.theme&&Z(t.theme),t.launcherIcon&&F(t.launcherIcon),void 0!==t.showBranding&&B(t.showBranding),t.websiteUrl&&typeof window<"u")try{let n=new URL(t.websiteUrl).origin,i=window.location.origin,r=i.includes("localhost")||i.includes("127.0.0.1"),l=e.apiUrl?.includes("localhost")||e.apiUrl?.includes("127.0.0.1");ee(n===i||r||l)}catch{ee(!0)}else ee(!0)}te(!0)})},[e]),X(()=>{n&&("home"===i&&le(),ie())},[n,i]),X(()=>{ie()},[o,h]);let ie=()=>{k.current?.scrollIntoView({behavior:"smooth"})},re=()=>t(!n),le=async()=>{let n=await e.getHistory();s(n)},se=()=>{console.log("[Vemly SDK v0.1.8] Connecting to stream..."),e.connectStream((e,n)=>{if(console.log("[Vemly SDK] Stream event:",e,"| Raw data:",JSON.stringify(n),"| Type:",typeof n),"message-stream"===e){let e;"object"==typeof n&&null!==n?(console.log("[Vemly SDK] message-stream object - type:",n.type,"| text:",n.text,"| content:",n.content),"text"===n.type&&"string"==typeof n.text||"string"==typeof n.text?e=n.text:"string"==typeof n.content&&(e=n.content)):"string"==typeof n&&(e=n),console.log("[Vemly SDK] Extracted token:",JSON.stringify(e)),e&&"undefined"!==e&&"null"!==e?pe(e):console.warn("[Vemly SDK] Skipping invalid token:",e)}else if("token"===e)n&&"string"==typeof n&&"undefined"!==n&&"null"!==n&&pe(n);else if("message-complete"===e)d(!1);else if("message"===e){if(!n||!n.id)return;if(console.log("[Vemly SDK] Received message event:",n),"undefined"===("string"==typeof n.content?n.content.trim():n.content)||!n.content)return void console.warn("[Vemly SDK] Ignored 'undefined' message content:",n);a(e=>{if(e.some(e=>e.id===n.id))return e;if("user"===n.role){let t=e.findIndex(e=>e.id.startsWith("user_")&&e.content===n.content);if(-1!==t){let i=[...e],r=n.content&&"undefined"!==n.content.trim()?n.content:i[t].content;return i[t]={id:n.id,role:n.role,content:r,createdAt:n.createdAt,agentName:void 0},i}}return d(!1),[...e,{id:n.id,role:n.role,content:n.content,createdAt:n.createdAt,agentName:n.agentName||("assistant"===n.role?$:void 0),agentAvatar:n.agentAvatar}]}),d(!1)}else if("human-takeover"===e){let e=n.isHumanTakeover;p(e),e?(d(!1),n.userName&&b(n.userName),n.agentAvatar&&w(n.agentAvatar),a(e=>{if(e.some(e=>"system-takeover"===e.id))return e;let t=n.userName||"a team member";return[...e,{id:"system-takeover",role:"system",content:`You're now connected with ${t}.`,createdAt:(new Date).toISOString()}]})):(b(null),w(null))}else"support-typing"===e?n.isTyping?(d(!0),n.userName&&b(n.userName),n.agentAvatar&&w(n.agentAvatar)):d(!1):"thinking-start"===e||"typing-start"===e?U&&d(!0):"conversation-closed"===e&&(y(!0),d(!1),a(e=>e.some(e=>"system-closed"===e.id)?e:[...e,{id:"system-closed",role:"system",content:"This conversation has been closed. Thank you for reaching out!",createdAt:(new Date).toISOString()}]))})},oe=()=>{e.sessionId=null,_(A.defaultAgentName||null),a([]),y(!1),p(!1),b(null),w(null),r("chat")},ae=async()=>{if(!c.trim())return;let n="user_"+Date.now(),t={id:n,role:"user",content:c,createdAt:(new Date).toISOString()};a(e=>[...e,t]),u(""),f||d(!0);try{let i=await e.sendMessage(t.content);i.isHumanTakeover&&(p(!0),d(!1),_("Support Team"),a(e=>e.some(e=>"system-takeover"===e.id)?e:[...e,{id:"system-takeover",role:"system",content:"A team member will be with you shortly.",createdAt:(new Date).toISOString()}])),i.message?.message?.id&&a(e=>e.map(e=>e.id===n?{...e,id:i.message.message.id}:e)),i.agentName&&!i.isHumanTakeover&&_(i.agentName),se()}catch(e){console.error("Vemly Send Error:",e),d(!1)}},pe=e=>{!e||"undefined"===e||"null"===e||a(n=>{let t=n[n.length-1];if(t&&"assistant"===t.role){let i=t.content||"";return[...n.slice(0,-1),{...t,content:i+e}]}return[...n,{id:"bot_"+Date.now(),role:"assistant",content:e,createdAt:(new Date).toISOString(),agentName:S.current||void 0}]})},me="dark"===M,ye="glass"===M,ge={"--vemly-primary":C,"--vemly-primary-hover":C,"--vemly-radius":`${I}px`,"--vemly-header-text":O,"--vemly-user-text":K,"--vemly-bg":me?"#1f2937":ye?"rgba(255, 255, 255, 0.8)":"#ffffff","--vemly-surface":me?"#111827":ye?"rgba(249, 250, 251, 0.5)":"#f9fafb","--vemly-text":me?"#f9fafb":"#111827","--vemly-text-secondary":me?"#9ca3af":"#6b7280","--vemly-text-muted":me?"#6b7280":"#9ca3af","--vemly-border":me?"#374151":"#e5e7eb","--vemly-user-bg":"#111827","--vemly-ai-bg":me?"#374151":"#ffffff"},ve=ye?{backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)"}:{},be=A.title||"Vemly",xe=A.titleAlignment||"left";return ne&&H&&Q&&H?Fe("div",{className:"vemly-widget-container",style:ge,"data-position":j,children:[Fe("div",{className:"vemly-window "+(n?"open":""),style:ve,children:[Fe("div",{className:"vemly-header",style:{color:O},children:[Fe("div",{className:"vemly-header-top",children:[Fe("div",{className:"vemly-brand",children:"chat"===i&&Fe("button",{className:"vemly-back-btn",onClick:()=>{y(!1),r("home"),le()},children:Fe(ue,{size:20})})}),Fe("button",{className:"vemly-close",onClick:re,style:{color:O},children:Fe(fe,{size:20})})]}),Fe("div",{className:"vemly-header-content",style:{textAlign:xe},children:[Fe("h3",{children:be}),Fe("p",{style:{opacity:.9},children:"home"===i?A.greeting||"We're here to help":"Ask us anything"})]}),Fe("div",{className:"vemly-status",style:{justifyContent:"center"===xe?"center":"flex-start"},children:[Fe("span",{className:"vemly-status-dot"}),Fe("span",{style:{opacity:.9},children:"We typically reply instantly"})]})]}),Fe("div","home"===i?{className:"vemly-home",children:Fe("div",{className:"vemly-home-content",children:[Fe("button",{onClick:oe,className:"vemly-start-btn",style:{backgroundColor:me?"#374151":"#111827",color:"#ffffff"},children:[Fe(he,{size:18}),Fe("span",{children:"Start a conversation"})]}),l.length>0&&Fe(v,{children:[Fe("div",{className:"vemly-section-title",children:"Recent conversations"}),Fe("div",{className:"vemly-session-list",children:l.slice(0,5).map(n=>Fe("div",{onClick:()=>(async(n,t)=>{e.sessionId=n,_(t||null),r("chat"),a([]);try{let i=await fetch(`${e.apiUrl}/chat/session/${n}`,{headers:{"x-vemly-api-key":e.apiKey,"Content-Type":"application/json"}});if(i.ok){let e=await i.json(),n=!!e.session?.isHumanTakeover;n&&p(!0);let r=n?"Support Team":e.agent?.name||t;if(r&&_(r),e.session?.closedAt&&y(!0),e.messages){let n=e.messages.map(e=>({...e,agentName:e.agentName||("assistant"===e.role?r:void 0),agentAvatar:e.agentAvatar}));a(n)}}se()}catch(e){console.error("Failed to load conversation history:",e)}})(n.id,n.agentName),className:"vemly-session-item",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[Fe("div",{className:"vemly-session-title",style:{color:me?"#fff":"#111827"},children:n.title||"New Conversation"}),Fe("div",{className:"vemly-session-date",children:new Date(n.createdAt||Date.now()).toLocaleDateString()})]},n.id))})]}),0===l.length&&Fe("div",{className:"vemly-empty",children:"No previous conversations"})]})}:{className:"vemly-messages",style:{backgroundColor:me?"#1f2937":"glass"===M?"transparent":"#f9fafb"},children:[o.map((e,n)=>Fe("div",{className:`vemly-message-group ${e.role}`,children:"system"===e.role?Fe("div",{className:"vemly-message-content",children:Fe("p",{children:e.content})}):Fe(v,{children:[("assistant"===e.role||"tool"===e.role)&&Fe("div",{className:"vemly-sender",children:[e.agentAvatar?Fe("img",{src:e.agentAvatar,alt:e.agentName||"Bot",className:"vemly-sender-avatar-img"}):Fe("div",{className:"vemly-sender-avatar",children:(e.agentName||$||"Bot").substring(0,2).toUpperCase()}),Fe("div",{className:"vemly-sender-name",style:{color:me?"#e5e7eb":"#111827"},children:(()=>{let n=e.agentName||$||"Bot";return"undefined"!==n&&n?n:"Bot"})()})]}),Fe("div",{className:"vemly-message-content",children:Fe("div",{dangerouslySetInnerHTML:{M:Re.parse(e.content&&"undefined"!==e.content.trim()?e.content:"")}})})]})},e.id||n)),h&&(()=>{let e=f&&g?g:$&&"undefined"!==$?$:"Vemly";return Fe("div",{className:"vemly-message-group assistant",children:[Fe("div",{className:"vemly-sender",children:[f&&x?Fe("img",{src:x,alt:e,className:"vemly-sender-avatar-img"}):Fe("div",{className:"vemly-sender-avatar",children:e.substring(0,2).toUpperCase()}),Fe("div",{className:"vemly-sender-name",children:e})]}),Fe("div",{className:"vemly-typing",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[Fe("div",{className:"vemly-dot"}),Fe("div",{className:"vemly-dot"}),Fe("div",{className:"vemly-dot"})]})]})})(),Fe("div",{ref:k})]}),"chat"===i&&Fe("div",{className:"vemly-input-container",style:{backgroundColor:me?"#1f2937":"#ffffff",borderColor:me?"#374151":"#e5e7eb",opacity:m?.7:1},children:[Fe("div",m?{style:{padding:"12px 16px",textAlign:"center"},children:[Fe("p",{style:{fontSize:"13px",color:me?"#9ca3af":"#6b7280",marginBottom:"12px"},children:"This conversation is closed."}),Fe("button",{onClick:oe,style:{display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 16px",backgroundColor:C,color:"#ffffff",border:"none",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:[Fe(he,{size:16}),"Start New Conversation"]})]}:{className:"vemly-input-wrapper",style:{backgroundColor:me?"#111827":"#f9fafb",borderColor:me?"#374151":"#e5e7eb"},children:[Fe("textarea",{className:"vemly-input",placeholder:"Send a message...",value:c,onInput:n=>{let t=n.target.value;if(u(t),e.sessionId){let n=Date.now();n-N.current>1500&&(e.sendTyping(!0),N.current=n),z.current&&clearTimeout(z.current),z.current=setTimeout(()=>{e.sendTyping(!1),z.current=null,N.current=0},3e3)}},onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ae())},rows:1,style:{color:me?"#f3f4f6":"#111827"}}),Fe("button",{className:"vemly-send",onClick:ae,disabled:!c.trim()||h,children:Fe(de,{size:16})})]}),L&&Fe("div",{className:"vemly-branding",children:["Powered by ",Fe("a",{href:"https://usevemly.com",target:"_blank",rel:"noopener",children:"Vemly"})]})]})]}),Fe("button",{className:"vemly-bubble",onClick:re,children:Fe(n?fe:"bot"===P?ce:he,{size:24})})]}):null}var He=class{apiUrl;tenantId;agentId;apiKey;deviceId;sessionId=null;sseSource=null;sseController=null;constructor(e){this.apiUrl=e.apiUrl||"https://api.usevemly.com",this.tenantId=e.tenantId,this.agentId=e.agentId,this.apiKey=e.apiKey,this.deviceId=this.getOrCreateDeviceId()}getOrCreateDeviceId(){if(typeof window>"u")return"server";let e=localStorage.getItem("vemly_device_id");return e||(e="dev_"+Math.random().toString(36).substring(2,15),localStorage.setItem("vemly_device_id",e)),e}async createSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session`,{method:"POST",headers:e,body:JSON.stringify({...this.tenantId?{tenantId:this.tenantId}:{},agentId:this.agentId,deviceId:this.deviceId})});if(!n.ok)throw new Error("Failed to create session");let t=await n.json();return this.sessionId=t.session?.id||t.id,{session:t.session||t,agentName:t.agent?.name}}async resumeSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session/resume`,{method:"POST",headers:e,body:JSON.stringify({tenantId:this.tenantId,deviceId:this.deviceId})});if(!n.ok)return null;let t=await n.json();return this.sessionId=t.session?.id||null,t.session}async getHistory(e=20){let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey);let t={deviceId:this.deviceId,limit:e.toString()};this.tenantId&&(t.tenantId=this.tenantId);let i=new URLSearchParams(t),r=await fetch(`${this.apiUrl}/chat/sessions/device?${i.toString()}`,{method:"GET",headers:n});return r.ok&&(await r.json()).sessions||[]}async getWidgetConfig(){try{let e=`${this.apiUrl}/chat/config`;this.tenantId&&(e+=`/${this.tenantId}`);let n={};return this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await(await fetch(e,{method:"GET",headers:n})).json()||{}}catch(e){return console.error("Failed to fetch widget config",e),{}}}async sendMessage(e,n){let t,i;if(!this.sessionId){let e=await this.createSession();t=e.agentName,i=e.session.isHumanTakeover}let r={"Content-Type":"application/json"};this.apiKey&&(r["x-vemly-api-key"]=this.apiKey);let l=await fetch(`${this.apiUrl}/chat/message`,{method:"POST",headers:r,body:JSON.stringify({sessionId:this.sessionId,content:e,role:"user"})});if(!l.ok)throw new Error("Failed to send message");return{message:await l.json(),agentName:t,isHumanTakeover:i}}async sendTyping(e){if(!this.sessionId)return;let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await fetch(`${this.apiUrl}/chat/typing`,{method:"POST",headers:n,body:JSON.stringify({sessionId:this.sessionId,isTyping:e})})}connectStream(e){if(!this.sessionId)return;this.sseController&&this.sseController.abort(),this.sseController=new AbortController;let n=`${this.apiUrl}/chat/stream/${this.sessionId}`,t={"Content-Type":"application/json"};this.apiKey&&(t["x-vemly-api-key"]=this.apiKey),fetch(n,{method:"GET",headers:t,signal:this.sseController.signal}).then(async n=>{if(!n.ok||!n.body)throw new Error(`SSE Error: ${n.status}`);let t=n.body.getReader(),i=new TextDecoder,r="";for(;;){let{value:n,done:l}=await t.read();if(l)break;r+=i.decode(n,{stream:!0});let s=r.split("\n\n");r=s.pop()||"";for(let n of s){if(!n.trim())continue;let t=n.split("\n"),i="message",r=null;for(let e of t)if(e.startsWith("event: "))i=e.substring(7).trim();else if(e.startsWith("data: ")){let n=e.substring(6).trim();if(console.log("[Vemly SDK] SSE raw line:",e,"| rawData:",n),!n||"undefined"===n||"null"===n){console.warn("[Vemly SDK] Skipping empty/undefined rawData");continue}try{r=JSON.parse(n),console.log("[Vemly SDK] Parsed SSE data:",JSON.stringify(r),"| type:",typeof r)}catch{r=n,console.log("[Vemly SDK] SSE data as string:",r)}}null!=r&&(console.log("[Vemly SDK] Calling onData with event:",i,"data:",JSON.stringify(r)),e(i,r))}}}).catch(e=>{"AbortError"!==e.name&&console.error("Stream Error:",e)})}disconnectStream(){this.sseSource?.close(),this.sseSource=null,this.sseController?.abort(),this.sseController=null}getSessionId(){return this.sessionId}},Je=new class{client=null;container=null;shadowRoot=null;init(e){if(this.client)console.warn("[VemlySDK] Already initialized");else if(e.apiKey)try{console.log("[VemlySDK] Initializing with API key..."),this.client=new He(e),this.createContainer(),this.render(),console.log("[VemlySDK] Initialization complete")}catch(e){console.error("[VemlySDK] Initialization failed:",e)}else console.error("[VemlySDK] apiKey is required")}createContainer(){let e=document.getElementById("vemly-sdk-root");e&&e.remove(),this.container=document.createElement("div"),this.container.id="vemly-sdk-root",document.body.appendChild(this.container),this.shadowRoot=this.container.attachShadow({mode:"open"});let n=document.createElement("style");n.textContent='\n@import url(\'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\');\n\n:host {\n --vemly-primary: #5046e5;\n --vemly-primary-hover: #4338ca;\n --vemly-bg: #ffffff;\n --vemly-surface: #f9fafb;\n --vemly-text: #111827;\n --vemly-text-secondary: #6b7280;\n --vemly-text-muted: #9ca3af;\n --vemly-border: #e5e7eb;\n --vemly-user-bg: #111827;\n --vemly-ai-bg: #ffffff;\n --vemly-radius: 16px;\n --vemly-font: \'Inter\', -apple-system, BlinkMacSystemFont, \'Segoe UI\', sans-serif;\n}\n\n.vemly-widget-container {\n position: fixed;\n bottom: 20px;\n z-index: 2147483647;\n font-family: var(--vemly-font);\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.vemly-widget-container[data-position="right"] {\n right: 20px;\n left: auto;\n align-items: flex-end;\n}\n\n.vemly-widget-container[data-position="left"] {\n left: 20px;\n right: auto;\n align-items: flex-start;\n}\n\n.vemly-widget-container * {\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n/* Launcher */\n.vemly-bubble {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16);\n transition: all 0.2s ease;\n border: none;\n outline: none;\n}\n\n.vemly-bubble:hover {\n background: var(--vemly-primary-hover);\n transform: scale(1.05);\n}\n\n.vemly-bubble:active {\n transform: scale(0.95);\n}\n\n/* Window */\n.vemly-window {\n width: 380px;\n height: 600px;\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 40px);\n background: var(--vemly-bg);\n border-radius: var(--vemly-radius);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom right;\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n transition: all 0.2s ease;\n visibility: hidden;\n}\n\n.vemly-window.open {\n opacity: 1;\n transform: scale(1) translateY(0);\n visibility: visible;\n}\n\n/* Header */\n.vemly-header {\n background: var(--vemly-primary);\n color: white;\n padding: 20px;\n flex-shrink: 0;\n}\n\n.vemly-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.vemly-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.vemly-back-btn {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-back-btn:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-close {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-close:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-header-content {\n margin-top: 16px;\n}\n\n.vemly-header-content h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.vemly-header-content p {\n margin: 4px 0 0;\n font-size: 14px;\n opacity: 0.85;\n}\n\n.vemly-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 12px;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.vemly-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n}\n\n/* Messages Area */\n.vemly-messages {\n flex: 1;\n background: var(--vemly-surface);\n padding: 16px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.vemly-message-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 85%;\n animation: vemly-fade-in 0.25s ease-out;\n}\n\n@keyframes vemly-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.vemly-message-group.assistant {\n align-self: flex-start;\n}\n\n.vemly-message-group.user {\n align-self: flex-end;\n}\n\n.vemly-sender {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.vemly-sender-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vemly-sender-avatar-img {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.vemly-sender-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--vemly-text);\n}\n\n.vemly-message-content {\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.vemly-message-group.assistant .vemly-message-content {\n background: white;\n color: var(--vemly-text);\n border: 1px solid var(--vemly-border);\n border-top-left-radius: 4px;\n}\n\n.vemly-message-group.user .vemly-message-content {\n background: var(--vemly-user-bg);\n color: white;\n border-top-right-radius: 4px;\n}\n\n.vemly-message-content p { margin: 0 0 8px; }\n.vemly-message-content p:last-child { margin: 0; }\n.vemly-message-content a { color: inherit; text-decoration: underline; }\n.vemly-message-content code {\n background: rgba(0,0,0,0.06);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n.vemly-message-group.user .vemly-message-content code {\n background: rgba(255,255,255,0.15);\n}\n\n/* Home View */\n.vemly-home {\n flex: 1;\n background: var(--vemly-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.vemly-home-content {\n padding: 16px;\n}\n\n.vemly-start-btn {\n width: 100%;\n padding: 14px 16px;\n background: var(--vemly-text);\n color: white;\n border: none;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.15s;\n}\n\n.vemly-start-btn:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n}\n\n.vemly-section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--vemly-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 20px 0 12px;\n}\n\n.vemly-session-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.vemly-session-item {\n padding: 12px 14px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.vemly-session-item:hover {\n border-color: var(--vemly-text-muted);\n background: #fafafa;\n}\n\n.vemly-session-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--vemly-text);\n margin-bottom: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vemly-session-date {\n font-size: 12px;\n color: var(--vemly-text-muted);\n}\n\n.vemly-empty {\n text-align: center;\n padding: 24px;\n color: var(--vemly-text-muted);\n font-size: 14px;\n}\n\n/* Input */\n.vemly-input-container {\n padding: 12px 16px 16px;\n background: white;\n border-top: 1px solid var(--vemly-border);\n}\n\n.vemly-input-wrapper {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n background: var(--vemly-surface);\n border: 1px solid var(--vemly-border);\n border-radius: 12px;\n padding: 8px 8px 8px 14px;\n transition: all 0.15s;\n}\n\n.vemly-input-wrapper:focus-within {\n border-color: var(--vemly-primary);\n box-shadow: 0 0 0 3px rgba(80, 70, 229, 0.1);\n}\n\n.vemly-input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 16px; /* 16px prevents iOS zoom on focus */\n color: var(--vemly-text);\n max-height: 100px;\n resize: none;\n font-family: inherit;\n padding: 4px 0;\n line-height: 1.4;\n -webkit-appearance: none; /* Remove iOS styling */\n appearance: none;\n}\n\n.vemly-input::placeholder {\n color: var(--vemly-text-muted);\n}\n\n.vemly-send {\n background: var(--vemly-primary);\n color: white;\n border: none;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n}\n\n.vemly-send:hover:not(:disabled) {\n background: var(--vemly-primary-hover);\n}\n\n.vemly-send:disabled {\n background: var(--vemly-border);\n color: var(--vemly-text-muted);\n cursor: default;\n}\n\n.vemly-branding {\n font-size: 11px;\n text-align: center;\n color: var(--vemly-text-muted);\n margin-top: 8px;\n}\n\n.vemly-branding a {\n color: var(--vemly-text-secondary);\n text-decoration: none;\n font-weight: 500;\n}\n\n/* Typing */\n.vemly-typing {\n display: flex;\n gap: 4px;\n padding: 14px 16px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n}\n\n.vemly-dot {\n width: 6px;\n height: 6px;\n background: var(--vemly-text-muted);\n border-radius: 50%;\n animation: vemly-bounce 1.4s infinite ease-in-out;\n}\n\n.vemly-dot:nth-child(1) { animation-delay: -0.32s; }\n.vemly-dot:nth-child(2) { animation-delay: -0.16s; }\n\n@keyframes vemly-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* Mobile Optimizations */\n@media (max-width: 480px) {\n .vemly-widget-container,\n .vemly-widget-container[data-position="right"],\n .vemly-widget-container[data-position="left"] {\n bottom: 0;\n right: 0;\n left: 0;\n padding: 0;\n gap: 0;\n align-items: stretch;\n }\n \n .vemly-window {\n width: 100%;\n height: 100dvh; /* Dynamic viewport height for mobile browsers */\n height: 100vh; /* Fallback for older browsers */\n max-width: none;\n max-height: none;\n border-radius: 0;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n /* Support for iOS safe areas */\n @supports (padding: env(safe-area-inset-top)) {\n .vemly-header {\n padding-top: calc(20px + env(safe-area-inset-top));\n }\n \n .vemly-input-container {\n padding-bottom: calc(16px + env(safe-area-inset-bottom));\n }\n }\n \n .vemly-bubble {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483648;\n }\n \n /* Hide bubble when window is open on mobile */\n .vemly-window.open ~ .vemly-bubble {\n display: none;\n }\n \n /* Larger touch targets for mobile */\n .vemly-close,\n .vemly-back-btn {\n min-width: 44px;\n min-height: 44px;\n padding: 10px;\n }\n \n .vemly-session-item {\n padding: 14px 16px;\n min-height: 44px;\n }\n \n .vemly-start-btn {\n min-height: 48px;\n font-size: 15px;\n }\n \n /* Prevent body scroll when widget is open */\n .vemly-window.open {\n overscroll-behavior: contain;\n }\n \n .vemly-messages {\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n \n /* Input area adjustments for mobile */\n .vemly-input-wrapper {\n padding: 10px 10px 10px 16px;\n }\n \n .vemly-send {\n width: 40px;\n height: 40px;\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 481px) and (max-width: 768px) {\n .vemly-window {\n width: 380px;\n max-height: calc(100dvh - 100px);\n max-height: calc(100vh - 100px); /* Fallback */\n }\n}\n\n/* Touch optimizations for all touch devices */\n@media (pointer: coarse) {\n .vemly-bubble,\n .vemly-close,\n .vemly-back-btn,\n .vemly-send,\n .vemly-session-item,\n .vemly-start-btn {\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n}\n',this.shadowRoot.appendChild(n)}render(){if(!this.shadowRoot||!this.client)return;let t=document.createElement("div");this.shadowRoot.appendChild(t),function(t,i){var r,l,s;n.h&&n.h(t,i),r=i.o,l=[],s=[],D(i,t=i.o=y(v,null,[t]),r||u,u,i.namespaceURI,r?null:i.firstChild?e.call(i.childNodes):null,l,r?r.m:i.firstChild,!1,s),I(l,t,s)}(y(Be,{client:this.client}),t)}};typeof window<"u"&&(window.Vemly=Je)}();
1
+ !function(){var e,n,t,i,r,l,s,o,a,c,u={},h=[],d=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=Array.isArray;function p(e,n){for(var t in n)e[t]=n[t];return e}function m(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function y(n,t,i){var r,l,s,o={};for(s in t)"key"==s?r=t[s]:"ref"==s?l=t[s]:o[s]=t[s];if(arguments.length>2&&(o.children=arguments.length>3?e.call(arguments,2):i),"function"==typeof n&&null!=n.defaultProps)for(s in n.defaultProps)void 0===o[s]&&(o[s]=n.defaultProps[s]);return g(n,o,r,l,null)}function g(e,i,r,l,s){var o={type:e,props:i,key:r,ref:l,o:null,h:null,p:0,m:null,v:void 0,k:null,constructor:void 0,$:s??++t,_:-1,S:0};return null==s&&null!=n.vnode&&n.vnode(o),o}function v(e){return e.children}function b(e,n){this.props=e,this.context=n}function x(e,n){if(null==n)return e.h?x(e.h,e._+1):null;for(var t;n<e.o.length;n++)if(null!=(t=e.o[n])&&null!=t.m)return t.m;return"function"==typeof e.type?x(e):null}function w(e){var n,t;if(null!=(e=e.h)&&null!=e.k){for(e.m=e.k.base=null,n=0;n<e.o.length;n++)if(null!=(t=e.o[n])&&null!=t.m){e.m=e.k.base=t.m;break}return w(e)}}function k(e){(!e.v&&(e.v=!0)&&i.push(e)&&!$.N++||r!==n.debounceRendering)&&((r=n.debounceRendering)||l)($)}function $(){var e,t,r,l,o,a,c,u;for(i.sort(s);e=i.shift();)e.v&&(t=i.length,l=void 0,a=(o=(r=e).$).m,c=[],u=[],r.A&&((l=p({},o)).$=o.$+1,n.vnode&&n.vnode(l),C(r.A,l,o,r.T,r.A.namespaceURI,32&o.S?[a]:null,c,a??x(o),!!(32&o.S),u),l.$=o.$,l.h.o[l._]=l,I(c,l,u),l.m!=a&&w(l)),i.length>t&&i.sort(s));$.N=0}function _(e,n,t,i,r,l,s,o,a,c,d){var p,m,y,b,w,k=i&&i.o||h,$=n.length;for(t.v=a,function(e,n,t){var i,r,l,s,o,a=n.length,c=t.length,u=c,h=0;for(e.o=[],i=0;i<a;i++)null!=(r=n[i])&&"boolean"!=typeof r&&"function"!=typeof r?(s=i+h,(r=e.o[i]="string"==typeof r||"number"==typeof r||"bigint"==typeof r||r.constructor==String?g(null,r,null,null,null):f(r)?g(v,{children:r},null,null,null):void 0===r.constructor&&r.p>0?g(r.type,r.props,r.key,r.ref?r.ref:null,r.$):r).h=e,r.p=e.p+1,l=null,-1!==(o=r._=N(r,t,s,u))&&(u--,(l=t[o])&&(l.S|=131072)),null==l||null===l.$?(-1==o&&h--,"function"!=typeof r.type&&(r.S|=65536)):o!==s&&(o==s-1?h--:o==s+1?h++:(o>s?h--:h++,r.S|=65536))):r=e.o[i]=null;if(u)for(i=0;i<c;i++)null!=(l=t[i])&&!(131072&l.S)&&(l.m==e.v&&(e.v=x(l)),V(l,l))}(t,n,k),a=t.v,p=0;p<$;p++)null!=(y=t.o[p])&&(m=-1===y._?u:k[y._]||u,y._=p,C(e,y,m,r,l,s,o,a,c,d),b=y.m,y.ref&&m.ref!=y.ref&&(m.ref&&E(m.ref,null,y),d.push(y.ref,y.k||b,y)),null==w&&null!=b&&(w=b),65536&y.S||m.o===y.o?a=S(y,a,e):"function"==typeof y.type&&void 0!==y.v?a=y.v:b&&(a=b.nextSibling),y.v=void 0,y.S&=-196609);t.v=a,t.m=w}function S(e,n,t){var i,r;if("function"==typeof e.type){for(i=e.o,r=0;i&&r<i.length;r++)i[r]&&(i[r].h=e,n=S(i[r],n,t));return n}e.m!=n&&(n&&e.type&&!t.contains(n)&&(n=x(e)),t.insertBefore(e.m,n||null),n=e.m);do{n=n&&n.nextSibling}while(null!=n&&8===n.nodeType);return n}function z(e,n){return n=n||[],null==e||"boolean"==typeof e||(f(e)?e.some(function(e){z(e,n)}):n.push(e)),n}function N(e,n,t,i){var r=e.key,l=e.type,s=t-1,o=t+1,a=n[t];if(null===a||a&&r==a.key&&l===a.type&&!(131072&a.S))return t;if(i>(null==a||131072&a.S?0:1))for(;s>=0||o<n.length;){if(s>=0){if((a=n[s])&&!(131072&a.S)&&r==a.key&&l===a.type)return s;s--}if(o<n.length){if((a=n[o])&&!(131072&a.S)&&r==a.key&&l===a.type)return o;o++}}return-1}function A(e,n,t){"-"===n[0]?e.setProperty(n,t??""):e[n]=null==t?"":"number"!=typeof t||d.test(n)?t:t+"px"}function T(e,n,t,i,r){var l;e:if("style"===n)if("string"==typeof t)e.style.cssText=t;else{if("string"==typeof i&&(e.style.cssText=i=""),i)for(n in i)t&&n in t||A(e.style,n,"");if(t)for(n in t)i&&t[n]===i[n]||A(e.style,n,t[n])}else if("o"===n[0]&&"n"===n[1])l=n!==(n=n.replace(/(PointerCapture)$|Capture$/i,"$1")),n=n.toLowerCase()in e||"onFocusOut"===n||"onFocusIn"===n?n.toLowerCase().slice(2):n.slice(2),e.l||(e.l={}),e.l[n+l]=t,t?i?t.u=i.u:(t.u=o,e.addEventListener(n,l?c:a,l)):e.removeEventListener(n,l?c:a,l);else{if("http://www.w3.org/2000/svg"==r)n=n.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=n&&"height"!=n&&"href"!=n&&"list"!=n&&"form"!=n&&"tabIndex"!=n&&"download"!=n&&"rowSpan"!=n&&"colSpan"!=n&&"role"!=n&&"popover"!=n&&n in e)try{e[n]=t??"";break e}catch{}"function"==typeof t||(null==t||!1===t&&"-"!==n[4]?e.removeAttribute(n):e.setAttribute(n,"popover"==n&&1==t?"":t))}}function D(e){return function(t){if(this.l){var i=this.l[t.type+e];if(null==t.t)t.t=o++;else if(t.t<i.u)return;return i(n.event?n.event(t):t)}}}function C(t,i,r,l,s,o,a,c,h,d){var y,g,w,k,$,S,z,N,A,D,C,I,E,V,M,O,j=i.type;if(void 0!==i.constructor)return null;128&r.S&&(h=!!(32&r.S),o=[c=i.m=r.m]),(y=n.p)&&y(i);e:if("function"==typeof j)try{if(N=i.props,A="prototype"in j&&j.prototype.render,D=(y=j.contextType)&&l[y.k],C=y?D?D.props.value:y.h:l,r.k?z=(g=i.k=r.k).h=g.D:(A?i.k=g=new j(N,C):(i.k=g=new b(N,C),g.constructor=j,g.render=K),D&&D.sub(g),g.props=N,g.state||(g.state={}),g.context=C,g.T=l,w=g.v=!0,g.C=[],g.I=[]),A&&null==g.V&&(g.V=g.state),A&&null!=j.getDerivedStateFromProps&&(g.V==g.state&&(g.V=p({},g.V)),p(g.V,j.getDerivedStateFromProps(N,g.V))),k=g.props,$=g.state,g.$=i,w)A&&null==j.getDerivedStateFromProps&&null!=g.componentWillMount&&g.componentWillMount(),A&&null!=g.componentDidMount&&g.C.push(g.componentDidMount);else{if(A&&null==j.getDerivedStateFromProps&&N!==k&&null!=g.componentWillReceiveProps&&g.componentWillReceiveProps(N,C),!g.m&&(null!=g.shouldComponentUpdate&&!1===g.shouldComponentUpdate(N,g.V,C)||i.$===r.$)){for(i.$!==r.$&&(g.props=N,g.state=g.V,g.v=!1),i.m=r.m,i.o=r.o,i.o.some(function(e){e&&(e.h=i)}),I=0;I<g.I.length;I++)g.C.push(g.I[I]);g.I=[],g.C.length&&a.push(g);break e}null!=g.componentWillUpdate&&g.componentWillUpdate(N,g.V,C),A&&null!=g.componentDidUpdate&&g.C.push(function(){g.componentDidUpdate(k,$,S)})}if(g.context=C,g.props=N,g.A=t,g.m=!1,E=n.N,V=0,A){for(g.state=g.V,g.v=!1,E&&E(i),y=g.render(g.props,g.state,g.context),M=0;M<g.I.length;M++)g.C.push(g.I[M]);g.I=[]}else do{g.v=!1,E&&E(i),y=g.render(g.props,g.state,g.context),g.state=g.V}while(g.v&&++V<25);g.state=g.V,null!=g.getChildContext&&(l=p(p({},l),g.getChildContext())),A&&!w&&null!=g.getSnapshotBeforeUpdate&&(S=g.getSnapshotBeforeUpdate(k,$)),_(t,f(O=null!=y&&y.type===v&&null==y.key?y.props.children:y)?O:[O],i,r,l,s,o,a,c,h,d),g.base=i.m,i.S&=-161,g.C.length&&a.push(g),z&&(g.D=g.h=null)}catch(e){if(i.$=null,h||null!=o){for(i.S|=h?160:128;c&&8===c.nodeType&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,i.m=c}else i.m=r.m,i.o=r.o;n.m(e,i,r)}else null==o&&i.$===r.$?(i.o=r.o,i.m=r.m):i.m=function(t,i,r,l,s,o,a,c,h){var d,p,y,g,v,b,w,k=r.props,$=i.props,S=i.type;if("svg"===S?s="http://www.w3.org/2000/svg":"math"===S?s="http://www.w3.org/1998/Math/MathML":s||(s="http://www.w3.org/1999/xhtml"),null!=o)for(d=0;d<o.length;d++)if((v=o[d])&&"setAttribute"in v==!!S&&(S?v.localName===S:3===v.nodeType)){t=v,o[d]=null;break}if(null==t){if(null===S)return document.createTextNode($);t=document.createElementNS(s,S,$.is&&$),c&&(n.K&&n.K(i,o),c=!1),o=null}if(null===S)k===$||c&&t.data===$||(t.data=$);else{if(o=o&&e.call(t.childNodes),k=r.props||u,!c&&null!=o)for(k={},d=0;d<t.attributes.length;d++)k[(v=t.attributes[d]).name]=v.value;for(d in k)if(v=k[d],"children"!=d)if("dangerouslySetInnerHTML"==d)y=v;else if(!(d in $)){if("value"==d&&"defaultValue"in $||"checked"==d&&"defaultChecked"in $)continue;T(t,d,null,v,s)}for(d in $)v=$[d],"children"==d?g=v:"dangerouslySetInnerHTML"==d?p=v:"value"==d?b=v:"checked"==d?w=v:c&&"function"!=typeof v||k[d]===v||T(t,d,v,k[d],s);if(p)c||y&&(p.M===y.M||p.M===t.innerHTML)||(t.innerHTML=p.M),i.o=[];else if(y&&(t.innerHTML=""),_(t,f(g)?g:[g],i,r,l,"foreignObject"===S?"http://www.w3.org/1999/xhtml":s,o,a,o?o[0]:r.o&&x(r,0),c,h),null!=o)for(d=o.length;d--;)m(o[d]);c||(d="value","progress"===S&&null==b?t.removeAttribute("value"):void 0!==b&&(b!==t[d]||"progress"===S&&!b||"option"===S&&b!==k[d])&&T(t,d,b,k[d],s),d="checked",void 0!==w&&w!==t[d]&&T(t,d,w,k[d],s))}return t}(r.m,i,r,l,s,o,a,h,d);(y=n.diffed)&&y(i)}function I(e,t,i){t.v=void 0;for(var r=0;r<i.length;r++)E(i[r],i[++r],i[++r]);n.k&&n.k(t,e),e.some(function(t){try{e=t.C,t.C=[],e.some(function(e){e.call(t)})}catch(e){n.m(e,t.$)}})}function E(e,t,i){try{if("function"==typeof e){var r="function"==typeof e.S;r&&e.S(),r&&null==t||(e.S=e(t))}else e.current=t}catch(e){n.m(e,i)}}function V(e,t,i){var r,l;if(n.unmount&&n.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.m||E(r,null,t)),null!=(r=e.k)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){n.m(e,t)}r.base=r.A=null}if(r=e.o)for(l=0;l<r.length;l++)r[l]&&V(r[l],t,i||"function"!=typeof e.type);i||m(e.m),e.k=e.h=e.m=e.v=void 0}function K(e,n,t){return this.constructor(e,t)}e=h.slice,n={m:function(e,n,t,i){for(var r,l,s;n=n.h;)if((r=n.k)&&!r.h)try{if((l=r.constructor)&&null!=l.getDerivedStateFromError&&(r.setState(l.getDerivedStateFromError(e)),s=r.v),null!=r.componentDidCatch&&(r.componentDidCatch(e,i||{}),s=r.v),s)return r.D=r}catch(n){e=n}throw e}},t=0,b.prototype.setState=function(e,n){var t;t=null!=this.V&&this.V!==this.state?this.V:this.V=p({},this.state),"function"==typeof e&&(e=e(p({},t),this.props)),e&&p(t,e),null!=e&&this.$&&(n&&this.I.push(n),k(this))},b.prototype.forceUpdate=function(e){this.$&&(this.m=!0,e&&this.C.push(e),k(this))},b.prototype.render=v,i=[],l="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,s=function(e,n){return e.$.p-n.$.p},$.N=0,o=0,a=D(!1),c=D(!0);var M,O,j,Z,q=0,R=[],P=n,F=P.p,L=P.N,B=P.diffed,H=P.k,J=P.unmount,W=P.h;function U(e,n){P.C&&P.C(O,e,q||n),q=0;var t=O.O||(O.O={h:[],C:[]});return e>=t.h.length&&t.h.push({}),t.h[e]}function Y(e){return q=1,function(e,n){var t=U(M++,2);if(t.t=e,!t.k&&(t.h=[le(void 0,n),function(e){var n=t.j?t.j[0]:t.h[0],i=t.t(n,e);n!==i&&(t.j=[i,t.h[1]],t.k.setState({}))}],t.k=O,!O.u)){var i=function(e,n,i){if(!t.k.O)return!0;var l=t.k.O.h.filter(function(e){return!!e.k});if(l.every(function(e){return!e.j}))return!r||r.call(this,e,n,i);var s=!1;return l.forEach(function(e){if(e.j){var n=e.h[0];e.h=e.j,e.j=void 0,n!==e.h[0]&&(s=!0)}}),!(!s&&t.k.props===e)&&(!r||r.call(this,e,n,i))};O.u=!0;var r=O.shouldComponentUpdate,l=O.componentWillUpdate;O.componentWillUpdate=function(e,n,t){if(this.m){var s=r;r=void 0,i(e,n,t),r=s}l&&l.call(this,e,n,t)},O.shouldComponentUpdate=i}return t.j||t.h}(le,e)}function X(e,n){var t=U(M++,3);!P.V&&re(t.O,n)&&(t.h=e,t.i=n,O.O.C.push(t))}function G(e){return q=5,function(e,n){var t=U(M++,7);return re(t.O,n)&&(t.h=e(),t.O=n,t.C=e),t.h}(function(){return{current:e}},[])}function Q(){for(var e;e=R.shift();)if(e.A&&e.O)try{e.O.C.forEach(te),e.O.C.forEach(ie),e.O.C=[]}catch(n){e.O.C=[],P.m(n,e.$)}}P.p=function(e){O=null,F&&F(e)},P.h=function(e,n){e&&n.o&&n.o.K&&(e.K=n.o.K),W&&W(e,n)},P.N=function(e){L&&L(e),M=0;var n=(O=e.k).O;n&&(j===O?(n.C=[],O.C=[],n.h.forEach(function(e){e.j&&(e.h=e.j),e.i=e.j=void 0})):(n.C.forEach(te),n.C.forEach(ie),n.C=[],M=0)),j=O},P.diffed=function(e){B&&B(e);var n=e.k;n&&n.O&&(n.O.C.length&&(1!==R.push(n)&&Z===P.requestAnimationFrame||((Z=P.requestAnimationFrame)||ne)(Q)),n.O.h.forEach(function(e){e.i&&(e.O=e.i),e.i=void 0})),j=O=null},P.k=function(e,n){n.some(function(e){try{e.C.forEach(te),e.C=e.C.filter(function(e){return!e.h||ie(e)})}catch(t){n.some(function(e){e.C&&(e.C=[])}),n=[],P.m(t,e.$)}}),H&&H(e,n)},P.unmount=function(e){J&&J(e);var n,t=e.k;t&&t.O&&(t.O.h.forEach(function(e){try{te(e)}catch(e){n=e}}),t.O=void 0,n&&P.m(n,t.$))};var ee="function"==typeof requestAnimationFrame;function ne(e){var n,t=function(){clearTimeout(i),ee&&cancelAnimationFrame(n),setTimeout(e)},i=setTimeout(t,100);ee&&(n=requestAnimationFrame(t))}function te(e){var n=O,t=e.k;"function"==typeof t&&(e.k=void 0,t()),O=n}function ie(e){var n=O;e.k=e.h(),O=n}function re(e,n){return!e||e.length!==n.length||n.some(function(n,t){return n!==e[t]})}function le(e,n){return"function"==typeof n?n(e):n}var se={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},oe=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),ae=(e,n)=>{let t=({color:t="currentColor",size:i=24,strokeWidth:r=2,absoluteStrokeWidth:l,children:s,...o})=>y("svg",{...se,width:String(i),height:i,stroke:t,"stroke-width":l?24*Number(r)/Number(i):r,class:`lucide lucide-${oe(e)}`,...o},[...n.map(([e,n])=>y(e,n)),...z(s)]);return t.displayName=`${e}`,t},ce=ae("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),ue=ae("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),he=ae("MessageCircle",[["path",{d:"m3 21 1.9-5.7a8.5 8.5 0 1 1 3.8 3.8z",key:"v2veuj"}]]),de=ae("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]),fe=ae("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);var pe={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function me(e){pe=e}var ye=/[&<>"']/,ge=new RegExp(ye.source,"g"),ve=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,be=new RegExp(ve.source,"g"),xe={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},we=e=>xe[e];function ke(e,n){if(n){if(ye.test(e))return e.replace(ge,we)}else if(ve.test(e))return e.replace(be,we);return e}var $e=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function _e(e){return e.replace($e,(e,n)=>"colon"===(n=n.toLowerCase())?":":"#"===n.charAt(0)?"x"===n.charAt(1)?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1)):"")}var Se=/(^|[^\[])\^/g;function ze(e,n){e="string"==typeof e?e:e.source,n=n||"";let t={replace:(n,i)=>(i=(i="object"==typeof i&&"source"in i?i.source:i).replace(Se,"$1"),e=e.replace(n,i),t),getRegex:()=>new RegExp(e,n)};return t}function Ne(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch{return null}return e}var Ae={exec:()=>null};function Te(e,n){let t=e.replace(/\|/g,(e,n,t)=>{let i=!1,r=n;for(;--r>=0&&"\\"===t[r];)i=!i;return i?"|":" |"}).split(/ \|/),i=0;if(t[0].trim()||t.shift(),t.length>0&&!t[t.length-1].trim()&&t.pop(),n)if(t.length>n)t.splice(n);else for(;t.length<n;)t.push("");for(;i<t.length;i++)t[i]=t[i].trim().replace(/\\\|/g,"|");return t}function De(e,n,t){let i=e.length;if(0===i)return"";let r=0;for(;r<i&&e.charAt(i-r-1)===n;)r++;return e.slice(0,i-r)}function Ce(e,n,t,i){let r=n.href,l=n.title?ke(n.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){i.state.inLink=!0;let e={type:"link",raw:t,href:r,title:l,text:s,tokens:i.inlineTokens(s)};return i.state.inLink=!1,e}return{type:"image",raw:t,href:r,title:l,text:ke(s)}}var Ie=class{options;rules;lexer;constructor(e){this.options=e||pe}space(e){let n=this.rules.block.newline.exec(e);if(n&&n[0].length>0)return{type:"space",raw:n[0]}}code(e){let n=this.rules.block.code.exec(e);if(n){let e=n[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?e:De(e,"\n")}}}fences(e){let n=this.rules.block.fences.exec(e);if(n){let e=n[0],t=function(e,n){let t=e.match(/^(\s+)(?:```)/);if(null===t)return n;let i=t[1];return n.split("\n").map(e=>{let n=e.match(/^\s+/);if(null===n)return e;let[t]=n;return t.length>=i.length?e.slice(i.length):e}).join("\n")}(e,n[3]||"");return{type:"code",raw:e,lang:n[2]?n[2].trim().replace(this.rules.inline.Z,"$1"):n[2],text:t}}}heading(e){let n=this.rules.block.heading.exec(e);if(n){let e=n[2].trim();if(/#$/.test(e)){let n=De(e,"#");(this.options.pedantic||!n||/ $/.test(n))&&(e=n.trim())}return{type:"heading",raw:n[0],depth:n[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let n=this.rules.block.hr.exec(e);if(n)return{type:"hr",raw:n[0]}}blockquote(e){let n=this.rules.block.blockquote.exec(e);if(n){let e=De(n[0].replace(/^ *>[ \t]?/gm,""),"\n"),t=this.lexer.state.top;this.lexer.state.top=!0;let i=this.lexer.blockTokens(e);return this.lexer.state.top=t,{type:"blockquote",raw:n[0],tokens:i,text:e}}}list(e){let n=this.rules.block.list.exec(e);if(n){let t=n[1].trim(),i=t.length>1,r={type:"list",raw:"",ordered:i,start:i?+t.slice(0,-1):"",loose:!1,items:[]};t=i?`\\d{1,9}\\${t.slice(-1)}`:`\\${t}`,this.options.pedantic&&(t=i?t:"[*+-]");let l=new RegExp(`^( {0,3}${t})((?:[\t ][^\\n]*)?(?:\\n|$))`),s="",o="",a=!1;for(;e;){let t=!1;if(!(n=l.exec(e))||this.rules.block.hr.test(e))break;s=n[0],e=e.substring(s.length);let i=n[2].split("\n",1)[0].replace(/^\t+/,e=>" ".repeat(3*e.length)),c=e.split("\n",1)[0],u=0;this.options.pedantic?(u=2,o=i.trimStart()):(u=n[2].search(/[^ ]/),u=u>4?1:u,o=i.slice(u),u+=n[1].length);let h=!1;if(!i&&/^ *$/.test(c)&&(s+=c+"\n",e=e.substring(c.length+1),t=!0),!t){let n=new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),t=new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\`\`\`|~~~)`),l=new RegExp(`^ {0,${Math.min(3,u-1)}}#`);for(;e;){let a=e.split("\n",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),r.test(c)||l.test(c)||n.test(c)||t.test(e))break;if(c.search(/[^ ]/)>=u||!c.trim())o+="\n"+c.slice(u);else{if(h||i.search(/[^ ]/)>=4||r.test(i)||l.test(i)||t.test(i))break;o+="\n"+c}!h&&!c.trim()&&(h=!0),s+=a+"\n",e=e.substring(a.length+1),i=c.slice(u)}}r.loose||(a?r.loose=!0:/\n *\n *$/.test(s)&&(a=!0));let d,f=null;this.options.gfm&&(f=/^\[[ xX]\] /.exec(o),f&&(d="[ ] "!==f[0],o=o.replace(/^\[[ xX]\] +/,""))),r.items.push({type:"list_item",raw:s,task:!!f,checked:d,loose:!1,text:o,tokens:[]}),r.raw+=s}r.items[r.items.length-1].raw=s.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e<r.items.length;e++)if(this.lexer.state.top=!1,r.items[e].tokens=this.lexer.blockTokens(r.items[e].text,[]),!r.loose){let n=r.items[e].tokens.filter(e=>"space"===e.type),t=n.length>0&&n.some(e=>/\n.*\n/.test(e.raw));r.loose=t}if(r.loose)for(let e=0;e<r.items.length;e++)r.items[e].loose=!0;return r}}html(e){let n=this.rules.block.html.exec(e);if(n)return{type:"html",block:!0,raw:n[0],pre:"pre"===n[1]||"script"===n[1]||"style"===n[1],text:n[0]}}def(e){let n=this.rules.block.def.exec(e);if(n){let e=n[1].toLowerCase().replace(/\s+/g," "),t=n[2]?n[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline.Z,"$1"):"",i=n[3]?n[3].substring(1,n[3].length-1).replace(this.rules.inline.Z,"$1"):n[3];return{type:"def",tag:e,raw:n[0],href:t,title:i}}}table(e){let n=this.rules.block.table.exec(e);if(n){if(!/[:|]/.test(n[2]))return;let e={type:"table",raw:n[0],header:Te(n[1]).map(e=>({text:e,tokens:[]})),align:n[2].replace(/^\||\| *$/g,"").split("|"),rows:n[3]&&n[3].trim()?n[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(e.header.length===e.align.length){let n,t,i,r,l=e.align.length;for(n=0;n<l;n++){let t=e.align[n];t&&(/^ *-+: *$/.test(t)?e.align[n]="right":/^ *:-+: *$/.test(t)?e.align[n]="center":/^ *:-+ *$/.test(t)?e.align[n]="left":e.align[n]=null)}for(l=e.rows.length,n=0;n<l;n++)e.rows[n]=Te(e.rows[n],e.header.length).map(e=>({text:e,tokens:[]}));for(l=e.header.length,t=0;t<l;t++)e.header[t].tokens=this.lexer.inline(e.header[t].text);for(l=e.rows.length,t=0;t<l;t++)for(r=e.rows[t],i=0;i<r.length;i++)r[i].tokens=this.lexer.inline(r[i].text);return e}}}lheading(e){let n=this.rules.block.lheading.exec(e);if(n)return{type:"heading",raw:n[0],depth:"="===n[2].charAt(0)?1:2,text:n[1],tokens:this.lexer.inline(n[1])}}paragraph(e){let n=this.rules.block.paragraph.exec(e);if(n){let e="\n"===n[1].charAt(n[1].length-1)?n[1].slice(0,-1):n[1];return{type:"paragraph",raw:n[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let n=this.rules.block.text.exec(e);if(n)return{type:"text",raw:n[0],text:n[0],tokens:this.lexer.inline(n[0])}}escape(e){let n=this.rules.inline.escape.exec(e);if(n)return{type:"escape",raw:n[0],text:ke(n[1])}}tag(e){let n=this.rules.inline.tag.exec(e);if(n)return!this.lexer.state.inLink&&/^<a /i.test(n[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(n[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(n[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(n[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:n[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:n[0]}}link(e){let n=this.rules.inline.link.exec(e);if(n){let e=n[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;let n=De(e.slice(0,-1),"\\");if((e.length-n.length)%2==0)return}else{let e=function(e,n){if(-1===e.indexOf(n[1]))return-1;let t=0;for(let i=0;i<e.length;i++)if("\\"===e[i])i++;else if(e[i]===n[0])t++;else if(e[i]===n[1]&&(t--,t<0))return i;return-1}(n[2],"()");if(e>-1){let t=(0===n[0].indexOf("!")?5:4)+n[1].length+e;n[2]=n[2].substring(0,e),n[0]=n[0].substring(0,t).trim(),n[3]=""}}let t=n[2],i="";if(this.options.pedantic){let e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(t);e&&(t=e[1],i=e[3])}else i=n[3]?n[3].slice(1,-1):"";return t=t.trim(),/^</.test(t)&&(t=this.options.pedantic&&!/>$/.test(e)?t.slice(1):t.slice(1,-1)),Ce(n,{href:t&&t.replace(this.rules.inline.Z,"$1"),title:i&&i.replace(this.rules.inline.Z,"$1")},n[0],this.lexer)}}reflink(e,n){let t;if((t=this.rules.inline.reflink.exec(e))||(t=this.rules.inline.nolink.exec(e))){let e=(t[2]||t[1]).replace(/\s+/g," ");if(e=n[e.toLowerCase()],!e){let e=t[0].charAt(0);return{type:"text",raw:e,text:e}}return Ce(t,e,t[0],this.lexer)}}emStrong(e,n,t=""){let i=this.rules.inline.emStrong.lDelim.exec(e);if(!(!i||i[3]&&t.match(/[\p{L}\p{N}]/u))&&(!i[1]&&!i[2]||!t||this.rules.inline.punctuation.exec(t))){let t,r,l=[...i[0]].length-1,s=l,o=0,a="*"===i[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(a.lastIndex=0,n=n.slice(-1*e.length+l);null!=(i=a.exec(n));){if(t=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!t)continue;if(r=[...t].length,i[3]||i[4]){s+=r;continue}if((i[5]||i[6])&&l%3&&!((l+r)%3)){o+=r;continue}if(s-=r,s>0)continue;r=Math.min(r,r+s+o);let n=[...i[0]][0].length,a=e.slice(0,l+i.index+n+r);if(Math.min(l,r)%2){let e=a.slice(1,-1);return{type:"em",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}let c=a.slice(2,-2);return{type:"strong",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){let n=this.rules.inline.code.exec(e);if(n){let e=n[2].replace(/\n/g," "),t=/[^ ]/.test(e),i=/^ /.test(e)&&/ $/.test(e);return t&&i&&(e=e.substring(1,e.length-1)),e=ke(e,!0),{type:"codespan",raw:n[0],text:e}}}br(e){let n=this.rules.inline.br.exec(e);if(n)return{type:"br",raw:n[0]}}del(e){let n=this.rules.inline.del.exec(e);if(n)return{type:"del",raw:n[0],text:n[2],tokens:this.lexer.inlineTokens(n[2])}}autolink(e){let n=this.rules.inline.autolink.exec(e);if(n){let e,t;return"@"===n[2]?(e=ke(n[1]),t="mailto:"+e):(e=ke(n[1]),t=e),{type:"link",raw:n[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let n;if(n=this.rules.inline.url.exec(e)){let e,t;if("@"===n[2])e=ke(n[0]),t="mailto:"+e;else{let i;do{i=n[0],n[0]=this.rules.inline.q.exec(n[0])[0]}while(i!==n[0]);e=ke(n[0]),t="www."===n[1]?"http://"+n[0]:n[0]}return{type:"link",raw:n[0],text:e,href:t,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){let n=this.rules.inline.text.exec(e);if(n){let e;return e=this.lexer.state.inRawBlock?n[0]:ke(n[0]),{type:"text",raw:n[0],text:e}}}},Ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:Ae,lheading:/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,R:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,P:/(?!\s*\])(?:\\.|[^\[\]\\])+/,F:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};Ee.def=ze(Ee.def).replace("label",Ee.P).replace("title",Ee.F).getRegex(),Ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,Ee.listItemStart=ze(/^( *)(bull) */).replace("bull",Ee.bullet).getRegex(),Ee.list=ze(Ee.list).replace(/bull/g,Ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+Ee.def.source+")").getRegex(),Ee.L="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ee.B=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,Ee.html=ze(Ee.html,"i").replace("comment",Ee.B).replace("tag",Ee.L).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Ee.lheading=ze(Ee.lheading).replace(/bull/g,Ee.bullet).getRegex(),Ee.paragraph=ze(Ee.R).replace("hr",Ee.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Ee.L).getRegex(),Ee.blockquote=ze(Ee.blockquote).replace("paragraph",Ee.paragraph).getRegex(),Ee.normal={...Ee},Ee.gfm={...Ee.normal,table:"^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},Ee.gfm.table=ze(Ee.gfm.table).replace("hr",Ee.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Ee.L).getRegex(),Ee.gfm.paragraph=ze(Ee.R).replace("hr",Ee.hr).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ee.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Ee.L).getRegex(),Ee.pedantic={...Ee.normal,html:ze("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",Ee.B).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ae,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ze(Ee.normal.R).replace("hr",Ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",Ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};var Ve={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Ae,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,rDelimAst:/^[^_*]*?__[^_*]*?\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\*)[punct](\*+)(?=[\s]|$)|[^punct\s](\*+)(?!\*)(?=[punct\s]|$)|(?!\*)[punct\s](\*+)(?=[^punct\s])|[\s](\*+)(?!\*)(?=[punct])|(?!\*)[punct](\*+)(?!\*)(?=[punct])|[^punct\s](\*+)(?=[^punct\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\s]|$)|[^punct\s](_+)(?!_)(?=[punct\s]|$)|(?!_)[punct\s](_+)(?=[^punct\s])|[\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Ae,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^((?![*_])[\spunctuation])/,H:"\\p{P}$+<=>`^|~"};Ve.punctuation=ze(Ve.punctuation,"u").replace(/punctuation/g,Ve.H).getRegex(),Ve.blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,Ve.anyPunctuation=/\\[punct]/g,Ve.Z=/\\([punct])/g,Ve.B=ze(Ee.B).replace("(?:--\x3e|$)","--\x3e").getRegex(),Ve.emStrong.lDelim=ze(Ve.emStrong.lDelim,"u").replace(/punct/g,Ve.H).getRegex(),Ve.emStrong.rDelimAst=ze(Ve.emStrong.rDelimAst,"gu").replace(/punct/g,Ve.H).getRegex(),Ve.emStrong.rDelimUnd=ze(Ve.emStrong.rDelimUnd,"gu").replace(/punct/g,Ve.H).getRegex(),Ve.anyPunctuation=ze(Ve.anyPunctuation,"gu").replace(/punct/g,Ve.H).getRegex(),Ve.Z=ze(Ve.Z,"gu").replace(/punct/g,Ve.H).getRegex(),Ve.J=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,Ve.W=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,Ve.autolink=ze(Ve.autolink).replace("scheme",Ve.J).replace("email",Ve.W).getRegex(),Ve.U=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,Ve.tag=ze(Ve.tag).replace("comment",Ve.B).replace("attribute",Ve.U).getRegex(),Ve.P=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Ve.Y=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,Ve.F=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,Ve.link=ze(Ve.link).replace("label",Ve.P).replace("href",Ve.Y).replace("title",Ve.F).getRegex(),Ve.reflink=ze(Ve.reflink).replace("label",Ve.P).replace("ref",Ee.P).getRegex(),Ve.nolink=ze(Ve.nolink).replace("ref",Ee.P).getRegex(),Ve.reflinkSearch=ze(Ve.reflinkSearch,"g").replace("reflink",Ve.reflink).replace("nolink",Ve.nolink).getRegex(),Ve.normal={...Ve},Ve.pedantic={...Ve.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:ze(/^!?\[(label)\]\((.*?)\)/).replace("label",Ve.P).getRegex(),reflink:ze(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ve.P).getRegex()},Ve.gfm={...Ve.normal,escape:ze(Ve.escape).replace("])","~|])").getRegex(),X:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,q:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},Ve.gfm.url=ze(Ve.gfm.url,"i").replace("email",Ve.gfm.X).getRegex(),Ve.breaks={...Ve.gfm,br:ze(Ve.br).replace("{2,}","*").getRegex(),text:ze(Ve.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};var Ke=class e{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||pe,this.options.tokenizer=this.options.tokenizer||new Ie,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={block:Ee.normal,inline:Ve.normal};this.options.pedantic?(n.block=Ee.pedantic,n.inline=Ve.pedantic):this.options.gfm&&(n.block=Ee.gfm,this.options.breaks?n.inline=Ve.breaks:n.inline=Ve.gfm),this.tokenizer.rules=n}static get rules(){return{block:Ee,inline:Ve}}static lex(n,t){return new e(t).lex(n)}static lexInline(n,t){return new e(t).inlineTokens(n)}lex(e){let n;for(e=e.replace(/\r\n|\r/g,"\n"),this.blockTokens(e,this.tokens);n=this.inlineQueue.shift();)this.inlineTokens(n.src,n.tokens);return this.tokens}blockTokens(e,n=[]){let t,i,r,l;for(e=this.options.pedantic?e.replace(/\t/g," ").replace(/^ +$/gm,""):e.replace(/^( *)(\t+)/gm,(e,n,t)=>n+" ".repeat(t.length));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(i=>!!(t=i.call({lexer:this},e,n))&&(e=e.substring(t.raw.length),n.push(t),!0)))){if(t=this.tokenizer.space(e)){e=e.substring(t.raw.length),1===t.raw.length&&n.length>0?n[n.length-1].raw+="\n":n.push(t);continue}if(t=this.tokenizer.code(e)){e=e.substring(t.raw.length),i=n[n.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?n.push(t):(i.raw+="\n"+t.raw,i.text+="\n"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);continue}if(t=this.tokenizer.fences(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.heading(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.hr(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.blockquote(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.list(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.html(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.def(e)){e=e.substring(t.raw.length),i=n[n.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(i.raw+="\n"+t.raw,i.text+="\n"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);continue}if(t=this.tokenizer.table(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.lheading(e)){e=e.substring(t.raw.length),n.push(t);continue}if(r=e,this.options.extensions&&this.options.extensions.startBlock){let n,t=1/0,i=e.slice(1);this.options.extensions.startBlock.forEach(e=>{n=e.call({lexer:this},i),"number"==typeof n&&n>=0&&(t=Math.min(t,n))}),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(t=this.tokenizer.paragraph(r))){i=n[n.length-1],l&&"paragraph"===i.type?(i.raw+="\n"+t.raw,i.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):n.push(t),l=r.length!==e.length,e=e.substring(t.raw.length);continue}if(t=this.tokenizer.text(e)){e=e.substring(t.raw.length),i=n[n.length-1],i&&"text"===i.type?(i.raw+="\n"+t.raw,i.text+="\n"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):n.push(t);continue}if(e){let n="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(n);break}throw new Error(n)}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){let t,i,r,l,s,o,a=e;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(l=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(l=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(l=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,l.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(s||(o=""),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(i=>!!(t=i.call({lexer:this},e,n))&&(e=e.substring(t.raw.length),n.push(t),!0)))){if(t=this.tokenizer.escape(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.tag(e)){e=e.substring(t.raw.length),i=n[n.length-1],i&&"text"===t.type&&"text"===i.type?(i.raw+=t.raw,i.text+=t.text):n.push(t);continue}if(t=this.tokenizer.link(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(t.raw.length),i=n[n.length-1],i&&"text"===t.type&&"text"===i.type?(i.raw+=t.raw,i.text+=t.text):n.push(t);continue}if(t=this.tokenizer.emStrong(e,a,o)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.codespan(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.br(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.del(e)){e=e.substring(t.raw.length),n.push(t);continue}if(t=this.tokenizer.autolink(e)){e=e.substring(t.raw.length),n.push(t);continue}if(!this.state.inLink&&(t=this.tokenizer.url(e))){e=e.substring(t.raw.length),n.push(t);continue}if(r=e,this.options.extensions&&this.options.extensions.startInline){let n,t=1/0,i=e.slice(1);this.options.extensions.startInline.forEach(e=>{n=e.call({lexer:this},i),"number"==typeof n&&n>=0&&(t=Math.min(t,n))}),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(t=this.tokenizer.inlineText(r)){e=e.substring(t.raw.length),"_"!==t.raw.slice(-1)&&(o=t.raw.slice(-1)),s=!0,i=n[n.length-1],i&&"text"===i.type?(i.raw+=t.raw,i.text+=t.text):n.push(t);continue}if(e){let n="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(n);break}throw new Error(n)}}return n}},Me=class{options;constructor(e){this.options=e||pe}code(e,n,t){let i=(n||"").match(/^\S*/)?.[0];return e=e.replace(/\n$/,"")+"\n",i?'<pre><code class="language-'+ke(i)+'">'+(t?e:ke(e,!0))+"</code></pre>\n":"<pre><code>"+(t?e:ke(e,!0))+"</code></pre>\n"}blockquote(e){return`<blockquote>\n${e}</blockquote>\n`}html(e,n){return e}heading(e,n,t){return`<h${n}>${e}</h${n}>\n`}hr(){return"<hr>\n"}list(e,n,t){let i=n?"ol":"ul";return"<"+i+(n&&1!==t?' start="'+t+'"':"")+">\n"+e+"</"+i+">\n"}listitem(e,n,t){return`<li>${e}</li>\n`}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph(e){return`<p>${e}</p>\n`}table(e,n){return n&&(n=`<tbody>${n}</tbody>`),"<table>\n<thead>\n"+e+"</thead>\n"+n+"</table>\n"}tablerow(e){return`<tr>\n${e}</tr>\n`}tablecell(e,n){let t=n.header?"th":"td";return(n.align?`<${t} align="${n.align}">`:`<${t}>`)+e+`</${t}>\n`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return"<br>"}del(e){return`<del>${e}</del>`}link(e,n,t){let i=Ne(e);if(null===i)return t;let r='<a href="'+(e=i)+'"';return n&&(r+=' title="'+n+'"'),r+=">"+t+"</a>",r}image(e,n,t){let i=Ne(e);if(null===i)return t;let r=`<img src="${e=i}" alt="${t}"`;return n&&(r+=` title="${n}"`),r+=">",r}text(e){return e}},Oe=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,n,t){return""+t}image(e,n,t){return""+t}br(){return""}},je=class e{options;renderer;textRenderer;constructor(e){this.options=e||pe,this.options.renderer=this.options.renderer||new Me,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Oe}static parse(n,t){return new e(t).parse(n)}static parseInline(n,t){return new e(t).parseInline(n)}parse(e,n=!0){let t="";for(let i=0;i<e.length;i++){let r=e[i];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(!1!==n||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(e.type)){t+=n||"";continue}}switch(r.type){case"space":continue;case"hr":t+=this.renderer.hr();continue;case"heading":{let e=r;t+=this.renderer.heading(this.parseInline(e.tokens),e.depth,_e(this.parseInline(e.tokens,this.textRenderer)));continue}case"code":{let e=r;t+=this.renderer.code(e.text,e.lang,!!e.escaped);continue}case"table":{let e=r,n="",i="";for(let n=0;n<e.header.length;n++)i+=this.renderer.tablecell(this.parseInline(e.header[n].tokens),{header:!0,align:e.align[n]});n+=this.renderer.tablerow(i);let l="";for(let n=0;n<e.rows.length;n++){let t=e.rows[n];i="";for(let n=0;n<t.length;n++)i+=this.renderer.tablecell(this.parseInline(t[n].tokens),{header:!1,align:e.align[n]});l+=this.renderer.tablerow(i)}t+=this.renderer.table(n,l);continue}case"blockquote":{let e=r,n=this.parse(e.tokens);t+=this.renderer.blockquote(n);continue}case"list":{let e=r,n=e.ordered,i=e.start,l=e.loose,s="";for(let n=0;n<e.items.length;n++){let t=e.items[n],i=t.checked,r=t.task,o="";if(t.task){let e=this.renderer.checkbox(!!i);l?t.tokens.length>0&&"paragraph"===t.tokens[0].type?(t.tokens[0].text=e+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=e+" "+t.tokens[0].tokens[0].text)):t.tokens.unshift({type:"text",text:e+" "}):o+=e+" "}o+=this.parse(t.tokens,l),s+=this.renderer.listitem(o,r,!!i)}t+=this.renderer.list(s,n,i);continue}case"html":{let e=r;t+=this.renderer.html(e.text,e.block);continue}case"paragraph":{let e=r;t+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let l=r,s=l.tokens?this.parseInline(l.tokens):l.text;for(;i+1<e.length&&"text"===e[i+1].type;)l=e[++i],s+="\n"+(l.tokens?this.parseInline(l.tokens):l.text);t+=n?this.renderer.paragraph(s):s;continue}default:{let e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return console.error(e),"";throw new Error(e)}}}return t}parseInline(e,n){n=n||this.renderer;let t="";for(let i=0;i<e.length;i++){let r=e[i];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){let e=this.options.extensions.renderers[r.type].call({parser:this},r);if(!1!==e||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(r.type)){t+=e||"";continue}}switch(r.type){case"escape":{let e=r;t+=n.text(e.text);break}case"html":{let e=r;t+=n.html(e.text);break}case"link":{let e=r;t+=n.link(e.href,e.title,this.parseInline(e.tokens,n));break}case"image":{let e=r;t+=n.image(e.href,e.title,e.text);break}case"strong":{let e=r;t+=n.strong(this.parseInline(e.tokens,n));break}case"em":{let e=r;t+=n.em(this.parseInline(e.tokens,n));break}case"codespan":{let e=r;t+=n.codespan(e.text);break}case"br":t+=n.br();break;case"del":{let e=r;t+=n.del(this.parseInline(e.tokens,n));break}case"text":{let e=r;t+=n.text(e.text);break}default:{let e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return console.error(e),"";throw new Error(e)}}}return t}},Ze=class{options;constructor(e){this.options=e||pe}static passThroughHooks=new Set(["preprocess","postprocess"]);preprocess(e){return e}postprocess(e){return e}},qe=new class{defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};options=this.setOptions;parse=this.#e(Ke.lex,je.parse);parseInline=this.#e(Ke.lexInline,je.parseInline);Parser=je;Renderer=Me;TextRenderer=Oe;Lexer=Ke;Tokenizer=Ie;Hooks=Ze;constructor(...e){this.use(...e)}walkTokens(e,n){let t=[];for(let i of e)switch(t=t.concat(n.call(this,i)),i.type){case"table":{let e=i;for(let i of e.header)t=t.concat(this.walkTokens(i.tokens,n));for(let i of e.rows)for(let e of i)t=t.concat(this.walkTokens(e.tokens,n));break}case"list":{let e=i;t=t.concat(this.walkTokens(e.items,n));break}default:{let e=i;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(i=>{t=t.concat(this.walkTokens(e[i],n))}):e.tokens&&(t=t.concat(this.walkTokens(e.tokens,n)))}}return t}use(...e){let n=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let t={...e};if(t.async=this.defaults.async||t.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){let t=n.renderers[e.name];n.renderers[e.name]=t?function(...n){let i=e.renderer.apply(this,n);return!1===i&&(i=t.apply(this,n)),i}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");let t=n[e.level];t?t.unshift(e.tokenizer):n[e.level]=[e.tokenizer],e.start&&("block"===e.level?n.startBlock?n.startBlock.push(e.start):n.startBlock=[e.start]:"inline"===e.level&&(n.startInline?n.startInline.push(e.start):n.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(n.childTokens[e.name]=e.childTokens)}),t.extensions=n),e.renderer){let n=this.defaults.renderer||new Me(this.defaults);for(let t in e.renderer){let i=e.renderer[t],r=t,l=n[r];n[r]=(...e)=>{let t=i.apply(n,e);return!1===t&&(t=l.apply(n,e)),t||""}}t.renderer=n}if(e.tokenizer){let n=this.defaults.tokenizer||new Ie(this.defaults);for(let t in e.tokenizer){let i=e.tokenizer[t],r=t,l=n[r];n[r]=(...e)=>{let t=i.apply(n,e);return!1===t&&(t=l.apply(n,e)),t}}t.tokenizer=n}if(e.hooks){let n=this.defaults.hooks||new Ze;for(let t in e.hooks){let i=e.hooks[t],r=t,l=n[r];Ze.passThroughHooks.has(t)?n[r]=e=>{if(this.defaults.async)return Promise.resolve(i.call(n,e)).then(e=>l.call(n,e));let t=i.call(n,e);return l.call(n,t)}:n[r]=(...e)=>{let t=i.apply(n,e);return!1===t&&(t=l.apply(n,e)),t}}t.hooks=n}if(e.walkTokens){let n=this.defaults.walkTokens,i=e.walkTokens;t.walkTokens=function(e){let t=[];return t.push(i.call(this,e)),n&&(t=t.concat(n.call(this,e))),t}}this.defaults={...this.defaults,...t}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,n){return Ke.lex(e,n??this.defaults)}parser(e,n){return je.parse(e,n??this.defaults)}#e(e,n){return(t,i)=>{let r={...i},l={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(l.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),l.async=!0);let s=this.#n(!!l.silent,!!l.async);if(typeof t>"u"||null===t)return s(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof t)return s(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(l.hooks&&(l.hooks.options=l),l.async)return Promise.resolve(l.hooks?l.hooks.preprocess(t):t).then(n=>e(n,l)).then(e=>l.walkTokens?Promise.all(this.walkTokens(e,l.walkTokens)).then(()=>e):e).then(e=>n(e,l)).then(e=>l.hooks?l.hooks.postprocess(e):e).catch(s);try{l.hooks&&(t=l.hooks.preprocess(t));let i=e(t,l);l.walkTokens&&this.walkTokens(i,l.walkTokens);let r=n(i,l);return l.hooks&&(r=l.hooks.postprocess(r)),r}catch(e){return s(e)}}}#n(e,n){return t=>{if(t.message+="\nPlease report this to https://github.com/markedjs/marked.",e){let e="<p>An error occurred:</p><pre>"+ke(t.message+"",!0)+"</pre>";return n?Promise.resolve(e):e}if(n)return Promise.reject(t);throw t}}};function Re(e,n){return qe.parse(e,n)}Re.options=Re.setOptions=function(e){return qe.setOptions(e),Re.defaults=qe.defaults,me(Re.defaults),Re},Re.getDefaults=function(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}},Re.defaults=pe,Re.use=function(...e){return qe.use(...e),Re.defaults=qe.defaults,me(Re.defaults),Re},Re.walkTokens=function(e,n){return qe.walkTokens(e,n)},Re.parseInline=qe.parseInline,Re.Parser=je,Re.parser=je.parse,Re.Renderer=Me,Re.TextRenderer=Oe,Re.Lexer=Ke,Re.lexer=Ke.lex,Re.Tokenizer=Ie,Re.Hooks=Ze,Re.parse=Re,Re.options,Re.setOptions,Re.use,Re.walkTokens,Re.parseInline,je.parse,Ke.lex;var Pe=0;function Fe(e,t,i,r,l,s){t||(t={});var o,a,c=t;"ref"in t&&(o=t.ref,delete t.ref);var u={type:e,props:c,key:i,ref:o,o:null,h:null,p:0,m:null,v:void 0,k:null,constructor:void 0,$:--Pe,_:-1,S:0,G:l,ee:s};if("function"==typeof e&&(o=e.defaultProps))for(a in o)void 0===c[a]&&(c[a]=o[a]);return n.vnode&&n.vnode(u),u}var Le="0.1.8";function Be({client:e}){let[n,t]=Y(!1),[i,r]=Y("home"),[l,s]=Y([]),[o,a]=Y([]),[c,u]=Y(""),[h,d]=Y(!1),[f,p]=Y(!1),[m,y]=Y(!1),[g,b]=Y(null),[x,w]=Y(null),k=G(null),[$,_]=Y(null),S=G(null),z=G(null),N=G(0);X(()=>{S.current=$},[$]);let[A,T]=Y({}),[D,C]=Y("#5046e5"),[I,E]=Y(24),[V,K]=Y("right"),[M,O]=Y("light"),[j,Z]=Y("#ffffff"),[q,R]=Y("#ffffff"),[P,F]=Y("message"),[L,B]=Y(!0),[H,J]=Y(!0),[W,U]=Y(!0),[Q,ee]=Y(!0),[ne,te]=Y(!1);X(()=>{console.log(`[Vemly SDK v${Le}] Initializing widget...`),e.getWidgetConfig().then(n=>{if(n){if(console.log(`[Vemly SDK v${Le}] Config loaded:`,n),"error"===n.status)return console.error("[Vemly SDK] Error loading widget:",n.message),J(!1),void te(!0);if(0===Object.keys(n).length)return console.warn("[Vemly SDK] Empty config received, disabling widget"),J(!1),void te(!0);void 0!==n.widgetEnabled&&J(n.widgetEnabled),void 0!==n.aiMessagingEnabled&&U(n.aiMessagingEnabled);let t=n.config||{};if(T(t),t.primaryColor&&C(t.primaryColor),t.defaultAgentName&&_(t.defaultAgentName),void 0!==t.borderRadius&&E(t.borderRadius),t.position&&K(t.position),t.theme&&O(t.theme),t.launcherIcon&&F(t.launcherIcon),void 0!==t.showBranding&&B(t.showBranding),t.websiteUrl&&typeof window<"u")try{let n=new URL(t.websiteUrl).origin,i=window.location.origin,r=i.includes("localhost")||i.includes("127.0.0.1"),l=e.apiUrl?.includes("localhost")||e.apiUrl?.includes("127.0.0.1");ee(n===i||r||l)}catch{ee(!0)}else ee(!0)}te(!0)})},[e]),X(()=>{n&&("home"===i&&le(),ie())},[n,i]),X(()=>{ie()},[o,h]);let ie=()=>{k.current?.scrollIntoView({behavior:"smooth"})},re=()=>t(!n),le=async()=>{let n=await e.getHistory();s(n)},se=()=>{console.log("[Vemly SDK v0.1.8] Connecting to stream..."),e.connectStream((e,n)=>{if(console.log("[Vemly SDK] Stream event:",e,"| Raw data:",JSON.stringify(n),"| Type:",typeof n),"message-stream"===e){let e;"object"==typeof n&&null!==n?(console.log("[Vemly SDK] message-stream object - type:",n.type,"| text:",n.text,"| content:",n.content),"text"===n.type&&"string"==typeof n.text||"string"==typeof n.text?e=n.text:"string"==typeof n.content&&(e=n.content)):"string"==typeof n&&(e=n),console.log("[Vemly SDK] Extracted token:",JSON.stringify(e)),e&&"undefined"!==e&&"null"!==e?pe(e):console.warn("[Vemly SDK] Skipping invalid token:",e)}else if("token"===e)n&&"string"==typeof n&&"undefined"!==n&&"null"!==n&&pe(n);else if("message-complete"===e)d(!1);else if("message"===e){if(!n||!n.id)return;if(console.log("[Vemly SDK] Received message event:",n),"undefined"===("string"==typeof n.content?n.content.trim():n.content)||!n.content)return void console.warn("[Vemly SDK] Ignored 'undefined' message content:",n);a(e=>{if(e.some(e=>e.id===n.id))return e;if("user"===n.role){let t=e.findIndex(e=>e.id.startsWith("user_")&&e.content===n.content);if(-1!==t){let i=[...e],r=n.content&&"undefined"!==n.content.trim()?n.content:i[t].content;return i[t]={id:n.id,role:n.role,content:r,createdAt:n.createdAt,agentName:void 0},i}}return d(!1),[...e,{id:n.id,role:n.role,content:n.content,createdAt:n.createdAt,agentName:n.agentName||("assistant"===n.role?$:void 0),agentAvatar:n.agentAvatar}]}),d(!1)}else if("human-takeover"===e){let e=n.isHumanTakeover;p(e),e?(d(!1),n.userName&&b(n.userName),n.agentAvatar&&w(n.agentAvatar),a(e=>{if(e.some(e=>"system-takeover"===e.id))return e;let t=n.userName||"a team member";return[...e,{id:"system-takeover",role:"system",content:`You're now connected with ${t}.`,createdAt:(new Date).toISOString()}]})):(b(null),w(null))}else"support-typing"===e?n.isTyping?(d(!0),n.userName&&b(n.userName),n.agentAvatar&&w(n.agentAvatar)):d(!1):"thinking-start"===e||"typing-start"===e?W&&d(!0):"conversation-closed"===e&&(y(!0),d(!1),a(e=>e.some(e=>"system-closed"===e.id)?e:[...e,{id:"system-closed",role:"system",content:"This conversation has been closed. Thank you for reaching out!",createdAt:(new Date).toISOString()}]))})},oe=()=>{e.sessionId=null,_(A.defaultAgentName||null),a([]),y(!1),p(!1),b(null),w(null),r("chat")},ae=async()=>{if(!c.trim())return;let n="user_"+Date.now(),t={id:n,role:"user",content:c,createdAt:(new Date).toISOString()};a(e=>[...e,t]),u(""),f||d(!0);try{let i=await e.sendMessage(t.content);i.isHumanTakeover&&(p(!0),d(!1),_("Support Team"),a(e=>e.some(e=>"system-takeover"===e.id)?e:[...e,{id:"system-takeover",role:"system",content:"A team member will be with you shortly.",createdAt:(new Date).toISOString()}])),i.message?.message?.id&&a(e=>e.map(e=>e.id===n?{...e,id:i.message.message.id}:e)),i.agentName&&!i.isHumanTakeover&&_(i.agentName),se()}catch(e){console.error("Vemly Send Error:",e),d(!1)}},pe=e=>{e&&"undefined"!==e&&"null"!==e?(console.log("[Vemly SDK] updateLastAssistantMessage called with token:",JSON.stringify(e)),a(n=>{console.log("[Vemly SDK] setMessages prev length:",n.length,"last role:",n[n.length-1]?.role);let t=n[n.length-1];if(t&&"assistant"===t.role){let i=(t.content||"")+e;return console.log("[Vemly SDK] Appending to existing message. New content:",JSON.stringify(i.substring(0,50))),[...n.slice(0,-1),{...t,content:i}]}return console.log("[Vemly SDK] Creating NEW assistant message with token:",JSON.stringify(e)),[...n,{id:"bot_"+Date.now(),role:"assistant",content:e,createdAt:(new Date).toISOString(),agentName:S.current||void 0}]})):console.warn("[Vemly SDK] updateLastAssistantMessage BLOCKED invalid token:",e)},me="dark"===M,ye="glass"===M,ge={"--vemly-primary":D,"--vemly-primary-hover":D,"--vemly-radius":`${I}px`,"--vemly-header-text":j,"--vemly-user-text":q,"--vemly-bg":me?"#1f2937":ye?"rgba(255, 255, 255, 0.8)":"#ffffff","--vemly-surface":me?"#111827":ye?"rgba(249, 250, 251, 0.5)":"#f9fafb","--vemly-text":me?"#f9fafb":"#111827","--vemly-text-secondary":me?"#9ca3af":"#6b7280","--vemly-text-muted":me?"#6b7280":"#9ca3af","--vemly-border":me?"#374151":"#e5e7eb","--vemly-user-bg":"#111827","--vemly-ai-bg":me?"#374151":"#ffffff"},ve=ye?{backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)"}:{},be=A.title||"Vemly",xe=A.titleAlignment||"left";return ne&&H&&Q&&H?Fe("div",{className:"vemly-widget-container",style:ge,"data-position":V,children:[Fe("div",{className:"vemly-window "+(n?"open":""),style:ve,children:[Fe("div",{className:"vemly-header",style:{color:j},children:[Fe("div",{className:"vemly-header-top",children:[Fe("div",{className:"vemly-brand",children:"chat"===i&&Fe("button",{className:"vemly-back-btn",onClick:()=>{y(!1),r("home"),le()},children:Fe(ue,{size:20})})}),Fe("button",{className:"vemly-close",onClick:re,style:{color:j},children:Fe(fe,{size:20})})]}),Fe("div",{className:"vemly-header-content",style:{textAlign:xe},children:[Fe("h3",{children:be}),Fe("p",{style:{opacity:.9},children:"home"===i?A.greeting||"We're here to help":"Ask us anything"})]}),Fe("div",{className:"vemly-status",style:{justifyContent:"center"===xe?"center":"flex-start"},children:[Fe("span",{className:"vemly-status-dot"}),Fe("span",{style:{opacity:.9},children:"We typically reply instantly"})]})]}),Fe("div","home"===i?{className:"vemly-home",children:Fe("div",{className:"vemly-home-content",children:[Fe("button",{onClick:oe,className:"vemly-start-btn",style:{backgroundColor:me?"#374151":"#111827",color:"#ffffff"},children:[Fe(he,{size:18}),Fe("span",{children:"Start a conversation"})]}),l.length>0&&Fe(v,{children:[Fe("div",{className:"vemly-section-title",children:"Recent conversations"}),Fe("div",{className:"vemly-session-list",children:l.slice(0,5).map(n=>Fe("div",{onClick:()=>(async(n,t)=>{e.sessionId=n,_(t||null),r("chat"),a([]);try{let i=await fetch(`${e.apiUrl}/chat/session/${n}`,{headers:{"x-vemly-api-key":e.apiKey,"Content-Type":"application/json"}});if(i.ok){let e=await i.json(),n=!!e.session?.isHumanTakeover;n&&p(!0);let r=n?"Support Team":e.agent?.name||t;if(r&&_(r),e.session?.closedAt&&y(!0),e.messages){let n=e.messages.map(e=>({...e,agentName:e.agentName||("assistant"===e.role?r:void 0),agentAvatar:e.agentAvatar}));a(n)}}se()}catch(e){console.error("Failed to load conversation history:",e)}})(n.id,n.agentName),className:"vemly-session-item",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[Fe("div",{className:"vemly-session-title",style:{color:me?"#fff":"#111827"},children:n.title||"New Conversation"}),Fe("div",{className:"vemly-session-date",children:new Date(n.createdAt||Date.now()).toLocaleDateString()})]},n.id))})]}),0===l.length&&Fe("div",{className:"vemly-empty",children:"No previous conversations"})]})}:{className:"vemly-messages",style:{backgroundColor:me?"#1f2937":"glass"===M?"transparent":"#f9fafb"},children:[o.map((e,n)=>Fe("div",{className:`vemly-message-group ${e.role}`,children:"system"===e.role?Fe("div",{className:"vemly-message-content",children:Fe("p",{children:e.content})}):Fe(v,{children:[("assistant"===e.role||"tool"===e.role)&&Fe("div",{className:"vemly-sender",children:[e.agentAvatar?Fe("img",{src:e.agentAvatar,alt:e.agentName||"Bot",className:"vemly-sender-avatar-img"}):Fe("div",{className:"vemly-sender-avatar",children:(e.agentName||$||"Bot").substring(0,2).toUpperCase()}),Fe("div",{className:"vemly-sender-name",style:{color:me?"#e5e7eb":"#111827"},children:(()=>{let n=e.agentName||$||"Bot";return"undefined"!==n&&n?n:"Bot"})()})]}),Fe("div",{className:"vemly-message-content",children:Fe("div",{dangerouslySetInnerHTML:{M:Re.parse(e.content&&"undefined"!==e.content.trim()?e.content:"")}})})]})},e.id||n)),h&&(()=>{let e=f&&g?g:$&&"undefined"!==$?$:"Vemly";return Fe("div",{className:"vemly-message-group assistant",children:[Fe("div",{className:"vemly-sender",children:[f&&x?Fe("img",{src:x,alt:e,className:"vemly-sender-avatar-img"}):Fe("div",{className:"vemly-sender-avatar",children:e.substring(0,2).toUpperCase()}),Fe("div",{className:"vemly-sender-name",children:e})]}),Fe("div",{className:"vemly-typing",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[Fe("div",{className:"vemly-dot"}),Fe("div",{className:"vemly-dot"}),Fe("div",{className:"vemly-dot"})]})]})})(),Fe("div",{ref:k})]}),"chat"===i&&Fe("div",{className:"vemly-input-container",style:{backgroundColor:me?"#1f2937":"#ffffff",borderColor:me?"#374151":"#e5e7eb",opacity:m?.7:1},children:[Fe("div",m?{style:{padding:"12px 16px",textAlign:"center"},children:[Fe("p",{style:{fontSize:"13px",color:me?"#9ca3af":"#6b7280",marginBottom:"12px"},children:"This conversation is closed."}),Fe("button",{onClick:oe,style:{display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 16px",backgroundColor:D,color:"#ffffff",border:"none",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:[Fe(he,{size:16}),"Start New Conversation"]})]}:{className:"vemly-input-wrapper",style:{backgroundColor:me?"#111827":"#f9fafb",borderColor:me?"#374151":"#e5e7eb"},children:[Fe("textarea",{className:"vemly-input",placeholder:"Send a message...",value:c,onInput:n=>{let t=n.target.value;if(u(t),e.sessionId){let n=Date.now();n-N.current>1500&&(e.sendTyping(!0),N.current=n),z.current&&clearTimeout(z.current),z.current=setTimeout(()=>{e.sendTyping(!1),z.current=null,N.current=0},3e3)}},onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ae())},rows:1,style:{color:me?"#f3f4f6":"#111827"}}),Fe("button",{className:"vemly-send",onClick:ae,disabled:!c.trim()||h,children:Fe(de,{size:16})})]}),L&&Fe("div",{className:"vemly-branding",children:["Powered by ",Fe("a",{href:"https://usevemly.com",target:"_blank",rel:"noopener",children:"Vemly"})]})]})]}),Fe("button",{className:"vemly-bubble",onClick:re,children:Fe(n?fe:"bot"===P?ce:he,{size:24})})]}):null}var He=class{apiUrl;tenantId;agentId;apiKey;deviceId;sessionId=null;sseSource=null;sseController=null;constructor(e){this.apiUrl=e.apiUrl||"https://api.usevemly.com",this.tenantId=e.tenantId,this.agentId=e.agentId,this.apiKey=e.apiKey,this.deviceId=this.getOrCreateDeviceId()}getOrCreateDeviceId(){if(typeof window>"u")return"server";let e=localStorage.getItem("vemly_device_id");return e||(e="dev_"+Math.random().toString(36).substring(2,15),localStorage.setItem("vemly_device_id",e)),e}async createSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session`,{method:"POST",headers:e,body:JSON.stringify({...this.tenantId?{tenantId:this.tenantId}:{},agentId:this.agentId,deviceId:this.deviceId})});if(!n.ok)throw new Error("Failed to create session");let t=await n.json();return this.sessionId=t.session?.id||t.id,{session:t.session||t,agentName:t.agent?.name}}async resumeSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session/resume`,{method:"POST",headers:e,body:JSON.stringify({tenantId:this.tenantId,deviceId:this.deviceId})});if(!n.ok)return null;let t=await n.json();return this.sessionId=t.session?.id||null,t.session}async getHistory(e=20){let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey);let t={deviceId:this.deviceId,limit:e.toString()};this.tenantId&&(t.tenantId=this.tenantId);let i=new URLSearchParams(t),r=await fetch(`${this.apiUrl}/chat/sessions/device?${i.toString()}`,{method:"GET",headers:n});return r.ok&&(await r.json()).sessions||[]}async getWidgetConfig(){try{let e=`${this.apiUrl}/chat/config`;this.tenantId&&(e+=`/${this.tenantId}`);let n={};return this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await(await fetch(e,{method:"GET",headers:n})).json()||{}}catch(e){return console.error("Failed to fetch widget config",e),{}}}async sendMessage(e,n){let t,i;if(!this.sessionId){let e=await this.createSession();t=e.agentName,i=e.session.isHumanTakeover}let r={"Content-Type":"application/json"};this.apiKey&&(r["x-vemly-api-key"]=this.apiKey);let l=await fetch(`${this.apiUrl}/chat/message`,{method:"POST",headers:r,body:JSON.stringify({sessionId:this.sessionId,content:e,role:"user"})});if(!l.ok)throw new Error("Failed to send message");return{message:await l.json(),agentName:t,isHumanTakeover:i}}async sendTyping(e){if(!this.sessionId)return;let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await fetch(`${this.apiUrl}/chat/typing`,{method:"POST",headers:n,body:JSON.stringify({sessionId:this.sessionId,isTyping:e})})}connectStream(e){if(!this.sessionId)return;this.sseController&&this.sseController.abort(),this.sseController=new AbortController;let n=`${this.apiUrl}/chat/stream/${this.sessionId}`,t={"Content-Type":"application/json"};this.apiKey&&(t["x-vemly-api-key"]=this.apiKey),fetch(n,{method:"GET",headers:t,signal:this.sseController.signal}).then(async n=>{if(!n.ok||!n.body)throw new Error(`SSE Error: ${n.status}`);let t=n.body.getReader(),i=new TextDecoder,r="";for(;;){let{value:n,done:l}=await t.read();if(l)break;r+=i.decode(n,{stream:!0});let s=r.split("\n\n");r=s.pop()||"";for(let n of s){if(!n.trim())continue;let t=n.split("\n"),i="message",r=null;for(let e of t)if(e.startsWith("event: "))i=e.substring(7).trim();else if(e.startsWith("data: ")){let n=e.substring(6).trim();if(console.log("[Vemly SDK] SSE raw line:",e,"| rawData:",n),!n||"undefined"===n||"null"===n){console.warn("[Vemly SDK] Skipping empty/undefined rawData");continue}try{r=JSON.parse(n),console.log("[Vemly SDK] Parsed SSE data:",JSON.stringify(r),"| type:",typeof r)}catch{r=n,console.log("[Vemly SDK] SSE data as string:",r)}}null!=r&&(console.log("[Vemly SDK] Calling onData with event:",i,"data:",JSON.stringify(r)),e(i,r))}}}).catch(e=>{"AbortError"!==e.name&&console.error("Stream Error:",e)})}disconnectStream(){this.sseSource?.close(),this.sseSource=null,this.sseController?.abort(),this.sseController=null}getSessionId(){return this.sessionId}},Je=new class{client=null;container=null;shadowRoot=null;init(e){if(this.client)console.warn("[VemlySDK] Already initialized");else if(e.apiKey)try{console.log("[VemlySDK] Initializing with API key..."),this.client=new He(e),this.createContainer(),this.render(),console.log("[VemlySDK] Initialization complete")}catch(e){console.error("[VemlySDK] Initialization failed:",e)}else console.error("[VemlySDK] apiKey is required")}createContainer(){let e=document.getElementById("vemly-sdk-root");e&&e.remove(),this.container=document.createElement("div"),this.container.id="vemly-sdk-root",document.body.appendChild(this.container),this.shadowRoot=this.container.attachShadow({mode:"open"});let n=document.createElement("style");n.textContent='\n@import url(\'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\');\n\n:host {\n --vemly-primary: #5046e5;\n --vemly-primary-hover: #4338ca;\n --vemly-bg: #ffffff;\n --vemly-surface: #f9fafb;\n --vemly-text: #111827;\n --vemly-text-secondary: #6b7280;\n --vemly-text-muted: #9ca3af;\n --vemly-border: #e5e7eb;\n --vemly-user-bg: #111827;\n --vemly-ai-bg: #ffffff;\n --vemly-radius: 16px;\n --vemly-font: \'Inter\', -apple-system, BlinkMacSystemFont, \'Segoe UI\', sans-serif;\n}\n\n.vemly-widget-container {\n position: fixed;\n bottom: 20px;\n z-index: 2147483647;\n font-family: var(--vemly-font);\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.vemly-widget-container[data-position="right"] {\n right: 20px;\n left: auto;\n align-items: flex-end;\n}\n\n.vemly-widget-container[data-position="left"] {\n left: 20px;\n right: auto;\n align-items: flex-start;\n}\n\n.vemly-widget-container * {\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n/* Launcher */\n.vemly-bubble {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16);\n transition: all 0.2s ease;\n border: none;\n outline: none;\n}\n\n.vemly-bubble:hover {\n background: var(--vemly-primary-hover);\n transform: scale(1.05);\n}\n\n.vemly-bubble:active {\n transform: scale(0.95);\n}\n\n/* Window */\n.vemly-window {\n width: 380px;\n height: 600px;\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 40px);\n background: var(--vemly-bg);\n border-radius: var(--vemly-radius);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom right;\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n transition: all 0.2s ease;\n visibility: hidden;\n}\n\n.vemly-window.open {\n opacity: 1;\n transform: scale(1) translateY(0);\n visibility: visible;\n}\n\n/* Header */\n.vemly-header {\n background: var(--vemly-primary);\n color: white;\n padding: 20px;\n flex-shrink: 0;\n}\n\n.vemly-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.vemly-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.vemly-back-btn {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-back-btn:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-close {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-close:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-header-content {\n margin-top: 16px;\n}\n\n.vemly-header-content h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.vemly-header-content p {\n margin: 4px 0 0;\n font-size: 14px;\n opacity: 0.85;\n}\n\n.vemly-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 12px;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.vemly-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n}\n\n/* Messages Area */\n.vemly-messages {\n flex: 1;\n background: var(--vemly-surface);\n padding: 16px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.vemly-message-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 85%;\n animation: vemly-fade-in 0.25s ease-out;\n}\n\n@keyframes vemly-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.vemly-message-group.assistant {\n align-self: flex-start;\n}\n\n.vemly-message-group.user {\n align-self: flex-end;\n}\n\n.vemly-sender {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.vemly-sender-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vemly-sender-avatar-img {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.vemly-sender-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--vemly-text);\n}\n\n.vemly-message-content {\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.vemly-message-group.assistant .vemly-message-content {\n background: white;\n color: var(--vemly-text);\n border: 1px solid var(--vemly-border);\n border-top-left-radius: 4px;\n}\n\n.vemly-message-group.user .vemly-message-content {\n background: var(--vemly-user-bg);\n color: white;\n border-top-right-radius: 4px;\n}\n\n.vemly-message-content p { margin: 0 0 8px; }\n.vemly-message-content p:last-child { margin: 0; }\n.vemly-message-content a { color: inherit; text-decoration: underline; }\n.vemly-message-content code {\n background: rgba(0,0,0,0.06);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n.vemly-message-group.user .vemly-message-content code {\n background: rgba(255,255,255,0.15);\n}\n\n/* Home View */\n.vemly-home {\n flex: 1;\n background: var(--vemly-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.vemly-home-content {\n padding: 16px;\n}\n\n.vemly-start-btn {\n width: 100%;\n padding: 14px 16px;\n background: var(--vemly-text);\n color: white;\n border: none;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.15s;\n}\n\n.vemly-start-btn:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n}\n\n.vemly-section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--vemly-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 20px 0 12px;\n}\n\n.vemly-session-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.vemly-session-item {\n padding: 12px 14px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.vemly-session-item:hover {\n border-color: var(--vemly-text-muted);\n background: #fafafa;\n}\n\n.vemly-session-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--vemly-text);\n margin-bottom: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vemly-session-date {\n font-size: 12px;\n color: var(--vemly-text-muted);\n}\n\n.vemly-empty {\n text-align: center;\n padding: 24px;\n color: var(--vemly-text-muted);\n font-size: 14px;\n}\n\n/* Input */\n.vemly-input-container {\n padding: 12px 16px 16px;\n background: white;\n border-top: 1px solid var(--vemly-border);\n}\n\n.vemly-input-wrapper {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n background: var(--vemly-surface);\n border: 1px solid var(--vemly-border);\n border-radius: 12px;\n padding: 8px 8px 8px 14px;\n transition: all 0.15s;\n}\n\n.vemly-input-wrapper:focus-within {\n border-color: var(--vemly-primary);\n box-shadow: 0 0 0 3px rgba(80, 70, 229, 0.1);\n}\n\n.vemly-input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 16px; /* 16px prevents iOS zoom on focus */\n color: var(--vemly-text);\n max-height: 100px;\n resize: none;\n font-family: inherit;\n padding: 4px 0;\n line-height: 1.4;\n -webkit-appearance: none; /* Remove iOS styling */\n appearance: none;\n}\n\n.vemly-input::placeholder {\n color: var(--vemly-text-muted);\n}\n\n.vemly-send {\n background: var(--vemly-primary);\n color: white;\n border: none;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n}\n\n.vemly-send:hover:not(:disabled) {\n background: var(--vemly-primary-hover);\n}\n\n.vemly-send:disabled {\n background: var(--vemly-border);\n color: var(--vemly-text-muted);\n cursor: default;\n}\n\n.vemly-branding {\n font-size: 11px;\n text-align: center;\n color: var(--vemly-text-muted);\n margin-top: 8px;\n}\n\n.vemly-branding a {\n color: var(--vemly-text-secondary);\n text-decoration: none;\n font-weight: 500;\n}\n\n/* Typing */\n.vemly-typing {\n display: flex;\n gap: 4px;\n padding: 14px 16px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n}\n\n.vemly-dot {\n width: 6px;\n height: 6px;\n background: var(--vemly-text-muted);\n border-radius: 50%;\n animation: vemly-bounce 1.4s infinite ease-in-out;\n}\n\n.vemly-dot:nth-child(1) { animation-delay: -0.32s; }\n.vemly-dot:nth-child(2) { animation-delay: -0.16s; }\n\n@keyframes vemly-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* Mobile Optimizations */\n@media (max-width: 480px) {\n .vemly-widget-container,\n .vemly-widget-container[data-position="right"],\n .vemly-widget-container[data-position="left"] {\n bottom: 0;\n right: 0;\n left: 0;\n padding: 0;\n gap: 0;\n align-items: stretch;\n }\n \n .vemly-window {\n width: 100%;\n height: 100dvh; /* Dynamic viewport height for mobile browsers */\n height: 100vh; /* Fallback for older browsers */\n max-width: none;\n max-height: none;\n border-radius: 0;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n /* Support for iOS safe areas */\n @supports (padding: env(safe-area-inset-top)) {\n .vemly-header {\n padding-top: calc(20px + env(safe-area-inset-top));\n }\n \n .vemly-input-container {\n padding-bottom: calc(16px + env(safe-area-inset-bottom));\n }\n }\n \n .vemly-bubble {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483648;\n }\n \n /* Hide bubble when window is open on mobile */\n .vemly-window.open ~ .vemly-bubble {\n display: none;\n }\n \n /* Larger touch targets for mobile */\n .vemly-close,\n .vemly-back-btn {\n min-width: 44px;\n min-height: 44px;\n padding: 10px;\n }\n \n .vemly-session-item {\n padding: 14px 16px;\n min-height: 44px;\n }\n \n .vemly-start-btn {\n min-height: 48px;\n font-size: 15px;\n }\n \n /* Prevent body scroll when widget is open */\n .vemly-window.open {\n overscroll-behavior: contain;\n }\n \n .vemly-messages {\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n \n /* Input area adjustments for mobile */\n .vemly-input-wrapper {\n padding: 10px 10px 10px 16px;\n }\n \n .vemly-send {\n width: 40px;\n height: 40px;\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 481px) and (max-width: 768px) {\n .vemly-window {\n width: 380px;\n max-height: calc(100dvh - 100px);\n max-height: calc(100vh - 100px); /* Fallback */\n }\n}\n\n/* Touch optimizations for all touch devices */\n@media (pointer: coarse) {\n .vemly-bubble,\n .vemly-close,\n .vemly-back-btn,\n .vemly-send,\n .vemly-session-item,\n .vemly-start-btn {\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n}\n',this.shadowRoot.appendChild(n)}render(){if(!this.shadowRoot||!this.client)return;let t=document.createElement("div");this.shadowRoot.appendChild(t),function(t,i){var r,l,s;n.h&&n.h(t,i),r=i.o,l=[],s=[],C(i,t=i.o=y(v,null,[t]),r||u,u,i.namespaceURI,r?null:i.firstChild?e.call(i.childNodes):null,l,r?r.m:i.firstChild,!1,s),I(l,t,s)}(y(Be,{client:this.client}),t)}};typeof window<"u"&&(window.Vemly=Je)}();
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var e=require("preact"),n=require("preact/hooks"),t=require("lucide-preact"),i=require("marked"),a=require("preact/jsx-runtime"),o="0.1.8";function r({client:e}){let[r,l]=n.useState(!1),[s,d]=n.useState("home"),[c,m]=n.useState([]),[p,y]=n.useState([]),[v,h]=n.useState(""),[f,g]=n.useState(!1),[u,b]=n.useState(!1),[x,w]=n.useState(!1),[k,S]=n.useState(null),[N,D]=n.useState(null),z=n.useRef(null),[C,T]=n.useState(null),I=n.useRef(null),V=n.useRef(null),K=n.useRef(0);n.useEffect(()=>{I.current=C},[C]);let[j,O]=n.useState({}),[A,E]=n.useState("#5046e5"),[$,_]=n.useState(24),[F,J]=n.useState("right"),[P,R]=n.useState("light"),[B,q]=n.useState("#ffffff"),[H,M]=n.useState("#ffffff"),[W,Y]=n.useState("message"),[L,U]=n.useState(!0),[G,Q]=n.useState(!0),[X,Z]=n.useState(!0),[ee,ne]=n.useState(!0),[te,ie]=n.useState(!1);n.useEffect(()=>{console.log(`[Vemly SDK v${o}] Initializing widget...`),e.getWidgetConfig().then(n=>{if(n){if(console.log(`[Vemly SDK v${o}] Config loaded:`,n),"error"===n.status)return console.error("[Vemly SDK] Error loading widget:",n.message),Q(!1),void ie(!0);if(0===Object.keys(n).length)return console.warn("[Vemly SDK] Empty config received, disabling widget"),Q(!1),void ie(!0);void 0!==n.widgetEnabled&&Q(n.widgetEnabled),void 0!==n.aiMessagingEnabled&&Z(n.aiMessagingEnabled);let t=n.config||{};if(O(t),t.primaryColor&&E(t.primaryColor),t.defaultAgentName&&T(t.defaultAgentName),void 0!==t.borderRadius&&_(t.borderRadius),t.position&&J(t.position),t.theme&&R(t.theme),t.launcherIcon&&Y(t.launcherIcon),void 0!==t.showBranding&&U(t.showBranding),t.websiteUrl&&typeof window<"u")try{let n=new URL(t.websiteUrl).origin,i=window.location.origin,a=i.includes("localhost")||i.includes("127.0.0.1"),o=e.apiUrl?.includes("localhost")||e.apiUrl?.includes("127.0.0.1");ne(n===i||a||o)}catch{ne(!0)}else ne(!0)}ie(!0)})},[e]),n.useEffect(()=>{r&&("home"===s&&re(),ae())},[r,s]),n.useEffect(()=>{ae()},[p,f]);let ae=()=>{z.current?.scrollIntoView({behavior:"smooth"})},oe=()=>l(!r),re=async()=>{let n=await e.getHistory();m(n)},le=()=>{console.log("[Vemly SDK v0.1.8] Connecting to stream..."),e.connectStream((e,n)=>{if(console.log("[Vemly SDK] Stream event:",e,"| Raw data:",JSON.stringify(n),"| Type:",typeof n),"message-stream"===e){let e;"object"==typeof n&&null!==n?(console.log("[Vemly SDK] message-stream object - type:",n.type,"| text:",n.text,"| content:",n.content),"text"===n.type&&"string"==typeof n.text||"string"==typeof n.text?e=n.text:"string"==typeof n.content&&(e=n.content)):"string"==typeof n&&(e=n),console.log("[Vemly SDK] Extracted token:",JSON.stringify(e)),e&&"undefined"!==e&&"null"!==e?ce(e):console.warn("[Vemly SDK] Skipping invalid token:",e)}else if("token"===e)n&&"string"==typeof n&&"undefined"!==n&&"null"!==n&&ce(n);else if("message-complete"===e)g(!1);else if("message"===e){if(!n||!n.id)return;if(console.log("[Vemly SDK] Received message event:",n),"undefined"===("string"==typeof n.content?n.content.trim():n.content)||!n.content)return void console.warn("[Vemly SDK] Ignored 'undefined' message content:",n);y(e=>{if(e.some(e=>e.id===n.id))return e;if("user"===n.role){let t=e.findIndex(e=>e.id.startsWith("user_")&&e.content===n.content);if(-1!==t){let i=[...e],a=n.content&&"undefined"!==n.content.trim()?n.content:i[t].content;return i[t]={id:n.id,role:n.role,content:a,createdAt:n.createdAt,agentName:void 0},i}}return g(!1),[...e,{id:n.id,role:n.role,content:n.content,createdAt:n.createdAt,agentName:n.agentName||("assistant"===n.role?C:void 0),agentAvatar:n.agentAvatar}]}),g(!1)}else if("human-takeover"===e){let e=n.isHumanTakeover;b(e),e?(g(!1),n.userName&&S(n.userName),n.agentAvatar&&D(n.agentAvatar),y(e=>{if(e.some(e=>"system-takeover"===e.id))return e;let t=n.userName||"a team member";return[...e,{id:"system-takeover",role:"system",content:`You're now connected with ${t}.`,createdAt:(new Date).toISOString()}]})):(S(null),D(null))}else"support-typing"===e?n.isTyping?(g(!0),n.userName&&S(n.userName),n.agentAvatar&&D(n.agentAvatar)):g(!1):"thinking-start"===e||"typing-start"===e?X&&g(!0):"conversation-closed"===e&&(w(!0),g(!1),y(e=>e.some(e=>"system-closed"===e.id)?e:[...e,{id:"system-closed",role:"system",content:"This conversation has been closed. Thank you for reaching out!",createdAt:(new Date).toISOString()}]))})},se=()=>{e.sessionId=null,T(j.defaultAgentName||null),y([]),w(!1),b(!1),S(null),D(null),d("chat")},de=async()=>{if(!v.trim())return;let n="user_"+Date.now(),t={id:n,role:"user",content:v,createdAt:(new Date).toISOString()};y(e=>[...e,t]),h(""),u||g(!0);try{let i=await e.sendMessage(t.content);i.isHumanTakeover&&(b(!0),g(!1),T("Support Team"),y(e=>e.some(e=>"system-takeover"===e.id)?e:[...e,{id:"system-takeover",role:"system",content:"A team member will be with you shortly.",createdAt:(new Date).toISOString()}])),i.message?.message?.id&&y(e=>e.map(e=>e.id===n?{...e,id:i.message.message.id}:e)),i.agentName&&!i.isHumanTakeover&&T(i.agentName),le()}catch(e){console.error("Vemly Send Error:",e),g(!1)}},ce=e=>{!e||"undefined"===e||"null"===e||y(n=>{let t=n[n.length-1];if(t&&"assistant"===t.role){let i=t.content||"";return[...n.slice(0,-1),{...t,content:i+e}]}return[...n,{id:"bot_"+Date.now(),role:"assistant",content:e,createdAt:(new Date).toISOString(),agentName:I.current||void 0}]})},me="dark"===P,pe="glass"===P,ye={"--vemly-primary":A,"--vemly-primary-hover":A,"--vemly-radius":`${$}px`,"--vemly-header-text":B,"--vemly-user-text":H,"--vemly-bg":me?"#1f2937":pe?"rgba(255, 255, 255, 0.8)":"#ffffff","--vemly-surface":me?"#111827":pe?"rgba(249, 250, 251, 0.5)":"#f9fafb","--vemly-text":me?"#f9fafb":"#111827","--vemly-text-secondary":me?"#9ca3af":"#6b7280","--vemly-text-muted":me?"#6b7280":"#9ca3af","--vemly-border":me?"#374151":"#e5e7eb","--vemly-user-bg":"#111827","--vemly-ai-bg":me?"#374151":"#ffffff"},ve=pe?{backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)"}:{},he=j.title||"Vemly",fe=j.titleAlignment||"left";return te&&G&&ee&&G?a.jsxs("div",{className:"vemly-widget-container",style:ye,"data-position":F,children:[a.jsxs("div",{className:"vemly-window "+(r?"open":""),style:ve,children:[a.jsxs("div",{className:"vemly-header",style:{color:B},children:[a.jsxs("div",{className:"vemly-header-top",children:[a.jsx("div",{className:"vemly-brand",children:"chat"===s&&a.jsx("button",{className:"vemly-back-btn",onClick:()=>{w(!1),d("home"),re()},children:a.jsx(t.ChevronLeft,{size:20})})}),a.jsx("button",{className:"vemly-close",onClick:oe,style:{color:B},children:a.jsx(t.X,{size:20})})]}),a.jsxs("div",{className:"vemly-header-content",style:{textAlign:fe},children:[a.jsx("h3",{children:he}),a.jsx("p",{style:{opacity:.9},children:"home"===s?j.greeting||"We're here to help":"Ask us anything"})]}),a.jsxs("div",{className:"vemly-status",style:{justifyContent:"center"===fe?"center":"flex-start"},children:[a.jsx("span",{className:"vemly-status-dot"}),a.jsx("span",{style:{opacity:.9},children:"We typically reply instantly"})]})]}),"home"===s?a.jsx("div",{className:"vemly-home",children:a.jsxs("div",{className:"vemly-home-content",children:[a.jsxs("button",{onClick:se,className:"vemly-start-btn",style:{backgroundColor:me?"#374151":"#111827",color:"#ffffff"},children:[a.jsx(t.MessageCircle,{size:18}),a.jsx("span",{children:"Start a conversation"})]}),c.length>0&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"vemly-section-title",children:"Recent conversations"}),a.jsx("div",{className:"vemly-session-list",children:c.slice(0,5).map(n=>a.jsxs("div",{onClick:()=>(async(n,t)=>{e.sessionId=n,T(t||null),d("chat"),y([]);try{let i=await fetch(`${e.apiUrl}/chat/session/${n}`,{headers:{"x-vemly-api-key":e.apiKey,"Content-Type":"application/json"}});if(i.ok){let e=await i.json(),n=!!e.session?.isHumanTakeover;n&&b(!0);let a=n?"Support Team":e.agent?.name||t;if(a&&T(a),e.session?.closedAt&&w(!0),e.messages){let n=e.messages.map(e=>({...e,agentName:e.agentName||("assistant"===e.role?a:void 0),agentAvatar:e.agentAvatar}));y(n)}}le()}catch(e){console.error("Failed to load conversation history:",e)}})(n.id,n.agentName),className:"vemly-session-item",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[a.jsx("div",{className:"vemly-session-title",style:{color:me?"#fff":"#111827"},children:n.title||"New Conversation"}),a.jsx("div",{className:"vemly-session-date",children:new Date(n.createdAt||Date.now()).toLocaleDateString()})]},n.id))})]}),0===c.length&&a.jsx("div",{className:"vemly-empty",children:"No previous conversations"})]})}):a.jsxs("div",{className:"vemly-messages",style:{backgroundColor:me?"#1f2937":"glass"===P?"transparent":"#f9fafb"},children:[p.map((e,n)=>a.jsx("div",{className:`vemly-message-group ${e.role}`,children:"system"===e.role?a.jsx("div",{className:"vemly-message-content",children:a.jsx("p",{children:e.content})}):a.jsxs(a.Fragment,{children:[("assistant"===e.role||"tool"===e.role)&&a.jsxs("div",{className:"vemly-sender",children:[e.agentAvatar?a.jsx("img",{src:e.agentAvatar,alt:e.agentName||"Bot",className:"vemly-sender-avatar-img"}):a.jsx("div",{className:"vemly-sender-avatar",children:(e.agentName||C||"Bot").substring(0,2).toUpperCase()}),a.jsx("div",{className:"vemly-sender-name",style:{color:me?"#e5e7eb":"#111827"},children:(()=>{let n=e.agentName||C||"Bot";return"undefined"!==n&&n?n:"Bot"})()})]}),a.jsx("div",{className:"vemly-message-content",children:a.jsx("div",{dangerouslySetInnerHTML:{t:i.marked.parse(e.content&&"undefined"!==e.content.trim()?e.content:"")}})})]})},e.id||n)),f&&(()=>{let e=u&&k?k:C&&"undefined"!==C?C:"Vemly";return a.jsxs("div",{className:"vemly-message-group assistant",children:[a.jsxs("div",{className:"vemly-sender",children:[u&&N?a.jsx("img",{src:N,alt:e,className:"vemly-sender-avatar-img"}):a.jsx("div",{className:"vemly-sender-avatar",children:e.substring(0,2).toUpperCase()}),a.jsx("div",{className:"vemly-sender-name",children:e})]}),a.jsxs("div",{className:"vemly-typing",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[a.jsx("div",{className:"vemly-dot"}),a.jsx("div",{className:"vemly-dot"}),a.jsx("div",{className:"vemly-dot"})]})]})})(),a.jsx("div",{ref:z})]}),"chat"===s&&a.jsxs("div",{className:"vemly-input-container",style:{backgroundColor:me?"#1f2937":"#ffffff",borderColor:me?"#374151":"#e5e7eb",opacity:x?.7:1},children:[x?a.jsxs("div",{style:{padding:"12px 16px",textAlign:"center"},children:[a.jsx("p",{style:{fontSize:"13px",color:me?"#9ca3af":"#6b7280",marginBottom:"12px"},children:"This conversation is closed."}),a.jsxs("button",{onClick:se,style:{display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 16px",backgroundColor:A,color:"#ffffff",border:"none",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:[a.jsx(t.MessageCircle,{size:16}),"Start New Conversation"]})]}):a.jsxs("div",{className:"vemly-input-wrapper",style:{backgroundColor:me?"#111827":"#f9fafb",borderColor:me?"#374151":"#e5e7eb"},children:[a.jsx("textarea",{className:"vemly-input",placeholder:"Send a message...",value:v,onInput:n=>{let t=n.target.value;if(h(t),e.sessionId){let n=Date.now();n-K.current>1500&&(e.sendTyping(!0),K.current=n),V.current&&clearTimeout(V.current),V.current=setTimeout(()=>{e.sendTyping(!1),V.current=null,K.current=0},3e3)}},onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),de())},rows:1,style:{color:me?"#f3f4f6":"#111827"}}),a.jsx("button",{className:"vemly-send",onClick:de,disabled:!v.trim()||f,children:a.jsx(t.Send,{size:16})})]}),L&&a.jsxs("div",{className:"vemly-branding",children:["Powered by ",a.jsx("a",{href:"https://usevemly.com",target:"_blank",rel:"noopener",children:"Vemly"})]})]})]}),a.jsx("button",{className:"vemly-bubble",onClick:oe,children:r?a.jsx(t.X,{size:24}):"bot"===W?a.jsx(t.Bot,{size:24}):a.jsx(t.MessageCircle,{size:24})})]}):null}var l=class{apiUrl;tenantId;agentId;apiKey;deviceId;sessionId=null;sseSource=null;sseController=null;constructor(e){this.apiUrl=e.apiUrl||"https://api.usevemly.com",this.tenantId=e.tenantId,this.agentId=e.agentId,this.apiKey=e.apiKey,this.deviceId=this.getOrCreateDeviceId()}getOrCreateDeviceId(){if(typeof window>"u")return"server";let e=localStorage.getItem("vemly_device_id");return e||(e="dev_"+Math.random().toString(36).substring(2,15),localStorage.setItem("vemly_device_id",e)),e}async createSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session`,{method:"POST",headers:e,body:JSON.stringify({...this.tenantId?{tenantId:this.tenantId}:{},agentId:this.agentId,deviceId:this.deviceId})});if(!n.ok)throw new Error("Failed to create session");let t=await n.json();return this.sessionId=t.session?.id||t.id,{session:t.session||t,agentName:t.agent?.name}}async resumeSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session/resume`,{method:"POST",headers:e,body:JSON.stringify({tenantId:this.tenantId,deviceId:this.deviceId})});if(!n.ok)return null;let t=await n.json();return this.sessionId=t.session?.id||null,t.session}async getHistory(e=20){let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey);let t={deviceId:this.deviceId,limit:e.toString()};this.tenantId&&(t.tenantId=this.tenantId);let i=new URLSearchParams(t),a=await fetch(`${this.apiUrl}/chat/sessions/device?${i.toString()}`,{method:"GET",headers:n});return a.ok&&(await a.json()).sessions||[]}async getWidgetConfig(){try{let e=`${this.apiUrl}/chat/config`;this.tenantId&&(e+=`/${this.tenantId}`);let n={};return this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await(await fetch(e,{method:"GET",headers:n})).json()||{}}catch(e){return console.error("Failed to fetch widget config",e),{}}}async sendMessage(e,n){let t,i;if(!this.sessionId){let e=await this.createSession();t=e.agentName,i=e.session.isHumanTakeover}let a={"Content-Type":"application/json"};this.apiKey&&(a["x-vemly-api-key"]=this.apiKey);let o=await fetch(`${this.apiUrl}/chat/message`,{method:"POST",headers:a,body:JSON.stringify({sessionId:this.sessionId,content:e,role:"user"})});if(!o.ok)throw new Error("Failed to send message");return{message:await o.json(),agentName:t,isHumanTakeover:i}}async sendTyping(e){if(!this.sessionId)return;let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await fetch(`${this.apiUrl}/chat/typing`,{method:"POST",headers:n,body:JSON.stringify({sessionId:this.sessionId,isTyping:e})})}connectStream(e){if(!this.sessionId)return;this.sseController&&this.sseController.abort(),this.sseController=new AbortController;let n=`${this.apiUrl}/chat/stream/${this.sessionId}`,t={"Content-Type":"application/json"};this.apiKey&&(t["x-vemly-api-key"]=this.apiKey),fetch(n,{method:"GET",headers:t,signal:this.sseController.signal}).then(async n=>{if(!n.ok||!n.body)throw new Error(`SSE Error: ${n.status}`);let t=n.body.getReader(),i=new TextDecoder,a="";for(;;){let{value:n,done:o}=await t.read();if(o)break;a+=i.decode(n,{stream:!0});let r=a.split("\n\n");a=r.pop()||"";for(let n of r){if(!n.trim())continue;let t=n.split("\n"),i="message",a=null;for(let e of t)if(e.startsWith("event: "))i=e.substring(7).trim();else if(e.startsWith("data: ")){let n=e.substring(6).trim();if(console.log("[Vemly SDK] SSE raw line:",e,"| rawData:",n),!n||"undefined"===n||"null"===n){console.warn("[Vemly SDK] Skipping empty/undefined rawData");continue}try{a=JSON.parse(n),console.log("[Vemly SDK] Parsed SSE data:",JSON.stringify(a),"| type:",typeof a)}catch{a=n,console.log("[Vemly SDK] SSE data as string:",a)}}null!=a&&(console.log("[Vemly SDK] Calling onData with event:",i,"data:",JSON.stringify(a)),e(i,a))}}}).catch(e=>{"AbortError"!==e.name&&console.error("Stream Error:",e)})}disconnectStream(){this.sseSource?.close(),this.sseSource=null,this.sseController?.abort(),this.sseController=null}getSessionId(){return this.sessionId}},s=new class{client=null;container=null;shadowRoot=null;init(e){if(this.client)console.warn("[VemlySDK] Already initialized");else if(e.apiKey)try{console.log("[VemlySDK] Initializing with API key..."),this.client=new l(e),this.createContainer(),this.render(),console.log("[VemlySDK] Initialization complete")}catch(e){console.error("[VemlySDK] Initialization failed:",e)}else console.error("[VemlySDK] apiKey is required")}createContainer(){let e=document.getElementById("vemly-sdk-root");e&&e.remove(),this.container=document.createElement("div"),this.container.id="vemly-sdk-root",document.body.appendChild(this.container),this.shadowRoot=this.container.attachShadow({mode:"open"});let n=document.createElement("style");n.textContent='\n@import url(\'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\');\n\n:host {\n --vemly-primary: #5046e5;\n --vemly-primary-hover: #4338ca;\n --vemly-bg: #ffffff;\n --vemly-surface: #f9fafb;\n --vemly-text: #111827;\n --vemly-text-secondary: #6b7280;\n --vemly-text-muted: #9ca3af;\n --vemly-border: #e5e7eb;\n --vemly-user-bg: #111827;\n --vemly-ai-bg: #ffffff;\n --vemly-radius: 16px;\n --vemly-font: \'Inter\', -apple-system, BlinkMacSystemFont, \'Segoe UI\', sans-serif;\n}\n\n.vemly-widget-container {\n position: fixed;\n bottom: 20px;\n z-index: 2147483647;\n font-family: var(--vemly-font);\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.vemly-widget-container[data-position="right"] {\n right: 20px;\n left: auto;\n align-items: flex-end;\n}\n\n.vemly-widget-container[data-position="left"] {\n left: 20px;\n right: auto;\n align-items: flex-start;\n}\n\n.vemly-widget-container * {\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n/* Launcher */\n.vemly-bubble {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16);\n transition: all 0.2s ease;\n border: none;\n outline: none;\n}\n\n.vemly-bubble:hover {\n background: var(--vemly-primary-hover);\n transform: scale(1.05);\n}\n\n.vemly-bubble:active {\n transform: scale(0.95);\n}\n\n/* Window */\n.vemly-window {\n width: 380px;\n height: 600px;\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 40px);\n background: var(--vemly-bg);\n border-radius: var(--vemly-radius);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom right;\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n transition: all 0.2s ease;\n visibility: hidden;\n}\n\n.vemly-window.open {\n opacity: 1;\n transform: scale(1) translateY(0);\n visibility: visible;\n}\n\n/* Header */\n.vemly-header {\n background: var(--vemly-primary);\n color: white;\n padding: 20px;\n flex-shrink: 0;\n}\n\n.vemly-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.vemly-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.vemly-back-btn {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-back-btn:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-close {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-close:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-header-content {\n margin-top: 16px;\n}\n\n.vemly-header-content h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.vemly-header-content p {\n margin: 4px 0 0;\n font-size: 14px;\n opacity: 0.85;\n}\n\n.vemly-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 12px;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.vemly-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n}\n\n/* Messages Area */\n.vemly-messages {\n flex: 1;\n background: var(--vemly-surface);\n padding: 16px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.vemly-message-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 85%;\n animation: vemly-fade-in 0.25s ease-out;\n}\n\n@keyframes vemly-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.vemly-message-group.assistant {\n align-self: flex-start;\n}\n\n.vemly-message-group.user {\n align-self: flex-end;\n}\n\n.vemly-sender {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.vemly-sender-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vemly-sender-avatar-img {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.vemly-sender-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--vemly-text);\n}\n\n.vemly-message-content {\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.vemly-message-group.assistant .vemly-message-content {\n background: white;\n color: var(--vemly-text);\n border: 1px solid var(--vemly-border);\n border-top-left-radius: 4px;\n}\n\n.vemly-message-group.user .vemly-message-content {\n background: var(--vemly-user-bg);\n color: white;\n border-top-right-radius: 4px;\n}\n\n.vemly-message-content p { margin: 0 0 8px; }\n.vemly-message-content p:last-child { margin: 0; }\n.vemly-message-content a { color: inherit; text-decoration: underline; }\n.vemly-message-content code {\n background: rgba(0,0,0,0.06);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n.vemly-message-group.user .vemly-message-content code {\n background: rgba(255,255,255,0.15);\n}\n\n/* Home View */\n.vemly-home {\n flex: 1;\n background: var(--vemly-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.vemly-home-content {\n padding: 16px;\n}\n\n.vemly-start-btn {\n width: 100%;\n padding: 14px 16px;\n background: var(--vemly-text);\n color: white;\n border: none;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.15s;\n}\n\n.vemly-start-btn:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n}\n\n.vemly-section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--vemly-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 20px 0 12px;\n}\n\n.vemly-session-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.vemly-session-item {\n padding: 12px 14px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.vemly-session-item:hover {\n border-color: var(--vemly-text-muted);\n background: #fafafa;\n}\n\n.vemly-session-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--vemly-text);\n margin-bottom: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vemly-session-date {\n font-size: 12px;\n color: var(--vemly-text-muted);\n}\n\n.vemly-empty {\n text-align: center;\n padding: 24px;\n color: var(--vemly-text-muted);\n font-size: 14px;\n}\n\n/* Input */\n.vemly-input-container {\n padding: 12px 16px 16px;\n background: white;\n border-top: 1px solid var(--vemly-border);\n}\n\n.vemly-input-wrapper {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n background: var(--vemly-surface);\n border: 1px solid var(--vemly-border);\n border-radius: 12px;\n padding: 8px 8px 8px 14px;\n transition: all 0.15s;\n}\n\n.vemly-input-wrapper:focus-within {\n border-color: var(--vemly-primary);\n box-shadow: 0 0 0 3px rgba(80, 70, 229, 0.1);\n}\n\n.vemly-input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 16px; /* 16px prevents iOS zoom on focus */\n color: var(--vemly-text);\n max-height: 100px;\n resize: none;\n font-family: inherit;\n padding: 4px 0;\n line-height: 1.4;\n -webkit-appearance: none; /* Remove iOS styling */\n appearance: none;\n}\n\n.vemly-input::placeholder {\n color: var(--vemly-text-muted);\n}\n\n.vemly-send {\n background: var(--vemly-primary);\n color: white;\n border: none;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n}\n\n.vemly-send:hover:not(:disabled) {\n background: var(--vemly-primary-hover);\n}\n\n.vemly-send:disabled {\n background: var(--vemly-border);\n color: var(--vemly-text-muted);\n cursor: default;\n}\n\n.vemly-branding {\n font-size: 11px;\n text-align: center;\n color: var(--vemly-text-muted);\n margin-top: 8px;\n}\n\n.vemly-branding a {\n color: var(--vemly-text-secondary);\n text-decoration: none;\n font-weight: 500;\n}\n\n/* Typing */\n.vemly-typing {\n display: flex;\n gap: 4px;\n padding: 14px 16px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n}\n\n.vemly-dot {\n width: 6px;\n height: 6px;\n background: var(--vemly-text-muted);\n border-radius: 50%;\n animation: vemly-bounce 1.4s infinite ease-in-out;\n}\n\n.vemly-dot:nth-child(1) { animation-delay: -0.32s; }\n.vemly-dot:nth-child(2) { animation-delay: -0.16s; }\n\n@keyframes vemly-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* Mobile Optimizations */\n@media (max-width: 480px) {\n .vemly-widget-container,\n .vemly-widget-container[data-position="right"],\n .vemly-widget-container[data-position="left"] {\n bottom: 0;\n right: 0;\n left: 0;\n padding: 0;\n gap: 0;\n align-items: stretch;\n }\n \n .vemly-window {\n width: 100%;\n height: 100dvh; /* Dynamic viewport height for mobile browsers */\n height: 100vh; /* Fallback for older browsers */\n max-width: none;\n max-height: none;\n border-radius: 0;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n /* Support for iOS safe areas */\n @supports (padding: env(safe-area-inset-top)) {\n .vemly-header {\n padding-top: calc(20px + env(safe-area-inset-top));\n }\n \n .vemly-input-container {\n padding-bottom: calc(16px + env(safe-area-inset-bottom));\n }\n }\n \n .vemly-bubble {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483648;\n }\n \n /* Hide bubble when window is open on mobile */\n .vemly-window.open ~ .vemly-bubble {\n display: none;\n }\n \n /* Larger touch targets for mobile */\n .vemly-close,\n .vemly-back-btn {\n min-width: 44px;\n min-height: 44px;\n padding: 10px;\n }\n \n .vemly-session-item {\n padding: 14px 16px;\n min-height: 44px;\n }\n \n .vemly-start-btn {\n min-height: 48px;\n font-size: 15px;\n }\n \n /* Prevent body scroll when widget is open */\n .vemly-window.open {\n overscroll-behavior: contain;\n }\n \n .vemly-messages {\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n \n /* Input area adjustments for mobile */\n .vemly-input-wrapper {\n padding: 10px 10px 10px 16px;\n }\n \n .vemly-send {\n width: 40px;\n height: 40px;\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 481px) and (max-width: 768px) {\n .vemly-window {\n width: 380px;\n max-height: calc(100dvh - 100px);\n max-height: calc(100vh - 100px); /* Fallback */\n }\n}\n\n/* Touch optimizations for all touch devices */\n@media (pointer: coarse) {\n .vemly-bubble,\n .vemly-close,\n .vemly-back-btn,\n .vemly-send,\n .vemly-session-item,\n .vemly-start-btn {\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n}\n',this.shadowRoot.appendChild(n)}render(){if(!this.shadowRoot||!this.client)return;let n=document.createElement("div");this.shadowRoot.appendChild(n),e.render(e.h(r,{client:this.client}),n)}},d=s;typeof window<"u"&&(window.Vemly=s),module.exports=d;
1
+ "use strict";var e=require("preact"),n=require("preact/hooks"),t=require("lucide-preact"),i=require("marked"),a=require("preact/jsx-runtime"),o="0.1.8";function l({client:e}){let[l,r]=n.useState(!1),[s,d]=n.useState("home"),[c,m]=n.useState([]),[p,y]=n.useState([]),[v,h]=n.useState(""),[f,g]=n.useState(!1),[u,b]=n.useState(!1),[x,w]=n.useState(!1),[k,S]=n.useState(null),[N,D]=n.useState(null),C=n.useRef(null),[z,V]=n.useState(null),K=n.useRef(null),T=n.useRef(null),I=n.useRef(0);n.useEffect(()=>{K.current=z},[z]);let[O,j]=n.useState({}),[A,E]=n.useState("#5046e5"),[$,J]=n.useState(24),[_,F]=n.useState("right"),[M,P]=n.useState("light"),[B,L]=n.useState("#ffffff"),[R,W]=n.useState("#ffffff"),[q,H]=n.useState("message"),[Y,U]=n.useState(!0),[G,Q]=n.useState(!0),[X,Z]=n.useState(!0),[ee,ne]=n.useState(!0),[te,ie]=n.useState(!1);n.useEffect(()=>{console.log(`[Vemly SDK v${o}] Initializing widget...`),e.getWidgetConfig().then(n=>{if(n){if(console.log(`[Vemly SDK v${o}] Config loaded:`,n),"error"===n.status)return console.error("[Vemly SDK] Error loading widget:",n.message),Q(!1),void ie(!0);if(0===Object.keys(n).length)return console.warn("[Vemly SDK] Empty config received, disabling widget"),Q(!1),void ie(!0);void 0!==n.widgetEnabled&&Q(n.widgetEnabled),void 0!==n.aiMessagingEnabled&&Z(n.aiMessagingEnabled);let t=n.config||{};if(j(t),t.primaryColor&&E(t.primaryColor),t.defaultAgentName&&V(t.defaultAgentName),void 0!==t.borderRadius&&J(t.borderRadius),t.position&&F(t.position),t.theme&&P(t.theme),t.launcherIcon&&H(t.launcherIcon),void 0!==t.showBranding&&U(t.showBranding),t.websiteUrl&&typeof window<"u")try{let n=new URL(t.websiteUrl).origin,i=window.location.origin,a=i.includes("localhost")||i.includes("127.0.0.1"),o=e.apiUrl?.includes("localhost")||e.apiUrl?.includes("127.0.0.1");ne(n===i||a||o)}catch{ne(!0)}else ne(!0)}ie(!0)})},[e]),n.useEffect(()=>{l&&("home"===s&&le(),ae())},[l,s]),n.useEffect(()=>{ae()},[p,f]);let ae=()=>{C.current?.scrollIntoView({behavior:"smooth"})},oe=()=>r(!l),le=async()=>{let n=await e.getHistory();m(n)},re=()=>{console.log("[Vemly SDK v0.1.8] Connecting to stream..."),e.connectStream((e,n)=>{if(console.log("[Vemly SDK] Stream event:",e,"| Raw data:",JSON.stringify(n),"| Type:",typeof n),"message-stream"===e){let e;"object"==typeof n&&null!==n?(console.log("[Vemly SDK] message-stream object - type:",n.type,"| text:",n.text,"| content:",n.content),"text"===n.type&&"string"==typeof n.text||"string"==typeof n.text?e=n.text:"string"==typeof n.content&&(e=n.content)):"string"==typeof n&&(e=n),console.log("[Vemly SDK] Extracted token:",JSON.stringify(e)),e&&"undefined"!==e&&"null"!==e?ce(e):console.warn("[Vemly SDK] Skipping invalid token:",e)}else if("token"===e)n&&"string"==typeof n&&"undefined"!==n&&"null"!==n&&ce(n);else if("message-complete"===e)g(!1);else if("message"===e){if(!n||!n.id)return;if(console.log("[Vemly SDK] Received message event:",n),"undefined"===("string"==typeof n.content?n.content.trim():n.content)||!n.content)return void console.warn("[Vemly SDK] Ignored 'undefined' message content:",n);y(e=>{if(e.some(e=>e.id===n.id))return e;if("user"===n.role){let t=e.findIndex(e=>e.id.startsWith("user_")&&e.content===n.content);if(-1!==t){let i=[...e],a=n.content&&"undefined"!==n.content.trim()?n.content:i[t].content;return i[t]={id:n.id,role:n.role,content:a,createdAt:n.createdAt,agentName:void 0},i}}return g(!1),[...e,{id:n.id,role:n.role,content:n.content,createdAt:n.createdAt,agentName:n.agentName||("assistant"===n.role?z:void 0),agentAvatar:n.agentAvatar}]}),g(!1)}else if("human-takeover"===e){let e=n.isHumanTakeover;b(e),e?(g(!1),n.userName&&S(n.userName),n.agentAvatar&&D(n.agentAvatar),y(e=>{if(e.some(e=>"system-takeover"===e.id))return e;let t=n.userName||"a team member";return[...e,{id:"system-takeover",role:"system",content:`You're now connected with ${t}.`,createdAt:(new Date).toISOString()}]})):(S(null),D(null))}else"support-typing"===e?n.isTyping?(g(!0),n.userName&&S(n.userName),n.agentAvatar&&D(n.agentAvatar)):g(!1):"thinking-start"===e||"typing-start"===e?X&&g(!0):"conversation-closed"===e&&(w(!0),g(!1),y(e=>e.some(e=>"system-closed"===e.id)?e:[...e,{id:"system-closed",role:"system",content:"This conversation has been closed. Thank you for reaching out!",createdAt:(new Date).toISOString()}]))})},se=()=>{e.sessionId=null,V(O.defaultAgentName||null),y([]),w(!1),b(!1),S(null),D(null),d("chat")},de=async()=>{if(!v.trim())return;let n="user_"+Date.now(),t={id:n,role:"user",content:v,createdAt:(new Date).toISOString()};y(e=>[...e,t]),h(""),u||g(!0);try{let i=await e.sendMessage(t.content);i.isHumanTakeover&&(b(!0),g(!1),V("Support Team"),y(e=>e.some(e=>"system-takeover"===e.id)?e:[...e,{id:"system-takeover",role:"system",content:"A team member will be with you shortly.",createdAt:(new Date).toISOString()}])),i.message?.message?.id&&y(e=>e.map(e=>e.id===n?{...e,id:i.message.message.id}:e)),i.agentName&&!i.isHumanTakeover&&V(i.agentName),re()}catch(e){console.error("Vemly Send Error:",e),g(!1)}},ce=e=>{e&&"undefined"!==e&&"null"!==e?(console.log("[Vemly SDK] updateLastAssistantMessage called with token:",JSON.stringify(e)),y(n=>{console.log("[Vemly SDK] setMessages prev length:",n.length,"last role:",n[n.length-1]?.role);let t=n[n.length-1];if(t&&"assistant"===t.role){let i=(t.content||"")+e;return console.log("[Vemly SDK] Appending to existing message. New content:",JSON.stringify(i.substring(0,50))),[...n.slice(0,-1),{...t,content:i}]}return console.log("[Vemly SDK] Creating NEW assistant message with token:",JSON.stringify(e)),[...n,{id:"bot_"+Date.now(),role:"assistant",content:e,createdAt:(new Date).toISOString(),agentName:K.current||void 0}]})):console.warn("[Vemly SDK] updateLastAssistantMessage BLOCKED invalid token:",e)},me="dark"===M,pe="glass"===M,ye={"--vemly-primary":A,"--vemly-primary-hover":A,"--vemly-radius":`${$}px`,"--vemly-header-text":B,"--vemly-user-text":R,"--vemly-bg":me?"#1f2937":pe?"rgba(255, 255, 255, 0.8)":"#ffffff","--vemly-surface":me?"#111827":pe?"rgba(249, 250, 251, 0.5)":"#f9fafb","--vemly-text":me?"#f9fafb":"#111827","--vemly-text-secondary":me?"#9ca3af":"#6b7280","--vemly-text-muted":me?"#6b7280":"#9ca3af","--vemly-border":me?"#374151":"#e5e7eb","--vemly-user-bg":"#111827","--vemly-ai-bg":me?"#374151":"#ffffff"},ve=pe?{backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)"}:{},he=O.title||"Vemly",fe=O.titleAlignment||"left";return te&&G&&ee&&G?a.jsxs("div",{className:"vemly-widget-container",style:ye,"data-position":_,children:[a.jsxs("div",{className:"vemly-window "+(l?"open":""),style:ve,children:[a.jsxs("div",{className:"vemly-header",style:{color:B},children:[a.jsxs("div",{className:"vemly-header-top",children:[a.jsx("div",{className:"vemly-brand",children:"chat"===s&&a.jsx("button",{className:"vemly-back-btn",onClick:()=>{w(!1),d("home"),le()},children:a.jsx(t.ChevronLeft,{size:20})})}),a.jsx("button",{className:"vemly-close",onClick:oe,style:{color:B},children:a.jsx(t.X,{size:20})})]}),a.jsxs("div",{className:"vemly-header-content",style:{textAlign:fe},children:[a.jsx("h3",{children:he}),a.jsx("p",{style:{opacity:.9},children:"home"===s?O.greeting||"We're here to help":"Ask us anything"})]}),a.jsxs("div",{className:"vemly-status",style:{justifyContent:"center"===fe?"center":"flex-start"},children:[a.jsx("span",{className:"vemly-status-dot"}),a.jsx("span",{style:{opacity:.9},children:"We typically reply instantly"})]})]}),"home"===s?a.jsx("div",{className:"vemly-home",children:a.jsxs("div",{className:"vemly-home-content",children:[a.jsxs("button",{onClick:se,className:"vemly-start-btn",style:{backgroundColor:me?"#374151":"#111827",color:"#ffffff"},children:[a.jsx(t.MessageCircle,{size:18}),a.jsx("span",{children:"Start a conversation"})]}),c.length>0&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"vemly-section-title",children:"Recent conversations"}),a.jsx("div",{className:"vemly-session-list",children:c.slice(0,5).map(n=>a.jsxs("div",{onClick:()=>(async(n,t)=>{e.sessionId=n,V(t||null),d("chat"),y([]);try{let i=await fetch(`${e.apiUrl}/chat/session/${n}`,{headers:{"x-vemly-api-key":e.apiKey,"Content-Type":"application/json"}});if(i.ok){let e=await i.json(),n=!!e.session?.isHumanTakeover;n&&b(!0);let a=n?"Support Team":e.agent?.name||t;if(a&&V(a),e.session?.closedAt&&w(!0),e.messages){let n=e.messages.map(e=>({...e,agentName:e.agentName||("assistant"===e.role?a:void 0),agentAvatar:e.agentAvatar}));y(n)}}re()}catch(e){console.error("Failed to load conversation history:",e)}})(n.id,n.agentName),className:"vemly-session-item",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[a.jsx("div",{className:"vemly-session-title",style:{color:me?"#fff":"#111827"},children:n.title||"New Conversation"}),a.jsx("div",{className:"vemly-session-date",children:new Date(n.createdAt||Date.now()).toLocaleDateString()})]},n.id))})]}),0===c.length&&a.jsx("div",{className:"vemly-empty",children:"No previous conversations"})]})}):a.jsxs("div",{className:"vemly-messages",style:{backgroundColor:me?"#1f2937":"glass"===M?"transparent":"#f9fafb"},children:[p.map((e,n)=>a.jsx("div",{className:`vemly-message-group ${e.role}`,children:"system"===e.role?a.jsx("div",{className:"vemly-message-content",children:a.jsx("p",{children:e.content})}):a.jsxs(a.Fragment,{children:[("assistant"===e.role||"tool"===e.role)&&a.jsxs("div",{className:"vemly-sender",children:[e.agentAvatar?a.jsx("img",{src:e.agentAvatar,alt:e.agentName||"Bot",className:"vemly-sender-avatar-img"}):a.jsx("div",{className:"vemly-sender-avatar",children:(e.agentName||z||"Bot").substring(0,2).toUpperCase()}),a.jsx("div",{className:"vemly-sender-name",style:{color:me?"#e5e7eb":"#111827"},children:(()=>{let n=e.agentName||z||"Bot";return"undefined"!==n&&n?n:"Bot"})()})]}),a.jsx("div",{className:"vemly-message-content",children:a.jsx("div",{dangerouslySetInnerHTML:{t:i.marked.parse(e.content&&"undefined"!==e.content.trim()?e.content:"")}})})]})},e.id||n)),f&&(()=>{let e=u&&k?k:z&&"undefined"!==z?z:"Vemly";return a.jsxs("div",{className:"vemly-message-group assistant",children:[a.jsxs("div",{className:"vemly-sender",children:[u&&N?a.jsx("img",{src:N,alt:e,className:"vemly-sender-avatar-img"}):a.jsx("div",{className:"vemly-sender-avatar",children:e.substring(0,2).toUpperCase()}),a.jsx("div",{className:"vemly-sender-name",children:e})]}),a.jsxs("div",{className:"vemly-typing",style:{backgroundColor:me?"#374151":"#ffffff",borderColor:me?"#4b5563":"#e5e7eb"},children:[a.jsx("div",{className:"vemly-dot"}),a.jsx("div",{className:"vemly-dot"}),a.jsx("div",{className:"vemly-dot"})]})]})})(),a.jsx("div",{ref:C})]}),"chat"===s&&a.jsxs("div",{className:"vemly-input-container",style:{backgroundColor:me?"#1f2937":"#ffffff",borderColor:me?"#374151":"#e5e7eb",opacity:x?.7:1},children:[x?a.jsxs("div",{style:{padding:"12px 16px",textAlign:"center"},children:[a.jsx("p",{style:{fontSize:"13px",color:me?"#9ca3af":"#6b7280",marginBottom:"12px"},children:"This conversation is closed."}),a.jsxs("button",{onClick:se,style:{display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 16px",backgroundColor:A,color:"#ffffff",border:"none",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:[a.jsx(t.MessageCircle,{size:16}),"Start New Conversation"]})]}):a.jsxs("div",{className:"vemly-input-wrapper",style:{backgroundColor:me?"#111827":"#f9fafb",borderColor:me?"#374151":"#e5e7eb"},children:[a.jsx("textarea",{className:"vemly-input",placeholder:"Send a message...",value:v,onInput:n=>{let t=n.target.value;if(h(t),e.sessionId){let n=Date.now();n-I.current>1500&&(e.sendTyping(!0),I.current=n),T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{e.sendTyping(!1),T.current=null,I.current=0},3e3)}},onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),de())},rows:1,style:{color:me?"#f3f4f6":"#111827"}}),a.jsx("button",{className:"vemly-send",onClick:de,disabled:!v.trim()||f,children:a.jsx(t.Send,{size:16})})]}),Y&&a.jsxs("div",{className:"vemly-branding",children:["Powered by ",a.jsx("a",{href:"https://usevemly.com",target:"_blank",rel:"noopener",children:"Vemly"})]})]})]}),a.jsx("button",{className:"vemly-bubble",onClick:oe,children:l?a.jsx(t.X,{size:24}):"bot"===q?a.jsx(t.Bot,{size:24}):a.jsx(t.MessageCircle,{size:24})})]}):null}var r=class{apiUrl;tenantId;agentId;apiKey;deviceId;sessionId=null;sseSource=null;sseController=null;constructor(e){this.apiUrl=e.apiUrl||"https://api.usevemly.com",this.tenantId=e.tenantId,this.agentId=e.agentId,this.apiKey=e.apiKey,this.deviceId=this.getOrCreateDeviceId()}getOrCreateDeviceId(){if(typeof window>"u")return"server";let e=localStorage.getItem("vemly_device_id");return e||(e="dev_"+Math.random().toString(36).substring(2,15),localStorage.setItem("vemly_device_id",e)),e}async createSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session`,{method:"POST",headers:e,body:JSON.stringify({...this.tenantId?{tenantId:this.tenantId}:{},agentId:this.agentId,deviceId:this.deviceId})});if(!n.ok)throw new Error("Failed to create session");let t=await n.json();return this.sessionId=t.session?.id||t.id,{session:t.session||t,agentName:t.agent?.name}}async resumeSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session/resume`,{method:"POST",headers:e,body:JSON.stringify({tenantId:this.tenantId,deviceId:this.deviceId})});if(!n.ok)return null;let t=await n.json();return this.sessionId=t.session?.id||null,t.session}async getHistory(e=20){let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey);let t={deviceId:this.deviceId,limit:e.toString()};this.tenantId&&(t.tenantId=this.tenantId);let i=new URLSearchParams(t),a=await fetch(`${this.apiUrl}/chat/sessions/device?${i.toString()}`,{method:"GET",headers:n});return a.ok&&(await a.json()).sessions||[]}async getWidgetConfig(){try{let e=`${this.apiUrl}/chat/config`;this.tenantId&&(e+=`/${this.tenantId}`);let n={};return this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await(await fetch(e,{method:"GET",headers:n})).json()||{}}catch(e){return console.error("Failed to fetch widget config",e),{}}}async sendMessage(e,n){let t,i;if(!this.sessionId){let e=await this.createSession();t=e.agentName,i=e.session.isHumanTakeover}let a={"Content-Type":"application/json"};this.apiKey&&(a["x-vemly-api-key"]=this.apiKey);let o=await fetch(`${this.apiUrl}/chat/message`,{method:"POST",headers:a,body:JSON.stringify({sessionId:this.sessionId,content:e,role:"user"})});if(!o.ok)throw new Error("Failed to send message");return{message:await o.json(),agentName:t,isHumanTakeover:i}}async sendTyping(e){if(!this.sessionId)return;let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await fetch(`${this.apiUrl}/chat/typing`,{method:"POST",headers:n,body:JSON.stringify({sessionId:this.sessionId,isTyping:e})})}connectStream(e){if(!this.sessionId)return;this.sseController&&this.sseController.abort(),this.sseController=new AbortController;let n=`${this.apiUrl}/chat/stream/${this.sessionId}`,t={"Content-Type":"application/json"};this.apiKey&&(t["x-vemly-api-key"]=this.apiKey),fetch(n,{method:"GET",headers:t,signal:this.sseController.signal}).then(async n=>{if(!n.ok||!n.body)throw new Error(`SSE Error: ${n.status}`);let t=n.body.getReader(),i=new TextDecoder,a="";for(;;){let{value:n,done:o}=await t.read();if(o)break;a+=i.decode(n,{stream:!0});let l=a.split("\n\n");a=l.pop()||"";for(let n of l){if(!n.trim())continue;let t=n.split("\n"),i="message",a=null;for(let e of t)if(e.startsWith("event: "))i=e.substring(7).trim();else if(e.startsWith("data: ")){let n=e.substring(6).trim();if(console.log("[Vemly SDK] SSE raw line:",e,"| rawData:",n),!n||"undefined"===n||"null"===n){console.warn("[Vemly SDK] Skipping empty/undefined rawData");continue}try{a=JSON.parse(n),console.log("[Vemly SDK] Parsed SSE data:",JSON.stringify(a),"| type:",typeof a)}catch{a=n,console.log("[Vemly SDK] SSE data as string:",a)}}null!=a&&(console.log("[Vemly SDK] Calling onData with event:",i,"data:",JSON.stringify(a)),e(i,a))}}}).catch(e=>{"AbortError"!==e.name&&console.error("Stream Error:",e)})}disconnectStream(){this.sseSource?.close(),this.sseSource=null,this.sseController?.abort(),this.sseController=null}getSessionId(){return this.sessionId}},s=new class{client=null;container=null;shadowRoot=null;init(e){if(this.client)console.warn("[VemlySDK] Already initialized");else if(e.apiKey)try{console.log("[VemlySDK] Initializing with API key..."),this.client=new r(e),this.createContainer(),this.render(),console.log("[VemlySDK] Initialization complete")}catch(e){console.error("[VemlySDK] Initialization failed:",e)}else console.error("[VemlySDK] apiKey is required")}createContainer(){let e=document.getElementById("vemly-sdk-root");e&&e.remove(),this.container=document.createElement("div"),this.container.id="vemly-sdk-root",document.body.appendChild(this.container),this.shadowRoot=this.container.attachShadow({mode:"open"});let n=document.createElement("style");n.textContent='\n@import url(\'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\');\n\n:host {\n --vemly-primary: #5046e5;\n --vemly-primary-hover: #4338ca;\n --vemly-bg: #ffffff;\n --vemly-surface: #f9fafb;\n --vemly-text: #111827;\n --vemly-text-secondary: #6b7280;\n --vemly-text-muted: #9ca3af;\n --vemly-border: #e5e7eb;\n --vemly-user-bg: #111827;\n --vemly-ai-bg: #ffffff;\n --vemly-radius: 16px;\n --vemly-font: \'Inter\', -apple-system, BlinkMacSystemFont, \'Segoe UI\', sans-serif;\n}\n\n.vemly-widget-container {\n position: fixed;\n bottom: 20px;\n z-index: 2147483647;\n font-family: var(--vemly-font);\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.vemly-widget-container[data-position="right"] {\n right: 20px;\n left: auto;\n align-items: flex-end;\n}\n\n.vemly-widget-container[data-position="left"] {\n left: 20px;\n right: auto;\n align-items: flex-start;\n}\n\n.vemly-widget-container * {\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n/* Launcher */\n.vemly-bubble {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16);\n transition: all 0.2s ease;\n border: none;\n outline: none;\n}\n\n.vemly-bubble:hover {\n background: var(--vemly-primary-hover);\n transform: scale(1.05);\n}\n\n.vemly-bubble:active {\n transform: scale(0.95);\n}\n\n/* Window */\n.vemly-window {\n width: 380px;\n height: 600px;\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 40px);\n background: var(--vemly-bg);\n border-radius: var(--vemly-radius);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom right;\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n transition: all 0.2s ease;\n visibility: hidden;\n}\n\n.vemly-window.open {\n opacity: 1;\n transform: scale(1) translateY(0);\n visibility: visible;\n}\n\n/* Header */\n.vemly-header {\n background: var(--vemly-primary);\n color: white;\n padding: 20px;\n flex-shrink: 0;\n}\n\n.vemly-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.vemly-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.vemly-back-btn {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-back-btn:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-close {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-close:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-header-content {\n margin-top: 16px;\n}\n\n.vemly-header-content h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.vemly-header-content p {\n margin: 4px 0 0;\n font-size: 14px;\n opacity: 0.85;\n}\n\n.vemly-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 12px;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.vemly-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n}\n\n/* Messages Area */\n.vemly-messages {\n flex: 1;\n background: var(--vemly-surface);\n padding: 16px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.vemly-message-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 85%;\n animation: vemly-fade-in 0.25s ease-out;\n}\n\n@keyframes vemly-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.vemly-message-group.assistant {\n align-self: flex-start;\n}\n\n.vemly-message-group.user {\n align-self: flex-end;\n}\n\n.vemly-sender {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.vemly-sender-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vemly-sender-avatar-img {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.vemly-sender-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--vemly-text);\n}\n\n.vemly-message-content {\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.vemly-message-group.assistant .vemly-message-content {\n background: white;\n color: var(--vemly-text);\n border: 1px solid var(--vemly-border);\n border-top-left-radius: 4px;\n}\n\n.vemly-message-group.user .vemly-message-content {\n background: var(--vemly-user-bg);\n color: white;\n border-top-right-radius: 4px;\n}\n\n.vemly-message-content p { margin: 0 0 8px; }\n.vemly-message-content p:last-child { margin: 0; }\n.vemly-message-content a { color: inherit; text-decoration: underline; }\n.vemly-message-content code {\n background: rgba(0,0,0,0.06);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n.vemly-message-group.user .vemly-message-content code {\n background: rgba(255,255,255,0.15);\n}\n\n/* Home View */\n.vemly-home {\n flex: 1;\n background: var(--vemly-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.vemly-home-content {\n padding: 16px;\n}\n\n.vemly-start-btn {\n width: 100%;\n padding: 14px 16px;\n background: var(--vemly-text);\n color: white;\n border: none;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.15s;\n}\n\n.vemly-start-btn:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n}\n\n.vemly-section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--vemly-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 20px 0 12px;\n}\n\n.vemly-session-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.vemly-session-item {\n padding: 12px 14px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.vemly-session-item:hover {\n border-color: var(--vemly-text-muted);\n background: #fafafa;\n}\n\n.vemly-session-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--vemly-text);\n margin-bottom: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vemly-session-date {\n font-size: 12px;\n color: var(--vemly-text-muted);\n}\n\n.vemly-empty {\n text-align: center;\n padding: 24px;\n color: var(--vemly-text-muted);\n font-size: 14px;\n}\n\n/* Input */\n.vemly-input-container {\n padding: 12px 16px 16px;\n background: white;\n border-top: 1px solid var(--vemly-border);\n}\n\n.vemly-input-wrapper {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n background: var(--vemly-surface);\n border: 1px solid var(--vemly-border);\n border-radius: 12px;\n padding: 8px 8px 8px 14px;\n transition: all 0.15s;\n}\n\n.vemly-input-wrapper:focus-within {\n border-color: var(--vemly-primary);\n box-shadow: 0 0 0 3px rgba(80, 70, 229, 0.1);\n}\n\n.vemly-input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 16px; /* 16px prevents iOS zoom on focus */\n color: var(--vemly-text);\n max-height: 100px;\n resize: none;\n font-family: inherit;\n padding: 4px 0;\n line-height: 1.4;\n -webkit-appearance: none; /* Remove iOS styling */\n appearance: none;\n}\n\n.vemly-input::placeholder {\n color: var(--vemly-text-muted);\n}\n\n.vemly-send {\n background: var(--vemly-primary);\n color: white;\n border: none;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n}\n\n.vemly-send:hover:not(:disabled) {\n background: var(--vemly-primary-hover);\n}\n\n.vemly-send:disabled {\n background: var(--vemly-border);\n color: var(--vemly-text-muted);\n cursor: default;\n}\n\n.vemly-branding {\n font-size: 11px;\n text-align: center;\n color: var(--vemly-text-muted);\n margin-top: 8px;\n}\n\n.vemly-branding a {\n color: var(--vemly-text-secondary);\n text-decoration: none;\n font-weight: 500;\n}\n\n/* Typing */\n.vemly-typing {\n display: flex;\n gap: 4px;\n padding: 14px 16px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n}\n\n.vemly-dot {\n width: 6px;\n height: 6px;\n background: var(--vemly-text-muted);\n border-radius: 50%;\n animation: vemly-bounce 1.4s infinite ease-in-out;\n}\n\n.vemly-dot:nth-child(1) { animation-delay: -0.32s; }\n.vemly-dot:nth-child(2) { animation-delay: -0.16s; }\n\n@keyframes vemly-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* Mobile Optimizations */\n@media (max-width: 480px) {\n .vemly-widget-container,\n .vemly-widget-container[data-position="right"],\n .vemly-widget-container[data-position="left"] {\n bottom: 0;\n right: 0;\n left: 0;\n padding: 0;\n gap: 0;\n align-items: stretch;\n }\n \n .vemly-window {\n width: 100%;\n height: 100dvh; /* Dynamic viewport height for mobile browsers */\n height: 100vh; /* Fallback for older browsers */\n max-width: none;\n max-height: none;\n border-radius: 0;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n /* Support for iOS safe areas */\n @supports (padding: env(safe-area-inset-top)) {\n .vemly-header {\n padding-top: calc(20px + env(safe-area-inset-top));\n }\n \n .vemly-input-container {\n padding-bottom: calc(16px + env(safe-area-inset-bottom));\n }\n }\n \n .vemly-bubble {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483648;\n }\n \n /* Hide bubble when window is open on mobile */\n .vemly-window.open ~ .vemly-bubble {\n display: none;\n }\n \n /* Larger touch targets for mobile */\n .vemly-close,\n .vemly-back-btn {\n min-width: 44px;\n min-height: 44px;\n padding: 10px;\n }\n \n .vemly-session-item {\n padding: 14px 16px;\n min-height: 44px;\n }\n \n .vemly-start-btn {\n min-height: 48px;\n font-size: 15px;\n }\n \n /* Prevent body scroll when widget is open */\n .vemly-window.open {\n overscroll-behavior: contain;\n }\n \n .vemly-messages {\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n \n /* Input area adjustments for mobile */\n .vemly-input-wrapper {\n padding: 10px 10px 10px 16px;\n }\n \n .vemly-send {\n width: 40px;\n height: 40px;\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 481px) and (max-width: 768px) {\n .vemly-window {\n width: 380px;\n max-height: calc(100dvh - 100px);\n max-height: calc(100vh - 100px); /* Fallback */\n }\n}\n\n/* Touch optimizations for all touch devices */\n@media (pointer: coarse) {\n .vemly-bubble,\n .vemly-close,\n .vemly-back-btn,\n .vemly-send,\n .vemly-session-item,\n .vemly-start-btn {\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n}\n',this.shadowRoot.appendChild(n)}render(){if(!this.shadowRoot||!this.client)return;let n=document.createElement("div");this.shadowRoot.appendChild(n),e.render(e.h(l,{client:this.client}),n)}},d=s;typeof window<"u"&&(window.Vemly=s),module.exports=d;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{render as e,h as n}from"preact";import{useState as t,useRef as i,useEffect as a}from"preact/hooks";import{ChevronLeft as o,X as r,MessageCircle as l,Send as s,Bot as d}from"lucide-preact";import{marked as m}from"marked";import{jsxs as c,jsx as p,Fragment as y}from"preact/jsx-runtime";var v="0.1.8";function h({client:e}){let[n,h]=t(!1),[f,g]=t("home"),[u,b]=t([]),[x,w]=t([]),[k,S]=t(""),[N,D]=t(!1),[C,z]=t(!1),[T,I]=t(!1),[V,K]=t(null),[j,O]=t(null),A=i(null),[E,$]=t(null),_=i(null),F=i(null),J=i(0);a(()=>{_.current=E},[E]);let[P,R]=t({}),[B,H]=t("#5046e5"),[M,W]=t(24),[Y,L]=t("right"),[U,G]=t("light"),[q,Q]=t("#ffffff"),[X,Z]=t("#ffffff"),[ee,ne]=t("message"),[te,ie]=t(!0),[ae,oe]=t(!0),[re,le]=t(!0),[se,de]=t(!0),[me,ce]=t(!1);a(()=>{console.log(`[Vemly SDK v${v}] Initializing widget...`),e.getWidgetConfig().then(n=>{if(n){if(console.log(`[Vemly SDK v${v}] Config loaded:`,n),"error"===n.status)return console.error("[Vemly SDK] Error loading widget:",n.message),oe(!1),void ce(!0);if(0===Object.keys(n).length)return console.warn("[Vemly SDK] Empty config received, disabling widget"),oe(!1),void ce(!0);void 0!==n.widgetEnabled&&oe(n.widgetEnabled),void 0!==n.aiMessagingEnabled&&le(n.aiMessagingEnabled);let t=n.config||{};if(R(t),t.primaryColor&&H(t.primaryColor),t.defaultAgentName&&$(t.defaultAgentName),void 0!==t.borderRadius&&W(t.borderRadius),t.position&&L(t.position),t.theme&&G(t.theme),t.launcherIcon&&ne(t.launcherIcon),void 0!==t.showBranding&&ie(t.showBranding),t.websiteUrl&&typeof window<"u")try{let n=new URL(t.websiteUrl).origin,i=window.location.origin,a=i.includes("localhost")||i.includes("127.0.0.1"),o=e.apiUrl?.includes("localhost")||e.apiUrl?.includes("127.0.0.1");de(n===i||a||o)}catch{de(!0)}else de(!0)}ce(!0)})},[e]),a(()=>{n&&("home"===f&&ve(),pe())},[n,f]),a(()=>{pe()},[x,N]);let pe=()=>{A.current?.scrollIntoView({behavior:"smooth"})},ye=()=>h(!n),ve=async()=>{let n=await e.getHistory();b(n)},he=()=>{console.log("[Vemly SDK v0.1.8] Connecting to stream..."),e.connectStream((e,n)=>{if(console.log("[Vemly SDK] Stream event:",e,"| Raw data:",JSON.stringify(n),"| Type:",typeof n),"message-stream"===e){let e;"object"==typeof n&&null!==n?(console.log("[Vemly SDK] message-stream object - type:",n.type,"| text:",n.text,"| content:",n.content),"text"===n.type&&"string"==typeof n.text||"string"==typeof n.text?e=n.text:"string"==typeof n.content&&(e=n.content)):"string"==typeof n&&(e=n),console.log("[Vemly SDK] Extracted token:",JSON.stringify(e)),e&&"undefined"!==e&&"null"!==e?ue(e):console.warn("[Vemly SDK] Skipping invalid token:",e)}else if("token"===e)n&&"string"==typeof n&&"undefined"!==n&&"null"!==n&&ue(n);else if("message-complete"===e)D(!1);else if("message"===e){if(!n||!n.id)return;if(console.log("[Vemly SDK] Received message event:",n),"undefined"===("string"==typeof n.content?n.content.trim():n.content)||!n.content)return void console.warn("[Vemly SDK] Ignored 'undefined' message content:",n);w(e=>{if(e.some(e=>e.id===n.id))return e;if("user"===n.role){let t=e.findIndex(e=>e.id.startsWith("user_")&&e.content===n.content);if(-1!==t){let i=[...e],a=n.content&&"undefined"!==n.content.trim()?n.content:i[t].content;return i[t]={id:n.id,role:n.role,content:a,createdAt:n.createdAt,agentName:void 0},i}}return D(!1),[...e,{id:n.id,role:n.role,content:n.content,createdAt:n.createdAt,agentName:n.agentName||("assistant"===n.role?E:void 0),agentAvatar:n.agentAvatar}]}),D(!1)}else if("human-takeover"===e){let e=n.isHumanTakeover;z(e),e?(D(!1),n.userName&&K(n.userName),n.agentAvatar&&O(n.agentAvatar),w(e=>{if(e.some(e=>"system-takeover"===e.id))return e;let t=n.userName||"a team member";return[...e,{id:"system-takeover",role:"system",content:`You're now connected with ${t}.`,createdAt:(new Date).toISOString()}]})):(K(null),O(null))}else"support-typing"===e?n.isTyping?(D(!0),n.userName&&K(n.userName),n.agentAvatar&&O(n.agentAvatar)):D(!1):"thinking-start"===e||"typing-start"===e?re&&D(!0):"conversation-closed"===e&&(I(!0),D(!1),w(e=>e.some(e=>"system-closed"===e.id)?e:[...e,{id:"system-closed",role:"system",content:"This conversation has been closed. Thank you for reaching out!",createdAt:(new Date).toISOString()}]))})},fe=()=>{e.sessionId=null,$(P.defaultAgentName||null),w([]),I(!1),z(!1),K(null),O(null),g("chat")},ge=async()=>{if(!k.trim())return;let n="user_"+Date.now(),t={id:n,role:"user",content:k,createdAt:(new Date).toISOString()};w(e=>[...e,t]),S(""),C||D(!0);try{let i=await e.sendMessage(t.content);i.isHumanTakeover&&(z(!0),D(!1),$("Support Team"),w(e=>e.some(e=>"system-takeover"===e.id)?e:[...e,{id:"system-takeover",role:"system",content:"A team member will be with you shortly.",createdAt:(new Date).toISOString()}])),i.message?.message?.id&&w(e=>e.map(e=>e.id===n?{...e,id:i.message.message.id}:e)),i.agentName&&!i.isHumanTakeover&&$(i.agentName),he()}catch(e){console.error("Vemly Send Error:",e),D(!1)}},ue=e=>{!e||"undefined"===e||"null"===e||w(n=>{let t=n[n.length-1];if(t&&"assistant"===t.role){let i=t.content||"";return[...n.slice(0,-1),{...t,content:i+e}]}return[...n,{id:"bot_"+Date.now(),role:"assistant",content:e,createdAt:(new Date).toISOString(),agentName:_.current||void 0}]})},be="dark"===U,xe="glass"===U,we={"--vemly-primary":B,"--vemly-primary-hover":B,"--vemly-radius":`${M}px`,"--vemly-header-text":q,"--vemly-user-text":X,"--vemly-bg":be?"#1f2937":xe?"rgba(255, 255, 255, 0.8)":"#ffffff","--vemly-surface":be?"#111827":xe?"rgba(249, 250, 251, 0.5)":"#f9fafb","--vemly-text":be?"#f9fafb":"#111827","--vemly-text-secondary":be?"#9ca3af":"#6b7280","--vemly-text-muted":be?"#6b7280":"#9ca3af","--vemly-border":be?"#374151":"#e5e7eb","--vemly-user-bg":"#111827","--vemly-ai-bg":be?"#374151":"#ffffff"},ke=xe?{backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)"}:{},Se=P.title||"Vemly",Ne=P.titleAlignment||"left";return me&&ae&&se&&ae?c("div",{className:"vemly-widget-container",style:we,"data-position":Y,children:[c("div",{className:"vemly-window "+(n?"open":""),style:ke,children:[c("div",{className:"vemly-header",style:{color:q},children:[c("div",{className:"vemly-header-top",children:[p("div",{className:"vemly-brand",children:"chat"===f&&p("button",{className:"vemly-back-btn",onClick:()=>{I(!1),g("home"),ve()},children:p(o,{size:20})})}),p("button",{className:"vemly-close",onClick:ye,style:{color:q},children:p(r,{size:20})})]}),c("div",{className:"vemly-header-content",style:{textAlign:Ne},children:[p("h3",{children:Se}),p("p",{style:{opacity:.9},children:"home"===f?P.greeting||"We're here to help":"Ask us anything"})]}),c("div",{className:"vemly-status",style:{justifyContent:"center"===Ne?"center":"flex-start"},children:[p("span",{className:"vemly-status-dot"}),p("span",{style:{opacity:.9},children:"We typically reply instantly"})]})]}),"home"===f?p("div",{className:"vemly-home",children:c("div",{className:"vemly-home-content",children:[c("button",{onClick:fe,className:"vemly-start-btn",style:{backgroundColor:be?"#374151":"#111827",color:"#ffffff"},children:[p(l,{size:18}),p("span",{children:"Start a conversation"})]}),u.length>0&&c(y,{children:[p("div",{className:"vemly-section-title",children:"Recent conversations"}),p("div",{className:"vemly-session-list",children:u.slice(0,5).map(n=>c("div",{onClick:()=>(async(n,t)=>{e.sessionId=n,$(t||null),g("chat"),w([]);try{let i=await fetch(`${e.apiUrl}/chat/session/${n}`,{headers:{"x-vemly-api-key":e.apiKey,"Content-Type":"application/json"}});if(i.ok){let e=await i.json(),n=!!e.session?.isHumanTakeover;n&&z(!0);let a=n?"Support Team":e.agent?.name||t;if(a&&$(a),e.session?.closedAt&&I(!0),e.messages){let n=e.messages.map(e=>({...e,agentName:e.agentName||("assistant"===e.role?a:void 0),agentAvatar:e.agentAvatar}));w(n)}}he()}catch(e){console.error("Failed to load conversation history:",e)}})(n.id,n.agentName),className:"vemly-session-item",style:{backgroundColor:be?"#374151":"#ffffff",borderColor:be?"#4b5563":"#e5e7eb"},children:[p("div",{className:"vemly-session-title",style:{color:be?"#fff":"#111827"},children:n.title||"New Conversation"}),p("div",{className:"vemly-session-date",children:new Date(n.createdAt||Date.now()).toLocaleDateString()})]},n.id))})]}),0===u.length&&p("div",{className:"vemly-empty",children:"No previous conversations"})]})}):c("div",{className:"vemly-messages",style:{backgroundColor:be?"#1f2937":"glass"===U?"transparent":"#f9fafb"},children:[x.map((e,n)=>p("div",{className:`vemly-message-group ${e.role}`,children:"system"===e.role?p("div",{className:"vemly-message-content",children:p("p",{children:e.content})}):c(y,{children:[("assistant"===e.role||"tool"===e.role)&&c("div",{className:"vemly-sender",children:[e.agentAvatar?p("img",{src:e.agentAvatar,alt:e.agentName||"Bot",className:"vemly-sender-avatar-img"}):p("div",{className:"vemly-sender-avatar",children:(e.agentName||E||"Bot").substring(0,2).toUpperCase()}),p("div",{className:"vemly-sender-name",style:{color:be?"#e5e7eb":"#111827"},children:(()=>{let n=e.agentName||E||"Bot";return"undefined"!==n&&n?n:"Bot"})()})]}),p("div",{className:"vemly-message-content",children:p("div",{dangerouslySetInnerHTML:{t:m.parse(e.content&&"undefined"!==e.content.trim()?e.content:"")}})})]})},e.id||n)),N&&(()=>{let e=C&&V?V:E&&"undefined"!==E?E:"Vemly";return c("div",{className:"vemly-message-group assistant",children:[c("div",{className:"vemly-sender",children:[C&&j?p("img",{src:j,alt:e,className:"vemly-sender-avatar-img"}):p("div",{className:"vemly-sender-avatar",children:e.substring(0,2).toUpperCase()}),p("div",{className:"vemly-sender-name",children:e})]}),c("div",{className:"vemly-typing",style:{backgroundColor:be?"#374151":"#ffffff",borderColor:be?"#4b5563":"#e5e7eb"},children:[p("div",{className:"vemly-dot"}),p("div",{className:"vemly-dot"}),p("div",{className:"vemly-dot"})]})]})})(),p("div",{ref:A})]}),"chat"===f&&c("div",{className:"vemly-input-container",style:{backgroundColor:be?"#1f2937":"#ffffff",borderColor:be?"#374151":"#e5e7eb",opacity:T?.7:1},children:[c("div",T?{style:{padding:"12px 16px",textAlign:"center"},children:[p("p",{style:{fontSize:"13px",color:be?"#9ca3af":"#6b7280",marginBottom:"12px"},children:"This conversation is closed."}),c("button",{onClick:fe,style:{display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 16px",backgroundColor:B,color:"#ffffff",border:"none",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:[p(l,{size:16}),"Start New Conversation"]})]}:{className:"vemly-input-wrapper",style:{backgroundColor:be?"#111827":"#f9fafb",borderColor:be?"#374151":"#e5e7eb"},children:[p("textarea",{className:"vemly-input",placeholder:"Send a message...",value:k,onInput:n=>{let t=n.target.value;if(S(t),e.sessionId){let n=Date.now();n-J.current>1500&&(e.sendTyping(!0),J.current=n),F.current&&clearTimeout(F.current),F.current=setTimeout(()=>{e.sendTyping(!1),F.current=null,J.current=0},3e3)}},onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ge())},rows:1,style:{color:be?"#f3f4f6":"#111827"}}),p("button",{className:"vemly-send",onClick:ge,disabled:!k.trim()||N,children:p(s,{size:16})})]}),te&&c("div",{className:"vemly-branding",children:["Powered by ",p("a",{href:"https://usevemly.com",target:"_blank",rel:"noopener",children:"Vemly"})]})]})]}),p("button",{className:"vemly-bubble",onClick:ye,children:p(n?r:"bot"===ee?d:l,{size:24})})]}):null}var f=class{apiUrl;tenantId;agentId;apiKey;deviceId;sessionId=null;sseSource=null;sseController=null;constructor(e){this.apiUrl=e.apiUrl||"https://api.usevemly.com",this.tenantId=e.tenantId,this.agentId=e.agentId,this.apiKey=e.apiKey,this.deviceId=this.getOrCreateDeviceId()}getOrCreateDeviceId(){if(typeof window>"u")return"server";let e=localStorage.getItem("vemly_device_id");return e||(e="dev_"+Math.random().toString(36).substring(2,15),localStorage.setItem("vemly_device_id",e)),e}async createSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session`,{method:"POST",headers:e,body:JSON.stringify({...this.tenantId?{tenantId:this.tenantId}:{},agentId:this.agentId,deviceId:this.deviceId})});if(!n.ok)throw new Error("Failed to create session");let t=await n.json();return this.sessionId=t.session?.id||t.id,{session:t.session||t,agentName:t.agent?.name}}async resumeSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session/resume`,{method:"POST",headers:e,body:JSON.stringify({tenantId:this.tenantId,deviceId:this.deviceId})});if(!n.ok)return null;let t=await n.json();return this.sessionId=t.session?.id||null,t.session}async getHistory(e=20){let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey);let t={deviceId:this.deviceId,limit:e.toString()};this.tenantId&&(t.tenantId=this.tenantId);let i=new URLSearchParams(t),a=await fetch(`${this.apiUrl}/chat/sessions/device?${i.toString()}`,{method:"GET",headers:n});return a.ok&&(await a.json()).sessions||[]}async getWidgetConfig(){try{let e=`${this.apiUrl}/chat/config`;this.tenantId&&(e+=`/${this.tenantId}`);let n={};return this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await(await fetch(e,{method:"GET",headers:n})).json()||{}}catch(e){return console.error("Failed to fetch widget config",e),{}}}async sendMessage(e,n){let t,i;if(!this.sessionId){let e=await this.createSession();t=e.agentName,i=e.session.isHumanTakeover}let a={"Content-Type":"application/json"};this.apiKey&&(a["x-vemly-api-key"]=this.apiKey);let o=await fetch(`${this.apiUrl}/chat/message`,{method:"POST",headers:a,body:JSON.stringify({sessionId:this.sessionId,content:e,role:"user"})});if(!o.ok)throw new Error("Failed to send message");return{message:await o.json(),agentName:t,isHumanTakeover:i}}async sendTyping(e){if(!this.sessionId)return;let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await fetch(`${this.apiUrl}/chat/typing`,{method:"POST",headers:n,body:JSON.stringify({sessionId:this.sessionId,isTyping:e})})}connectStream(e){if(!this.sessionId)return;this.sseController&&this.sseController.abort(),this.sseController=new AbortController;let n=`${this.apiUrl}/chat/stream/${this.sessionId}`,t={"Content-Type":"application/json"};this.apiKey&&(t["x-vemly-api-key"]=this.apiKey),fetch(n,{method:"GET",headers:t,signal:this.sseController.signal}).then(async n=>{if(!n.ok||!n.body)throw new Error(`SSE Error: ${n.status}`);let t=n.body.getReader(),i=new TextDecoder,a="";for(;;){let{value:n,done:o}=await t.read();if(o)break;a+=i.decode(n,{stream:!0});let r=a.split("\n\n");a=r.pop()||"";for(let n of r){if(!n.trim())continue;let t=n.split("\n"),i="message",a=null;for(let e of t)if(e.startsWith("event: "))i=e.substring(7).trim();else if(e.startsWith("data: ")){let n=e.substring(6).trim();if(console.log("[Vemly SDK] SSE raw line:",e,"| rawData:",n),!n||"undefined"===n||"null"===n){console.warn("[Vemly SDK] Skipping empty/undefined rawData");continue}try{a=JSON.parse(n),console.log("[Vemly SDK] Parsed SSE data:",JSON.stringify(a),"| type:",typeof a)}catch{a=n,console.log("[Vemly SDK] SSE data as string:",a)}}null!=a&&(console.log("[Vemly SDK] Calling onData with event:",i,"data:",JSON.stringify(a)),e(i,a))}}}).catch(e=>{"AbortError"!==e.name&&console.error("Stream Error:",e)})}disconnectStream(){this.sseSource?.close(),this.sseSource=null,this.sseController?.abort(),this.sseController=null}getSessionId(){return this.sessionId}},g=new class{client=null;container=null;shadowRoot=null;init(e){if(this.client)console.warn("[VemlySDK] Already initialized");else if(e.apiKey)try{console.log("[VemlySDK] Initializing with API key..."),this.client=new f(e),this.createContainer(),this.render(),console.log("[VemlySDK] Initialization complete")}catch(e){console.error("[VemlySDK] Initialization failed:",e)}else console.error("[VemlySDK] apiKey is required")}createContainer(){let e=document.getElementById("vemly-sdk-root");e&&e.remove(),this.container=document.createElement("div"),this.container.id="vemly-sdk-root",document.body.appendChild(this.container),this.shadowRoot=this.container.attachShadow({mode:"open"});let n=document.createElement("style");n.textContent='\n@import url(\'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\');\n\n:host {\n --vemly-primary: #5046e5;\n --vemly-primary-hover: #4338ca;\n --vemly-bg: #ffffff;\n --vemly-surface: #f9fafb;\n --vemly-text: #111827;\n --vemly-text-secondary: #6b7280;\n --vemly-text-muted: #9ca3af;\n --vemly-border: #e5e7eb;\n --vemly-user-bg: #111827;\n --vemly-ai-bg: #ffffff;\n --vemly-radius: 16px;\n --vemly-font: \'Inter\', -apple-system, BlinkMacSystemFont, \'Segoe UI\', sans-serif;\n}\n\n.vemly-widget-container {\n position: fixed;\n bottom: 20px;\n z-index: 2147483647;\n font-family: var(--vemly-font);\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.vemly-widget-container[data-position="right"] {\n right: 20px;\n left: auto;\n align-items: flex-end;\n}\n\n.vemly-widget-container[data-position="left"] {\n left: 20px;\n right: auto;\n align-items: flex-start;\n}\n\n.vemly-widget-container * {\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n/* Launcher */\n.vemly-bubble {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16);\n transition: all 0.2s ease;\n border: none;\n outline: none;\n}\n\n.vemly-bubble:hover {\n background: var(--vemly-primary-hover);\n transform: scale(1.05);\n}\n\n.vemly-bubble:active {\n transform: scale(0.95);\n}\n\n/* Window */\n.vemly-window {\n width: 380px;\n height: 600px;\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 40px);\n background: var(--vemly-bg);\n border-radius: var(--vemly-radius);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom right;\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n transition: all 0.2s ease;\n visibility: hidden;\n}\n\n.vemly-window.open {\n opacity: 1;\n transform: scale(1) translateY(0);\n visibility: visible;\n}\n\n/* Header */\n.vemly-header {\n background: var(--vemly-primary);\n color: white;\n padding: 20px;\n flex-shrink: 0;\n}\n\n.vemly-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.vemly-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.vemly-back-btn {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-back-btn:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-close {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-close:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-header-content {\n margin-top: 16px;\n}\n\n.vemly-header-content h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.vemly-header-content p {\n margin: 4px 0 0;\n font-size: 14px;\n opacity: 0.85;\n}\n\n.vemly-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 12px;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.vemly-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n}\n\n/* Messages Area */\n.vemly-messages {\n flex: 1;\n background: var(--vemly-surface);\n padding: 16px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.vemly-message-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 85%;\n animation: vemly-fade-in 0.25s ease-out;\n}\n\n@keyframes vemly-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.vemly-message-group.assistant {\n align-self: flex-start;\n}\n\n.vemly-message-group.user {\n align-self: flex-end;\n}\n\n.vemly-sender {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.vemly-sender-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vemly-sender-avatar-img {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.vemly-sender-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--vemly-text);\n}\n\n.vemly-message-content {\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.vemly-message-group.assistant .vemly-message-content {\n background: white;\n color: var(--vemly-text);\n border: 1px solid var(--vemly-border);\n border-top-left-radius: 4px;\n}\n\n.vemly-message-group.user .vemly-message-content {\n background: var(--vemly-user-bg);\n color: white;\n border-top-right-radius: 4px;\n}\n\n.vemly-message-content p { margin: 0 0 8px; }\n.vemly-message-content p:last-child { margin: 0; }\n.vemly-message-content a { color: inherit; text-decoration: underline; }\n.vemly-message-content code {\n background: rgba(0,0,0,0.06);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n.vemly-message-group.user .vemly-message-content code {\n background: rgba(255,255,255,0.15);\n}\n\n/* Home View */\n.vemly-home {\n flex: 1;\n background: var(--vemly-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.vemly-home-content {\n padding: 16px;\n}\n\n.vemly-start-btn {\n width: 100%;\n padding: 14px 16px;\n background: var(--vemly-text);\n color: white;\n border: none;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.15s;\n}\n\n.vemly-start-btn:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n}\n\n.vemly-section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--vemly-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 20px 0 12px;\n}\n\n.vemly-session-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.vemly-session-item {\n padding: 12px 14px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.vemly-session-item:hover {\n border-color: var(--vemly-text-muted);\n background: #fafafa;\n}\n\n.vemly-session-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--vemly-text);\n margin-bottom: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vemly-session-date {\n font-size: 12px;\n color: var(--vemly-text-muted);\n}\n\n.vemly-empty {\n text-align: center;\n padding: 24px;\n color: var(--vemly-text-muted);\n font-size: 14px;\n}\n\n/* Input */\n.vemly-input-container {\n padding: 12px 16px 16px;\n background: white;\n border-top: 1px solid var(--vemly-border);\n}\n\n.vemly-input-wrapper {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n background: var(--vemly-surface);\n border: 1px solid var(--vemly-border);\n border-radius: 12px;\n padding: 8px 8px 8px 14px;\n transition: all 0.15s;\n}\n\n.vemly-input-wrapper:focus-within {\n border-color: var(--vemly-primary);\n box-shadow: 0 0 0 3px rgba(80, 70, 229, 0.1);\n}\n\n.vemly-input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 16px; /* 16px prevents iOS zoom on focus */\n color: var(--vemly-text);\n max-height: 100px;\n resize: none;\n font-family: inherit;\n padding: 4px 0;\n line-height: 1.4;\n -webkit-appearance: none; /* Remove iOS styling */\n appearance: none;\n}\n\n.vemly-input::placeholder {\n color: var(--vemly-text-muted);\n}\n\n.vemly-send {\n background: var(--vemly-primary);\n color: white;\n border: none;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n}\n\n.vemly-send:hover:not(:disabled) {\n background: var(--vemly-primary-hover);\n}\n\n.vemly-send:disabled {\n background: var(--vemly-border);\n color: var(--vemly-text-muted);\n cursor: default;\n}\n\n.vemly-branding {\n font-size: 11px;\n text-align: center;\n color: var(--vemly-text-muted);\n margin-top: 8px;\n}\n\n.vemly-branding a {\n color: var(--vemly-text-secondary);\n text-decoration: none;\n font-weight: 500;\n}\n\n/* Typing */\n.vemly-typing {\n display: flex;\n gap: 4px;\n padding: 14px 16px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n}\n\n.vemly-dot {\n width: 6px;\n height: 6px;\n background: var(--vemly-text-muted);\n border-radius: 50%;\n animation: vemly-bounce 1.4s infinite ease-in-out;\n}\n\n.vemly-dot:nth-child(1) { animation-delay: -0.32s; }\n.vemly-dot:nth-child(2) { animation-delay: -0.16s; }\n\n@keyframes vemly-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* Mobile Optimizations */\n@media (max-width: 480px) {\n .vemly-widget-container,\n .vemly-widget-container[data-position="right"],\n .vemly-widget-container[data-position="left"] {\n bottom: 0;\n right: 0;\n left: 0;\n padding: 0;\n gap: 0;\n align-items: stretch;\n }\n \n .vemly-window {\n width: 100%;\n height: 100dvh; /* Dynamic viewport height for mobile browsers */\n height: 100vh; /* Fallback for older browsers */\n max-width: none;\n max-height: none;\n border-radius: 0;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n /* Support for iOS safe areas */\n @supports (padding: env(safe-area-inset-top)) {\n .vemly-header {\n padding-top: calc(20px + env(safe-area-inset-top));\n }\n \n .vemly-input-container {\n padding-bottom: calc(16px + env(safe-area-inset-bottom));\n }\n }\n \n .vemly-bubble {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483648;\n }\n \n /* Hide bubble when window is open on mobile */\n .vemly-window.open ~ .vemly-bubble {\n display: none;\n }\n \n /* Larger touch targets for mobile */\n .vemly-close,\n .vemly-back-btn {\n min-width: 44px;\n min-height: 44px;\n padding: 10px;\n }\n \n .vemly-session-item {\n padding: 14px 16px;\n min-height: 44px;\n }\n \n .vemly-start-btn {\n min-height: 48px;\n font-size: 15px;\n }\n \n /* Prevent body scroll when widget is open */\n .vemly-window.open {\n overscroll-behavior: contain;\n }\n \n .vemly-messages {\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n \n /* Input area adjustments for mobile */\n .vemly-input-wrapper {\n padding: 10px 10px 10px 16px;\n }\n \n .vemly-send {\n width: 40px;\n height: 40px;\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 481px) and (max-width: 768px) {\n .vemly-window {\n width: 380px;\n max-height: calc(100dvh - 100px);\n max-height: calc(100vh - 100px); /* Fallback */\n }\n}\n\n/* Touch optimizations for all touch devices */\n@media (pointer: coarse) {\n .vemly-bubble,\n .vemly-close,\n .vemly-back-btn,\n .vemly-send,\n .vemly-session-item,\n .vemly-start-btn {\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n}\n',this.shadowRoot.appendChild(n)}render(){if(!this.shadowRoot||!this.client)return;let t=document.createElement("div");this.shadowRoot.appendChild(t),e(n(h,{client:this.client}),t)}},u=g;typeof window<"u"&&(window.Vemly=g);export{u as default};
1
+ import{render as e,h as n}from"preact";import{useState as t,useRef as i,useEffect as a}from"preact/hooks";import{ChevronLeft as o,X as l,MessageCircle as r,Send as s,Bot as d}from"lucide-preact";import{marked as m}from"marked";import{jsxs as c,jsx as p,Fragment as y}from"preact/jsx-runtime";var v="0.1.8";function h({client:e}){let[n,h]=t(!1),[f,g]=t("home"),[u,b]=t([]),[x,w]=t([]),[k,S]=t(""),[N,D]=t(!1),[C,z]=t(!1),[V,K]=t(!1),[T,I]=t(null),[O,j]=t(null),A=i(null),[E,$]=t(null),J=i(null),_=i(null),F=i(0);a(()=>{J.current=E},[E]);let[M,P]=t({}),[B,L]=t("#5046e5"),[R,W]=t(24),[H,Y]=t("right"),[U,G]=t("light"),[q,Q]=t("#ffffff"),[X,Z]=t("#ffffff"),[ee,ne]=t("message"),[te,ie]=t(!0),[ae,oe]=t(!0),[le,re]=t(!0),[se,de]=t(!0),[me,ce]=t(!1);a(()=>{console.log(`[Vemly SDK v${v}] Initializing widget...`),e.getWidgetConfig().then(n=>{if(n){if(console.log(`[Vemly SDK v${v}] Config loaded:`,n),"error"===n.status)return console.error("[Vemly SDK] Error loading widget:",n.message),oe(!1),void ce(!0);if(0===Object.keys(n).length)return console.warn("[Vemly SDK] Empty config received, disabling widget"),oe(!1),void ce(!0);void 0!==n.widgetEnabled&&oe(n.widgetEnabled),void 0!==n.aiMessagingEnabled&&re(n.aiMessagingEnabled);let t=n.config||{};if(P(t),t.primaryColor&&L(t.primaryColor),t.defaultAgentName&&$(t.defaultAgentName),void 0!==t.borderRadius&&W(t.borderRadius),t.position&&Y(t.position),t.theme&&G(t.theme),t.launcherIcon&&ne(t.launcherIcon),void 0!==t.showBranding&&ie(t.showBranding),t.websiteUrl&&typeof window<"u")try{let n=new URL(t.websiteUrl).origin,i=window.location.origin,a=i.includes("localhost")||i.includes("127.0.0.1"),o=e.apiUrl?.includes("localhost")||e.apiUrl?.includes("127.0.0.1");de(n===i||a||o)}catch{de(!0)}else de(!0)}ce(!0)})},[e]),a(()=>{n&&("home"===f&&ve(),pe())},[n,f]),a(()=>{pe()},[x,N]);let pe=()=>{A.current?.scrollIntoView({behavior:"smooth"})},ye=()=>h(!n),ve=async()=>{let n=await e.getHistory();b(n)},he=()=>{console.log("[Vemly SDK v0.1.8] Connecting to stream..."),e.connectStream((e,n)=>{if(console.log("[Vemly SDK] Stream event:",e,"| Raw data:",JSON.stringify(n),"| Type:",typeof n),"message-stream"===e){let e;"object"==typeof n&&null!==n?(console.log("[Vemly SDK] message-stream object - type:",n.type,"| text:",n.text,"| content:",n.content),"text"===n.type&&"string"==typeof n.text||"string"==typeof n.text?e=n.text:"string"==typeof n.content&&(e=n.content)):"string"==typeof n&&(e=n),console.log("[Vemly SDK] Extracted token:",JSON.stringify(e)),e&&"undefined"!==e&&"null"!==e?ue(e):console.warn("[Vemly SDK] Skipping invalid token:",e)}else if("token"===e)n&&"string"==typeof n&&"undefined"!==n&&"null"!==n&&ue(n);else if("message-complete"===e)D(!1);else if("message"===e){if(!n||!n.id)return;if(console.log("[Vemly SDK] Received message event:",n),"undefined"===("string"==typeof n.content?n.content.trim():n.content)||!n.content)return void console.warn("[Vemly SDK] Ignored 'undefined' message content:",n);w(e=>{if(e.some(e=>e.id===n.id))return e;if("user"===n.role){let t=e.findIndex(e=>e.id.startsWith("user_")&&e.content===n.content);if(-1!==t){let i=[...e],a=n.content&&"undefined"!==n.content.trim()?n.content:i[t].content;return i[t]={id:n.id,role:n.role,content:a,createdAt:n.createdAt,agentName:void 0},i}}return D(!1),[...e,{id:n.id,role:n.role,content:n.content,createdAt:n.createdAt,agentName:n.agentName||("assistant"===n.role?E:void 0),agentAvatar:n.agentAvatar}]}),D(!1)}else if("human-takeover"===e){let e=n.isHumanTakeover;z(e),e?(D(!1),n.userName&&I(n.userName),n.agentAvatar&&j(n.agentAvatar),w(e=>{if(e.some(e=>"system-takeover"===e.id))return e;let t=n.userName||"a team member";return[...e,{id:"system-takeover",role:"system",content:`You're now connected with ${t}.`,createdAt:(new Date).toISOString()}]})):(I(null),j(null))}else"support-typing"===e?n.isTyping?(D(!0),n.userName&&I(n.userName),n.agentAvatar&&j(n.agentAvatar)):D(!1):"thinking-start"===e||"typing-start"===e?le&&D(!0):"conversation-closed"===e&&(K(!0),D(!1),w(e=>e.some(e=>"system-closed"===e.id)?e:[...e,{id:"system-closed",role:"system",content:"This conversation has been closed. Thank you for reaching out!",createdAt:(new Date).toISOString()}]))})},fe=()=>{e.sessionId=null,$(M.defaultAgentName||null),w([]),K(!1),z(!1),I(null),j(null),g("chat")},ge=async()=>{if(!k.trim())return;let n="user_"+Date.now(),t={id:n,role:"user",content:k,createdAt:(new Date).toISOString()};w(e=>[...e,t]),S(""),C||D(!0);try{let i=await e.sendMessage(t.content);i.isHumanTakeover&&(z(!0),D(!1),$("Support Team"),w(e=>e.some(e=>"system-takeover"===e.id)?e:[...e,{id:"system-takeover",role:"system",content:"A team member will be with you shortly.",createdAt:(new Date).toISOString()}])),i.message?.message?.id&&w(e=>e.map(e=>e.id===n?{...e,id:i.message.message.id}:e)),i.agentName&&!i.isHumanTakeover&&$(i.agentName),he()}catch(e){console.error("Vemly Send Error:",e),D(!1)}},ue=e=>{e&&"undefined"!==e&&"null"!==e?(console.log("[Vemly SDK] updateLastAssistantMessage called with token:",JSON.stringify(e)),w(n=>{console.log("[Vemly SDK] setMessages prev length:",n.length,"last role:",n[n.length-1]?.role);let t=n[n.length-1];if(t&&"assistant"===t.role){let i=(t.content||"")+e;return console.log("[Vemly SDK] Appending to existing message. New content:",JSON.stringify(i.substring(0,50))),[...n.slice(0,-1),{...t,content:i}]}return console.log("[Vemly SDK] Creating NEW assistant message with token:",JSON.stringify(e)),[...n,{id:"bot_"+Date.now(),role:"assistant",content:e,createdAt:(new Date).toISOString(),agentName:J.current||void 0}]})):console.warn("[Vemly SDK] updateLastAssistantMessage BLOCKED invalid token:",e)},be="dark"===U,xe="glass"===U,we={"--vemly-primary":B,"--vemly-primary-hover":B,"--vemly-radius":`${R}px`,"--vemly-header-text":q,"--vemly-user-text":X,"--vemly-bg":be?"#1f2937":xe?"rgba(255, 255, 255, 0.8)":"#ffffff","--vemly-surface":be?"#111827":xe?"rgba(249, 250, 251, 0.5)":"#f9fafb","--vemly-text":be?"#f9fafb":"#111827","--vemly-text-secondary":be?"#9ca3af":"#6b7280","--vemly-text-muted":be?"#6b7280":"#9ca3af","--vemly-border":be?"#374151":"#e5e7eb","--vemly-user-bg":"#111827","--vemly-ai-bg":be?"#374151":"#ffffff"},ke=xe?{backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)"}:{},Se=M.title||"Vemly",Ne=M.titleAlignment||"left";return me&&ae&&se&&ae?c("div",{className:"vemly-widget-container",style:we,"data-position":H,children:[c("div",{className:"vemly-window "+(n?"open":""),style:ke,children:[c("div",{className:"vemly-header",style:{color:q},children:[c("div",{className:"vemly-header-top",children:[p("div",{className:"vemly-brand",children:"chat"===f&&p("button",{className:"vemly-back-btn",onClick:()=>{K(!1),g("home"),ve()},children:p(o,{size:20})})}),p("button",{className:"vemly-close",onClick:ye,style:{color:q},children:p(l,{size:20})})]}),c("div",{className:"vemly-header-content",style:{textAlign:Ne},children:[p("h3",{children:Se}),p("p",{style:{opacity:.9},children:"home"===f?M.greeting||"We're here to help":"Ask us anything"})]}),c("div",{className:"vemly-status",style:{justifyContent:"center"===Ne?"center":"flex-start"},children:[p("span",{className:"vemly-status-dot"}),p("span",{style:{opacity:.9},children:"We typically reply instantly"})]})]}),"home"===f?p("div",{className:"vemly-home",children:c("div",{className:"vemly-home-content",children:[c("button",{onClick:fe,className:"vemly-start-btn",style:{backgroundColor:be?"#374151":"#111827",color:"#ffffff"},children:[p(r,{size:18}),p("span",{children:"Start a conversation"})]}),u.length>0&&c(y,{children:[p("div",{className:"vemly-section-title",children:"Recent conversations"}),p("div",{className:"vemly-session-list",children:u.slice(0,5).map(n=>c("div",{onClick:()=>(async(n,t)=>{e.sessionId=n,$(t||null),g("chat"),w([]);try{let i=await fetch(`${e.apiUrl}/chat/session/${n}`,{headers:{"x-vemly-api-key":e.apiKey,"Content-Type":"application/json"}});if(i.ok){let e=await i.json(),n=!!e.session?.isHumanTakeover;n&&z(!0);let a=n?"Support Team":e.agent?.name||t;if(a&&$(a),e.session?.closedAt&&K(!0),e.messages){let n=e.messages.map(e=>({...e,agentName:e.agentName||("assistant"===e.role?a:void 0),agentAvatar:e.agentAvatar}));w(n)}}he()}catch(e){console.error("Failed to load conversation history:",e)}})(n.id,n.agentName),className:"vemly-session-item",style:{backgroundColor:be?"#374151":"#ffffff",borderColor:be?"#4b5563":"#e5e7eb"},children:[p("div",{className:"vemly-session-title",style:{color:be?"#fff":"#111827"},children:n.title||"New Conversation"}),p("div",{className:"vemly-session-date",children:new Date(n.createdAt||Date.now()).toLocaleDateString()})]},n.id))})]}),0===u.length&&p("div",{className:"vemly-empty",children:"No previous conversations"})]})}):c("div",{className:"vemly-messages",style:{backgroundColor:be?"#1f2937":"glass"===U?"transparent":"#f9fafb"},children:[x.map((e,n)=>p("div",{className:`vemly-message-group ${e.role}`,children:"system"===e.role?p("div",{className:"vemly-message-content",children:p("p",{children:e.content})}):c(y,{children:[("assistant"===e.role||"tool"===e.role)&&c("div",{className:"vemly-sender",children:[e.agentAvatar?p("img",{src:e.agentAvatar,alt:e.agentName||"Bot",className:"vemly-sender-avatar-img"}):p("div",{className:"vemly-sender-avatar",children:(e.agentName||E||"Bot").substring(0,2).toUpperCase()}),p("div",{className:"vemly-sender-name",style:{color:be?"#e5e7eb":"#111827"},children:(()=>{let n=e.agentName||E||"Bot";return"undefined"!==n&&n?n:"Bot"})()})]}),p("div",{className:"vemly-message-content",children:p("div",{dangerouslySetInnerHTML:{t:m.parse(e.content&&"undefined"!==e.content.trim()?e.content:"")}})})]})},e.id||n)),N&&(()=>{let e=C&&T?T:E&&"undefined"!==E?E:"Vemly";return c("div",{className:"vemly-message-group assistant",children:[c("div",{className:"vemly-sender",children:[C&&O?p("img",{src:O,alt:e,className:"vemly-sender-avatar-img"}):p("div",{className:"vemly-sender-avatar",children:e.substring(0,2).toUpperCase()}),p("div",{className:"vemly-sender-name",children:e})]}),c("div",{className:"vemly-typing",style:{backgroundColor:be?"#374151":"#ffffff",borderColor:be?"#4b5563":"#e5e7eb"},children:[p("div",{className:"vemly-dot"}),p("div",{className:"vemly-dot"}),p("div",{className:"vemly-dot"})]})]})})(),p("div",{ref:A})]}),"chat"===f&&c("div",{className:"vemly-input-container",style:{backgroundColor:be?"#1f2937":"#ffffff",borderColor:be?"#374151":"#e5e7eb",opacity:V?.7:1},children:[c("div",V?{style:{padding:"12px 16px",textAlign:"center"},children:[p("p",{style:{fontSize:"13px",color:be?"#9ca3af":"#6b7280",marginBottom:"12px"},children:"This conversation is closed."}),c("button",{onClick:fe,style:{display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 16px",backgroundColor:B,color:"#ffffff",border:"none",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:[p(r,{size:16}),"Start New Conversation"]})]}:{className:"vemly-input-wrapper",style:{backgroundColor:be?"#111827":"#f9fafb",borderColor:be?"#374151":"#e5e7eb"},children:[p("textarea",{className:"vemly-input",placeholder:"Send a message...",value:k,onInput:n=>{let t=n.target.value;if(S(t),e.sessionId){let n=Date.now();n-F.current>1500&&(e.sendTyping(!0),F.current=n),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{e.sendTyping(!1),_.current=null,F.current=0},3e3)}},onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ge())},rows:1,style:{color:be?"#f3f4f6":"#111827"}}),p("button",{className:"vemly-send",onClick:ge,disabled:!k.trim()||N,children:p(s,{size:16})})]}),te&&c("div",{className:"vemly-branding",children:["Powered by ",p("a",{href:"https://usevemly.com",target:"_blank",rel:"noopener",children:"Vemly"})]})]})]}),p("button",{className:"vemly-bubble",onClick:ye,children:p(n?l:"bot"===ee?d:r,{size:24})})]}):null}var f=class{apiUrl;tenantId;agentId;apiKey;deviceId;sessionId=null;sseSource=null;sseController=null;constructor(e){this.apiUrl=e.apiUrl||"https://api.usevemly.com",this.tenantId=e.tenantId,this.agentId=e.agentId,this.apiKey=e.apiKey,this.deviceId=this.getOrCreateDeviceId()}getOrCreateDeviceId(){if(typeof window>"u")return"server";let e=localStorage.getItem("vemly_device_id");return e||(e="dev_"+Math.random().toString(36).substring(2,15),localStorage.setItem("vemly_device_id",e)),e}async createSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session`,{method:"POST",headers:e,body:JSON.stringify({...this.tenantId?{tenantId:this.tenantId}:{},agentId:this.agentId,deviceId:this.deviceId})});if(!n.ok)throw new Error("Failed to create session");let t=await n.json();return this.sessionId=t.session?.id||t.id,{session:t.session||t,agentName:t.agent?.name}}async resumeSession(){let e={"Content-Type":"application/json"};this.apiKey&&(e["x-vemly-api-key"]=this.apiKey);let n=await fetch(`${this.apiUrl}/chat/session/resume`,{method:"POST",headers:e,body:JSON.stringify({tenantId:this.tenantId,deviceId:this.deviceId})});if(!n.ok)return null;let t=await n.json();return this.sessionId=t.session?.id||null,t.session}async getHistory(e=20){let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey);let t={deviceId:this.deviceId,limit:e.toString()};this.tenantId&&(t.tenantId=this.tenantId);let i=new URLSearchParams(t),a=await fetch(`${this.apiUrl}/chat/sessions/device?${i.toString()}`,{method:"GET",headers:n});return a.ok&&(await a.json()).sessions||[]}async getWidgetConfig(){try{let e=`${this.apiUrl}/chat/config`;this.tenantId&&(e+=`/${this.tenantId}`);let n={};return this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await(await fetch(e,{method:"GET",headers:n})).json()||{}}catch(e){return console.error("Failed to fetch widget config",e),{}}}async sendMessage(e,n){let t,i;if(!this.sessionId){let e=await this.createSession();t=e.agentName,i=e.session.isHumanTakeover}let a={"Content-Type":"application/json"};this.apiKey&&(a["x-vemly-api-key"]=this.apiKey);let o=await fetch(`${this.apiUrl}/chat/message`,{method:"POST",headers:a,body:JSON.stringify({sessionId:this.sessionId,content:e,role:"user"})});if(!o.ok)throw new Error("Failed to send message");return{message:await o.json(),agentName:t,isHumanTakeover:i}}async sendTyping(e){if(!this.sessionId)return;let n={"Content-Type":"application/json"};this.apiKey&&(n["x-vemly-api-key"]=this.apiKey),await fetch(`${this.apiUrl}/chat/typing`,{method:"POST",headers:n,body:JSON.stringify({sessionId:this.sessionId,isTyping:e})})}connectStream(e){if(!this.sessionId)return;this.sseController&&this.sseController.abort(),this.sseController=new AbortController;let n=`${this.apiUrl}/chat/stream/${this.sessionId}`,t={"Content-Type":"application/json"};this.apiKey&&(t["x-vemly-api-key"]=this.apiKey),fetch(n,{method:"GET",headers:t,signal:this.sseController.signal}).then(async n=>{if(!n.ok||!n.body)throw new Error(`SSE Error: ${n.status}`);let t=n.body.getReader(),i=new TextDecoder,a="";for(;;){let{value:n,done:o}=await t.read();if(o)break;a+=i.decode(n,{stream:!0});let l=a.split("\n\n");a=l.pop()||"";for(let n of l){if(!n.trim())continue;let t=n.split("\n"),i="message",a=null;for(let e of t)if(e.startsWith("event: "))i=e.substring(7).trim();else if(e.startsWith("data: ")){let n=e.substring(6).trim();if(console.log("[Vemly SDK] SSE raw line:",e,"| rawData:",n),!n||"undefined"===n||"null"===n){console.warn("[Vemly SDK] Skipping empty/undefined rawData");continue}try{a=JSON.parse(n),console.log("[Vemly SDK] Parsed SSE data:",JSON.stringify(a),"| type:",typeof a)}catch{a=n,console.log("[Vemly SDK] SSE data as string:",a)}}null!=a&&(console.log("[Vemly SDK] Calling onData with event:",i,"data:",JSON.stringify(a)),e(i,a))}}}).catch(e=>{"AbortError"!==e.name&&console.error("Stream Error:",e)})}disconnectStream(){this.sseSource?.close(),this.sseSource=null,this.sseController?.abort(),this.sseController=null}getSessionId(){return this.sessionId}},g=new class{client=null;container=null;shadowRoot=null;init(e){if(this.client)console.warn("[VemlySDK] Already initialized");else if(e.apiKey)try{console.log("[VemlySDK] Initializing with API key..."),this.client=new f(e),this.createContainer(),this.render(),console.log("[VemlySDK] Initialization complete")}catch(e){console.error("[VemlySDK] Initialization failed:",e)}else console.error("[VemlySDK] apiKey is required")}createContainer(){let e=document.getElementById("vemly-sdk-root");e&&e.remove(),this.container=document.createElement("div"),this.container.id="vemly-sdk-root",document.body.appendChild(this.container),this.shadowRoot=this.container.attachShadow({mode:"open"});let n=document.createElement("style");n.textContent='\n@import url(\'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\');\n\n:host {\n --vemly-primary: #5046e5;\n --vemly-primary-hover: #4338ca;\n --vemly-bg: #ffffff;\n --vemly-surface: #f9fafb;\n --vemly-text: #111827;\n --vemly-text-secondary: #6b7280;\n --vemly-text-muted: #9ca3af;\n --vemly-border: #e5e7eb;\n --vemly-user-bg: #111827;\n --vemly-ai-bg: #ffffff;\n --vemly-radius: 16px;\n --vemly-font: \'Inter\', -apple-system, BlinkMacSystemFont, \'Segoe UI\', sans-serif;\n}\n\n.vemly-widget-container {\n position: fixed;\n bottom: 20px;\n z-index: 2147483647;\n font-family: var(--vemly-font);\n display: flex;\n flex-direction: column;\n gap: 12px;\n pointer-events: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.vemly-widget-container[data-position="right"] {\n right: 20px;\n left: auto;\n align-items: flex-end;\n}\n\n.vemly-widget-container[data-position="left"] {\n left: 20px;\n right: auto;\n align-items: flex-start;\n}\n\n.vemly-widget-container * {\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n/* Launcher */\n.vemly-bubble {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16);\n transition: all 0.2s ease;\n border: none;\n outline: none;\n}\n\n.vemly-bubble:hover {\n background: var(--vemly-primary-hover);\n transform: scale(1.05);\n}\n\n.vemly-bubble:active {\n transform: scale(0.95);\n}\n\n/* Window */\n.vemly-window {\n width: 380px;\n height: 600px;\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 40px);\n background: var(--vemly-bg);\n border-radius: var(--vemly-radius);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transform-origin: bottom right;\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n transition: all 0.2s ease;\n visibility: hidden;\n}\n\n.vemly-window.open {\n opacity: 1;\n transform: scale(1) translateY(0);\n visibility: visible;\n}\n\n/* Header */\n.vemly-header {\n background: var(--vemly-primary);\n color: white;\n padding: 20px;\n flex-shrink: 0;\n}\n\n.vemly-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.vemly-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.vemly-back-btn {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-back-btn:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-close {\n background: rgba(255,255,255,0.15);\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n}\n\n.vemly-close:hover {\n background: rgba(255,255,255,0.25);\n}\n\n.vemly-header-content {\n margin-top: 16px;\n}\n\n.vemly-header-content h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n}\n\n.vemly-header-content p {\n margin: 4px 0 0;\n font-size: 14px;\n opacity: 0.85;\n}\n\n.vemly-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 12px;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.vemly-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n}\n\n/* Messages Area */\n.vemly-messages {\n flex: 1;\n background: var(--vemly-surface);\n padding: 16px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.vemly-message-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 85%;\n animation: vemly-fade-in 0.25s ease-out;\n}\n\n@keyframes vemly-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.vemly-message-group.assistant {\n align-self: flex-start;\n}\n\n.vemly-message-group.user {\n align-self: flex-end;\n}\n\n.vemly-sender {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.vemly-sender-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--vemly-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vemly-sender-avatar-img {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.vemly-sender-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--vemly-text);\n}\n\n.vemly-message-content {\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.vemly-message-group.assistant .vemly-message-content {\n background: white;\n color: var(--vemly-text);\n border: 1px solid var(--vemly-border);\n border-top-left-radius: 4px;\n}\n\n.vemly-message-group.user .vemly-message-content {\n background: var(--vemly-user-bg);\n color: white;\n border-top-right-radius: 4px;\n}\n\n.vemly-message-content p { margin: 0 0 8px; }\n.vemly-message-content p:last-child { margin: 0; }\n.vemly-message-content a { color: inherit; text-decoration: underline; }\n.vemly-message-content code {\n background: rgba(0,0,0,0.06);\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n.vemly-message-group.user .vemly-message-content code {\n background: rgba(255,255,255,0.15);\n}\n\n/* Home View */\n.vemly-home {\n flex: 1;\n background: var(--vemly-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.vemly-home-content {\n padding: 16px;\n}\n\n.vemly-start-btn {\n width: 100%;\n padding: 14px 16px;\n background: var(--vemly-text);\n color: white;\n border: none;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.15s;\n}\n\n.vemly-start-btn:hover {\n opacity: 0.9;\n transform: translateY(-1px);\n}\n\n.vemly-section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--vemly-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 20px 0 12px;\n}\n\n.vemly-session-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.vemly-session-item {\n padding: 12px 14px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.vemly-session-item:hover {\n border-color: var(--vemly-text-muted);\n background: #fafafa;\n}\n\n.vemly-session-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--vemly-text);\n margin-bottom: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vemly-session-date {\n font-size: 12px;\n color: var(--vemly-text-muted);\n}\n\n.vemly-empty {\n text-align: center;\n padding: 24px;\n color: var(--vemly-text-muted);\n font-size: 14px;\n}\n\n/* Input */\n.vemly-input-container {\n padding: 12px 16px 16px;\n background: white;\n border-top: 1px solid var(--vemly-border);\n}\n\n.vemly-input-wrapper {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n background: var(--vemly-surface);\n border: 1px solid var(--vemly-border);\n border-radius: 12px;\n padding: 8px 8px 8px 14px;\n transition: all 0.15s;\n}\n\n.vemly-input-wrapper:focus-within {\n border-color: var(--vemly-primary);\n box-shadow: 0 0 0 3px rgba(80, 70, 229, 0.1);\n}\n\n.vemly-input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 16px; /* 16px prevents iOS zoom on focus */\n color: var(--vemly-text);\n max-height: 100px;\n resize: none;\n font-family: inherit;\n padding: 4px 0;\n line-height: 1.4;\n -webkit-appearance: none; /* Remove iOS styling */\n appearance: none;\n}\n\n.vemly-input::placeholder {\n color: var(--vemly-text-muted);\n}\n\n.vemly-send {\n background: var(--vemly-primary);\n color: white;\n border: none;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s;\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n}\n\n.vemly-send:hover:not(:disabled) {\n background: var(--vemly-primary-hover);\n}\n\n.vemly-send:disabled {\n background: var(--vemly-border);\n color: var(--vemly-text-muted);\n cursor: default;\n}\n\n.vemly-branding {\n font-size: 11px;\n text-align: center;\n color: var(--vemly-text-muted);\n margin-top: 8px;\n}\n\n.vemly-branding a {\n color: var(--vemly-text-secondary);\n text-decoration: none;\n font-weight: 500;\n}\n\n/* Typing */\n.vemly-typing {\n display: flex;\n gap: 4px;\n padding: 14px 16px;\n background: white;\n border: 1px solid var(--vemly-border);\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n}\n\n.vemly-dot {\n width: 6px;\n height: 6px;\n background: var(--vemly-text-muted);\n border-radius: 50%;\n animation: vemly-bounce 1.4s infinite ease-in-out;\n}\n\n.vemly-dot:nth-child(1) { animation-delay: -0.32s; }\n.vemly-dot:nth-child(2) { animation-delay: -0.16s; }\n\n@keyframes vemly-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* Mobile Optimizations */\n@media (max-width: 480px) {\n .vemly-widget-container,\n .vemly-widget-container[data-position="right"],\n .vemly-widget-container[data-position="left"] {\n bottom: 0;\n right: 0;\n left: 0;\n padding: 0;\n gap: 0;\n align-items: stretch;\n }\n \n .vemly-window {\n width: 100%;\n height: 100dvh; /* Dynamic viewport height for mobile browsers */\n height: 100vh; /* Fallback for older browsers */\n max-width: none;\n max-height: none;\n border-radius: 0;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n /* Support for iOS safe areas */\n @supports (padding: env(safe-area-inset-top)) {\n .vemly-header {\n padding-top: calc(20px + env(safe-area-inset-top));\n }\n \n .vemly-input-container {\n padding-bottom: calc(16px + env(safe-area-inset-bottom));\n }\n }\n \n .vemly-bubble {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483648;\n }\n \n /* Hide bubble when window is open on mobile */\n .vemly-window.open ~ .vemly-bubble {\n display: none;\n }\n \n /* Larger touch targets for mobile */\n .vemly-close,\n .vemly-back-btn {\n min-width: 44px;\n min-height: 44px;\n padding: 10px;\n }\n \n .vemly-session-item {\n padding: 14px 16px;\n min-height: 44px;\n }\n \n .vemly-start-btn {\n min-height: 48px;\n font-size: 15px;\n }\n \n /* Prevent body scroll when widget is open */\n .vemly-window.open {\n overscroll-behavior: contain;\n }\n \n .vemly-messages {\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n \n /* Input area adjustments for mobile */\n .vemly-input-wrapper {\n padding: 10px 10px 10px 16px;\n }\n \n .vemly-send {\n width: 40px;\n height: 40px;\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 481px) and (max-width: 768px) {\n .vemly-window {\n width: 380px;\n max-height: calc(100dvh - 100px);\n max-height: calc(100vh - 100px); /* Fallback */\n }\n}\n\n/* Touch optimizations for all touch devices */\n@media (pointer: coarse) {\n .vemly-bubble,\n .vemly-close,\n .vemly-back-btn,\n .vemly-send,\n .vemly-session-item,\n .vemly-start-btn {\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n}\n',this.shadowRoot.appendChild(n)}render(){if(!this.shadowRoot||!this.client)return;let t=document.createElement("div");this.shadowRoot.appendChild(t),e(n(h,{client:this.client}),t)}},u=g;typeof window<"u"&&(window.Vemly=g);export{u as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vemly/sdk",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "private": false,
5
5
  "description": "Vemly AI JavaScript/TypeScript SDK - Embed AI-powered chat widgets in your website",
6
6
  "exports": {