@molin.ai/shop-ai 0.6.8 → 0.6.10
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.
|
@@ -800,7 +800,7 @@ Event: `).concat(JSON.stringify(p.data)));return r.scheduler.schedule(function()
|
|
|
800
800
|
<img class="block h-full w-full bg-white" src="${this.src}" />
|
|
801
801
|
`:Te`
|
|
802
802
|
<!-- if no image URL is specified, we default to our Lottie animation -->
|
|
803
|
-
<dotlottie-player class="bg-slate-800" autoplay loop mode="normal" src="https://molin.ai/animations/dlf10_hISLmVmo2x.lottie"></dotlottie-player>
|
|
803
|
+
<dotlottie-player class="bg-slate-800" autoplay loop mode="normal" src="https://widget.molin.ai/animations/dlf10_hISLmVmo2x.lottie"></dotlottie-player>
|
|
804
804
|
`}
|
|
805
805
|
</div>
|
|
806
806
|
|
|
@@ -919,7 +919,7 @@ CHAT`}</span>
|
|
|
919
919
|
</div>
|
|
920
920
|
</div>
|
|
921
921
|
</div>
|
|
922
|
-
`;default:throw new Error(`Unknown side: ${this.side}`)}}};Jt(dl,"properties",{side:{type:String},status:{type:String},color:{type:String},logoUrl:{type:String,attribute:"logo"}});var ml=class extends No{constructor(e){if(super(e),this.it=$e,e.type!==Kp.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===$e||e==null)return this._t=void 0,this.it=e;if(e===Js)return e;if(typeof e!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(e===this.it)return this._t;this.it=e;let i=[e];return i.raw=i,this._t={_$litType$:this.constructor.resultType,strings:i,values:[]}}};ml.directiveName="unsafeHTML",ml.resultType=1;var Hg=Qp(ml);var uS=class extends Error{constructor(e){super(e[0].message);Jt(this,"issues");this.name="ValiError",this.issues=e}},dA=Symbol("brand");function Wg(t,e,i,r,s){return{issues:[{context:t,reference:e,input:i,label:r,received:s}]}}function Ug(t){return{output:t}}function Ho(t,e){return Array.isArray(t)?[void 0,t]:[t,e]}var rc;function dS(t){return{lang:t?.lang??rc?.lang,message:t?.message,abortEarly:t?.abortEarly??rc?.abortEarly,abortPipeEarly:t?.abortPipeEarly??rc?.abortPipeEarly,skipPipe:t?.skipPipe??rc?.skipPipe}}var mS;function gS(t){return mS?.get(t)}var yS;function vS(t){return yS?.get(t)}var bS;function _S(t,e){return bS?.get(t)?.get(e)}function Yg(t,e,i,r,s){let n=e.message??_S(i,s.lang)??(t?vS(s.lang):null)??r?.message??gS(s.lang)??s.message;return typeof n=="function"?n(s):n}function gl(t,e,i){return{typed:t,output:e,issues:i}}function Ja(t){let e=typeof t;return e==="object"&&(e=t?Object.getPrototypeOf(t).constructor.name:"null"),e==="string"?`"${t}"`:e==="number"||e==="bigint"||e==="boolean"?`${t}`:e}function xS(t,e,i){let r=i.received??Ja(i.input),s={reason:t.type,context:i.context.type,expected:i.context.expects,received:r,message:`Invalid ${i.label}: ${i.context.expects?`Expected ${i.context.expects} but r`:"R"}eceived ${r}`,input:i.input,requirement:i.context.requirement,path:i.path,lang:e?.lang,abortEarly:e?.abortEarly,abortPipeEarly:e?.abortPipeEarly,skipPipe:e?.skipPipe};return s.message=Yg(!1,i.context,i.reference,e,s),s}function yl(t,e,i,r){if(t.pipe&&!i?.skipPipe)for(let s of t.pipe){let n=s._parse(e);if(n.issues){for(let a of n.issues){let l=xS(t,i,a);r?r.push(l):r=[l]}if(i?.abortEarly||i?.abortPipeEarly)break}else e=n.output}return gl(!0,e,r)}function SS(t,e,i){if(!t||typeof t=="object"&&!Array.isArray(t)){let[n,a]=Ho(e,i);return[t,n,a]}let[r,s]=Ho(t,e);return[void 0,r,s]}function Wo(t,e,i,r,s){let n=Ja(i),a=s?.expected??t.expects,l={reason:s?.reason??"type",context:t.type,expected:a,received:n,message:`Invalid type: Expected ${a} but received ${n}`,input:i,path:s?.path,issues:s?.issues,lang:r?.lang,abortEarly:r?.abortEarly,abortPipeEarly:r?.abortPipeEarly,skipPipe:r?.skipPipe};return l.message=Yg(!0,t,e,r,l),{typed:!1,output:i,issues:[l]}}function PS(t){return typeof t.default=="function"?t.default():t.default}function Uo(t,e,i){let[r,s]=Ho(e,i);return{type:"array",expects:"Array",async:!1,item:t,message:r,pipe:s,_parse(n,a){if(Array.isArray(n)){let l=!0,o,u=[];for(let b=0;b<n.length;b++){let c=n[b],p=this.item._parse(c,a);if(p.issues){let x={type:"array",origin:"value",input:n,key:b,value:c};for(let _ of p.issues)_.path?_.path.unshift(x):_.path=[x],o?.push(_);if(o||(o=p.issues),a?.abortEarly){l=!1;break}}p.typed||(l=!1),u.push(p.output)}return l?yl(this,u,a,o):gl(!1,u,o)}return Wo(this,Uo,n,a)}}}function is(t,e){let[i,r]=Ho(t,e);return{type:"boolean",expects:"boolean",async:!1,message:i,pipe:r,_parse(s,n){return typeof s=="boolean"?yl(this,s,n):Wo(this,is,s,n)}}}function Za(t,e){let[i,r]=Ho(t,e);return{type:"number",expects:"number",async:!1,message:i,pipe:r,_parse(s,n){return typeof s=="number"&&!isNaN(s)?yl(this,s,n):Wo(this,Za,s,n)}}}function gr(t,e,i,r){let[s,n,a]=SS(e,i,r),l;return{type:"object",expects:"Object",async:!1,entries:t,rest:s,message:n,pipe:a,_parse(o,u){if(o&&typeof o=="object"){l=l??Object.entries(this.entries);let b=!0,c,p={};for(let[x,_]of l){let v=o[x],C=_._parse(v,u);if(C.issues){let d={type:"object",origin:"value",input:o,key:x,value:v};for(let f of C.issues)f.path?f.path.unshift(d):f.path=[d],c?.push(f);if(c||(c=C.issues),u?.abortEarly){b=!1;break}}C.typed||(b=!1),(C.output!==void 0||x in o)&&(p[x]=C.output)}if(this.rest&&!(u?.abortEarly&&c)){for(let x in o)if(!(x in this.entries)){let _=o[x],v=this.rest._parse(_,u);if(v.issues){let C={type:"object",origin:"value",input:o,key:x,value:_};for(let d of v.issues)d.path?d.path.unshift(C):d.path=[C],c?.push(d);if(c||(c=v.issues),u?.abortEarly){b=!1;break}}v.typed||(b=!1),p[x]=v.output}}return b?yl(this,p,u,c):gl(!1,p,c)}return Wo(this,gr,o,u)}}}function Ie(t,e){return{type:"optional",expects:`${t.expects} | undefined`,async:!1,wrapped:t,default:e,_parse(i,r){if(i===void 0){let s=PS(this);if(s===void 0)return gl(!0,i);i=s}return this.wrapped._parse(i,r)}}}function sc(t,e){return{type:"picklist",expects:t.map(Ja).join(" | "),async:!1,options:t,message:e,_parse(i,r){return this.options.includes(i)?gl(!0,i):Wo(this,sc,i,r)}}}function Ke(t,e){let[i,r]=Ho(t,e);return{type:"string",expects:"string",async:!1,message:i,pipe:r,_parse(s,n){return typeof s=="string"?yl(this,s,n):Wo(this,Ke,s,n)}}}function Xg(t,e,i){let r=t._parse(e,dS(i));if(r.issues)throw new uS(r.issues);return r.output}function Lu(t,e){return{type:"max_value",expects:`<=${t instanceof Date?t.toJSON():Ja(t)}`,async:!1,message:e,requirement:t,_parse(i){return i<=this.requirement?Ug(i):Wg(this,Lu,i,"value",i instanceof Date?i.toJSON():Ja(i))}}}function Ru(t,e){return{type:"min_value",expects:`>=${t instanceof Date?t.toJSON():Ja(t)}`,async:!1,message:e,requirement:t,_parse(i){return i>=this.requirement?Ug(i):Wg(this,Ru,i,"value",i instanceof Date?i.toJSON():Ja(i))}}}var vl,ms,sn,bl,Vu,nc=class{constructor(e,i){ue(this,bl);ue(this,vl);ue(this,ms);ue(this,sn);if(!e)throw new Error("host is required");if(!i)throw new Error("config is required");Fe(this,vl,e),Yt(this,vl).addController(this),Fe(this,ms,i)}connect(e){Fe(this,ms,e),Fe(this,sn,Ae(this,bl,Vu).call(this))}hostConnected(){setTimeout(()=>{Fe(this,sn,Ae(this,bl,Vu).call(this))},0)}hostDisconnected(){Yt(this,sn)?.close(1e3,"lit_host_disconnected"),Fe(this,sn,void 0)}send(e){Yt(this,sn)?.send(e)}close(e,i){Yt(this,sn)?.close(e,i)}render(e={}){switch(Yt(this,sn)?.readyState){case WebSocket.CLOSED:return e.closed?.();case WebSocket.CLOSING:return e.closing?.();case WebSocket.CONNECTING:return e.connecting?.();case WebSocket.OPEN:return e.open?.()}}get isConnected(){return Yt(this,sn)?.readyState===WebSocket.OPEN}};vl=new WeakMap,ms=new WeakMap,sn=new WeakMap,bl=new WeakSet,Vu=function(){let e=new WebSocket(Yt(this,ms).url());return Yt(this,ms).onClose&&(e.onclose=Yt(this,ms).onClose),Yt(this,ms).onOpen&&(e.onopen=Yt(this,ms).onOpen),Yt(this,ms).onError&&(e.onerror=Yt(this,ms).onError),Yt(this,ms).onMessage&&(e.onmessage=Yt(this,ms).onMessage),e};var Zg="664df22d-d461-42d6-801e-f70247e2cd7c",Er,Wr,nn,Yo,Xo,Br,Ka,Kg,Qg,ty,ey,ac=class{constructor(e,i){ue(this,Br);ue(this,Er);ue(this,Wr);ue(this,nn);Jt(this,"isStreaming",!1);Jt(this,"typingIndicator");Jt(this,"ranOutOfCredits",!1);Jt(this,"messages",[]);Jt(this,"conversationId","");ue(this,Yo,0);ue(this,Xo);Jt(this,"isLiveMode",!1);Fe(this,Er,e),Fe(this,Wr,i),Fe(this,nn,this.initWS()),e.addController(this)}sendUserInput(e,{role:i="user",expectStreaming:r=!1}={}){return Ae(this,Br,Ka).call(this,{type:"USER_INPUT",value:e,role:i},{expectStreaming:r})}sendUserCancel(){return Ae(this,Br,Ka).call(this,{type:"USER_CANCEL"})}sendUserTypingStart(){return Ae(this,Br,Ka).call(this,{type:"USER_TYPING_START"})}sendUserTypingStop(){return Ae(this,Br,Ka).call(this,{type:"USER_TYPING_STOP"})}reloadConfig(){Ae(this,Br,Ka).call(this,{type:"RELOAD_CONFIG"})}close(){Yt(this,nn).close(1e3,"closed by user")}retry(){clearTimeout(Yt(this,Xo)),Fe(this,Xo,setTimeout(()=>{Yt(this,Wr).onReconnect?.(),Fe(this,nn,this.initWS())},1e3*Yt(this,Yo))),Nd(this,Yo)._++}initWS(){return new nc(Yt(this,Er),{url:()=>Yt(this,Wr).url(this.conversationId,{}),onOpen:e=>Ae(this,Br,Kg).call(this,e),onMessage:e=>Ae(this,Br,Qg).call(this,JSON.parse(e.data)),onError:e=>Ae(this,Br,ty).call(this,e),onClose:e=>Ae(this,Br,ey).call(this,e)})}hostConnected(){this.conversationId=Yt(this,Wr).restoreConversationState?.()?.conversationId||""}reset(){Ae(this,Br,Ka).call(this,{type:"NEW_CHAT"}),Yt(this,Wr).onReset?.(),this.isStreaming=!1,this.typingIndicator=void 0,this.ranOutOfCredits=!1,this.messages=[],this.conversationId="",this.isLiveMode=!1,Yt(this,Er).requestUpdate()}hostDisconnected(){clearTimeout(Yt(this,Xo))}reconnectSocket(){Yt(this,nn).close(1e3,"destroy"),Fe(this,nn,this.initWS())}get lastMsg(){if(this.messages.length>0)return this.messages[this.messages.length-1]}};Er=new WeakMap,Wr=new WeakMap,nn=new WeakMap,Yo=new WeakMap,Xo=new WeakMap,Br=new WeakSet,Ka=function(e,{expectStreaming:i=!1}={}){return Yt(this,nn).isConnected?(i&&!this.isLiveMode&&(this.isStreaming=!0,Yt(this,Er).requestUpdate()),Yt(this,nn).send(JSON.stringify(e)),!0):(console.warn("WebSocket is not connected, message not sent - reconnecting now",e),this.retry(),!1)},Kg=function(e){Fe(this,Yo,0)},Qg=function(e){switch(e.type){case"NEW_MESSAGE":{this.messages=[...this.messages,e.message].filter((i,r,s)=>r===s.findIndex(n=>n.id===i.id)),Yt(this,Er).requestUpdate(),Yt(this,Wr).onNewMessage?.(e.message);break}case"UPDATE_MESSAGE":{let i=this.messages.find(r=>r.id===e.message.id);if(i)Object.assign(i,e.message),Yt(this,Er).requestUpdate(),Yt(this,Wr).onUpdateMessage?.(e);else throw new Error(`Message with id ${e.message.id} not found`);break}case"MESSAGE_DONE":{let i=this.messages.find(r=>r.id===e.message.id);if(i)Object.assign(i,e.message);else throw new Error(`Message with id ${e.message.id} not found`);this.isStreaming=!1,Yt(this,Er).requestUpdate(),Yt(this,Wr).onMessageDone?.(e,i);break}case"MESSAGE_CANCEL":{this.isStreaming=!1,this.typingIndicator=void 0,Yt(this,Er).requestUpdate();break}case"ERROR":{Yt(this,Wr).onMessageError?.(e);break}case"CONNECTED":{e.messages&&(this.messages=e.messages),this.conversationId=e.conversationId,Yt(this,Wr).onConnect?.(e.conversationId),Yt(this,Wr).persistConversationState?.(e.conversationId),this.isLiveMode=e.metadata?.isLiveMode,Yt(this,Er).requestUpdate();break}case"TYPING_START":{e.role==="assistant"&&(this.isStreaming=!0),this.typingIndicator={role:e.role},Yt(this,Er).requestUpdate();break}case"TYPING_STOP":{this.typingIndicator=void 0,Yt(this,Er).requestUpdate();break}case"RAN_OUT_OF_CREDITS":{this.messages.some(i=>i.id===Zg)||this.messages.push({id:Zg,role:"assistant",content:"Sorry, I've run out of credits. Please contact the shop directly.",timestamp:Date.now()}),this.ranOutOfCredits=!0,Yt(this,Er).requestUpdate();break}case"RECONNECT":{this.reconnectSocket(),Yt(this,Er).requestUpdate();break}default:console.warn(`Unknown message type: ${JSON.stringify(e)}`)}},ty=function(e){console.error("onError",e),Yt(this,Wr).onError?.(e)},ey=function(e){Yt(this,Er).isConnected&&!Yt(this,nn).isConnected&&e.reason==="reconnect"&&this.retry(),this.isStreaming=!1,this.typingIndicator=void 0,Yt(this,Er).requestUpdate(),Yt(this,Wr).onClose?.()};var _l,Jo,Qa,to,Zo,iy,ry,oc=class{constructor(e,i,{timeoutMs:r=2e3}={}){ue(this,Zo);ue(this,_l);ue(this,Jo);ue(this,Qa);ue(this,to,!1);Jt(this,"timeoutMs");Fe(this,_l,e),Fe(this,Jo,i),this.timeoutMs=r,e.addController(this)}get isTyping(){return Yt(this,to)}hostDisconnected(){clearTimeout(Yt(this,Qa)),Fe(this,Qa,void 0)}onInput(){Yt(this,_l).isConnected&&(clearTimeout(Yt(this,Qa)),Fe(this,Qa,setTimeout(()=>Ae(this,Zo,ry).call(this),this.timeoutMs)),Yt(this,to)||Ae(this,Zo,iy).call(this))}};_l=new WeakMap,Jo=new WeakMap,Qa=new WeakMap,to=new WeakMap,Zo=new WeakSet,iy=function(){Fe(this,to,!0),Yt(this,Jo).typingStarted()},ry=function(){Fe(this,to,!1),Yt(this,Jo).typingStopped()};function sy(t,e){let i=new Map;for(let r of t){let s=e(r);i.has(s)||i.set(s,[]),(i.get(s)||[]).push(r)}return i}function ny(t,e="en-US"){let i=new Intl.DateTimeFormat(e,{hour:"numeric",minute:"numeric"}).format(t);return`${t.toLocaleDateString(e,{year:"numeric",month:"short",day:"numeric"})}, ${i}`}var DA=gr({wsApiUrl:Ke(),url:Ke(),logoUrl:Ie(Ke()),title:Ke(),status:Ke(),color:Ke(),showStillLearningBanner:Ie(is()),liveChatEnabled:Ie(is()),allowedOrigins:Ie(Uo(Ke())),input:gr({placeholder:Ke()}),bubble:gr({imageUrl:Ie(Ke()),position:gr({bottom:Ie(Ke()),right:Ie(Ke()),left:Ie(Ke())}),mobilePosition:Ie(gr({bottom:Ie(Ke()),right:Ie(Ke()),left:Ie(Ke())}))}),examples:gr({title:Ke(),items:Uo(Ke())}),instructions:gr({items:Uo(Ke())}),popup:Ie(gr({mobileEnabled:Ie(is()),desktopEnabled:Ie(is()),delayMs:Ie(Za()),text:Ie(Ke()),mobileTitleText:Ie(Ke()),mobileButtonText:Ie(Ke())})),tryItOut:Ie(gr({mobileEnabled:Ie(is()),desktopEnabled:Ie(is()),text:Ie(Ke())})),contactDetails:Ie(gr({email:Ie(Ke()),phone:Ie(Ke()),socialMedia:Ie(gr({facebook:Ie(Ke()),instagram:Ie(Ke()),twitter:Ie(Ke())}))})),neverShowStillLearningBanner:Ie(is()),hidden:Ie(is()),newChatTitle:Ie(Ke()),webhookURL:Ie(Ke()),automatedResponse:Ie(gr({enabled:Ie(is()),text:Ie(Ke()),latencyThresholdMs:Ie(Za())})),manual:Ie(is()),removePoweredBy:Ie(is()),claimable:Ie(is()),feed:Ie(Ke()),scraper:Ie(sc(["netkazan","jateknet","grandopet"])),platform:Ie(sc(["shopify","shoprenter","unas","scraper"])),workingHours:Ie(gr({dailyAvailability:Uo(gr({dayOfWeek:Za([Ru(0),Lu(6)]),startTime:Ke(),endTime:Ke(),isActive:is()})),userTimeZone:Ie(Ke())})),planOverrides:Ie(gr({maxProducts:Ie(Za()),conversations:Ie(Za())}))});var wS="\xB7 \xB7 \xB7",kS=gr({conversationId:Ie(Ke())}),Ui,hc,lc,yr,ay,oy,hy,ly,py,cy,fy,Ou,pc=class pc extends hi(Je){constructor(){super();ue(this,Ui);ue(this,lc,new oc(this,{typingStarted:()=>Yt(this,yr).sendUserTypingStart(),typingStopped:()=>Yt(this,yr).sendUserTypingStop()}));ue(this,yr,new ac(this,{url:(i,{resume:r}={})=>{let s=new URL(this.config.wsApiUrl);return s.searchParams.set("widgetId",this.widgetId),s.searchParams.set("resume",r?"1":""),s.searchParams.set("conversationId",i),s.searchParams.set("pageUrl",window.location.href),s},onReconnect:()=>{},onError:i=>{console.error("ws error",i)},onClose:()=>{},onNewMessage:i=>{i.role==="user"&&Yt(this,Ui,Ou)?.scrollTo(0,Yt(this,Ui,Ou).scrollHeight),i.role==="assistant"&&this.callbacks.onNewMessageStartedStreaming?.({widgetId:this.widgetId,message:i,conversationId:this.conversationId})},onMessageDone:(i,r)=>{r.role==="assistant"&&this.callbacks.onMessageEndedStreaming?.({widgetId:this.widgetId,text:r.content??"",message:r,usage_TOKENS_COMPLETION:i.message.usage.TOKENS_COMPLETION,conversationId:this.conversationId})},onMessageError:i=>{console.error("ws message error",i),i.message&&this.callbacks.onError?.({widgetId:this.widgetId,error:"WS: "+i.message})},onReset:()=>{localStorage.removeItem(Yt(this,Ui,hc))},onConnect:i=>{},persistConversationState:i=>{localStorage.setItem(Yt(this,Ui,hc),JSON.stringify({conversationId:i}))},restoreConversationState:()=>{try{let i=JSON.parse(localStorage.getItem(Yt(this,Ui,hc))||"{}");return{conversationId:Xg(kS,i).conversationId||""}}catch(i){return console.error(i),{conversationId:""}}}}));this.config={},this.callbacks={},this.showClose=!1}get widgetId(){return this.config.widgetId}get conversationId(){return Yt(this,yr).conversationId}get messages(){return Yt(this,yr).messages}render(){let i=sy(this.messages,r=>new Date(r.timestamp).setSeconds(0,0).toString());return Te`
|
|
922
|
+
`;default:throw new Error(`Unknown side: ${this.side}`)}}};Jt(dl,"properties",{side:{type:String},status:{type:String},color:{type:String},logoUrl:{type:String,attribute:"logo"}});var ml=class extends No{constructor(e){if(super(e),this.it=$e,e.type!==Kp.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===$e||e==null)return this._t=void 0,this.it=e;if(e===Js)return e;if(typeof e!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(e===this.it)return this._t;this.it=e;let i=[e];return i.raw=i,this._t={_$litType$:this.constructor.resultType,strings:i,values:[]}}};ml.directiveName="unsafeHTML",ml.resultType=1;var Hg=Qp(ml);var uS=class extends Error{constructor(e){super(e[0].message);Jt(this,"issues");this.name="ValiError",this.issues=e}},dA=Symbol("brand");function Wg(t,e,i,r,s){return{issues:[{context:t,reference:e,input:i,label:r,received:s}]}}function Ug(t){return{output:t}}function Ho(t,e){return Array.isArray(t)?[void 0,t]:[t,e]}var rc;function dS(t){return{lang:t?.lang??rc?.lang,message:t?.message,abortEarly:t?.abortEarly??rc?.abortEarly,abortPipeEarly:t?.abortPipeEarly??rc?.abortPipeEarly,skipPipe:t?.skipPipe??rc?.skipPipe}}var mS;function gS(t){return mS?.get(t)}var yS;function vS(t){return yS?.get(t)}var bS;function _S(t,e){return bS?.get(t)?.get(e)}function Yg(t,e,i,r,s){let n=e.message??_S(i,s.lang)??(t?vS(s.lang):null)??r?.message??gS(s.lang)??s.message;return typeof n=="function"?n(s):n}function gl(t,e,i){return{typed:t,output:e,issues:i}}function Ja(t){let e=typeof t;return e==="object"&&(e=t?Object.getPrototypeOf(t).constructor.name:"null"),e==="string"?`"${t}"`:e==="number"||e==="bigint"||e==="boolean"?`${t}`:e}function xS(t,e,i){let r=i.received??Ja(i.input),s={reason:t.type,context:i.context.type,expected:i.context.expects,received:r,message:`Invalid ${i.label}: ${i.context.expects?`Expected ${i.context.expects} but r`:"R"}eceived ${r}`,input:i.input,requirement:i.context.requirement,path:i.path,lang:e?.lang,abortEarly:e?.abortEarly,abortPipeEarly:e?.abortPipeEarly,skipPipe:e?.skipPipe};return s.message=Yg(!1,i.context,i.reference,e,s),s}function yl(t,e,i,r){if(t.pipe&&!i?.skipPipe)for(let s of t.pipe){let n=s._parse(e);if(n.issues){for(let a of n.issues){let l=xS(t,i,a);r?r.push(l):r=[l]}if(i?.abortEarly||i?.abortPipeEarly)break}else e=n.output}return gl(!0,e,r)}function SS(t,e,i){if(!t||typeof t=="object"&&!Array.isArray(t)){let[n,a]=Ho(e,i);return[t,n,a]}let[r,s]=Ho(t,e);return[void 0,r,s]}function Wo(t,e,i,r,s){let n=Ja(i),a=s?.expected??t.expects,l={reason:s?.reason??"type",context:t.type,expected:a,received:n,message:`Invalid type: Expected ${a} but received ${n}`,input:i,path:s?.path,issues:s?.issues,lang:r?.lang,abortEarly:r?.abortEarly,abortPipeEarly:r?.abortPipeEarly,skipPipe:r?.skipPipe};return l.message=Yg(!0,t,e,r,l),{typed:!1,output:i,issues:[l]}}function PS(t){return typeof t.default=="function"?t.default():t.default}function Uo(t,e,i){let[r,s]=Ho(e,i);return{type:"array",expects:"Array",async:!1,item:t,message:r,pipe:s,_parse(n,a){if(Array.isArray(n)){let l=!0,o,u=[];for(let b=0;b<n.length;b++){let c=n[b],p=this.item._parse(c,a);if(p.issues){let x={type:"array",origin:"value",input:n,key:b,value:c};for(let _ of p.issues)_.path?_.path.unshift(x):_.path=[x],o?.push(_);if(o||(o=p.issues),a?.abortEarly){l=!1;break}}p.typed||(l=!1),u.push(p.output)}return l?yl(this,u,a,o):gl(!1,u,o)}return Wo(this,Uo,n,a)}}}function is(t,e){let[i,r]=Ho(t,e);return{type:"boolean",expects:"boolean",async:!1,message:i,pipe:r,_parse(s,n){return typeof s=="boolean"?yl(this,s,n):Wo(this,is,s,n)}}}function Za(t,e){let[i,r]=Ho(t,e);return{type:"number",expects:"number",async:!1,message:i,pipe:r,_parse(s,n){return typeof s=="number"&&!isNaN(s)?yl(this,s,n):Wo(this,Za,s,n)}}}function gr(t,e,i,r){let[s,n,a]=SS(e,i,r),l;return{type:"object",expects:"Object",async:!1,entries:t,rest:s,message:n,pipe:a,_parse(o,u){if(o&&typeof o=="object"){l=l??Object.entries(this.entries);let b=!0,c,p={};for(let[x,_]of l){let v=o[x],C=_._parse(v,u);if(C.issues){let d={type:"object",origin:"value",input:o,key:x,value:v};for(let f of C.issues)f.path?f.path.unshift(d):f.path=[d],c?.push(f);if(c||(c=C.issues),u?.abortEarly){b=!1;break}}C.typed||(b=!1),(C.output!==void 0||x in o)&&(p[x]=C.output)}if(this.rest&&!(u?.abortEarly&&c)){for(let x in o)if(!(x in this.entries)){let _=o[x],v=this.rest._parse(_,u);if(v.issues){let C={type:"object",origin:"value",input:o,key:x,value:_};for(let d of v.issues)d.path?d.path.unshift(C):d.path=[C],c?.push(d);if(c||(c=v.issues),u?.abortEarly){b=!1;break}}v.typed||(b=!1),p[x]=v.output}}return b?yl(this,p,u,c):gl(!1,p,c)}return Wo(this,gr,o,u)}}}function Ie(t,e){return{type:"optional",expects:`${t.expects} | undefined`,async:!1,wrapped:t,default:e,_parse(i,r){if(i===void 0){let s=PS(this);if(s===void 0)return gl(!0,i);i=s}return this.wrapped._parse(i,r)}}}function sc(t,e){return{type:"picklist",expects:t.map(Ja).join(" | "),async:!1,options:t,message:e,_parse(i,r){return this.options.includes(i)?gl(!0,i):Wo(this,sc,i,r)}}}function Ke(t,e){let[i,r]=Ho(t,e);return{type:"string",expects:"string",async:!1,message:i,pipe:r,_parse(s,n){return typeof s=="string"?yl(this,s,n):Wo(this,Ke,s,n)}}}function Xg(t,e,i){let r=t._parse(e,dS(i));if(r.issues)throw new uS(r.issues);return r.output}function Lu(t,e){return{type:"max_value",expects:`<=${t instanceof Date?t.toJSON():Ja(t)}`,async:!1,message:e,requirement:t,_parse(i){return i<=this.requirement?Ug(i):Wg(this,Lu,i,"value",i instanceof Date?i.toJSON():Ja(i))}}}function Ru(t,e){return{type:"min_value",expects:`>=${t instanceof Date?t.toJSON():Ja(t)}`,async:!1,message:e,requirement:t,_parse(i){return i>=this.requirement?Ug(i):Wg(this,Ru,i,"value",i instanceof Date?i.toJSON():Ja(i))}}}var vl,ms,sn,bl,Vu,nc=class{constructor(e,i){ue(this,bl);ue(this,vl);ue(this,ms);ue(this,sn);if(!e)throw new Error("host is required");if(!i)throw new Error("config is required");Fe(this,vl,e),Yt(this,vl).addController(this),Fe(this,ms,i)}connect(e){Fe(this,ms,e),Fe(this,sn,Ae(this,bl,Vu).call(this))}hostConnected(){setTimeout(()=>{Fe(this,sn,Ae(this,bl,Vu).call(this))},0)}hostDisconnected(){Yt(this,sn)?.close(1e3,"lit_host_disconnected"),Fe(this,sn,void 0)}send(e){Yt(this,sn)?.send(e)}close(e,i){Yt(this,sn)?.close(e,i)}render(e={}){switch(Yt(this,sn)?.readyState){case WebSocket.CLOSED:return e.closed?.();case WebSocket.CLOSING:return e.closing?.();case WebSocket.CONNECTING:return e.connecting?.();case WebSocket.OPEN:return e.open?.()}}get isConnected(){return Yt(this,sn)?.readyState===WebSocket.OPEN}};vl=new WeakMap,ms=new WeakMap,sn=new WeakMap,bl=new WeakSet,Vu=function(){let e=new WebSocket(Yt(this,ms).url());return Yt(this,ms).onClose&&(e.onclose=Yt(this,ms).onClose),Yt(this,ms).onOpen&&(e.onopen=Yt(this,ms).onOpen),Yt(this,ms).onError&&(e.onerror=Yt(this,ms).onError),Yt(this,ms).onMessage&&(e.onmessage=Yt(this,ms).onMessage),e};var Zg="664df22d-d461-42d6-801e-f70247e2cd7c",Er,Wr,nn,Yo,Xo,Br,Ka,Kg,Qg,ty,ey,ac=class{constructor(e,i){ue(this,Br);ue(this,Er);ue(this,Wr);ue(this,nn);Jt(this,"isStreaming",!1);Jt(this,"typingIndicator");Jt(this,"ranOutOfCredits",!1);Jt(this,"messages",[]);Jt(this,"conversationId","");ue(this,Yo,0);ue(this,Xo);Jt(this,"isLiveMode",!1);Fe(this,Er,e),Fe(this,Wr,i),Fe(this,nn,this.initWS()),e.addController(this)}sendUserInput(e,{role:i="user",expectStreaming:r=!1}={}){return Ae(this,Br,Ka).call(this,{type:"USER_INPUT",value:e,role:i},{expectStreaming:r})}sendUserCancel(){return Ae(this,Br,Ka).call(this,{type:"USER_CANCEL"})}sendUserTypingStart(){return Ae(this,Br,Ka).call(this,{type:"USER_TYPING_START"})}sendUserTypingStop(){return Ae(this,Br,Ka).call(this,{type:"USER_TYPING_STOP"})}reloadConfig(){Ae(this,Br,Ka).call(this,{type:"RELOAD_CONFIG"})}close(){Yt(this,nn).close(1e3,"closed by user")}retry(){clearTimeout(Yt(this,Xo)),Fe(this,Xo,setTimeout(()=>{Yt(this,Wr).onReconnect?.(),Fe(this,nn,this.initWS())},1e3*Yt(this,Yo))),Nd(this,Yo)._++}initWS(){return new nc(Yt(this,Er),{url:()=>Yt(this,Wr).url(this.conversationId,{}),onOpen:e=>Ae(this,Br,Kg).call(this,e),onMessage:e=>Ae(this,Br,Qg).call(this,JSON.parse(e.data)),onError:e=>Ae(this,Br,ty).call(this,e),onClose:e=>Ae(this,Br,ey).call(this,e)})}hostConnected(){this.conversationId=Yt(this,Wr).restoreConversationState?.()?.conversationId||""}reset(){Ae(this,Br,Ka).call(this,{type:"NEW_CHAT"}),Yt(this,Wr).onReset?.(),this.isStreaming=!1,this.typingIndicator=void 0,this.ranOutOfCredits=!1,this.messages=[],this.conversationId="",this.isLiveMode=!1,Yt(this,Er).requestUpdate()}hostDisconnected(){clearTimeout(Yt(this,Xo))}reconnectSocket(){Yt(this,nn).close(1e3,"destroy"),Fe(this,nn,this.initWS())}get lastMsg(){if(this.messages.length>0)return this.messages[this.messages.length-1]}};Er=new WeakMap,Wr=new WeakMap,nn=new WeakMap,Yo=new WeakMap,Xo=new WeakMap,Br=new WeakSet,Ka=function(e,{expectStreaming:i=!1}={}){return Yt(this,nn).isConnected?(i&&!this.isLiveMode&&(this.isStreaming=!0,Yt(this,Er).requestUpdate()),Yt(this,nn).send(JSON.stringify(e)),!0):(console.warn("WebSocket is not connected, message not sent - reconnecting now",e),this.retry(),!1)},Kg=function(e){Fe(this,Yo,0)},Qg=function(e){switch(e.type){case"NEW_MESSAGE":{this.messages=[...this.messages,e.message].filter((i,r,s)=>r===s.findIndex(n=>n.id===i.id)),Yt(this,Er).requestUpdate(),Yt(this,Wr).onNewMessage?.(e.message);break}case"UPDATE_MESSAGE":{let i=this.messages.find(r=>r.id===e.message.id);if(i)Object.assign(i,e.message),Yt(this,Er).requestUpdate(),Yt(this,Wr).onUpdateMessage?.(e);else throw new Error(`Message with id ${e.message.id} not found`);break}case"MESSAGE_DONE":{let i=this.messages.find(r=>r.id===e.message.id);if(i)Object.assign(i,e.message);else throw new Error(`Message with id ${e.message.id} not found`);this.isStreaming=!1,Yt(this,Er).requestUpdate(),Yt(this,Wr).onMessageDone?.(e,i);break}case"MESSAGE_CANCEL":{this.isStreaming=!1,this.typingIndicator=void 0,Yt(this,Er).requestUpdate();break}case"ERROR":{Yt(this,Wr).onMessageError?.(e);break}case"CONNECTED":{e.messages&&(this.messages=e.messages),this.conversationId=e.conversationId,Yt(this,Wr).onConnect?.(e.conversationId),Yt(this,Wr).persistConversationState?.(e.conversationId),this.isLiveMode=e.metadata?.isLiveMode,Yt(this,Er).requestUpdate();break}case"TYPING_START":{e.role==="assistant"&&(this.isStreaming=!0),this.typingIndicator={role:e.role},Yt(this,Er).requestUpdate();break}case"TYPING_STOP":{this.typingIndicator=void 0,Yt(this,Er).requestUpdate();break}case"RAN_OUT_OF_CREDITS":{this.messages.some(i=>i.id===Zg)||this.messages.push({id:Zg,role:"assistant",content:"Sorry, I've run out of credits. Please contact the shop directly.",timestamp:Date.now()}),this.ranOutOfCredits=!0,Yt(this,Er).requestUpdate();break}case"RECONNECT":{this.reconnectSocket(),Yt(this,Er).requestUpdate();break}default:console.warn(`Unknown message type: ${JSON.stringify(e)}`)}},ty=function(e){console.error("onError",e),Yt(this,Wr).onError?.(e)},ey=function(e){Yt(this,Er).isConnected&&!Yt(this,nn).isConnected&&e.reason==="reconnect"&&this.retry(),this.isStreaming=!1,this.typingIndicator=void 0,Yt(this,Er).requestUpdate(),Yt(this,Wr).onClose?.()};var _l,Jo,Qa,to,Zo,iy,ry,oc=class{constructor(e,i,{timeoutMs:r=2e3}={}){ue(this,Zo);ue(this,_l);ue(this,Jo);ue(this,Qa);ue(this,to,!1);Jt(this,"timeoutMs");Fe(this,_l,e),Fe(this,Jo,i),this.timeoutMs=r,e.addController(this)}get isTyping(){return Yt(this,to)}hostDisconnected(){clearTimeout(Yt(this,Qa)),Fe(this,Qa,void 0)}onInput(){Yt(this,_l).isConnected&&(clearTimeout(Yt(this,Qa)),Fe(this,Qa,setTimeout(()=>Ae(this,Zo,ry).call(this),this.timeoutMs)),Yt(this,to)||Ae(this,Zo,iy).call(this))}};_l=new WeakMap,Jo=new WeakMap,Qa=new WeakMap,to=new WeakMap,Zo=new WeakSet,iy=function(){Fe(this,to,!0),Yt(this,Jo).typingStarted()},ry=function(){Fe(this,to,!1),Yt(this,Jo).typingStopped()};function sy(t,e){let i=new Map;for(let r of t){let s=e(r);i.has(s)||i.set(s,[]),(i.get(s)||[]).push(r)}return i}function ny(t,e="en-US"){let i=new Intl.DateTimeFormat(e,{hour:"numeric",minute:"numeric"}).format(t);return`${t.toLocaleDateString(e,{year:"numeric",month:"short",day:"numeric"})}, ${i}`}var DA=gr({wsApiUrl:Ke(),url:Ke(),logoUrl:Ie(Ke()),title:Ke(),status:Ke(),color:Ke(),showStillLearningBanner:Ie(is()),liveChatEnabled:Ie(is()),allowedOrigins:Ie(Uo(Ke())),input:gr({placeholder:Ke()}),bubble:gr({imageUrl:Ie(Ke()),position:gr({bottom:Ie(Ke()),right:Ie(Ke()),left:Ie(Ke())}),mobilePosition:Ie(gr({bottom:Ie(Ke()),right:Ie(Ke()),left:Ie(Ke())}))}),examples:gr({title:Ke(),items:Uo(Ke())}),instructions:gr({items:Uo(Ke())}),popup:Ie(gr({mobileEnabled:Ie(is()),desktopEnabled:Ie(is()),delayMs:Ie(Za()),text:Ie(Ke()),mobileTitleText:Ie(Ke()),mobileButtonText:Ie(Ke())})),tryItOut:Ie(gr({mobileEnabled:Ie(is()),desktopEnabled:Ie(is()),text:Ie(Ke())})),contactDetails:Ie(gr({email:Ie(Ke()),phone:Ie(Ke()),socialMedia:Ie(gr({facebook:Ie(Ke()),instagram:Ie(Ke()),twitter:Ie(Ke())}))})),neverShowStillLearningBanner:Ie(is()),hidden:Ie(is()),newChatTitle:Ie(Ke()),webhookURL:Ie(Ke()),automatedResponse:Ie(gr({enabled:Ie(is()),text:Ie(Ke()),latencyThresholdMs:Ie(Za())})),manual:Ie(is()),removePoweredBy:Ie(is()),claimable:Ie(is()),feed:Ie(Ke()),scraper:Ie(sc(["netkazan","jateknet","grandopet","insportline"])),platform:Ie(sc(["shopify","shoprenter","unas","scraper"])),workingHours:Ie(gr({dailyAvailability:Uo(gr({dayOfWeek:Za([Ru(0),Lu(6)]),startTime:Ke(),endTime:Ke(),isActive:is()})),userTimeZone:Ie(Ke())})),planOverrides:Ie(gr({maxProducts:Ie(Za()),conversations:Ie(Za())}))});var wS="\xB7 \xB7 \xB7",kS=gr({conversationId:Ie(Ke())}),Ui,hc,lc,yr,ay,oy,hy,ly,py,cy,fy,Ou,pc=class pc extends hi(Je){constructor(){super();ue(this,Ui);ue(this,lc,new oc(this,{typingStarted:()=>Yt(this,yr).sendUserTypingStart(),typingStopped:()=>Yt(this,yr).sendUserTypingStop()}));ue(this,yr,new ac(this,{url:(i,{resume:r}={})=>{let s=new URL(this.config.wsApiUrl);return s.searchParams.set("widgetId",this.widgetId),s.searchParams.set("resume",r?"1":""),s.searchParams.set("conversationId",i),s.searchParams.set("pageUrl",window.location.href),s},onReconnect:()=>{},onError:i=>{console.error("ws error",i)},onClose:()=>{},onNewMessage:i=>{i.role==="user"&&Yt(this,Ui,Ou)?.scrollTo(0,Yt(this,Ui,Ou).scrollHeight),i.role==="assistant"&&this.callbacks.onNewMessageStartedStreaming?.({widgetId:this.widgetId,message:i,conversationId:this.conversationId})},onMessageDone:(i,r)=>{r.role==="assistant"&&this.callbacks.onMessageEndedStreaming?.({widgetId:this.widgetId,text:r.content??"",message:r,usage_TOKENS_COMPLETION:i.message.usage.TOKENS_COMPLETION,conversationId:this.conversationId})},onMessageError:i=>{console.error("ws message error",i),i.message&&this.callbacks.onError?.({widgetId:this.widgetId,error:"WS: "+i.message})},onReset:()=>{localStorage.removeItem(Yt(this,Ui,hc))},onConnect:i=>{},persistConversationState:i=>{localStorage.setItem(Yt(this,Ui,hc),JSON.stringify({conversationId:i}))},restoreConversationState:()=>{try{let i=JSON.parse(localStorage.getItem(Yt(this,Ui,hc))||"{}");return{conversationId:Xg(kS,i).conversationId||""}}catch(i){return console.error(i),{conversationId:""}}}}));this.config={},this.callbacks={},this.showClose=!1}get widgetId(){return this.config.widgetId}get conversationId(){return Yt(this,yr).conversationId}get messages(){return Yt(this,yr).messages}render(){let i=sy(this.messages,r=>new Date(r.timestamp).setSeconds(0,0).toString());return Te`
|
|
923
923
|
<div class="mx-auto flex h-full w-full flex-col bg-white font-sans text-base">
|
|
924
924
|
<mw-header
|
|
925
925
|
class="z-10 border-b"
|
|
@@ -957,7 +957,7 @@ CHAT`}</span>
|
|
|
957
957
|
<div class="my-2 text-center text-xs text-gray-500">${ny(new Date(Number(r)),window.navigator.language)}</div>
|
|
958
958
|
${fl(s??[],n=>n.id,(n,a)=>{let o=s[a+1]?.role===n.role,u=(this.config.liveChatEnabled||Yt(this,yr).isLiveMode)&&n.role==="user"&&n.id===Yt(this,yr).lastMsg?.id?"sent":"";return Te`
|
|
959
959
|
<div class="${o?"mb-[2px]":"mb-3"} mx-4 flex-row">
|
|
960
|
-
<mw-chat-message color="${this.config.color}" status="${u}" logo="${this.config.logoUrl}" side="${n.role}" @click="${Ae(this,Ui,ay)}">
|
|
960
|
+
<mw-chat-message color="${this.config.color}" status="${u}" logo="${n.metadata?.avatar||this.config.logoUrl}" side="${n.role}" @click="${Ae(this,Ui,ay)}">
|
|
961
961
|
<div class="prose break-words text-inherit">
|
|
962
962
|
${n.content===wS?Te`<mw-loading class="-mx-2 block h-8 max-h-[24px] w-8 fill-[${this.config.color}]"></mw-loading>`:n.content_html?Hg(n.content_html):Te`<p>${n.content}</p>`}
|
|
963
963
|
</div>
|