"use strict";(()=>{function tt(t,e){let n=t.trim();return n?(n.startsWith("#")||(n=`#${n}`),n.length===4&&/^#[0-9a-fA-F]{3}$/.test(n)?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:/^#[0-9a-fA-F]{6}$/.test(n)?n.toLowerCase():e):e}function Tt(t){let e=tt(t,"#111111").slice(1),n=parseInt(e.slice(0,2),16),s=parseInt(e.slice(2,4),16),o=parseInt(e.slice(4,6),16);return(.299*n+.587*s+.114*o)/255>.55?"#111111":"#ffffff"}function Et(t){return t.toLowerCase().includes("dark")}var Ot=["Track my order","Show best sellers","Face care picks","Delivery & returns"];function _(...t){for(let e of t){let n=e?.trim();if(n)return n}return""}async function _t(t){let e="Hi! I can help with orders, products, and FAQs.",n=t.apiUrl.replace(/\/$/,""),s={};try{let i=await fetch(`${n}/widget/config?bot_id=${encodeURIComponent(t.tenantId)}`,{method:"GET",credentials:"omit",headers:{Accept:"application/json"}});i.ok&&(s=await i.json())}catch{}let o=tt(_(t.primaryColor,s.primary_color,"#111111"),"#111111"),a=tt(_(t.accentColor,s.accent_color,"#0066cc"),"#0066cc");return{...t,botName:_(t.botName,s.bot_name,"Frosty"),welcomeMessage:_(t.welcomeMessage,s.welcome_message,e),primaryColor:o,accentColor:a,theme:_(t.theme,s.theme,"default"),position:_(t.position,s.position,"bottom-right"),showProductImages:t.showProductImages!==null&&t.showProductImages!==void 0?t.showProductImages:!!(s.show_product_images??!0),chatEnabled:s.chat_enabled!==!1,launcherShape:(()=>{let i=_(s.launcher_shape,"pill").toLowerCase();return i==="circle"||i==="square"?i:"pill"})(),launcherLabel:_(s.launcher_label,""),suggestions:Array.isArray(s.suggestions)&&s.suggestions.length>0?s.suggestions.map(i=>String(i).trim()).filter(Boolean):[...Ot],voiceEnabled:s.voice_enabled!==!1,storeCatalogUrl:_(s.store_catalog_url,"https://vedashi.com/in/products")}}function Vt(t){if(t===null)return null;let e=t.trim().toLowerCase();return e==="true"||e==="1"?!0:e==="false"||e==="0"?!1:null}function It(){let t=document.currentScript;if(!t)return null;let e=t.getAttribute("data-api-url")??"https://ai.vedashi.com",n=t.getAttribute("data-tenant-id")??"vedashi",s=t.getAttribute("data-chat-token"),o=t.getAttribute("data-embed-key"),a=t.getAttribute("data-session-id"),i=t.getAttribute("data-bot-name"),d=t.getAttribute("data-welcome-message"),u=t.getAttribute("data-primary-color"),l=t.getAttribute("data-accent-color"),f=t.getAttribute("data-theme"),m=t.getAttribute("data-position"),b=Vt(t.getAttribute("data-show-product-images"));return{apiUrl:e,tenantId:n,chatToken:s,embedKey:o,sessionId:a,botName:i,welcomeMessage:d,primaryColor:u,accentColor:l,theme:f,position:m,showProductImages:b,storefrontTokenKey:t.getAttribute("data-storefront-token-key"),cartStorageKey:t.getAttribute("data-cart-storage-key"),wishlistStorageKey:t.getAttribute("data-wishlist-storage-key"),cartIdStorageKey:t.getAttribute("data-cart-id-storage-key"),customerIdStorageKey:t.getAttribute("data-customer-id-storage-key")}}function Jt(t){try{let e=t.split(".")[1];if(!e)return null;let n=e.replace(/-/g,"+").replace(/_/g,"/"),s=n.length%4===0?"":"=".repeat(4-n.length%4),o=atob(n+s),a=JSON.parse(o);return typeof a.sub=="string"&&a.sub.length>0?a.sub:null}catch{return null}}function et(t){let e=t.sessionId?.trim();if(e)return e;let n=t.chatToken?.trim();return n?Jt(n):null}var Qt=["accessToken","access_token","authToken","auth_token","token","vedashi_token","vedashi_access_token","customerToken"],qt=["cart","vedashi_cart","shopping_cart","cart_items"],Yt=["wishlist","vedashi_wishlist","favourites","favorites"],Gt=["customer_id","customerId","userId","user_id"],Xt=["cartId","cart_id","vedashi_cart_id","guest_cart_id"];function K(t){if(typeof window>"u")return null;try{return sessionStorage.getItem(t)??localStorage.getItem(t)}catch{return null}}function pt(t){for(let e of t){let n=K(e);if(n&&n.trim())return n.trim()}return null}function Zt(t){try{return JSON.parse(t)}catch{return null}}function x(t){if(t==null)return null;let e=String(t).trim();return e.length>0?e:null}function gt(t){let e=[],n=new Set,s=d=>{!d||n.has(d)||(n.add(d),e.push(d))},o=["items","products","line_items","cart_items","wishlist_items","entries"];for(let d of o){let u=t[d];if(Array.isArray(u))for(let l of u){if(typeof l=="string"){s(x(l));continue}if(l&&typeof l=="object"){let f=l,m=f.product,b=m&&typeof m=="object"?x(m.id)??x(m.product_id)??x(m.productId):null;s(x(f.product_id)??x(f.productId)??b??x(f.id)??x(f.sku)??x(f.variant_id))}}}let a=t.product_ids??t.productIds??t.ids;if(Array.isArray(a))for(let d of a)s(x(d));let i=t.product;if(i&&typeof i=="object"){let d=i;s(x(d.product_id)??x(d.productId)??x(d.id)??x(d.sku))}return e}function Pt(t){if(!t)return[];let e=t.trim();if(!e)return[];if(e.startsWith("[")||e.startsWith("{")){let s=Zt(e);if(Array.isArray(s)){let o=[];for(let a of s)if(typeof a=="string"){let i=x(a);i&&o.push(i)}else a&&typeof a=="object"&&o.push(...gt(a));return o}if(s&&typeof s=="object")return gt(s)}if(e.includes(","))return e.split(",").map(s=>x(s)).filter(s=>!!s);let n=x(e);return n?[n]:[]}function At(t,e){if(e){let n=Pt(K(e));if(n.length)return n}for(let n of t){let s=Pt(K(n));if(s.length)return s}return[]}function te(t){if(t){let e=K(t);if(e)return e}return pt(Qt)}function Kt(t){if(!Array.isArray(t))return[];let e=[],n=new Set;for(let s of t){if(typeof s=="string"){let o=x(s);o&&!n.has(o)&&(n.add(o),e.push(o));continue}if(s&&typeof s=="object")for(let o of gt(s))n.has(o)||(n.add(o),e.push(o))}return e}function ee(){let t=typeof window<"u"?window.FrostyShopContext:void 0;if(!t)return{};let e=Kt(t.cartItems??t.cart_items),n=Kt(t.wishlistItems??t.wishlist_items),s=t.cartProductIds??t.cart_product_ids,o=t.wishlistProductIds??t.wishlist_product_ids;return{cartProductIds:s?.length?s:e.length?e:void 0,wishlistProductIds:o?.length?o:n.length?n:void 0,storefrontAccessToken:t.storefrontAccessToken??t.storefront_access_token??null,cartId:t.cartId??t.cart_id??null,customerId:t.customerId??t.customer_id??null,customerEmail:t.customerEmail??null,customerName:t.customerName??null}}function J(t){let e=ee(),n=e.cartProductIds?.length?e.cartProductIds.map(String):At(qt,t.cartStorageKey),s=e.wishlistProductIds?.length?e.wishlistProductIds.map(String):At(Yt,t.wishlistStorageKey),o=e.storefrontAccessToken??te(t.storefrontTokenKey),a=e.cartId??(t.cartIdStorageKey?K(t.cartIdStorageKey):null)??pt(Xt),i=e.customerId??(t.customerIdStorageKey?K(t.customerIdStorageKey):pt(Gt));return{cartProductIds:n,wishlistProductIds:s,storefrontAccessToken:o,cartId:a?.trim()||null,customerId:i?.trim()||null,customerEmail:e.customerEmail??(t.customerEmailStorageKey?K(t.customerEmailStorageKey):null),customerName:e.customerName??(t.customerNameStorageKey?K(t.customerNameStorageKey):null)}}function $t(t){let e=t.split(/\r?\n/),n="";for(let a of e)a.startsWith("data:")&&(n+=a.slice(5).trimStart());if(!n.trim())return null;let s=JSON.parse(n),o=s.type;return o==="token"&&typeof s.delta=="string"?{type:"token",delta:s.delta}:o==="status"&&typeof s.phase=="string"?{type:"status",phase:s.phase,message:typeof s.message=="string"?s.message:void 0}:o==="structured"&&s.payload&&typeof s.payload=="object"?{type:"structured",payload:s.payload}:o==="done"?{type:"done",trace_id:typeof s.trace_id=="string"?s.trace_id:void 0}:o==="error"?{type:"error",code:typeof s.code=="string"?s.code:void 0}:null}function ne(t,e){let n=t.split(/\r?\n\r?\n/),s=n.pop()??"";for(let o of n){let a=o.trim();if(a)try{let i=$t(a);i&&e(i)}catch{e({type:"error",code:"sse_parse"})}}return s}async function Lt(t){let{config:e,sessionId:n,authToken:s,message:o,signal:a,onEvent:i}=t,d=t.shop??J({storefrontTokenKey:e.storefrontTokenKey,cartStorageKey:e.cartStorageKey,wishlistStorageKey:e.wishlistStorageKey,cartIdStorageKey:e.cartIdStorageKey,customerIdStorageKey:e.customerIdStorageKey,customerEmailStorageKey:null,customerNameStorageKey:null}),l=`${e.apiUrl.replace(/\/$/,"")}/api/v1/chat`,f={"Content-Type":"application/json",Accept:"text/event-stream",Authorization:`Bearer ${s.trim()}`},m=await fetch(l,{method:"POST",headers:f,body:JSON.stringify({session_id:n,tenant_id:e.tenantId,message:o,context:{page_url:typeof window<"u"?window.location.href:null,locale:"en-IN",currency:"INR",cart_product_ids:d.cartProductIds,wishlist_product_ids:d.wishlistProductIds,storefront_access_token:d.storefrontAccessToken,cart_id:d.cartId}}),signal:a});if(!m.ok){let p=await m.text().catch(()=>"");throw new Error(p||`HTTP ${m.status}`)}let b=m.body?.getReader();if(!b)throw new Error("No response body");let $=new TextDecoder,k="";for(;;){let{done:p,value:B}=await b.read();if(p)break;k+=$.decode(B,{stream:!0}),k=ne(k,i)}let L=k.trim();if(L)try{let p=$t(L);p&&i(p)}catch{i({type:"error",code:"sse_tail_parse"})}}function Rt(t,e){let n=e.launcherLabel.trim()||`Chat with ${e.botName}`,s=e.launcherShape;if(t.textContent="",t.style.width="",t.style.height="",t.style.fontSize="",t.style.fontWeight="",t.style.display="",t.style.alignItems="",t.style.justifyContent="",s==="circle"){t.setAttribute("aria-label",n),t.title=n,t.innerHTML='',t.style.width="56px",t.style.height="56px",t.style.padding="0",t.style.borderRadius="50%",t.style.display="flex",t.style.alignItems="center",t.style.justifyContent="center";return}if(s==="square"){t.setAttribute("aria-label",n),t.title=n,t.textContent="\u{1F4AC}",t.style.width="52px",t.style.height="52px",t.style.padding="0",t.style.borderRadius="14px",t.style.fontSize="22px",t.style.lineHeight="1";return}t.textContent=n,t.style.padding="12px 18px",t.style.borderRadius="999px",t.style.fontSize="14px",t.style.fontWeight="600"}function Ut(t,e,n){let s=document.createElement("div");s.className="frosty-quick-replies",s.style.cssText="display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 8px;justify-content:flex-start;";let o=n?.border??"#d1d5db",a=n?.accent??"#0066cc",i=n?.text??"#1f2937",d=n?.hoverBg??`${a}18`;for(let u of t){let l=document.createElement("button");l.type="button",l.textContent=u.text,l.style.cssText=["padding:8px 14px","background:#fff",`color:${i}`,`border:1px solid ${o}`,"border-radius:20px","cursor:pointer","font-size:13px","font-weight:500","font-family:system-ui,sans-serif","transition:background .15s ease,border-color .15s ease,box-shadow .15s ease","white-space:nowrap"].join(";"),l.addEventListener("mouseover",()=>{l.style.borderColor=a,l.style.background=d,l.style.color=i,l.style.boxShadow=`0 1px 4px ${a}22`}),l.addEventListener("mouseout",()=>{l.style.borderColor=o,l.style.background="#fff",l.style.color=i,l.style.boxShadow="none"}),l.addEventListener("click",()=>{e(u)}),s.appendChild(l)}return s}function se(t){let e=t.replace(/\/$/,"");return e.startsWith("https://")?`wss://${e.slice(8)}`:e.startsWith("http://")?`ws://${e.slice(7)}`:e}var nt=class{constructor(e,n={}){this.apiUrl=e;this.callbacks=n;this.ws=null;this.recorder=null;this.stream=null;this.audioCtx=null;this.ttsChunks=[];this.receivingTts=!1;this.playbackEl=null;this.playbackUrl=null;this.state="idle";this.phase="connecting";this.muted=!1}getState(){return this.state}getPhase(){return this.phase}isActive(){return this.state==="active"||this.state==="connecting"}setState(e){this.state=e,this.callbacks.onState?.(e)}setPhase(e){this.phase=e,this.callbacks.onPhase?.(e)}stopPlayback(){this.playbackEl&&(this.playbackEl.pause(),this.playbackEl.onended=null,this.playbackEl.onerror=null,this.playbackEl=null),this.playbackUrl&&(URL.revokeObjectURL(this.playbackUrl),this.playbackUrl=null)}mergeTtsChunks(){let e=this.ttsChunks.reduce((o,a)=>o+a.byteLength,0),n=new Uint8Array(e),s=0;for(let o of this.ttsChunks)n.set(o,s),s+=o.byteLength;return n}async playAccumulatedTts(){if(this.ttsChunks.length===0){this.state==="active"&&this.setPhase("listening");return}let e=this.mergeTtsChunks();if(this.ttsChunks=[],this.stopPlayback(),this.audioCtx?.state==="suspended")try{await this.audioCtx.resume()}catch{}let n=new Blob([e],{type:"audio/mpeg"});this.playbackUrl=URL.createObjectURL(n);let s=new Audio(this.playbackUrl);this.playbackEl=s,this.setPhase("speaking"),s.onended=()=>{this.stopPlayback(),this.state==="active"&&this.setPhase("listening")},s.onerror=()=>{this.stopPlayback(),this.state==="active"&&this.setPhase("listening")};try{await s.play()}catch{this.stopPlayback(),this.state==="active"&&this.setPhase("listening")}}startRecording(e){let n=MediaRecorder.isTypeSupported("audio/webm;codecs=opus")?"audio/webm;codecs=opus":"audio/webm";this.recorder=new MediaRecorder(e,{mimeType:n}),this.recorder.ondataavailable=s=>{s.data.size>0&&this.ws?.readyState===WebSocket.OPEN&&!this.muted&&this.ws.send(s.data)},this.recorder.start(250)}async start(e){if(!this.isActive()){this.setState("connecting"),this.setPhase("connecting");try{let n=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0}});this.stream=n,this.audioCtx=new AudioContext;let s=`${se(this.apiUrl)}/api/v1/voice?token=${encodeURIComponent(e)}`,o=new WebSocket(s);this.ws=o,o.onmessage=async a=>{if(a.data instanceof Blob){if(!this.receivingTts)return;let i=await a.data.arrayBuffer();this.ttsChunks.push(new Uint8Array(i));return}try{let i=JSON.parse(a.data),d=i.type;if(d==="ready")this.setState("active"),this.setPhase("listening"),this.startRecording(n);else if(d==="transcript"&&typeof i.text=="string")this.callbacks.onTranscript?.(i.text,!!i.is_final);else if(d==="user_final"&&typeof i.text=="string")this.callbacks.onUserFinal?.(i.text),this.setPhase("thinking");else if(d==="thinking")this.setPhase("thinking");else if(d==="bot_reply"&&typeof i.text=="string")this.callbacks.onBotReply?.(i.text);else if(d==="audio_start")this.receivingTts=!0,this.ttsChunks=[],this.stopPlayback(),this.setPhase("speaking");else if(d==="audio_end")this.receivingTts=!1,this.playAccumulatedTts();else if(d==="tts_interrupt")this.receivingTts=!1,this.ttsChunks=[],this.stopPlayback(),this.state==="active"&&this.setPhase("listening");else if(d==="error"){let u=String(i.message??"Voice error");this.callbacks.onError?.(u),this.setState("error")}}catch{}},o.onerror=()=>{this.callbacks.onError?.("Voice connection failed"),this.setState("error")},o.onclose=()=>{this.state!=="error"&&this.setState("idle")}}catch(n){let s=n instanceof Error?n.message:"Microphone access denied";this.callbacks.onError?.(s),this.setState("error"),this.end()}}}toggleMute(){return this.muted=!this.muted,this.muted}end(){try{this.ws?.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"hangup"}))}catch{}try{this.recorder?.stop()}catch{}this.recorder=null,this.stream?.getTracks().forEach(e=>e.stop()),this.stream=null,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close(),this.ws=null,this.stopPlayback(),this.ttsChunks=[],this.receivingTts=!1,this.audioCtx?.close(),this.audioCtx=null,this.setState("idle"),this.setPhase("connecting")}};function re(t){return t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function ht(t){return t.replace(/\*\*([^*\n]+)\*\*/g,"$1")}function Wt(t){let e=re(t).split(`
`),n=[],s=!1,o=()=>{s&&(n.push(""),s=!1)};for(let a of e){let i=a.trim(),d=i.match(/^(\d+)\.\s+(.+)$/);if(d){s||(n.push('
'),s=!0),n.push(`- ${ht(d[2])}
`);continue}if(o(),!i){n.push("
");continue}if(/^[-•]\s+/.test(i)){let u=ht(i.replace(/^[-•]\s+/,""));n.push(`\u2022 ${u}
`);continue}n.push(`${ht(a)}
`)}return o(),n.join("")}var oe=3;function ft(t){let e=t;return e.includes("/in/p/")?e=e.replace(/\/in\/p\//gi,"/in/products/"):/\/p\//i.test(e)&&!/\/in\/products\//i.test(e)&&!/\/api\//i.test(e)&&(e=e.replace(/(^|\/\/[^/]+)\/p\//i,"$1/in/products/")),e}function Bt(t){if(!t||typeof t!="string")return null;let e=t;return e.startsWith("http://")||e.startsWith("https://")?ft(e):e.startsWith("//")?ft(`https:${e}`):e.startsWith("/")?ft(`https://vedashi.com${e}`):e}function ie(t,e,n,s,o,a){if(!t.length)return;let i=t.slice(0,oe),d=document.createElement("div");d.style.cssText="display:flex;flex-wrap:wrap;gap:10px;margin:10px 0;justify-content:flex-start;";for(let u of i){if(!u||typeof u!="object")continue;let l=u,f=document.createElement("div");f.style.cssText="width:148px;border:1px solid #e5e7eb;border-radius:10px;overflow:hidden;background:#fff;font-size:12px;flex-shrink:0;";let m=Bt(l.imageUrl||l.thumbnail_url||l.image_url);if(s&&m){let p=document.createElement("img");p.src=m,p.alt=l.title||l.name||"Product",p.loading="lazy",p.referrerPolicy="no-referrer",p.style.cssText="width:100%;height:100px;object-fit:cover;display:block;background:#f3f4f6;",p.onerror=()=>{p.style.display="none"},f.appendChild(p)}let b=document.createElement("div");b.style.cssText="padding:8px;";let $=document.createElement("div");$.style.cssText="font-weight:600;color:#111;line-height:1.25;",$.textContent=l.title||l.name||"Product",b.appendChild($);let k=document.createElement("div");if(k.style.cssText="color:#374151;margin-top:4px;",k.textContent=l.price_label||(l.currency&&l.price!=null?`${l.currency} ${l.price}`:String(l.price??"")),b.appendChild(k),l.reason){let p=document.createElement("div");p.style.cssText="color:#6b7280;font-size:11px;margin-top:6px;line-height:1.3;",p.textContent=l.reason,b.appendChild(p)}let L=Bt(l.productUrl||l.product_url||l.url);if(L){let p=document.createElement("a");p.href=L,p.target="_blank",p.rel="noopener noreferrer",p.textContent="View",p.style.cssText=`display:inline-block;margin-top:8px;color:${n};font-weight:600;text-decoration:none;`,b.appendChild(p)}f.appendChild(b),d.appendChild(f)}if(e.appendChild(d),o){let u=document.createElement("a");u.href=o,u.target="_blank",u.rel="noopener noreferrer",u.textContent=a||"Browse all products on the store \u2192",u.style.cssText=`display:block;margin:4px 0 12px;font-size:13px;font-weight:600;color:${n};text-decoration:none;`,e.appendChild(u)}}function Mt(t){let e=null;function n(){return!!t.embedKey?.trim()}function s(){return!!t.chatToken?.trim()&&!!et(t)}async function o(){if(t.chatEnabled===!1)throw new Error("This assistant is turned off by the store.");if(t.chatToken?.trim()){let r=et(t);if(!r)throw new Error("Missing session id: add data-session-id or use a JWT whose sub matches POST session_id.");return{token:t.chatToken.trim(),sessionId:r}}if(t.embedKey?.trim()){let r=Date.now(),c=J({storefrontTokenKey:t.storefrontTokenKey,cartStorageKey:t.cartStorageKey,wishlistStorageKey:t.wishlistStorageKey,cartIdStorageKey:t.cartIdStorageKey,customerIdStorageKey:t.customerIdStorageKey,customerEmailStorageKey:null,customerNameStorageKey:null}),g=[c.customerId??"",c.customerEmail??"",c.storefrontAccessToken??""].join("|");if(!e||r>e.expMs-12e4||e.shopKey!==g){let C=t.apiUrl.replace(/\/$/,""),w=await fetch(`${C}/api/v1/widget/session`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({tenant_id:t.tenantId,embed_key:t.embedKey.trim(),customer_id:c.customerId,customer_email:c.customerEmail,customer_name:c.customerName})}),T=await w.text();if(!w.ok)throw new Error(T.slice(0,480)||`HTTP ${w.status}`);let Z=JSON.parse(T),Ct=Z.access_token,St=Z.session_id;if(!Ct||!St)throw new Error("Invalid session response from Frosty");let Dt=typeof Z.expires_in=="number"?Z.expires_in:3600;e={token:Ct,sessionId:St,expMs:r+Dt*1e3,shopKey:g}}return{token:e.token,sessionId:e.sessionId}}throw new Error("Missing data-embed-key or data-chat-token.")}let a=document.createElement("div");a.id="frosty-widget-root",a.setAttribute("data-frosty-widget","true"),a.style.cssText=["position:fixed","inset:0","width:0","height:0","overflow:visible","pointer-events:none","margin:0","padding:0","border:0","z-index:2147483645"].join(";");let i=!1,d=!1,u=t.primaryColor,l=t.accentColor,f=Tt(u),m=Et(t.theme),b=m?"#111827":"#f9fafb",$=m?"#1f2937":"#ffffff",k=m?"#374151":"#e5e7eb",L=m?"#111827":"#ffffff",p=m?"#374151":"#ffffff",B=m?"#f3f4f6":"#111111",Nt=m?"#9ca3af":"#6b7280",mt=t.position.toLowerCase(),yt=mt.includes("left")&&!mt.includes("right")?"left:20px;right:auto":"right:20px;left:auto",I=document.createElement("button");I.type="button",Rt(I,t),I.style.cssText=["position:fixed","bottom:20px",yt,"padding:12px 16px","border-radius:999px","border:none",`background:${u}`,`color:${f}`,"font:14px system-ui,sans-serif","cursor:pointer","box-shadow:0 8px 24px rgba(0,0,0,.15)","z-index:2147483647","pointer-events:auto"].join(";"),t.chatEnabled===!1&&(I.style.opacity="0.72",I.setAttribute("aria-disabled","true"),I.title="Assistant unavailable");let P=document.createElement("div");P.style.cssText=["display:none","flex-direction:column","position:fixed","bottom:76px",yt,"width:min(380px,calc(100vw - 40px))","height:min(520px,calc(100vh - 120px))",`background:${$}`,"border-radius:16px","box-shadow:0 12px 48px rgba(0,0,0,.18)",`border:1px solid ${k}`,"z-index:2147483646","font-family:system-ui,sans-serif","overflow:hidden","pointer-events:auto"].join(";");let Q=document.createElement("div");Q.style.cssText=`display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.12);background:${u};`;let q=document.createElement("div");q.style.cssText="display:flex;align-items:center;gap:10px;min-width:0;";let st=document.createElement("div");st.style.cssText="width:36px;height:36px;border-radius:10px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;",st.textContent="\u2728";let rt=document.createElement("div"),ot=document.createElement("div");ot.style.cssText=`font-weight:700;font-size:15px;color:${f};line-height:1.2;`,ot.textContent=t.botName;let it=document.createElement("div");it.style.cssText=`font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:${f};opacity:.85;margin-top:2px;`,it.textContent="Online \xB7 ready to help",rt.appendChild(ot),rt.appendChild(it),q.appendChild(st),q.appendChild(rt);let M=document.createElement("button");M.type="button",M.textContent="\u2715",M.setAttribute("aria-label","Close chat"),M.style.cssText=`border:none;background:transparent;font-size:18px;line-height:1;cursor:pointer;color:${f};opacity:0.85;padding:4px;flex-shrink:0;`,Q.appendChild(q),Q.appendChild(M);let h=document.createElement("div");h.style.cssText=`flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px;background:${b};`;let N=document.createElement("div");N.style.cssText=`border-top:1px solid ${k};background:${L};padding:10px 12px 8px;`;let E=document.createElement("div");E.style.cssText="display:flex;gap:8px;align-items:flex-end;background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:8px;";let v=document.createElement("button");v.type="button",v.setAttribute("aria-label","Voice call"),v.textContent="\u{1F3A4}",v.style.cssText="width:36px;height:36px;border:1px solid #e5e7eb;border-radius:10px;background:#f9fafb;cursor:pointer;font-size:16px;flex-shrink:0;line-height:1;",t.voiceEnabled||(v.style.display="none");let y=document.createElement("textarea");y.rows=1,y.placeholder="Type a message\u2026",y.style.cssText="flex:1;resize:none;border:none;outline:none;padding:6px 4px;font:inherit;font-size:14px;line-height:1.4;background:transparent;min-height:24px;max-height:96px;";let S=document.createElement("button");S.type="button",S.setAttribute("aria-label","Send"),S.innerHTML='',S.style.cssText=`width:36px;height:36px;border:none;border-radius:50%;background:${u};color:${f};cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;`,E.appendChild(v),E.appendChild(y),E.appendChild(S);let at=document.createElement("div");at.textContent="Powered by Frosty AI",at.style.cssText="text-align:center;font-size:10px;color:#9ca3af;margin-top:8px;",N.appendChild(E),N.appendChild(at);let z=document.createElement("div");z.style.cssText=`display:none;align-items:center;gap:10px;padding:10px 12px;border-top:1px solid ${k};background:${u}14;font-size:13px;`;let Y=document.createElement("span");Y.style.cssText=`width:8px;height:8px;border-radius:50%;background:${u};flex-shrink:0;`;let H=document.createElement("span");H.style.cssText="flex:1;color:#374151;line-height:1.35;",H.textContent="Voice mode";let j=document.createElement("button");j.type="button",j.textContent="End",j.style.cssText="padding:6px 12px;border:none;border-radius:999px;background:#dc2626;color:#fff;font-weight:600;cursor:pointer;font-size:12px;flex-shrink:0;",z.appendChild(Y),z.appendChild(H),z.appendChild(j);let xt={connecting:"Connecting voice\u2026",listening:"Listening \u2014 speak anytime",thinking:"Thinking\u2026",speaking:"Speaking\u2026"};function R(r){z.style.display=r?"flex":"none",v.style.background=r?u:"#f9fafb",v.style.color=r?f:"#374151",v.style.borderColor=r?u:"#e5e7eb",v.setAttribute("aria-pressed",r?"true":"false"),v.title=r?"End voice mode":"Start voice mode"}function bt(r){H.textContent=xt[r]??xt.listening,Y.style.animation=r==="listening"?"frostyTypingDot 1.4s ease-in-out infinite":"none",Y.style.opacity=r==="thinking"?"0.45":"1"}let D=new nt(t.apiUrl,{onState:r=>{(r==="idle"||r==="error")&&(R(!1),W())},onPhase:r=>{R(!0),bt(r),r==="thinking"?dt():(r==="listening"||r==="speaking")&&W()},onTranscript:(r,c)=>{c||(H.textContent=`You: ${r}`)},onUserFinal:r=>{O=!0,V(),W(),wt(r),vt()},onBotReply:r=>{O=!0,V(),kt(),F=r,X(!1),h.scrollTop=h.scrollHeight},onError:r=>{D.end(),R(!1),U(r.slice(0,200),"#b91c1c")}});y.addEventListener("focus",()=>{E.style.borderColor=l,E.style.boxShadow=`0 0 0 1px ${l}33`}),y.addEventListener("blur",()=>{E.style.borderColor="#e5e7eb",E.style.boxShadow="none"}),v.addEventListener("click",()=>{(async()=>{if(D.isActive()){D.end(),R(!1);return}try{let r=await o();R(!0),bt("connecting"),await D.start(r.token)}catch(r){R(!1);let c=r instanceof Error?r.message:"Voice failed";U(c.slice(0,200),"#b91c1c")}})()}),j.addEventListener("click",()=>{D.end(),R(!1)}),P.appendChild(Q),P.appendChild(h),N.insertBefore(z,N.firstChild),P.appendChild(N);let lt=!1,O=!1;function V(){h.querySelector("[data-frosty-welcome]")?.remove(),lt=!1}function zt(){if(lt||O)return;V();let r=document.createElement("div");r.dataset.frostyWelcome="1",r.style.cssText="align-self:stretch;padding:8px 4px 12px;";let c=document.createElement("div");c.style.cssText=`width:56px;height:56px;border-radius:14px;background:${u}18;display:flex;align-items:center;justify-content:center;font-size:28px;margin:0 auto 12px;`,c.textContent="\u2728";let g=document.createElement("div");g.style.cssText=`font-size:18px;font-weight:700;color:${B};text-align:center;margin-bottom:6px;`,g.textContent=`Hi, I'm ${t.botName}`;let C=document.createElement("div");C.style.cssText=`font-size:13px;color:${Nt};text-align:center;line-height:1.45;margin-bottom:14px;`,C.textContent=t.welcomeMessage,r.appendChild(c),r.appendChild(g),r.appendChild(C);let w=Ut(t.suggestions.map(T=>({text:T,action:T})),T=>{O=!0,V(),y.value=T.text,ut()},{border:k,accent:u,text:"#1f2937",hoverBg:`${u}18`});r.appendChild(w),h.appendChild(r),lt=!0,h.scrollTop=0}function U(r,c="#b45309"){let g=document.createElement("div");g.style.cssText=`font-size:12px;color:${c};align-self:center;text-align:center;max-width:95%;`,g.textContent=r,h.appendChild(g),h.scrollTop=h.scrollHeight}function wt(r){let c=document.createElement("div");c.style.cssText="align-self:flex-end;max-width:85%;";let g=document.createElement("div");g.style.cssText=`background:${u};color:${f};padding:10px 12px;border-radius:14px 14px 4px 14px;font-size:14px;line-height:1.45;white-space:pre-wrap;word-break:break-word;`,g.textContent=r,c.appendChild(g),h.appendChild(c),h.scrollTop=h.scrollHeight}let A=null,F="",G=!1,ct=null;if(!document.getElementById("frosty-widget-typing-style")){let r=document.createElement("style");r.id="frosty-widget-typing-style",r.textContent=`
@keyframes frostyTypingDot {
0%, 80%, 100% { opacity: 0.25; transform: translateY(0); }
40% { opacity: 1; transform: translateY(-3px); }
}
.frosty-assistant-md strong { font-weight: 700; }
.frosty-assistant-md ol { margin: 6px 0 10px; padding-left: 1.2em; }
.frosty-assistant-md li { margin-bottom: 6px; }
.frosty-stream-caret {
display: inline-block;
width: 2px;
height: 1em;
margin-left: 2px;
vertical-align: text-bottom;
background: currentColor;
opacity: 0.7;
animation: frostyCaretPulse 1s ease-in-out infinite;
}
@keyframes frostyCaretPulse {
0%, 100% { opacity: 0.25; }
50% { opacity: 0.95; }
}
`,document.head.appendChild(r)}function W(){ct?.remove(),ct=null}function dt(r){W();let c=document.createElement("div");c.style.cssText="align-self:flex-start;max-width:92%;";let g=document.createElement("div");g.style.cssText=`background:${p};color:${B};padding:10px 12px;border-radius:14px 14px 14px 4px;font-size:14px;line-height:1.45;border:1px solid ${l};`;let C=document.createElement("div");C.style.cssText="display:flex;align-items:center;gap:6px;";for(let w=0;w<3;w+=1){let T=document.createElement("span");T.style.cssText=`width:7px;height:7px;border-radius:50%;background:${B};opacity:0.35;animation:frostyTypingDot 1.1s infinite;animation-delay:${w*.15}s;`,C.appendChild(T)}if(g.appendChild(C),r){let w=document.createElement("div");w.style.cssText="margin-top:8px;font-size:12px;color:#6b7280;",w.textContent=r,g.appendChild(w)}c.appendChild(g),h.appendChild(c),ct=c,h.scrollTop=h.scrollHeight}function kt(){if(A)return A;let r=document.createElement("div");r.style.cssText="align-self:flex-start;max-width:92%;";let c=document.createElement("div");return c.style.cssText=`background:${p};color:${B};padding:10px 12px;border-radius:14px 14px 14px 4px;font-size:14px;line-height:1.45;border:1px solid ${l};word-break:break-word;`,c.className="frosty-assistant-md",r.appendChild(c),h.appendChild(r),A=c,h.scrollTop=h.scrollHeight,c}function vt(){A=null,F="",G=!1}function X(r){if(!A)return;let c=Wt(F);A.innerHTML=r?`${c}`:c,h.scrollTop=h.scrollHeight}function Ft(r){G||(G=!0,requestAnimationFrame(()=>{G=!1,X(r)}))}function Ht(r){if(r.type==="status"){dt(r.message);return}if(r.type==="token"){W(),kt(),F+=r.delta,Ft(!0);return}if(r.type==="structured"){W();let c=r.payload,g=c.products;if(Array.isArray(g)&&g.length>0){let C=typeof c.more_url=="string"?c.more_url:t.storeCatalogUrl,w=typeof c.more_label=="string"?c.more_label:void 0;ie(g,h,u,t.showProductImages,C,w),h.scrollTop=h.scrollHeight}return}if(r.type==="error"){U(`Error${r.code?`: ${r.code}`:""}`,"#b91c1c");return}r.type==="done"&&A&&F&&X(!1)}async function ut(){let r=y.value.trim();if(!(!r||d)){O=!0,V(),d=!0,S.disabled=!0,y.disabled=!0,wt(r),y.value="",vt(),dt("Thinking\u2026");try{let c=await o(),g=J({storefrontTokenKey:t.storefrontTokenKey,cartStorageKey:t.cartStorageKey,wishlistStorageKey:t.wishlistStorageKey,cartIdStorageKey:t.cartIdStorageKey,customerIdStorageKey:t.customerIdStorageKey,customerEmailStorageKey:null,customerNameStorageKey:null});await Lt({config:t,sessionId:c.sessionId,authToken:c.token,message:r,shop:g,onEvent:Ht})}catch(c){let g=c instanceof Error?c.message:String(c);g&&U(g.slice(0,480),"#b91c1c")}finally{W(),d=!1,S.disabled=!1,y.disabled=!1,A&&F&&X(!1),y.focus()}}}function jt(){i=!i,P.style.display=i?"flex":"none",i&&(y.disabled=!1,S.disabled=!1,y.placeholder="Message\u2026",t.chatEnabled===!1?(h.innerHTML="",U("This assistant has been turned off. Please contact the store if you need help.","#b45309"),y.disabled=!0,S.disabled=!0,y.placeholder="Assistant unavailable"):!s()&&!n()?(h.innerHTML="",U("Add data-embed-key from the Frosty dashboard (Embed & deploy), or data-chat-token from your backend.","#b91c1c")):s()&&!et(t)?(h.innerHTML="",U("JWT mode: add data-session-id or ensure JWT sub matches POST session_id.","#b91c1c")):zt(),y.focus())}I.addEventListener("click",()=>jt()),M.addEventListener("click",r=>{r.stopPropagation(),i=!1,P.style.display="none"}),S.addEventListener("click",()=>void ut()),y.addEventListener("keydown",r=>{r.key==="Enter"&&!r.shiftKey&&(r.preventDefault(),ut())}),P.style.display="none",a.appendChild(P),a.appendChild(I),document.body.appendChild(a)}(async function(){let e=It();if(!e){console.warn("[Frosty] widget config not found");return}let n=await _t(e);Mt(n)})();})();