@letscooee/web-sdk 11.3.1 → 11.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LMSWI4E7.js → chunk-J2BQWQD2.js} +1 -1
- package/dist/{chunk-D4KNSC5P.js → chunk-JQR4R7BU.js} +1 -1
- package/dist/{chunk-FBCNF3MW.js → chunk-PVACHAMY.js} +13 -13
- package/dist/main.min.js +3 -3
- package/dist/{share-dialog.component-BSYTH6H6.js → share-dialog.component-SONJ7GUB.js} +1 -1
- package/dist/{video-detail-dialog.component-PCYCFT6X.js → video-detail-dialog.component-NDH6422N.js} +1 -1
- package/dist/widget.min.js +2 -2
- package/package.json +1 -1
package/dist/main.min.js
CHANGED
|
@@ -7,7 +7,7 @@ import{a as _,b as Z,c as Lo,d as hm,e as Mo,f as Ar,g as Si}from"./chunk-V7UGKY
|
|
|
7
7
|
|
|
8
8
|
`+ne.message+`
|
|
9
9
|
`+Array(ne.message.length+1).join("=")+`
|
|
10
|
-
`+T(A,U)):ne}}function kt(A,R){var V;return R.cache&&R.name&&R.storage.templates.get(R.name)?R.storage.templates.get(R.name):(V=typeof A=="function"?A:et(A,R),R.cache&&R.name&&R.storage.templates.define(R.name,V),V)}Ae.l.bind(Ae),t.compile=et,t.compileScope=P,t.compileScopeIntoFunction=G,t.compileToString=T,t.defaultConfig=Ae,t.filters=Te,t.getConfig=qe,t.helpers=me,t.nativeHelpers=Be,t.parse=y,t.render=function(A,R,V,U){var H=qe(V||{});if(!H.async)return kt(A,H)(R,H);if(!U){if(typeof n=="function")return new n(function(ne,he){try{ne(kt(A,H)(R,H))}catch(Xe){he(Xe)}});throw e("Please provide a callback function, this env doesn't support Promises")}try{kt(A,H)(R,H,U)}catch(ne){return U(ne)}},t.templates=se,Object.defineProperty(t,"__esModule",{value:!0})})});var ou="11.3.
|
|
10
|
+
`+T(A,U)):ne}}function kt(A,R){var V;return R.cache&&R.name&&R.storage.templates.get(R.name)?R.storage.templates.get(R.name):(V=typeof A=="function"?A:et(A,R),R.cache&&R.name&&R.storage.templates.define(R.name,V),V)}Ae.l.bind(Ae),t.compile=et,t.compileScope=P,t.compileScopeIntoFunction=G,t.compileToString=T,t.defaultConfig=Ae,t.filters=Te,t.getConfig=qe,t.helpers=me,t.nativeHelpers=Be,t.parse=y,t.render=function(A,R,V,U){var H=qe(V||{});if(!H.async)return kt(A,H)(R,H);if(!U){if(typeof n=="function")return new n(function(ne,he){try{ne(kt(A,H)(R,H))}catch(Xe){he(Xe)}});throw e("Please provide a callback function, this env doesn't support Promises")}try{kt(A,H)(R,H,U)}catch(ne){return U(ne)}},t.templates=se,Object.defineProperty(t,"__esModule",{value:!0})})});var ou="11.3.3";var Hv=ou.split("-")[0].split(".").slice(0,3).map(t=>t.padStart(2,"0")).join(""),Qs="WEB",gm="CooeeSDK",Kr=ou,ym=parseInt(Hv,10);var vm=["collection","product","cart"],Em=[{identifier:"#flo-checkout-wrapper",gateway:"Shopflow"},{identifier:"#fastrr-main-container",gateway:"Shiprocket"},{identifier:"#gokwik-modal-wrapper",gateway:"Gokwik"},{identifier:"#zecpe",gateway:"Ecom 360"}],_m=["View Item","View Cart","View Collection"];var Zs=`https://cdn.jsdelivr.net/npm/@letscooee/web-sdk@${Kr}/dist`,zt={apiURL:"https://api.sdk.letscooee.com",debug:!1,mode:"production",baseURL:Zs,styleURL:`${Zs}/widget.min.css`,widgetURL:`${Zs}/widget.min.js`,swiperStyleURL:`${Zs}/swiper-bundle.min.css`};var Yt=Ar(Ii());var w=class{static debuggerEl;static infoLogs=[];static log(...e){Yt.default.info(...e)}static verbose(...e){Yt.default.debug(...e)}static error(...e){Yt.default.error(...e)}static warn(...e){Yt.default.warn(...e)}static info(...e){Yt.default.info(...e),this.infoLogs.unshift({time:new Date,message:e.join(" ")}),this.addToDebugger()}static trace(...e){Yt.default.trace(...e)}static addToDebugger(){sessionStorage.cooeeDebug&&(this.debuggerEl=this.debuggerEl??document.querySelector("cooee-debugger"),this.debuggerEl&&this.debuggerEl&&(this.debuggerEl.logs=[...this.infoLogs]))}};function wm(t=gm){Yt.default.useDefaults({formatter:function(r){r.unshift(`${t} (v${Kr}):`)}});let e=su();(e==="1"||e==="on")&&(localStorage.cooeeLogLevel="TRACE"),localStorage.cooeeLogLevel?Yt.default.setLevel(Yt.default[localStorage.cooeeLogLevel]):Yt.default.setLevel(zt.debug?Yt.default.TRACE:Yt.default.OFF)}function su(){return new URL(location.href).searchParams?.get("cooee-debug")}function Sm(){let t=`
|
|
11
11
|
display: inline-block;
|
|
12
12
|
font-size: 14px;
|
|
13
13
|
background: linear-gradient(90deg, #d52dc8 25%, #2179e2 82%);
|
|
@@ -65,11 +65,11 @@ mutation cartDiscountCodesUpdate($cartId: ID!, $discountCodes: [String!]) {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
`,Bn=class{async addToCart(e,r){if(!e.length)return;let i={items:e.map(s=>{let{vID:a,quantity:c}=this.getVIDAndQuantity(s);return{id:a?+a:+s.mID,quantity:c,properties:r.getPrivateAttributesForLineItem()}})},o=rt.get();if(window.cooeeGetCartSections&&typeof window.cooeeGetCartSections=="function")try{i.sections_url=window.location.pathname,i.sections=window.cooeeGetCartSections()}catch(s){we(s,"execute-cooeeGetCartSections",{engagementTrigger:r})}else o.isMiniCart()?i.sections=["mini-cart"]:o.isShopifyDefaultDrawer()&&(i.sections=o.element.getSectionsToRender?.().map((s=>s.section??s.id)));try{let s=await Yi("/cart/add.js",i,"cart-item-add",r);return w.log(`Added ${e.length} items to Cart`),Sr("Product added to your cart"),s.data}catch(s){let a=["Failed to add product in cart."];if(s instanceof Wn&&s.is40x()&&s.responseText){let c=s.responseText;c.description&&a.push(`Reason: ${c.description}`)}a.push("Please try again later."),Sr(a.join(" "))}}async updateLineItem(e,r){if(!rr.hasKeys(r)){w.warn("No update fields provided");return}let n=_({id:e.key},r);try{let i=await Yi("/cart/change.js",n,"cart-item-update");w.log(`Updated ${e}`),ye.getCurrent().update(i.data)}catch{Sr("Failed to update item in cart")}}async copyDiscountCode(e){if(e)try{await navigator.clipboard.writeText(e),w.log(`Code-${e} copied`),Sr("Discount code copied")}catch(r){w.error("Failed to copy code",r)}}getProductURL(e){if(!e?.link)return;let r=fg(e.link);if(r)return zi("/products/"+r)}async upgradeToSubscription(e,r){if(!e){w.warn("Trying to upgrade to subscription with no item");return}let n=await ye.getCurrent().getNormalisedCart(),i=e.selectedOrFirstVariant.value,o=n.items.findIndex(c=>c.vID===i.mID),s=i.selectedSellingPlan.value,a={line:o+1,selling_plan:s?.mID||null,properties:r.getPrivateAttributesForLineItem()};try{let c=await Yi("/cart/change.js",a,"cart-switch-subscription",r);return w.log(`Upgraded ${e} selling plan`),Sr("Line item updated"),ye.getCurrent().update(c.data),c.data}catch{Sr("Failed to update subscription")}}async createNewCart(e,r,n){if(!e?.vID){w.error("No variant ID found to perform Buy now",e);return}let i=r?[r]:[],o=[{merchandiseId:`gid://shopify/ProductVariant/${e.vID}`,quantity:1,attributes:n.getKVFormatPrivateAttributesForLineItem()}],s=await Qa("Buy Now");return(await mc(l0,{input:{lines:o,discountCodes:i,attributes:s}},"storefront-create-cart")).data.data?.cartCreate?.cart?.checkoutUrl}async process(e){let r=e.clickAction,n=e.items,i=e.triggerData,o;if(r.at){let s=r;if(w.log(`Performing ${JSON.stringify(s)} action`),s.at===be.GO_TO_PRODUCT)o=this.getProductURL(n[0]);else if(s.at===be.ADD_TO_CART)n?.length&&await this.addToCart(n,i);else if(s.at===be.COPY_COUPON_CODE)await this.copyDiscountCode(i.discount?.code);else if(s.at===be.OPEN_CART)rt.get().open();else if(s.at===be.GO_TO_COLLECTION){let a=e.collections;if(!a?.length)return;o=zi("/collections/"+a[0].handle)}}r.applyDiscount&&i.discount?.code?zr.navigate(i.discount.code,i.redirectBehaviour,o):o&&(location.pathname=o)}getVIDAndQuantity(e){let r,n;if(e instanceof Ct)r=e.vID,n=e.quantity??1;else{if(!e.vars?.length)return{};r=e.selectedOrFirstVariant.value.mID,n=1}return{vID:r,quantity:n}}};var Tl=class{static updateIdentity(e){if(!this.isInstalled())return;let r={};e.email&&(r.email=e.email),e.mobile&&(r.phone_number=e.mobile),w.verbose("Sending email/mobile to Klaviyo"),window.klaviyo.push(["identify",r])}static isInstalled(){return window.klaviyo&&typeof window.klaviyo=="object"}};var xl=class{action;triggerContext;constructor(e,r){this.action=e,this.triggerContext=r}async execute(){let e=this.containsCTA()?"CE Trigger Clicked":"CE Trigger Closed";switch(this.action.at!==be.SUBMIT_FORM&&await this.closeTriggerAndSendEvent(e),this.action.at){case be.ACCEPT_POPUP:break;case be.GO_TO_URL:this.gotoURLAction();break;case be.SHARE:this.shareAction();break;case be.SUBMIT_FORM:await this.collectFormData();break;case void 0:case be.OPEN_CART:break;default:w.error("Received an invalid ClickActionType: ",this.action.at);return}}externalAction(){this.action.ext?.u&&window.open(this.action.ext.u,"_blank")?.focus()}gotoURLAction(){if(this.action.gu?.u){let e=this.action.gu.u;Ui(e)||(e=`//${e}`),window.open(e,"_self")}}async closeTriggerAndSendEvent(e,r){this.triggerContext.closeInApp(e,r),await this.dispatchEvent()}shareAction(){if(!this.action.share)return;if(!navigator.share){w.warn("Navigator.share is not compatible with this browser");return}navigator.share({text:this.action.share.text,title:"Share"}).then(r=>console.log(r)).catch(r=>console.error(r))}containsCTA(){return this.action.at&&this.action.at!==be.REJECT_POPUP?!0:!(this.isEmpty(this.action.custKV)&&this.isEmpty(this.action.up))}isEmpty(e){return e?Object.keys(e).length===0:!0}async collectFormData(){let e={};for(let r of this.triggerContext.inputs){if(!r.isValid)return;let i=document.getElementById(r.id).value;r.type===51?e.email=i:r.type===52&&(e.mobile=i)}await this.closeTriggerAndSendEvent("CE Form Submitted",{form:e}),this.action.applyDiscount&&Sr("Coupon applied on cart"),Tl.updateIdentity(e)}async dispatchEvent(){let e=this.triggerContext.triggerData,r={clickAction:this.action,items:this.triggerContext.selectedEmbeddedItems??e.embeddedItems??e.items,collections:e.collections,triggerData:e};await new Bn().process(r);let n={action:this.containsCTA()?"CLICKED":"CLOSED"};document.dispatchEvent(new CustomEvent("letscooee:outbound:popup-activities",{detail:n}))}};var dr=class{renderer=kn.get();parentHTMLEl;inappElement;inappHTMLEl;triggerContext;stylesConverter;scalingFactor;constructor(e,r,n){this.parentHTMLEl=e,this.inappElement=r,this.triggerContext=n,this.stylesConverter=new Io(this.renderer.getScalingFactor())}getHTMLElement(){return this.inappHTMLEl}insertElement(){this.parentHTMLEl.appendChild(this.inappHTMLEl)}processCommonBlocks(){this.processWidthAndHeight(),this.processPositionBlock(),this.processTransformBlock(),this.processTransparency(),this.processShadow(),this.registerAction();let e=Z(_(_(_(_({},this.getDisplayStyles()),this.getSpaceStyles()),this.getBorderStyles()),this.getBackgroundStyles()),{boxSizing:"border-box",outline:"none"});hi(this.inappHTMLEl,e)}getDisplayStyles(){return{display:"block"}}processWidthAndHeight(){this.inappElement.w&&re(this.inappHTMLEl,"width",this.stylesConverter.getSizePx(this.inappElement.w)),this.inappElement.h&&re(this.inappHTMLEl,"height",this.stylesConverter.getSizePx(this.inappElement.h))}processPositionBlock(){let e={position:"absolute",left:this.stylesConverter.getSizePx(this.inappElement.x),top:this.stylesConverter.getSizePx(this.inappElement.y)};hi(this.inappHTMLEl,e)}getBorderStyles(){return this.stylesConverter.getBorderStyles(this.inappElement.br)}getSpaceStyles(){return this.stylesConverter.getSpaceStyles(this.inappElement.spc)}processTransparency(){let e=this.inappElement.alpha;if(!isNaN(e)){let r=(e/100).toFixed(2);re(this.inappHTMLEl,"opacity",r)}}processShadow(){let e=this.inappElement.shd;e?re(this.inappHTMLEl,"box-shadow",e.getStyle(this.scalingFactor)):re(this.inappHTMLEl,"box-shadow","unset")}processTransformBlock(){let e=new Vn(this.inappElement.trf);e&&e.rotate&&re(this.inappHTMLEl,"transform",`rotate(${e.rotate}deg)`)}registerAction(){let e=this.inappElement.clc;!e||Object.keys(e).length===0||(this.inappHTMLEl.addEventListener("click",r=>{r.stopPropagation(),new xl(e,this.triggerContext).execute()}),re(this.inappHTMLEl,"cursor","pointer"))}getBackgroundStyles(){return this.stylesConverter.getBackgroundStyles(this.inappElement.bg)}};var Yr=class extends dr{constructor(e,r,n){super(e,r,n)}processCommonBlocks(){super.processCommonBlocks(),this.processFontBlock(),this.processAlignment()}processFontBlock(){let e={},r=this.inappElement.typography;return r&&(e.fontSize=this.stylesConverter.getSizePx(r.fs),e.fontFamily="cooee"+r.fam?.name,e.lineHeight=`${r.lh}`,e.letterSpacing=r.letterSpacing),this.stylesConverter.getColourStyles(this.inappElement.color,"color",e),hi(this.inappHTMLEl,e),e}processPart(e,r){let n=[];r.u&&n.push("underline"),r.st&&n.push("line-through"),n.length||n.push("normal"),re(e,"font-weight",r.b?"bold":"normal"),re(e,"font-style",r.i?"italic":"normal"),re(e,"text-decoration",n.join(" ")),re(e,"color",r.c??"inherit"),re(e,"font-family","inherit")}processAlignment(){let e=this.inappElement.typography.ta,r=e?xi[e]?.toLowerCase():this.inappElement.typography.alignment;r||(r="start"),re(this.inappHTMLEl,"text-align",r)}};var ks=class extends Yr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){this.inappElement.parts?.forEach(e=>{let r=document.createElement("span");r.innerHTML=e.txt?.toString()?.replace(/\n/g,"<br />"),this.processPart(r,e),this.inappHTMLEl.appendChild(r)}),this.processCommonBlocks()}};var Us=class extends dr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){this.processCommonBlocks()}};var yi=class extends dr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("img"),this.insertElement()}render(){this.inappHTMLEl.setAttribute("src",this.inappElement.src),re(this.inappHTMLEl,"max-width","none"),re(this.inappHTMLEl,"max-height","none"),re(this.inappHTMLEl,"margin","0 auto"),this.processCommonBlocks()}};var Fs=class t extends dr{constructor(r,n,i){super(r,n,i);this.parent=r;this.inappHTMLEl=document.createElement("div")}static MAX_Z_INDEX="2147483647";render(){return this.parent||this.renderer.removeInApp(),this.insertElement(),this.processCommonBlocks(),this.inappHTMLEl.classList.add("cooee-wrapper"),this.inappHTMLEl.classList.add(this.triggerContext.rootClassName),re(this.inappHTMLEl,"z-index",t.MAX_Z_INDEX),this.inappHTMLEl}getBackgroundStyles(){return this.inappElement.cover?super.getBackgroundStyles():{}}processWidthAndHeight(){let r=this.inappElement.cont;if(this.inappElement.cover)this.renderer.isParentNotBody()?(re(this.inappHTMLEl,"width","100%"),re(this.inappHTMLEl,"height","100%")):(re(this.inappHTMLEl,"width","100vw"),re(this.inappHTMLEl,"height","100vh")),re(this.inappHTMLEl,"top","0"),re(this.inappHTMLEl,"left","0");else{let n=this.inappElement.spc,i=this.stylesConverter.getScaledSize(r.w)+n.getHorizontal(),o=this.stylesConverter.getScaledSize(r.h)+n.getVertical();re(this.inappHTMLEl,"width",i+"px"),re(this.inappHTMLEl,"height",o+"px")}}getSpaceStyles(){return{padding:this.inappElement.spc.getPaddingCSS()}}getDisplayStyles(){return _(_({display:"flex"},this.inappElement.getStylesForWrapper()),this.inappElement.getFlexStylesForContainer())}processPositionBlock(){this.renderer.isParentNotBody()?re(this.inappHTMLEl,"position","absolute"):re(this.inappHTMLEl,"position","fixed")}getBorderStyles(){return{}}processTransparency(){}processTransformBlock(){}processShadow(){}};var u0="cooee-container",Cl=class extends dr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){return this.processCommonBlocks(),re(this.inappHTMLEl,"position","relative"),re(this.inappHTMLEl,"overflow","hidden"),this.inappHTMLEl.classList.add(u0),this}};var Rl=class t extends Yr{static DAYS="Days";static HOURS="Hours";static MINUTES="Minutes";static SECONDS="Seconds";elements;spans=[];constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){this.addTimerChildren(),this.processAndStartTimer(),this.processCommonBlocks();let e=Z(_(_(_({flex:"1 1 0"},this.stylesConverter.getBackgroundStyles(this.inappElement.bg)),this.stylesConverter.getBorderStyles(this.inappElement.br)),this.stylesConverter.getSpaceStyles(this.inappElement.spc)),{marginLeft:this.stylesConverter.getSizePx(this.inappElement.gap),marginRight:this.stylesConverter.getSizePx(this.inappElement.gap)});this.addStylesToTimer(e)}getBackgroundStyles(){return{}}processFontBlock(){let e=super.processFontBlock();return this.stylesConverter.getColourStyles(this.inappElement.color,"color",e),this.addStylesToTimer(e),e}getSpaceStyles(){return{}}getBorderStyles(){return{}}getDisplayStyles(){return{display:"flex",flexWrap:"nowrap",justifyContent:"center"}}addStylesToTimer(e){this.elements.forEach(r=>hi(r,e))}addTimerChildren(){let e=this.inappElement.show;this.elements=[],e.day&&this.elements.push(this.getChild(t.DAYS)),e.hour&&this.elements.push(this.getChild(t.HOURS)),e.minute&&this.elements.push(this.getChild(t.MINUTES)),e.second&&this.elements.push(this.getChild(t.SECONDS)),this.elements.forEach(r=>this.inappHTMLEl.appendChild(r))}getChild(e){let r=document.createElement("div"),n=document.createElement("span"),i=document.createElement("span");return i.innerText=e,n.innerText="00",n.id=`lc-${e}`,re(i,"font-size","0.5em"),re(i,"text-align","center"),re(i,"font-family","inherit"),re(n,"text-align","center"),re(n,"font-family","inherit"),this.inappElement.lblPos==="start"?(r.appendChild(i),r.appendChild(n)):(r.appendChild(n),r.appendChild(i)),re(r,"display","flex"),re(r,"flex-direction",this.inappElement.horizontal?"":"column"),re(r,"justify-content","center"),re(r,"align-items","center"),re(r,"gap","5px"),this.spans.push(n),r}processAndStartTimer(){let e=this.inappElement.timer.start(this.inappElement.timerType,r=>{this.spans.forEach(n=>{n.id===`lc-${t.DAYS}`?n.innerText=String(r.days).padStart(2,"0"):n.id===`lc-${t.HOURS}`?n.innerText=String(r.hours).padStart(2,"0"):n.id===`lc-${t.MINUTES}`?n.innerText=String(r.minutes).padStart(2,"0"):n.id===`lc-${t.SECONDS}`&&(n.innerText=String(r.seconds).padStart(2,"0"))})});this.triggerContext.intervals.push(e)}};var Al=class extends Yr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("select"),this.insertElement()}render(){re(this.inappHTMLEl,"background","#ffffff00"),re(this.inappHTMLEl,"outline","none"),this.processCommonBlocks(),this.addListener(this.inappHTMLEl),this.addOptions()}addListener(e){this.triggerContext.selectedEmbeddedItems?.length||this.updateItems(this.triggerContext.triggerData.items[0].vars[0]),e.addEventListener("click",r=>{r.stopPropagation()}),e.addEventListener("change",()=>{let r=new Fr(JSON.parse(e.value));this.updateItems(r)})}updateItems(e){let r=this.triggerContext.triggerData.items[0];this.triggerContext.selectedEmbeddedItems=[r.toEmbed(e)];let n=this.parentHTMLEl.querySelector("#coo-13");if(!n)return;let i=e.imgs[0]??r.imgs?.at(0);i?.url&&n.setAttribute("src",i.url)}addOptions(){let e=this.triggerContext.triggerData.items,r=this.inappHTMLEl;if(!e?.length){r.add(this.createOption(this.inappElement.placeholderText));return}let n=this.triggerContext.selectedEmbeddedItems?.at(0);e[0].vars.forEach(i=>{r.add(this.createOption(i.name??"Default",i,i.mID===n?.vID))})}createOption(e,r,n){let i=document.createElement("option");return i.text=e,i.value=JSON.stringify(r),n&&(i.selected=!0),r||(i.disabled=!0),i}};var To=class extends Yr{borderColor="";constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("input"),this.insertElement()}render(){let e=this.setInputType();this.inappHTMLEl.setAttribute("placeholder",this.inappElement.placeholderText),re(this.inappHTMLEl,"background","#ffffff00"),re(this.inappHTMLEl,"outline","none"),this.inappHTMLEl.addEventListener("click",r=>{r.stopPropagation()}),this.processCommonBlocks(),this.addListener(this.inappHTMLEl,e),this.triggerContext.addInputField(e,this.inappElement.t)}};var Dl=class t extends To{static EMAIL_REGEX=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;constructor(e,r,n){super(e,r,n)}setInputType(){let e=`coo-${this.inappElement.t}`;return this.inappHTMLEl.setAttribute("type","email"),this.inappHTMLEl.setAttribute("id",e),e}addListener(e,r){e.addEventListener("keydown",n=>{this.borderColor||(this.borderColor=this.inappHTMLEl.style.borderColor),e.value.match(t.EMAIL_REGEX)?(re(this.inappHTMLEl,"border-color",this.borderColor),this.triggerContext.updateValidation(r,!0)):(re(this.inappHTMLEl,"border-color","red"),this.triggerContext.updateValidation(r,!1)),n.stopPropagation()})}};var Nl=class t extends To{static MOBILE_REGEX=/^\d+$/;constructor(e,r,n){super(e,r,n)}setInputType(){let e=`coo-${this.inappElement.t}`;return this.inappHTMLEl.setAttribute("type","tel"),this.inappHTMLEl.setAttribute("id",e),e}addListener(e,r){e.addEventListener("keydown",n=>{this.borderColor||(this.borderColor=this.inappHTMLEl.style.borderColor),e.value.match(t.MOBILE_REGEX)?(re(this.inappHTMLEl,"border-color",this.borderColor),this.triggerContext.updateValidation(r,!0)):(re(this.inappHTMLEl,"border-color","red"),this.triggerContext.updateValidation(r,!1)),n.stopPropagation()})}};var Ol=class extends yi{constructor(e,r,n){super(e,r,n)}render(){super.render(),this.inappHTMLEl.setAttribute("id",`coo-${this.inappElement.type}`)}};var kn=class t{static DOCUMENT_STANDARD_MODE="CSS1Compat";static ACTIVE_TRIGGER_DATA;static _instance;eventAPIService;parent;rootContainer;containerHTMLElement;ian;scalingFactor=1;triggerContext;resizeListener;cartDrawerToggleSubscription;constructor(e){this.eventAPIService=Re.getInstance(),this.resizeListener=()=>this.screenResized(),this.setParentContainer(e)}static get(){return t._instance}render(e){this.renderEngagement(new Tt(e))}getScalingFactor(){return this.scalingFactor}calculateScalingFactor(e){let r=e.max,n=e.cont.w,i=e.cont.h,o=e.spc,s=this.getWidth(),a=this.getHeight();r&&(s=s?Math.min(s,r):r,a=a?Math.min(a,r):r),a&&(s-=o.getHorizontal(),a-=o.getVertical(),s/a<n/i?this.scalingFactor=s/n:this.scalingFactor=a/i,this.scalingFactor=Math.min(this.scalingFactor,1))}setParentContainer(e){this.parent=e||document.body,this.isParentNotBody()&&re(this.parent,"position","relative")}isParentNotBody(){return this.parent&&this.parent!==document.body}getWidth(){return this.isParentNotBody()?this.parent.clientWidth:document.compatMode===t.DOCUMENT_STANDARD_MODE?document.documentElement.clientWidth:window.innerWidth}getHeight(){return this.isParentNotBody()?this.parent.clientHeight:document.compatMode===t.DOCUMENT_STANDARD_MODE?document.documentElement.clientHeight:window.innerHeight}async renderEngagement(e){this.triggerContext=new Dr(new Date,e),this.triggerContext.onClose(r=>{this.closeInApp(r)}),this.ian=e.ian,(Cr()||e.previewType==="mobile")&&this.ian.overrideForMobileView(),await this.preloadImages(e),e.shouldDelay()?window.setTimeout(()=>{this.withCartDrawerClosed()},e.getDelaySeconds()):this.withCartDrawerClosed()}withCartDrawerClosed(){if(!rt.get().isOpen()||!Cr()){this.startRenderingOnce();return}this.cartDrawerToggleSubscription=window.CooeeSDK.cartDrawerToggle$.subscribe(({open:r})=>{!r&&this.startRenderingOnce()})}startRenderingOnce(){if(!this.shouldSkipCampaign()){t.ACTIVE_TRIGGER_DATA=this.triggerContext.triggerData,t._instance=this;try{this.startRendering()}catch(e){we(e,"render-popup",{triggerContext:this.triggerContext});return}this.sendTriggerDisplayed(),Cr()||window.addEventListener("resize",this.resizeListener),this.cartDrawerToggleSubscription?.unsubscribe()}}shouldSkipCampaign(){let e=this.triggerContext.triggerData;if(!e.previewType&&t.ACTIVE_TRIGGER_DATA){let n={triggerShown:new Dn(t.ACTIVE_TRIGGER_DATA??{})};return this.skipTrigger(e,n),!0}if(pe.get().isGoKwikPopupOpen)return this.skipTrigger(e,{reason:"GoKwik popup is open"}),!0;let r=Em.find(n=>!!document.querySelector(n.identifier));return r?(this.skipTrigger(e,{reason:`${r.gateway} modal is open`}),!0):!1}startRendering(){this.calculateScalingFactor(this.ian),this.rootContainer=new Fs(this.parent,this.ian,this.triggerContext).render();try{this.renderContainer(this.triggerContext)}catch(e){throw w.error(e),e}}sendTriggerDisplayed(){let e={};this.triggerContext.triggerData.items?.length&&(e.promotedMIDs=this.triggerContext.triggerData.items?.map(i=>i.mID));let r=new Ie("CE Trigger Displayed",e,this.triggerContext.triggerData);this.eventAPIService.sendSilently(r);let n={action:"DISPLAYED"};document.dispatchEvent(new CustomEvent("letscooee:outbound:popup-activities",{detail:n}))}sendTriggerClosed(e){let r=e.eventName;delete e.eventName;let n=new Ie(r,e,this.triggerContext.triggerData);n.name==="CE Trigger Clicked"&&(n.items=this.triggerContext.selectedEmbeddedItems??this.triggerContext.triggerData.items?.map(i=>i.toEmbed())),this.eventAPIService.sendSilently(n)}addEnterAnimation(e){this.containerHTMLElement.animate(e.getEnterAnimation(),{duration:500})}renderElement(e,r,n){r instanceof Ji?new Dl(e,r,n).render():r instanceof Qi?new Nl(e,r,n).render():r instanceof Tn?new ks(e,r,n).render():r instanceof Zi?new Ol(e,r,n).render():r instanceof cn?new yi(e,r,n).render():r instanceof ei?new Us(e,r,n).render():r instanceof Ki?new Rl(e,r,n).render():r instanceof Xi?new Al(e,r,n).render():w.error("Unsupported element type- "+r.type)}renderContainer(e){let r=this.ian?.cont;r&&(this.containerHTMLElement=new Cl(this.rootContainer,r,e).render().getHTMLElement(),new Il().loadAllFonts(this.ian),this.ian.elems?.forEach(async n=>{await this.renderElement(this.containerHTMLElement,n,e)}),this.addEnterAnimation(this.ian.anim))}closeInApp(e){let r=this.ian.anim.getExitAnimation();this.sendTriggerClosed(e),t.ACTIVE_TRIGGER_DATA=void 0;let n=this.containerHTMLElement.animate(r,{duration:500,easing:"ease-in-out"});n.onfinish=()=>{this.removeInApp(),window.removeEventListener("resize",this.resizeListener)}}screenResized(){this.removeInApp(),this.startRendering()}removeInApp(){let e=document.querySelector(`.${this.triggerContext.rootClassName}`);e&&e.parentElement.removeChild(e)}skipTrigger(e,r){let n=new Ie("CE Campaign Rejected",r,e);this.eventAPIService.sendSilently(n)}async preloadImages(e){let r=e.ian;if(!r)return;let n=[];r.elems.forEach(i=>{let o=i.bg?.img?.src;if(o&&n.push(this.getPromise(o)),i.t===1){let s=i.src;if(!s)return;n.push(this.getPromise(s))}}),r.bg?.img?.src&&n.push(this.getPromise(r.bg.img.src)),r.cont.bg?.img?.src&&n.push(this.getPromise(r.cont.bg.img.src)),await Promise.all(n)}getPromise(e){return new Promise(r=>{let n=new Image;n.onload=r,n.src=e,n.style.display="none"})}};var xo=class{static trackDeviceID(e){this.isInstalled()}static trackIntent(e){if(!this.isInstalled())return;let r=gi[e]?.toLowerCase();r&&(w.verbose(`Sending ${r} intent to MS Clarity`),window.clarity("set","Cooee Intent",r))}static isInstalled(){return window.clarity&&typeof window.clarity=="function"}};var Pl=class{triggerData;eventAPIService=Re.getInstance();backendAPIService=Nt.getInstance();render(e){e.contentSource===Uo.KLAVIYO&&(this.triggerData=e,window.addEventListener("klaviyoForms",this.handleKlaviyoEvents.bind(this)),window._klOnsite=window._klOnsite||[],window._klOnsite.push(["openForm",e.klaviyoFormID]))}handleKlaviyoEvents(e){if(e.type!=="klaviyoForms")return;let r=e.detail;if(r.formId!==this.triggerData.klaviyoFormID){w.warn("Received invalid trigger callback");return}switch(r.type){case"open":this.eventAPIService.sendSilently(new Ie("CE Trigger Displayed",{form:{id:r.formId}},this.triggerData));break;case"stepSubmit":{let n=this.getFormDetails(r);this.eventAPIService.sendSilently(new Ie("CE Form Submitted",{form:n},this.triggerData)),this.backendAPIService.updateProfileSafe(n);break}case"close":window.removeEventListener("klaviyoForms",this.handleKlaviyoEvents.bind(this)),this.eventAPIService.sendSilently(new Ie("CE Trigger Closed",{form:{id:r.formId}},this.triggerData));break}}getFormDetails(e){let r={id:e.formId},n=e.metaData;if(rr.hasKeys(n)){let i=["email","phone_number","first_name","last_name","$email","$phone_number","$first_name","$last_name"];Object.keys(n).forEach(a=>{i.includes(a)||(r[a]=n[a])}),r.email=n.$email??n.email,r.mobile=n.$phone_number??n.phone_number;let o=n.$first_name??n.first_name,s=n.$last_name??n.last_name;(o?.length||s?.length)&&(r.name=o+" "+s)}return r}};var Ll=class{static trackIntent(e){if(!this.isInstalled()){w.verbose("Facebook pixel not installed");return}if(!Je.get().pixelPush){w.verbose("Facebook pixel push not enabled");return}let n=gi[e.intent]?.toLowerCase(),i=e.segmentName;!n&&!i||(w.verbose(`Sending ${n} intent and ${i} segment to Facebook Pixel`),window.fbq("trackCustom","CooeeIntent",{intent_value:n,segment_value:e.segmentName}))}static isInstalled(){return window.fbq&&typeof window.fbq=="function"}};var om=new Map,Ml=async t=>{for(let o of t.items)if(window.cooeeManipulateProduct)try{window.cooeeManipulateProduct(o,t)}catch(s){w.error(s)}if(t.isCartEmbed()&&!t.isSubscriptionUpsell()){let s=(await ye.getCurrent().getNormalisedCart()).items.map(a=>a.mID);t.items=t.items.filter(a=>!s.includes(a.mID))}if(Je.get().currencyCount<=1)return t.items;if(t.isShoppableVideo())return await p0(t.content.videoConfig,t),t.items;let e=t.items.length,r=t.items.map(o=>Xy(o,t)),i=(await Promise.all(r)).filter(o=>o!=null);if(e&&!i.length){let o="Failed to fetch any product from Ajax API",s=new Ie("CE Campaign Failed",{reason:o,currency:t.currency},t);throw le.get(Re).sendSilently(s),new Error(o)}if(t.isCartRecovery()){let o=ye.getCurrent().items,s=[];for(let a of i)for(let c of a.vars){if(!c.isAvailable)continue;let p=o.find(E=>E.variant_id.toString()===c.mID);if(!p)continue;let d=new At(a);d.name=p.title;let f=new Fr(c);f.name=p.variant_title,f.price.d=p.discounted_price/100,d.variants=[f],s.push(d)}return s}return i},p0=async(t,e)=>{await Promise.all(t.videos.map(async r=>{r.items=await Promise.all(r.items.map(async n=>{let i=await Xy(n,e);return i||n}))}))},Xy=async(t,e)=>{if(om.has(t.mID))return om.get(t.mID);let r,n=`/products/${t.slug}.js`;try{r=(await Zr(n)).data}catch(i){return we(i,"fetch-shopify-product",{extra:{item:t,path:n},engagementTrigger:e}),null}return r?f0(t,r):(w.error("Item not found after AJAX call for:",t),null)},f0=(t,e)=>{if(!t||!e)return t;t.name=e.title,t.tags=e.tags,t.slug=e.handle;let r=t.selectedOrFirstVariant.value;return t.vars.map(n=>{let i=e.variants.find(o=>o.id===+n.mID);i!=null&&(n.name=i.title,n.isAvailable=i.available,n.price.d=i.price?i.price/100:i.price,n.price.effective=n.price.d,n.price.cmp=i.compare_at_price?i.compare_at_price/100:i.compare_at_price,+r.mID===i.id&&(r.effectivePrice.value=n.price.d))}),om.set(t.mID,t),t};var Un=class{runtimeData=pe.get();backendAPIService=le.get(Nt);sessionManager=le.get(ct);constructor(){}async getAllContext(){let[e,r]=await Promise.all([Sl(),this.sessionManager.checkSessionAndGetContext()]);return _(_({},e),r)}};var Re=class t extends Un{static INSTANCE;constructor(){super()}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}sendSafe(e){w.verbose(`Waiting for auth to send event ${e.name}`),fr(ct.replaySubject).then(()=>this.sendSilently(e))}sendSilently(e){this.send(e).catch(r=>w.error(`Failed to send ${e.name}`,r))}async send(e){if(w.verbose(`Sending event: ${e.name}`,e),this.shouldReject(e)){w.warn(`Rejecting event ${e.name}`);return}this.addShopifyAttributes();let r=await this.getAllContext();Object.assign(e,r),e.name!=="CE App Background"&&this.runtimeData.setActive(),this.backendAPIService.post("/v1/event/track",e).then(async n=>{w.info("\u2705 Event tracked:",this.userFriendlyName(e.name)),this.processEventResponse(e,n.data)}).catch(n=>{w.error(`Error sending event ${e.name} to server`,n)})}userFriendlyName(e){return e.replace("CE ","").replace("Trigger","Engagement").replace("Screen","Page").replace("App ","")}shouldReject(e){return e.trigger?.triggerID==="test"||e.trigger?.triggerID==="preview"?(w.warn("Not sending event as this is a test trigger"),!0):!1}processEventResponse(e,r){this.renderWidgetIfAny(e,r).catch(n=>{we(n,"process-popup-response",{extra:{event:e,response:r}})}),this.utiliseIntentIfCalculated(r)}async renderWidgetIfAny(e,r){if(!r.triggerData)return;let n=new Tt(r.triggerData);n.occurred=e.occurred,w.log(`${n} will be shown`);let i;try{i=await Ml(n)}catch(o){w.error("Failed to refresh the products",o);return}if(n.items=i,n.contentSource===Uo.KLAVIYO){new Pl().render(n);return}new kn().renderEngagement(n).catch(o=>{we(o,"render-popup",{extra:{event:e},engagementTrigger:n})})}utiliseIntentIfCalculated(e){e.intent&&(xo.trackIntent(e.intent),Ll.trackIntent(e),w.info(`Intent is ${gi[e.intent]}`))}addShopifyAttributes(){ye.getCurrent().addCooeeAttributes().catch(e=>{w.error("Fail to add attributes in cart",e)})}};var vi=class t{static cartChange$=new jt;compareCartItemSubject=new jt;constructor(){this.compareCartItemSubject.pipe(mr(100)).subscribe(this.compareCartItems.bind(this))}listen(){this.compareCartItemSubject.next(),this.overwriteXMLHttpRequest(),this.overwriteFetchMethod()}overwriteXMLHttpRequest(){let e=this,r=window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.send=function(){return this.addEventListener("load",function(){e.performEvent(this._url).catch(n=>w.error("Unable to process cart change in XMLHttpRequest",n))}),r.apply(this,arguments)},w.verbose("Securely overwritten window.XMLHttpRequest.send method")}overwriteFetchMethod(){let e=this,r=window.fetch;window.fetch=function(n){return r.apply(window,arguments).then(i=>(e.performEvent(n.toString()).catch(o=>w.error("Unable to process cart change in fetch",o)),i))},w.verbose("Securely overwritten window.fetch method")}async performEvent(e){this.isCartManipulationURL(e)&&(pe.get().isCartDirty=!0,this.compareCartItemSubject.next())}isCartManipulationURL(e){return/\/cart\/(add|change|update|clear)/.test(e)}sendChangesAsEvents(e,r){let n=e?.items,i=r.items,o=[],s=[];if(w.verbose(`Comparing cart change with old count ${n?.length} to new count ${i.length}`),i?.forEach(a=>{let c=n?.find(p=>p.vID===a.vID);if(c){if(c.quantity!==a.quantity){let p=c.quantity<a.quantity,d=Math.abs(c.quantity-a.quantity),f=Z(_({},a),{quantity:d});p?o.push(f):s.push(f)}n&&Ch(n,c)}else o.push(a)}),n)for(let a of n)s.push(a);w.verbose(`Cart delta: added: ${o.length}, removed: ${s.length}`),o.length&&this.sendEvent("Add To Cart",{items:o}),s.length&&e.token===r.token&&this.sendEvent("Remove From Cart",{items:s}),(s.length||o.length)&&t.cartChange$.next({itemsAdded:o,itemsRemoved:s})}sendEvent(e,r){let n=new Ie(e,r);le.get(Re).sendSafe(n)}async compareCartItems(){let e=await Ke.get("cart",{}),r=await ye.getCurrent().getNormalisedCart(!0);this.sendChangesAsEvents(e,r)}};var rt=class t{static cartDrawerToggle$=new xs({open:!1,firstOpen:!1});static DEFAULT_SELECTOR="cart-drawer";static _instance;inShadow=!1;cartDrawerElement;cartDrawerShadowElement;configWebsite=Je.get().website??{};currentState=!1;mutationSubscription;mutationObserver;firstOpen=!0;selector;shadowParentElementSelector;clickEventListener;refreshUIEventListener;iconSelector=['button[drawer-to-open="cart-drawer"]','a[href="/cart"]',".header__icon--cart","#cart-icon-bubble",".cart-icon-bubble",".cart-count",'a[onclick*="handleFloCartBtn"]'].join(",");cartSelector=[t.DEFAULT_SELECTOR,"#halo-cart-sidebar",'[role="dialog"][class*="cart" i]','[id*="section-cart" i]',"#sidebar-cart","#rebuy-cart","#mini-cart","#flo-cart-wrapper","#drawer-cart","#UpcartPopupBackDrop",'[id$="CartDrawer" i]'].join(",");constructor(){this.initialize(),this.refreshUIEventListener=this.updateBubble.bind(this),this.clickEventListener=this.manualCartIconClicked.bind(this),document.addEventListener("letscooee:outbound:refresh-ui",this.refreshUIEventListener),document.addEventListener("click",this.clickEventListener,{capture:!0,passive:!0})}get element(){return this.cartDrawerElement}static get(){return t._instance||(t._instance=new t),t._instance}static forceUpdate(){t._instance?.destroy(),t._instance=new t}isOpen(){let e=this.inShadow?this.isPresent():Ky(this.cartDrawerElement);return w.info(`Cart drawer is currently ${e?"open":"close"}`),e}open(){if(this.isOpen()){w.log("Drawer is already open");return}document.dispatchEvent(new CustomEvent("letscooee:outbound:open-cart"));let e=document.querySelector(this.iconSelector);if(!e){w.verbose("No clickable cart icon found with selector",this.iconSelector);return}e.click()}isShopifyDefaultDrawer(){return this.element?.tagName.toLowerCase()===t.DEFAULT_SELECTOR}isMiniCart(){return this.isShopifyDefaultDrawer()&&this.element?.id==="mini-cart"}refreshUI(e,r=!0){if(window.cooeeUpdateCartDrawer)try{window.cooeeUpdateCartDrawer(e)}catch(n){we(n,"execute-cooeeUpdateCartDrawer")}else if(this.isMiniCart()&&this.element?._rerenderCart)this.element._rerenderCart({detail:{cart:e}});else if(window.MinimogTheme?.Cart?.renderNewCart)window.MinimogTheme.Cart.renderNewCart();else if(this.isShopifyDefaultDrawer()&&this.element?.renderContents&&e)this.element.classList.remove("is-empty"),this.element.renderContents?.(e);else if(this.element?.onCartDrawerUpdate)this.element.onCartDrawerUpdate();else if(window.cartGiftUpdate){if(!e?.items?.[0])return;let n=e.items[0].id,i=e.items[0].quantity,o=e.items[0].price;window.cartGiftUpdate(n,o,i,"","ADD_TO_CART")}else if(window.icartCartActivityEvent)window.icartCartActivityEvent();else if(window.theme?.CartDrawer&&typeof window.theme?.CartDrawer=="function")window.theme?.CartDrawer.init?new window.theme.CartDrawer().init():new window.theme.CartDrawer;else if(window.Hs_CartDrawer?.updateSlideCart)window.Hs_CartDrawer.updateSlideCart();else if(window.theme?.fetch_side_cart)window.theme.fetch_side_cart();else if(window.theme?.Cart?.updateCart)window.theme.Cart.updateCart();else if(window.cartUpdate)window.cartUpdate();else if(this.element?._onCartRefresh)this.element._onCartRefresh();else if(window.cart?.getCart)window.cart.getCart();else if(this.element?.tagName?.toLowerCase()==="cart-drawer-component")document.dispatchEvent(new CustomEvent("action:cart:updateCartandShowCart"));else if(this.element?.id==="sidebar-cart")document.body.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0,detail:{}}));else if(this.element?.id==="quick-cart"){let n=document.querySelector('a[href="/cart"]');n&&n.click()}else window.Shopify?.KT_onItemAdded?window.Shopify.KT_onItemAdded():window.sideCart?.updateCart?window.sideCart.updateCart():window.SLIDECART_UPDATE?(window.SLIDECART_UPDATE(),window.SLIDECART_OPEN?.()):window.refreshCart?ye.getCurrent().getNormalisedCart(!0).then(()=>{window.refreshCart(ye.getCurrent())}):window.OPEN_CART?window.OPEN_CART():window.updateCart?window.updateCart():window.sjRefreshCart?window.sjRefreshCart():window.CartJS?.getCart?window.CartJS?.getCart():window.updateCartItemJS?window.updateCartItemJS(1,e?.items?.[0]?.id+""):(w.info("No method found to update the cart drawer. Blindly firing some events to try"),document.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0})));document.dispatchEvent(new CustomEvent("letscooee:outbound:refresh-ui",{detail:{responseJSON:e,currentCart:ye.getCurrent()}})),r&&vi.cartChange$.next({})}async initialize(){let e=this.configWebsite.cartDrawerSelector;if(!e){await this.findCartDrawer();return}let r=e.split(":shadow");r.length===1?(this.selector=r[0],await this.findCartDrawer()):(this.inShadow=!0,this.shadowParentElementSelector=r[0]?.trim(),this.selector=r[1]?.trim(),await this.findCartDrawerWithShadow())}async findCartDrawer(){if(!ls())return;let e=this.selector||this.cartSelector;if(this.cartDrawerElement=await Hi(e),!this.cartDrawerElement){Jy.default.warn("Max attempts exhausted to find cart drawer");return}w.verbose("Found",this.cartDrawerElement,`from selector: ${e}`),this.createMutationObservers()}async findCartDrawerWithShadow(){if(!this.shadowParentElementSelector)return;let r=(await Hi(this.shadowParentElementSelector))?.shadowRoot;r?.mode==="open"&&(this.cartDrawerShadowElement=r,this.createMutationObservers())}createMutationObservers(){!this.cartDrawerElement&&!this.cartDrawerShadowElement||this.watchForCartToggle()}watchForCartToggle(){let e=this.cartDrawerElement||this.cartDrawerShadowElement,r=new jt;this.mutationObserver=new MutationObserver(()=>{r.next()}),this.mutationObserver.observe(e,{attributes:!0,subtree:!0,childList:this.inShadow}),this.mutationSubscription=r.pipe(tm(800,void 0,{leading:!1,trailing:!0})).subscribe(()=>{let n=this.isOpen();this.currentState!==n&&(this.currentState=n,t.cartDrawerToggle$.next({open:n,firstOpen:this.firstOpen}),this.firstOpen&&(this.firstOpen=!1))})}isPresent(){return!this.selector||!this.cartDrawerShadowElement?!1:!!this.cartDrawerShadowElement.querySelector(this.selector)}async updateBubble(){let e=(await ye.getCurrent().getNormalisedCart(!0)).itemCount,r=document.querySelector(".cart-link__bubble");r&&(r.innerText=e+"")}manualCartIconClicked(e){!e.target.closest(this.iconSelector)||!e.isTrusted||window.CooeeSDK.events.push(["Open Cart"])}destroy(){document.removeEventListener("letscooee:outbound:refresh-ui",this.refreshUIEventListener),document.removeEventListener("click",this.clickEventListener,{capture:!0}),this.mutationSubscription?.unsubscribe(),this.mutationObserver?.disconnect()}};var Bl=class{static processConfiguration(){let e=Je.get();!e.gaMeasurementID||!e.gaEnabled||this.sendClientID()}static async sendClientID(){let e=await this.getClientID();e&&Nt.getInstance().updateDevicePropsSafe({gaClientID:e})}static async getClientID(){let e=await Ke.get("gacid"),r=await this.getClientIDViaGTag();if(e!==r)return await Ke.set("gacid",r),r}static async getClientIDViaGTag(){let r=Je.get().gaMeasurementID;if(!(!r||!window.gtag))return new Promise(n=>{window.gtag("get",r,"client_id",i=>{n(i)})})}};var m0=t=>t,Qy=t=>t.filter(e=>e.removedNodes&&e.removedNodes.length>0);function Zy(t,e={childList:!0,subtree:!0},r=500,n=m0){return bl(i=>{let o=new MutationObserver(s=>i(s));return o.observe(t,e),o},(i,o)=>o.disconnect()).pipe(fn(i=>n(i)),So(i=>i.length>0),mr(r))}var Fe=class extends kr{stylesConverter=new Io(1);mediaStyle={};deviceTypeKey;clickExecutor;componentWillMount(){this.deviceTypeKey=Cr()?"sm":"lg",this.clickExecutor=new mn(this.props.triggerContext)}getCompiledStyles(){return this.putStyleAccordingToDevice(),_(_(Z(_(_(_(_(_(_({},this.stylesConverter.getFlexStyles(this.mediaStyle.flex)),this.stylesConverter.getBackgroundStyles(this.mediaStyle.bg)),this.stylesConverter.getBorderStyles(this.mediaStyle.br)),this.stylesConverter.getSizeStyles(this.mediaStyle.size)),this.stylesConverter.getSpaceStyles(this.mediaStyle.spc)),this.stylesConverter.getLayoutStyles(this.mediaStyle.lout)),{boxSizing:"border-box",outline:"none"}),this.getComponentStyles()),this.props.style)}matchWhenCondition(e){if(!e?.op)return!0;let{lhs:r,rhs:n}=e;switch(e.op){case"eq":return r===n;case"gt":return+r>+n;case"gte":return+r>=+n;case"lt":return+r<+n;case"lte":return+r<=+n;case"ne":return r!==n;case"null":return r==null;case"empty":return r.trim()==="";case"in":return new RegExp(`\\b${n}\\b`).test(r);case"nin":return!new RegExp(`\\b${n}\\b`).test(r);default:return w.error(`Invalid operator found for when condition - ${e.op}`),!1}}putStyleAccordingToDevice(){let e=this.props.element;this.mediaStyle=e.style.lg,Cr()&&e.style.sm&&Object.keys(e.style.sm).length&&(this.mediaStyle=_(_({},this.mediaStyle),e.style.sm))}sendTriggerClicked(e,r){this.clickExecutor.sendTriggerClicked(e,r)}async onClick(e,r){e.stopPropagation(),!r.clickAction&&(r.clickAction=this.props.element.clc),await this.clickExecutor.execute(r)}};var d0=0,R3=Array.isArray;function K(t,e,r,n,i,o){e||(e={});var s,a,c=e;if("ref"in c)for(a in c={},e)a=="ref"?s=e[a]:c[a]=e[a];var p={type:t,props:c,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--d0,__i:-1,__u:0,__source:i,__self:o};if(typeof t=="function"&&(s=t.defaultProps))for(a in s)c[a]===void 0&&(c[a]=s[a]);return xe.vnode&&xe.vnode(p),p}var Qt=class extends Fe{componentDidMount(){this.setState(()=>({text:this.props.element.text})),It(this.onChange.bind(this))}componentWillReceiveProps(e){this.props.element=e.element,this.onChange()}render(){let e=this.getCompiledStyles(),r=this.state.text;return r||(e.display="none",r=""),K("div",{style:e,onClick:this.customOnClick.bind(this),className:"lc-text",children:K("span",{style:this.getSpanStyle(),dangerouslySetInnerHTML:{__html:r}})})}customOnClick(){this.props.onClick&&this.props.onClick("title")}onChange(){if(this.props.element.text==null)return;let e=this.props.triggerContext.triggerData,r={bundle:e.discountData.value,customer:e.customerData,cart:e.getCartMagicVariables()},n=Zn(this.props.element,r,this.props.triggerContext),i=new vt(n);if(!this.matchWhenCondition(i.when)){this.setState(()=>({text:""}));return}this.setState(()=>({text:i.text}))}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.letterSpacing=r.letterSpacing,e.fontSize=r.fs+"px",e.lineHeight=r.lh,e.fontFamily=r.fam.name||"inherit",e.textAlign=r.alignment,e.fontWeight=r.fw,e.textDecoration=r.td??"none",this.stylesConverter.getColourStyles(r.tc,"color",e),e}getComponentStyles(){return _({},this.getTypoStyles())}getSpanStyle(){return{overflow:"hidden",display:"-webkit-box",webkitBoxOrient:"vertical",webkitLineClamp:2,color:"inherit",fontSize:"inherit",fontWeight:"inherit",fontFamily:"inherit"}}};var Ei=class extends Qt{render(){return K("div",{style:this.getCompiledStyles(),className:"lc-button",onClick:e=>this.onClick(e,{item:this.props.item}),children:K("span",{style:this.getSpanStyle(),dangerouslySetInnerHTML:{__html:this.state.text}})})}getComponentStyles(){return Z(_({},super.getComponentStyles()),{cursor:"pointer"})}};var sm=class extends kr{render(){if(this.props.element.show[this.props.label.toLowerCase()])return this.props.element.lblPos==="end"?K("div",{style:_(_({},this.getElementStyle()),this.props.styles),children:[K("span",{children:this.props.time}),K("span",{style:this.getTimeLabelStyle(),children:this.props.label})]}):K("div",{style:_(_({},this.getElementStyle()),this.props.styles),children:[K("span",{style:this.getTimeLabelStyle(),children:this.props.label}),K("span",{children:this.props.time})]})}getDesign(){}getTimeLabelStyle(){return{fontSize:"0.5em",alignContent:"center"}}getElementStyle(){let e={display:"flex",flexDirection:"column",placeContent:"center center",textAlign:"center"};return this.props.element.horizontal&&(e.gridTemplateColumns="repeat(2, minmax(0, 1fr))"),e}},Hs=class extends Qt{labels={Days:"00",Hours:"00",Minutes:"00",Seconds:"00"};componentWillMount(){super.componentWillMount(),this.setState(()=>_({},this.labels)),this.processAndStartTimer()}render(){return K("div",{style:this.getLabelsParentStyle(),children:Object.keys(this.labels).map(e=>K(sm,{styles:this.getCompiledStyles(),label:e,time:this.state[e],element:this.props.element}))})}getLabelsParentStyle(){return{display:"grid",justifyContent:"center",gridTemplateColumns:"repeat(4, auto)",gap:this.stylesConverter.getSizePx(this.props.element.gap)}}getDisplayStyles(){return{display:"grid",placeContent:"center center"}}getComponentStyles(){return _(_({},super.getComponentStyles()),this.getDisplayStyles())}processAndStartTimer(){this.props.element.timer.start(this.props.element.timerType,e=>{this.labels.Days=String(e.days).padStart(2,"0"),this.labels.Hours=String(e.hours).padStart(2,"0"),this.labels.Minutes=String(e.minutes).padStart(2,"0"),this.labels.Seconds=String(e.seconds).padStart(2,"0"),this.setState(()=>_({},this.labels))})}};function kl(t,e){if(!t)return;let r=new window.CooeeSDK.Swiper(t,{loop:!0,slidesPerView:e.maxInRow,spaceBetween:e.gap+"px",pagination:{type:e.pagination.type,el:t.querySelector(".swiper-pagination"),clickable:!0,renderBullet:(n,i)=>`
|
|
68
|
+
`,Bn=class{async addToCart(e,r){if(!e.length)return;let i={items:e.map(s=>{let{vID:a,quantity:c}=this.getVIDAndQuantity(s);return{id:a?+a:+s.mID,quantity:c,properties:r.getPrivateAttributesForLineItem()}})},o=rt.get();if(window.cooeeGetCartSections&&typeof window.cooeeGetCartSections=="function")try{i.sections_url=window.location.pathname,i.sections=window.cooeeGetCartSections()}catch(s){we(s,"execute-cooeeGetCartSections",{engagementTrigger:r})}else o.isMiniCart()?i.sections=["mini-cart"]:o.isShopifyDefaultDrawer()&&(i.sections=o.element.getSectionsToRender?.().map((s=>s.section??s.id)));try{let s=await Yi("/cart/add.js",i,"cart-item-add",r);return w.log(`Added ${e.length} items to Cart`),Sr("Product added to your cart"),s.data}catch(s){let a=["Failed to add product in cart."];if(s instanceof Wn&&s.is40x()&&s.responseText){let c=s.responseText;c.description&&a.push(`Reason: ${c.description}`)}a.push("Please try again later."),Sr(a.join(" "))}}async updateLineItem(e,r){if(!rr.hasKeys(r)){w.warn("No update fields provided");return}let n=_({id:e.key},r);try{let i=await Yi("/cart/change.js",n,"cart-item-update");w.log(`Updated ${e}`),ye.getCurrent().update(i.data)}catch{Sr("Failed to update item in cart")}}async copyDiscountCode(e){if(e)try{await navigator.clipboard.writeText(e),w.log(`Code-${e} copied`),Sr("Discount code copied")}catch(r){w.error("Failed to copy code",r)}}getProductURL(e){if(!e?.link)return;let r=fg(e.link);if(r)return zi("/products/"+r)}async upgradeToSubscription(e,r){if(!e){w.warn("Trying to upgrade to subscription with no item");return}let n=await ye.getCurrent().getNormalisedCart(),i=e.selectedOrFirstVariant.value,o=n.items.findIndex(c=>c.vID===i.mID),s=i.selectedSellingPlan.value,a={line:o+1,selling_plan:s?.mID||null,properties:r.getPrivateAttributesForLineItem()};try{let c=await Yi("/cart/change.js",a,"cart-switch-subscription",r);return w.log(`Upgraded ${e} selling plan`),Sr("Line item updated"),ye.getCurrent().update(c.data),c.data}catch{Sr("Failed to update subscription")}}async createNewCart(e,r,n){if(!e?.vID){w.error("No variant ID found to perform Buy now",e);return}let i=r?[r]:[],o=[{merchandiseId:`gid://shopify/ProductVariant/${e.vID}`,quantity:1,attributes:n.getKVFormatPrivateAttributesForLineItem()}],s=await Qa("Buy Now");return(await mc(l0,{input:{lines:o,discountCodes:i,attributes:s}},"storefront-create-cart")).data.data?.cartCreate?.cart?.checkoutUrl}async process(e){let r=e.clickAction,n=e.items,i=e.triggerData,o;if(r.at){let s=r;if(w.log(`Performing ${JSON.stringify(s)} action`),s.at===be.GO_TO_PRODUCT)o=this.getProductURL(n[0]);else if(s.at===be.ADD_TO_CART)n?.length&&await this.addToCart(n,i);else if(s.at===be.COPY_COUPON_CODE)await this.copyDiscountCode(i.discount?.code);else if(s.at===be.OPEN_CART)rt.get().open();else if(s.at===be.GO_TO_COLLECTION){let a=e.collections;if(!a?.length)return;o=zi("/collections/"+a[0].handle)}}r.applyDiscount&&i.discount?.code?zr.navigate(i.discount.code,i.redirectBehaviour,o):o&&(location.pathname=o)}getVIDAndQuantity(e){let r,n;if(e instanceof Ct)r=e.vID,n=e.quantity??1;else{if(!e.vars?.length)return{};r=e.selectedOrFirstVariant.value.mID,n=1}return{vID:r,quantity:n}}};var Tl=class{static updateIdentity(e){if(!this.isInstalled())return;let r={};e.email&&(r.email=e.email),e.mobile&&(r.phone_number=e.mobile),w.verbose("Sending email/mobile to Klaviyo"),window.klaviyo.push(["identify",r])}static isInstalled(){return window.klaviyo&&typeof window.klaviyo=="object"}};var xl=class{action;triggerContext;constructor(e,r){this.action=e,this.triggerContext=r}async execute(){let e=this.containsCTA()?"CE Trigger Clicked":"CE Trigger Closed";switch(this.action.at!==be.SUBMIT_FORM&&await this.closeTriggerAndSendEvent(e),this.action.at){case be.ACCEPT_POPUP:break;case be.GO_TO_URL:this.gotoURLAction();break;case be.SHARE:this.shareAction();break;case be.SUBMIT_FORM:await this.collectFormData();break;case void 0:case be.OPEN_CART:break;default:w.error("Received an invalid ClickActionType: ",this.action.at);return}}externalAction(){this.action.ext?.u&&window.open(this.action.ext.u,"_blank")?.focus()}gotoURLAction(){if(this.action.gu?.u){let e=this.action.gu.u;Ui(e)||(e=`//${e}`),window.open(e,"_self")}}async closeTriggerAndSendEvent(e,r){this.triggerContext.closeInApp(e,r),await this.dispatchEvent()}shareAction(){if(!this.action.share)return;if(!navigator.share){w.warn("Navigator.share is not compatible with this browser");return}navigator.share({text:this.action.share.text,title:"Share"}).then(r=>console.log(r)).catch(r=>console.error(r))}containsCTA(){return this.action.at&&this.action.at!==be.REJECT_POPUP?!0:!(this.isEmpty(this.action.custKV)&&this.isEmpty(this.action.up))}isEmpty(e){return e?Object.keys(e).length===0:!0}async collectFormData(){let e={};for(let r of this.triggerContext.inputs){if(!r.isValid)return;let i=document.getElementById(r.id).value;r.type===51?e.email=i:r.type===52&&(e.mobile=i)}await this.closeTriggerAndSendEvent("CE Form Submitted",{form:e}),this.action.applyDiscount&&Sr("Coupon applied on cart"),Tl.updateIdentity(e)}async dispatchEvent(){let e=this.triggerContext.triggerData,r={clickAction:this.action,items:this.triggerContext.selectedEmbeddedItems??e.embeddedItems??e.items,collections:e.collections,triggerData:e};await new Bn().process(r);let n={action:this.containsCTA()?"CLICKED":"CLOSED"};document.dispatchEvent(new CustomEvent("letscooee:outbound:popup-activities",{detail:n}))}};var dr=class{renderer=kn.get();parentHTMLEl;inappElement;inappHTMLEl;triggerContext;stylesConverter;scalingFactor;constructor(e,r,n){this.parentHTMLEl=e,this.inappElement=r,this.triggerContext=n,this.stylesConverter=new Io(this.renderer.getScalingFactor())}getHTMLElement(){return this.inappHTMLEl}insertElement(){this.parentHTMLEl.appendChild(this.inappHTMLEl)}processCommonBlocks(){this.processWidthAndHeight(),this.processPositionBlock(),this.processTransformBlock(),this.processTransparency(),this.processShadow(),this.registerAction();let e=Z(_(_(_(_({},this.getDisplayStyles()),this.getSpaceStyles()),this.getBorderStyles()),this.getBackgroundStyles()),{boxSizing:"border-box",outline:"none"});hi(this.inappHTMLEl,e)}getDisplayStyles(){return{display:"block"}}processWidthAndHeight(){this.inappElement.w&&re(this.inappHTMLEl,"width",this.stylesConverter.getSizePx(this.inappElement.w)),this.inappElement.h&&re(this.inappHTMLEl,"height",this.stylesConverter.getSizePx(this.inappElement.h))}processPositionBlock(){let e={position:"absolute",left:this.stylesConverter.getSizePx(this.inappElement.x),top:this.stylesConverter.getSizePx(this.inappElement.y)};hi(this.inappHTMLEl,e)}getBorderStyles(){return this.stylesConverter.getBorderStyles(this.inappElement.br)}getSpaceStyles(){return this.stylesConverter.getSpaceStyles(this.inappElement.spc)}processTransparency(){let e=this.inappElement.alpha;if(!isNaN(e)){let r=(e/100).toFixed(2);re(this.inappHTMLEl,"opacity",r)}}processShadow(){let e=this.inappElement.shd;e?re(this.inappHTMLEl,"box-shadow",e.getStyle(this.scalingFactor)):re(this.inappHTMLEl,"box-shadow","unset")}processTransformBlock(){let e=new Vn(this.inappElement.trf);e&&e.rotate&&re(this.inappHTMLEl,"transform",`rotate(${e.rotate}deg)`)}registerAction(){let e=this.inappElement.clc;!e||Object.keys(e).length===0||(this.inappHTMLEl.addEventListener("click",r=>{r.stopPropagation(),new xl(e,this.triggerContext).execute()}),re(this.inappHTMLEl,"cursor","pointer"))}getBackgroundStyles(){return this.stylesConverter.getBackgroundStyles(this.inappElement.bg)}};var Yr=class extends dr{constructor(e,r,n){super(e,r,n)}processCommonBlocks(){super.processCommonBlocks(),this.processFontBlock(),this.processAlignment()}processFontBlock(){let e={},r=this.inappElement.typography;return r&&(e.fontSize=this.stylesConverter.getSizePx(r.fs),e.fontFamily="cooee"+r.fam?.name,e.lineHeight=`${r.lh}`,e.letterSpacing=r.letterSpacing),this.stylesConverter.getColourStyles(this.inappElement.color,"color",e),hi(this.inappHTMLEl,e),e}processPart(e,r){let n=[];r.u&&n.push("underline"),r.st&&n.push("line-through"),n.length||n.push("normal"),re(e,"font-weight",r.b?"bold":"normal"),re(e,"font-style",r.i?"italic":"normal"),re(e,"text-decoration",n.join(" ")),re(e,"color",r.c??"inherit"),re(e,"font-family","inherit")}processAlignment(){let e=this.inappElement.typography.ta,r=e?xi[e]?.toLowerCase():this.inappElement.typography.alignment;r||(r="start"),re(this.inappHTMLEl,"text-align",r)}};var ks=class extends Yr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){this.inappElement.parts?.forEach(e=>{let r=document.createElement("span");r.innerHTML=e.txt?.toString()?.replace(/\n/g,"<br />"),this.processPart(r,e),this.inappHTMLEl.appendChild(r)}),this.processCommonBlocks()}};var Us=class extends dr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){this.processCommonBlocks()}};var yi=class extends dr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("img"),this.insertElement()}render(){this.inappHTMLEl.setAttribute("src",this.inappElement.src),re(this.inappHTMLEl,"max-width","none"),re(this.inappHTMLEl,"max-height","none"),re(this.inappHTMLEl,"margin","0 auto"),this.processCommonBlocks()}};var Fs=class t extends dr{constructor(r,n,i){super(r,n,i);this.parent=r;this.inappHTMLEl=document.createElement("div")}static MAX_Z_INDEX="2147483647";render(){return this.parent||this.renderer.removeInApp(),this.insertElement(),this.processCommonBlocks(),this.inappHTMLEl.classList.add("cooee-wrapper"),this.inappHTMLEl.classList.add(this.triggerContext.rootClassName),re(this.inappHTMLEl,"z-index",t.MAX_Z_INDEX),this.inappHTMLEl}getBackgroundStyles(){return this.inappElement.cover?super.getBackgroundStyles():{}}processWidthAndHeight(){let r=this.inappElement.cont;if(this.inappElement.cover)this.renderer.isParentNotBody()?(re(this.inappHTMLEl,"width","100%"),re(this.inappHTMLEl,"height","100%")):(re(this.inappHTMLEl,"width","100vw"),re(this.inappHTMLEl,"height","100vh")),re(this.inappHTMLEl,"top","0"),re(this.inappHTMLEl,"left","0");else{let n=this.inappElement.spc,i=this.stylesConverter.getScaledSize(r.w)+n.getHorizontal(),o=this.stylesConverter.getScaledSize(r.h)+n.getVertical();re(this.inappHTMLEl,"width",i+"px"),re(this.inappHTMLEl,"height",o+"px")}}getSpaceStyles(){return{padding:this.inappElement.spc.getPaddingCSS()}}getDisplayStyles(){return _(_({display:"flex"},this.inappElement.getStylesForWrapper()),this.inappElement.getFlexStylesForContainer())}processPositionBlock(){this.renderer.isParentNotBody()?re(this.inappHTMLEl,"position","absolute"):re(this.inappHTMLEl,"position","fixed")}getBorderStyles(){return{}}processTransparency(){}processTransformBlock(){}processShadow(){}};var u0="cooee-container",Cl=class extends dr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){return this.processCommonBlocks(),re(this.inappHTMLEl,"position","relative"),re(this.inappHTMLEl,"overflow","hidden"),this.inappHTMLEl.classList.add(u0),this}};var Rl=class t extends Yr{static DAYS="Days";static HOURS="Hours";static MINUTES="Minutes";static SECONDS="Seconds";elements;spans=[];constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("div"),this.insertElement()}render(){this.addTimerChildren(),this.processAndStartTimer(),this.processCommonBlocks();let e=Z(_(_(_({flex:"1 1 0"},this.stylesConverter.getBackgroundStyles(this.inappElement.bg)),this.stylesConverter.getBorderStyles(this.inappElement.br)),this.stylesConverter.getSpaceStyles(this.inappElement.spc)),{marginLeft:this.stylesConverter.getSizePx(this.inappElement.gap),marginRight:this.stylesConverter.getSizePx(this.inappElement.gap)});this.addStylesToTimer(e)}getBackgroundStyles(){return{}}processFontBlock(){let e=super.processFontBlock();return this.stylesConverter.getColourStyles(this.inappElement.color,"color",e),this.addStylesToTimer(e),e}getSpaceStyles(){return{}}getBorderStyles(){return{}}getDisplayStyles(){return{display:"flex",flexWrap:"nowrap",justifyContent:"center"}}addStylesToTimer(e){this.elements.forEach(r=>hi(r,e))}addTimerChildren(){let e=this.inappElement.show;this.elements=[],e.day&&this.elements.push(this.getChild(t.DAYS)),e.hour&&this.elements.push(this.getChild(t.HOURS)),e.minute&&this.elements.push(this.getChild(t.MINUTES)),e.second&&this.elements.push(this.getChild(t.SECONDS)),this.elements.forEach(r=>this.inappHTMLEl.appendChild(r))}getChild(e){let r=document.createElement("div"),n=document.createElement("span"),i=document.createElement("span");return i.innerText=e,n.innerText="00",n.id=`lc-${e}`,re(i,"font-size","0.5em"),re(i,"text-align","center"),re(i,"font-family","inherit"),re(n,"text-align","center"),re(n,"font-family","inherit"),this.inappElement.lblPos==="start"?(r.appendChild(i),r.appendChild(n)):(r.appendChild(n),r.appendChild(i)),re(r,"display","flex"),re(r,"flex-direction",this.inappElement.horizontal?"":"column"),re(r,"justify-content","center"),re(r,"align-items","center"),re(r,"gap","5px"),this.spans.push(n),r}processAndStartTimer(){let e=this.inappElement.timer.start(this.inappElement.timerType,r=>{this.spans.forEach(n=>{n.id===`lc-${t.DAYS}`?n.innerText=String(r.days).padStart(2,"0"):n.id===`lc-${t.HOURS}`?n.innerText=String(r.hours).padStart(2,"0"):n.id===`lc-${t.MINUTES}`?n.innerText=String(r.minutes).padStart(2,"0"):n.id===`lc-${t.SECONDS}`&&(n.innerText=String(r.seconds).padStart(2,"0"))})});this.triggerContext.intervals.push(e)}};var Al=class extends Yr{constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("select"),this.insertElement()}render(){re(this.inappHTMLEl,"background","#ffffff00"),re(this.inappHTMLEl,"outline","none"),this.processCommonBlocks(),this.addListener(this.inappHTMLEl),this.addOptions()}addListener(e){this.triggerContext.selectedEmbeddedItems?.length||this.updateItems(this.triggerContext.triggerData.items[0].vars[0]),e.addEventListener("click",r=>{r.stopPropagation()}),e.addEventListener("change",()=>{let r=new Fr(JSON.parse(e.value));this.updateItems(r)})}updateItems(e){let r=this.triggerContext.triggerData.items[0];this.triggerContext.selectedEmbeddedItems=[r.toEmbed(e)];let n=this.parentHTMLEl.querySelector("#coo-13");if(!n)return;let i=e.imgs[0]??r.imgs?.at(0);i?.url&&n.setAttribute("src",i.url)}addOptions(){let e=this.triggerContext.triggerData.items,r=this.inappHTMLEl;if(!e?.length){r.add(this.createOption(this.inappElement.placeholderText));return}let n=this.triggerContext.selectedEmbeddedItems?.at(0);e[0].vars.forEach(i=>{r.add(this.createOption(i.name??"Default",i,i.mID===n?.vID))})}createOption(e,r,n){let i=document.createElement("option");return i.text=e,i.value=JSON.stringify(r),n&&(i.selected=!0),r||(i.disabled=!0),i}};var To=class extends Yr{borderColor="";constructor(e,r,n){super(e,r,n),this.inappHTMLEl=document.createElement("input"),this.insertElement()}render(){let e=this.setInputType();this.inappHTMLEl.setAttribute("placeholder",this.inappElement.placeholderText),re(this.inappHTMLEl,"background","#ffffff00"),re(this.inappHTMLEl,"outline","none"),this.inappHTMLEl.addEventListener("click",r=>{r.stopPropagation()}),this.processCommonBlocks(),this.addListener(this.inappHTMLEl,e),this.triggerContext.addInputField(e,this.inappElement.t)}};var Dl=class t extends To{static EMAIL_REGEX=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;constructor(e,r,n){super(e,r,n)}setInputType(){let e=`coo-${this.inappElement.t}`;return this.inappHTMLEl.setAttribute("type","email"),this.inappHTMLEl.setAttribute("id",e),e}addListener(e,r){e.addEventListener("keydown",n=>{this.borderColor||(this.borderColor=this.inappHTMLEl.style.borderColor),e.value.match(t.EMAIL_REGEX)?(re(this.inappHTMLEl,"border-color",this.borderColor),this.triggerContext.updateValidation(r,!0)):(re(this.inappHTMLEl,"border-color","red"),this.triggerContext.updateValidation(r,!1)),n.stopPropagation()})}};var Nl=class t extends To{static MOBILE_REGEX=/^\d+$/;constructor(e,r,n){super(e,r,n)}setInputType(){let e=`coo-${this.inappElement.t}`;return this.inappHTMLEl.setAttribute("type","tel"),this.inappHTMLEl.setAttribute("id",e),e}addListener(e,r){e.addEventListener("keydown",n=>{this.borderColor||(this.borderColor=this.inappHTMLEl.style.borderColor),e.value.match(t.MOBILE_REGEX)?(re(this.inappHTMLEl,"border-color",this.borderColor),this.triggerContext.updateValidation(r,!0)):(re(this.inappHTMLEl,"border-color","red"),this.triggerContext.updateValidation(r,!1)),n.stopPropagation()})}};var Ol=class extends yi{constructor(e,r,n){super(e,r,n)}render(){super.render(),this.inappHTMLEl.setAttribute("id",`coo-${this.inappElement.type}`)}};var kn=class t{static DOCUMENT_STANDARD_MODE="CSS1Compat";static ACTIVE_TRIGGER_DATA;static _instance;eventAPIService;parent;rootContainer;containerHTMLElement;ian;scalingFactor=1;triggerContext;resizeListener;cartDrawerToggleSubscription;constructor(e){this.eventAPIService=Re.getInstance(),this.resizeListener=()=>this.screenResized(),this.setParentContainer(e)}static get(){return t._instance}render(e){this.renderEngagement(new Tt(e))}getScalingFactor(){return this.scalingFactor}calculateScalingFactor(e){let r=e.max,n=e.cont.w,i=e.cont.h,o=e.spc,s=this.getWidth(),a=this.getHeight();r&&(s=s?Math.min(s,r):r,a=a?Math.min(a,r):r),a&&(s-=o.getHorizontal(),a-=o.getVertical(),s/a<n/i?this.scalingFactor=s/n:this.scalingFactor=a/i,this.scalingFactor=Math.min(this.scalingFactor,1))}setParentContainer(e){this.parent=e||document.body,this.isParentNotBody()&&re(this.parent,"position","relative")}isParentNotBody(){return this.parent&&this.parent!==document.body}getWidth(){return this.isParentNotBody()?this.parent.clientWidth:document.compatMode===t.DOCUMENT_STANDARD_MODE?document.documentElement.clientWidth:window.innerWidth}getHeight(){return this.isParentNotBody()?this.parent.clientHeight:document.compatMode===t.DOCUMENT_STANDARD_MODE?document.documentElement.clientHeight:window.innerHeight}async renderEngagement(e){this.triggerContext=new Dr(new Date,e),this.triggerContext.onClose(r=>{this.closeInApp(r)}),this.ian=e.ian,(Cr()||e.previewType==="mobile")&&this.ian.overrideForMobileView(),await this.preloadImages(e),e.shouldDelay()?window.setTimeout(()=>{this.withCartDrawerClosed()},e.getDelaySeconds()):this.withCartDrawerClosed()}withCartDrawerClosed(){if(!rt.get().isOpen()||!Cr()){this.startRenderingOnce();return}this.cartDrawerToggleSubscription=window.CooeeSDK.cartDrawerToggle$.subscribe(({open:r})=>{!r&&this.startRenderingOnce()})}startRenderingOnce(){if(!this.shouldSkipCampaign()){t.ACTIVE_TRIGGER_DATA=this.triggerContext.triggerData,t._instance=this;try{this.startRendering()}catch(e){we(e,"render-popup",{triggerContext:this.triggerContext});return}this.sendTriggerDisplayed(),Cr()||window.addEventListener("resize",this.resizeListener),this.cartDrawerToggleSubscription?.unsubscribe()}}shouldSkipCampaign(){let e=this.triggerContext.triggerData;if(!e.previewType&&t.ACTIVE_TRIGGER_DATA){let n={triggerShown:new Dn(t.ACTIVE_TRIGGER_DATA??{})};return this.skipTrigger(e,n),!0}if(pe.get().isGoKwikPopupOpen)return this.skipTrigger(e,{reason:"GoKwik popup is open"}),!0;let r=Em.find(n=>!!document.querySelector(n.identifier));return r?(this.skipTrigger(e,{reason:`${r.gateway} modal is open`}),!0):!1}startRendering(){this.calculateScalingFactor(this.ian),this.rootContainer=new Fs(this.parent,this.ian,this.triggerContext).render();try{this.renderContainer(this.triggerContext)}catch(e){throw w.error(e),e}}sendTriggerDisplayed(){let e={};this.triggerContext.triggerData.items?.length&&(e.promotedMIDs=this.triggerContext.triggerData.items?.map(i=>i.mID));let r=new Ie("CE Trigger Displayed",e,this.triggerContext.triggerData);this.eventAPIService.sendSilently(r);let n={action:"DISPLAYED"};document.dispatchEvent(new CustomEvent("letscooee:outbound:popup-activities",{detail:n}))}sendTriggerClosed(e){let r=e.eventName;delete e.eventName;let n=new Ie(r,e,this.triggerContext.triggerData);n.name==="CE Trigger Clicked"&&(n.items=this.triggerContext.selectedEmbeddedItems??this.triggerContext.triggerData.items?.map(i=>i.toEmbed())),this.eventAPIService.sendSilently(n)}addEnterAnimation(e){this.containerHTMLElement.animate(e.getEnterAnimation(),{duration:500})}renderElement(e,r,n){r instanceof Ji?new Dl(e,r,n).render():r instanceof Qi?new Nl(e,r,n).render():r instanceof Tn?new ks(e,r,n).render():r instanceof Zi?new Ol(e,r,n).render():r instanceof cn?new yi(e,r,n).render():r instanceof ei?new Us(e,r,n).render():r instanceof Ki?new Rl(e,r,n).render():r instanceof Xi?new Al(e,r,n).render():w.error("Unsupported element type- "+r.type)}renderContainer(e){let r=this.ian?.cont;r&&(this.containerHTMLElement=new Cl(this.rootContainer,r,e).render().getHTMLElement(),new Il().loadAllFonts(this.ian),this.ian.elems?.forEach(async n=>{await this.renderElement(this.containerHTMLElement,n,e)}),this.addEnterAnimation(this.ian.anim))}closeInApp(e){let r=this.ian.anim.getExitAnimation();this.sendTriggerClosed(e),t.ACTIVE_TRIGGER_DATA=void 0;let n=this.containerHTMLElement.animate(r,{duration:500,easing:"ease-in-out"});n.onfinish=()=>{this.removeInApp(),window.removeEventListener("resize",this.resizeListener)}}screenResized(){this.removeInApp(),this.startRendering()}removeInApp(){let e=document.querySelector(`.${this.triggerContext.rootClassName}`);e&&e.parentElement.removeChild(e)}skipTrigger(e,r){let n=new Ie("CE Campaign Rejected",r,e);this.eventAPIService.sendSilently(n)}async preloadImages(e){let r=e.ian;if(!r)return;let n=[];r.elems.forEach(i=>{let o=i.bg?.img?.src;if(o&&n.push(this.getPromise(o)),i.t===1){let s=i.src;if(!s)return;n.push(this.getPromise(s))}}),r.bg?.img?.src&&n.push(this.getPromise(r.bg.img.src)),r.cont.bg?.img?.src&&n.push(this.getPromise(r.cont.bg.img.src)),await Promise.all(n)}getPromise(e){return new Promise(r=>{let n=new Image;n.onload=r,n.src=e,n.style.display="none"})}};var xo=class{static trackDeviceID(e){this.isInstalled()}static trackIntent(e){if(!this.isInstalled())return;let r=gi[e]?.toLowerCase();r&&(w.verbose(`Sending ${r} intent to MS Clarity`),window.clarity("set","Cooee Intent",r))}static isInstalled(){return window.clarity&&typeof window.clarity=="function"}};var Pl=class{triggerData;eventAPIService=Re.getInstance();backendAPIService=Nt.getInstance();render(e){e.contentSource===Uo.KLAVIYO&&(this.triggerData=e,window.addEventListener("klaviyoForms",this.handleKlaviyoEvents.bind(this)),window._klOnsite=window._klOnsite||[],window._klOnsite.push(["openForm",e.klaviyoFormID]))}handleKlaviyoEvents(e){if(e.type!=="klaviyoForms")return;let r=e.detail;if(r.formId!==this.triggerData.klaviyoFormID){w.warn("Received invalid trigger callback");return}switch(r.type){case"open":this.eventAPIService.sendSilently(new Ie("CE Trigger Displayed",{form:{id:r.formId}},this.triggerData));break;case"stepSubmit":{let n=this.getFormDetails(r);this.eventAPIService.sendSilently(new Ie("CE Form Submitted",{form:n},this.triggerData)),this.backendAPIService.updateProfileSafe(n);break}case"close":window.removeEventListener("klaviyoForms",this.handleKlaviyoEvents.bind(this)),this.eventAPIService.sendSilently(new Ie("CE Trigger Closed",{form:{id:r.formId}},this.triggerData));break}}getFormDetails(e){let r={id:e.formId},n=e.metaData;if(rr.hasKeys(n)){let i=["email","phone_number","first_name","last_name","$email","$phone_number","$first_name","$last_name"];Object.keys(n).forEach(a=>{i.includes(a)||(r[a]=n[a])}),r.email=n.$email??n.email,r.mobile=n.$phone_number??n.phone_number;let o=n.$first_name??n.first_name,s=n.$last_name??n.last_name;(o?.length||s?.length)&&(r.name=o+" "+s)}return r}};var Ll=class{static trackIntent(e){if(!this.isInstalled()){w.verbose("Facebook pixel not installed");return}if(!Je.get().pixelPush){w.verbose("Facebook pixel push not enabled");return}let n=gi[e.intent]?.toLowerCase(),i=e.segmentName;!n&&!i||(w.verbose(`Sending ${n} intent and ${i} segment to Facebook Pixel`),window.fbq("trackCustom","CooeeIntent",{intent_value:n,segment_value:e.segmentName}))}static isInstalled(){return window.fbq&&typeof window.fbq=="function"}};var om=new Map,Ml=async t=>{for(let o of t.items)if(window.cooeeManipulateProduct)try{window.cooeeManipulateProduct(o,t)}catch(s){w.error(s)}if(t.isCartEmbed()&&!t.isSubscriptionUpsell()){let s=(await ye.getCurrent().getNormalisedCart()).items.map(a=>a.mID);t.items=t.items.filter(a=>!s.includes(a.mID))}if(Je.get().currencyCount<=1)return t.items;if(t.isShoppableVideo())return await p0(t.content.videoConfig,t),t.items;let e=t.items.length,r=t.items.map(o=>Xy(o,t)),i=(await Promise.all(r)).filter(o=>o!=null);if(e&&!i.length){let o="Failed to fetch any product from Ajax API",s=new Ie("CE Campaign Failed",{reason:o,currency:t.currency},t);throw le.get(Re).sendSilently(s),new Error(o)}if(t.isCartRecovery()){let o=ye.getCurrent().items,s=[];for(let a of i)for(let c of a.vars){if(!c.isAvailable)continue;let p=o.find(E=>E.variant_id.toString()===c.mID);if(!p)continue;let d=new At(a);d.name=p.title;let f=new Fr(c);f.name=p.variant_title,f.price.d=p.discounted_price/100,d.variants=[f],s.push(d)}return s}return i},p0=async(t,e)=>{await Promise.all(t.videos.map(async r=>{r.items=await Promise.all(r.items.map(async n=>{let i=await Xy(n,e);return i||n}))}))},Xy=async(t,e)=>{if(om.has(t.mID))return om.get(t.mID);let r,n=`/products/${t.slug}.js`;try{r=(await Zr(n)).data}catch(i){return we(i,"fetch-shopify-product",{extra:{item:t,path:n},engagementTrigger:e}),null}return r?f0(t,r):(w.error("Item not found after AJAX call for:",t),null)},f0=(t,e)=>{if(!t||!e)return t;t.name=e.title,t.tags=e.tags,t.slug=e.handle;let r=t.selectedOrFirstVariant.value;return t.vars.map(n=>{let i=e.variants.find(o=>o.id===+n.mID);i!=null&&(n.name=i.title,n.isAvailable=i.available,n.price.d=i.price?i.price/100:i.price,n.price.effective=n.price.d,n.price.cmp=i.compare_at_price?i.compare_at_price/100:i.compare_at_price,+r.mID===i.id&&(r.effectivePrice.value=n.price.d))}),om.set(t.mID,t),t};var Un=class{runtimeData=pe.get();backendAPIService=le.get(Nt);sessionManager=le.get(ct);constructor(){}async getAllContext(){let[e,r]=await Promise.all([Sl(),this.sessionManager.checkSessionAndGetContext()]);return _(_({},e),r)}};var Re=class t extends Un{static INSTANCE;constructor(){super()}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}sendSafe(e){w.verbose(`Waiting for auth to send event ${e.name}`),fr(ct.replaySubject).then(()=>this.sendSilently(e))}sendSilently(e){this.send(e).catch(r=>w.error(`Failed to send ${e.name}`,r))}async send(e){if(w.verbose(`Sending event: ${e.name}`,e),this.shouldReject(e)){w.warn(`Rejecting event ${e.name}`);return}this.addShopifyAttributes();let r=await this.getAllContext();Object.assign(e,r),e.name!=="CE App Background"&&this.runtimeData.setActive(),this.backendAPIService.post("/v1/event/track",e).then(async n=>{w.info("\u2705 Event tracked:",this.userFriendlyName(e.name)),this.processEventResponse(e,n.data)}).catch(n=>{w.error(`Error sending event ${e.name} to server`,n)})}userFriendlyName(e){return e.replace("CE ","").replace("Trigger","Engagement").replace("Screen","Page").replace("App ","")}shouldReject(e){return e.trigger?.triggerID==="test"||e.trigger?.triggerID==="preview"?(w.warn("Not sending event as this is a test trigger"),!0):!1}processEventResponse(e,r){this.renderWidgetIfAny(e,r).catch(n=>{we(n,"process-popup-response",{extra:{event:e,response:r}})}),this.utiliseIntentIfCalculated(r)}async renderWidgetIfAny(e,r){if(!r.triggerData)return;let n=new Tt(r.triggerData);n.occurred=e.occurred,w.log(`${n} will be shown`);let i;try{i=await Ml(n)}catch(o){w.error("Failed to refresh the products",o);return}if(n.items=i,n.contentSource===Uo.KLAVIYO){new Pl().render(n);return}new kn().renderEngagement(n).catch(o=>{we(o,"render-popup",{extra:{event:e},engagementTrigger:n})})}utiliseIntentIfCalculated(e){e.intent&&(xo.trackIntent(e.intent),Ll.trackIntent(e),w.info(`Intent is ${gi[e.intent]}`))}addShopifyAttributes(){ye.getCurrent().addCooeeAttributes().catch(e=>{w.error("Fail to add attributes in cart",e)})}};var vi=class t{static cartChange$=new jt;compareCartItemSubject=new jt;constructor(){this.compareCartItemSubject.pipe(mr(100)).subscribe(this.compareCartItems.bind(this))}listen(){this.compareCartItemSubject.next(),this.overwriteXMLHttpRequest(),this.overwriteFetchMethod()}overwriteXMLHttpRequest(){let e=this,r=window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.send=function(){return this.addEventListener("load",function(){e.performEvent(this._url).catch(n=>w.error("Unable to process cart change in XMLHttpRequest",n))}),r.apply(this,arguments)},w.verbose("Securely overwritten window.XMLHttpRequest.send method")}overwriteFetchMethod(){let e=this,r=window.fetch;window.fetch=function(n){return r.apply(window,arguments).then(i=>(e.performEvent(n.toString()).catch(o=>w.error("Unable to process cart change in fetch",o)),i))},w.verbose("Securely overwritten window.fetch method")}async performEvent(e){this.isCartManipulationURL(e)&&(pe.get().isCartDirty=!0,this.compareCartItemSubject.next())}isCartManipulationURL(e){return/\/cart\/(add|change|update|clear)/.test(e)}sendChangesAsEvents(e,r){let n=e?.items,i=r.items,o=[],s=[];if(w.verbose(`Comparing cart change with old count ${n?.length} to new count ${i.length}`),i?.forEach(a=>{let c=n?.find(p=>p.vID===a.vID);if(c){if(c.quantity!==a.quantity){let p=c.quantity<a.quantity,d=Math.abs(c.quantity-a.quantity),f=Z(_({},a),{quantity:d});p?o.push(f):s.push(f)}n&&Ch(n,c)}else o.push(a)}),n)for(let a of n)s.push(a);w.verbose(`Cart delta: added: ${o.length}, removed: ${s.length}`),o.length&&this.sendEvent("Add To Cart",{items:o}),s.length&&e.token===r.token&&this.sendEvent("Remove From Cart",{items:s}),(s.length||o.length)&&t.cartChange$.next({itemsAdded:o,itemsRemoved:s})}sendEvent(e,r){let n=new Ie(e,r);le.get(Re).sendSafe(n)}async compareCartItems(){let e=await Ke.get("cart",{}),r=await ye.getCurrent().getNormalisedCart(!0);this.sendChangesAsEvents(e,r)}};var rt=class t{static cartDrawerToggle$=new xs({open:!1,firstOpen:!1});static DEFAULT_SELECTOR="cart-drawer";static _instance;inShadow=!1;cartDrawerElement;cartDrawerShadowElement;configWebsite=Je.get().website??{};currentState=!1;mutationSubscription;mutationObserver;firstOpen=!0;selector;shadowParentElementSelector;clickEventListener;refreshUIEventListener;iconSelector=['button[drawer-to-open="cart-drawer"]','a[href="/cart"]',".header__icon--cart","#cart-icon-bubble",".cart-icon-bubble",".cart-count",'a[onclick*="handleFloCartBtn"]'].join(",");cartSelector=[t.DEFAULT_SELECTOR,"#halo-cart-sidebar",'[role="dialog"][class*="cart" i]','[id*="section-cart" i]',"#sidebar-cart","#rebuy-cart","#mini-cart","#flo-cart-wrapper","#drawer-cart","#UpcartPopupBackDrop",'[id$="CartDrawer" i]'].join(",");constructor(){this.initialize(),this.refreshUIEventListener=this.updateBubble.bind(this),this.clickEventListener=this.manualCartIconClicked.bind(this),document.addEventListener("letscooee:outbound:refresh-ui",this.refreshUIEventListener),document.addEventListener("click",this.clickEventListener,{capture:!0,passive:!0})}get element(){return this.cartDrawerElement}static get(){return t._instance||(t._instance=new t),t._instance}static forceUpdate(){t._instance?.destroy(),t._instance=new t}isOpen(){let e=this.inShadow?this.isPresent():Ky(this.cartDrawerElement);return w.info(`Cart drawer is currently ${e?"open":"close"}`),e}open(){if(this.isOpen()){w.log("Drawer is already open");return}document.dispatchEvent(new CustomEvent("letscooee:outbound:open-cart"));let e=document.querySelector(this.iconSelector);if(!e){w.verbose("No clickable cart icon found with selector",this.iconSelector);return}e.click()}isShopifyDefaultDrawer(){return this.element?.tagName.toLowerCase()===t.DEFAULT_SELECTOR}isMiniCart(){return this.isShopifyDefaultDrawer()&&this.element?.id==="mini-cart"}refreshUI(e,r=!0){if(window.cooeeUpdateCartDrawer)try{window.cooeeUpdateCartDrawer(e)}catch(n){we(n,"execute-cooeeUpdateCartDrawer")}else if(this.isMiniCart()&&this.element?._rerenderCart)this.element._rerenderCart({detail:{cart:e}});else if(window.MinimogTheme?.Cart?.renderNewCart)window.MinimogTheme.Cart.renderNewCart();else if(this.isShopifyDefaultDrawer()&&this.element?.renderContents&&e)this.element.classList.remove("is-empty"),this.element.renderContents?.(e);else if(this.element?.onCartDrawerUpdate)this.element.onCartDrawerUpdate();else if(window.cartGiftUpdate){if(!e?.items?.[0])return;let n=e.items[0].id,i=e.items[0].quantity,o=e.items[0].price;window.cartGiftUpdate(n,o,i,"","ADD_TO_CART")}else if(window.icartCartActivityEvent)window.icartCartActivityEvent();else if(window.theme?.CartDrawer&&typeof window.theme?.CartDrawer=="function")window.theme?.CartDrawer.init?new window.theme.CartDrawer().init():new window.theme.CartDrawer;else if(window.Hs_CartDrawer?.updateSlideCart)window.Hs_CartDrawer.updateSlideCart();else if(window.theme?.fetch_side_cart)window.theme.fetch_side_cart();else if(window.theme?.Cart?.updateCart)window.theme.Cart.updateCart();else if(window.cartUpdate)window.cartUpdate();else if(this.element?._onCartRefresh)this.element._onCartRefresh();else if(window.cart?.getCart)window.cart.getCart();else if(this.element?.tagName?.toLowerCase()==="cart-drawer-component")document.dispatchEvent(new CustomEvent("action:cart:updateCartandShowCart"));else if(this.element?.id==="sidebar-cart")document.body.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0,detail:{}}));else if(this.element?.id==="quick-cart"){let n=document.querySelector('a[href="/cart"]');n&&n.click()}else window.Shopify?.KT_onItemAdded?window.Shopify.KT_onItemAdded():window.sideCart?.updateCart?window.sideCart.updateCart():window.SLIDECART_UPDATE?(window.SLIDECART_UPDATE(),window.SLIDECART_OPEN?.()):window.refreshCart?ye.getCurrent().getNormalisedCart(!0).then(()=>{window.refreshCart(ye.getCurrent())}):window.OPEN_CART?window.OPEN_CART():window.updateCart?window.updateCart():window.sjRefreshCart?window.sjRefreshCart():window.CartJS?.getCart?window.CartJS?.getCart():window.updateCartItemJS?window.updateCartItemJS(1,e?.items?.[0]?.id+""):(w.info("No method found to update the cart drawer. Blindly firing some events to try"),document.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0})));document.dispatchEvent(new CustomEvent("letscooee:outbound:refresh-ui",{detail:{responseJSON:e,currentCart:ye.getCurrent()}})),r&&vi.cartChange$.next({})}async initialize(){let e=this.configWebsite.cartDrawerSelector;if(!e){await this.findCartDrawer();return}let r=e.split(":shadow");r.length===1?(this.selector=r[0],await this.findCartDrawer()):(this.inShadow=!0,this.shadowParentElementSelector=r[0]?.trim(),this.selector=r[1]?.trim(),await this.findCartDrawerWithShadow())}async findCartDrawer(){if(!ls())return;let e=this.selector||this.cartSelector;if(this.cartDrawerElement=await Hi(e),!this.cartDrawerElement){Jy.default.warn("Max attempts exhausted to find cart drawer");return}w.verbose("Found",this.cartDrawerElement,`from selector: ${e}`),this.createMutationObservers()}async findCartDrawerWithShadow(){if(!this.shadowParentElementSelector)return;let r=(await Hi(this.shadowParentElementSelector))?.shadowRoot;r?.mode==="open"&&(this.cartDrawerShadowElement=r,this.createMutationObservers())}createMutationObservers(){!this.cartDrawerElement&&!this.cartDrawerShadowElement||this.watchForCartToggle()}watchForCartToggle(){let e=this.cartDrawerElement||this.cartDrawerShadowElement,r=new jt;this.mutationObserver=new MutationObserver(()=>{r.next()}),this.mutationObserver.observe(e,{attributes:!0,subtree:!0,childList:this.inShadow}),this.mutationSubscription=r.pipe(tm(800,void 0,{leading:!1,trailing:!0})).subscribe(()=>{let n=this.isOpen();this.currentState!==n&&(this.currentState=n,t.cartDrawerToggle$.next({open:n,firstOpen:this.firstOpen}),this.firstOpen&&(this.firstOpen=!1))})}isPresent(){return!this.selector||!this.cartDrawerShadowElement?!1:!!this.cartDrawerShadowElement.querySelector(this.selector)}async updateBubble(){let e=(await ye.getCurrent().getNormalisedCart(!0)).itemCount,r=document.querySelector(".cart-link__bubble");r&&(r.innerText=e+"")}manualCartIconClicked(e){!e.target.closest(this.iconSelector)||!e.isTrusted||window.CooeeSDK.events.push(["Open Cart"])}destroy(){document.removeEventListener("letscooee:outbound:refresh-ui",this.refreshUIEventListener),document.removeEventListener("click",this.clickEventListener,{capture:!0}),this.mutationSubscription?.unsubscribe(),this.mutationObserver?.disconnect()}};var Bl=class{static processConfiguration(){let e=Je.get();!e.gaMeasurementID||!e.gaEnabled||this.sendClientID()}static async sendClientID(){let e=await this.getClientID();e&&Nt.getInstance().updateDevicePropsSafe({gaClientID:e})}static async getClientID(){let e=await Ke.get("gacid"),r=await this.getClientIDViaGTag();if(e!==r)return await Ke.set("gacid",r),r}static async getClientIDViaGTag(){let r=Je.get().gaMeasurementID;if(!(!r||!window.gtag))return new Promise(n=>{window.gtag("get",r,"client_id",i=>{n(i)})})}};var m0=t=>t,Qy=t=>t.filter(e=>e.removedNodes&&e.removedNodes.length>0);function Zy(t,e={childList:!0,subtree:!0},r=500,n=m0){return bl(i=>{let o=new MutationObserver(s=>i(s));return o.observe(t,e),o},(i,o)=>o.disconnect()).pipe(fn(i=>n(i)),So(i=>i.length>0),mr(r))}var Fe=class extends kr{stylesConverter=new Io(1);mediaStyle={};deviceTypeKey;clickExecutor;componentWillMount(){this.deviceTypeKey=Cr()?"sm":"lg",this.clickExecutor=new mn(this.props.triggerContext)}getCompiledStyles(){return this.putStyleAccordingToDevice(),_(_(Z(_(_(_(_(_(_({},this.stylesConverter.getFlexStyles(this.mediaStyle.flex)),this.stylesConverter.getBackgroundStyles(this.mediaStyle.bg)),this.stylesConverter.getBorderStyles(this.mediaStyle.br)),this.stylesConverter.getSizeStyles(this.mediaStyle.size)),this.stylesConverter.getSpaceStyles(this.mediaStyle.spc)),this.stylesConverter.getLayoutStyles(this.mediaStyle.lout)),{boxSizing:"border-box",outline:"none"}),this.getComponentStyles()),this.props.style)}matchWhenCondition(e){if(!e?.op)return!0;let{lhs:r,rhs:n}=e;switch(e.op){case"eq":return r===n;case"gt":return+r>+n;case"gte":return+r>=+n;case"lt":return+r<+n;case"lte":return+r<=+n;case"ne":return r!==n;case"null":return r==null;case"empty":return r.trim()==="";case"in":return new RegExp(`\\b${n}\\b`).test(r);case"nin":return!new RegExp(`\\b${n}\\b`).test(r);default:return w.error(`Invalid operator found for when condition - ${e.op}`),!1}}putStyleAccordingToDevice(){let e=this.props.element;this.mediaStyle=e.style.lg,Cr()&&e.style.sm&&Object.keys(e.style.sm).length&&(this.mediaStyle=_(_({},this.mediaStyle),e.style.sm))}sendTriggerClicked(e,r){this.clickExecutor.sendTriggerClicked(e,r)}async onClick(e,r){e.stopPropagation(),r.clickAction||(r.clickAction=this.props.element.clc),r.clickAction?.at&&await this.clickExecutor.execute(r)}};var d0=0,R3=Array.isArray;function K(t,e,r,n,i,o){e||(e={});var s,a,c=e;if("ref"in c)for(a in c={},e)a=="ref"?s=e[a]:c[a]=e[a];var p={type:t,props:c,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--d0,__i:-1,__u:0,__source:i,__self:o};if(typeof t=="function"&&(s=t.defaultProps))for(a in s)c[a]===void 0&&(c[a]=s[a]);return xe.vnode&&xe.vnode(p),p}var Qt=class extends Fe{componentDidMount(){this.setState(()=>({text:this.props.element.text})),It(this.onChange.bind(this))}componentWillReceiveProps(e){this.props.element=e.element,this.onChange()}render(){let e=this.getCompiledStyles(),r=this.state.text;return r||(e.display="none",r=""),K("div",{style:e,onClick:this.customOnClick.bind(this),className:"lc-text",children:K("span",{style:this.getSpanStyle(),dangerouslySetInnerHTML:{__html:r}})})}customOnClick(){this.props.onClick&&this.props.onClick("title")}onChange(){if(this.props.element.text==null)return;let e=this.props.triggerContext.triggerData,r={bundle:e.discountData.value,customer:e.customerData,cart:e.getCartMagicVariables()},n=Zn(this.props.element,r,this.props.triggerContext),i=new vt(n);if(!this.matchWhenCondition(i.when)){this.setState(()=>({text:""}));return}this.setState(()=>({text:i.text}))}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.letterSpacing=r.letterSpacing,e.fontSize=r.fs+"px",e.lineHeight=r.lh,e.fontFamily=r.fam.name||"inherit",e.textAlign=r.alignment,e.fontWeight=r.fw,e.textDecoration=r.td??"none",this.stylesConverter.getColourStyles(r.tc,"color",e),e}getComponentStyles(){return _({},this.getTypoStyles())}getSpanStyle(){return{overflow:"hidden",display:"-webkit-box",webkitBoxOrient:"vertical",webkitLineClamp:2,color:"inherit",fontSize:"inherit",fontWeight:"inherit",fontFamily:"inherit"}}};var Ei=class extends Qt{render(){return K("div",{style:this.getCompiledStyles(),className:"lc-button",onClick:e=>this.onClick(e,{item:this.props.item}),children:K("span",{style:this.getSpanStyle(),dangerouslySetInnerHTML:{__html:this.state.text}})})}getComponentStyles(){return Z(_({},super.getComponentStyles()),{cursor:"pointer"})}};var sm=class extends kr{render(){if(this.props.element.show[this.props.label.toLowerCase()])return this.props.element.lblPos==="end"?K("div",{style:_(_({},this.getElementStyle()),this.props.styles),children:[K("span",{children:this.props.time}),K("span",{style:this.getTimeLabelStyle(),children:this.props.label})]}):K("div",{style:_(_({},this.getElementStyle()),this.props.styles),children:[K("span",{style:this.getTimeLabelStyle(),children:this.props.label}),K("span",{children:this.props.time})]})}getDesign(){}getTimeLabelStyle(){return{fontSize:"0.5em",alignContent:"center"}}getElementStyle(){let e={display:"flex",flexDirection:"column",placeContent:"center center",textAlign:"center"};return this.props.element.horizontal&&(e.gridTemplateColumns="repeat(2, minmax(0, 1fr))"),e}},Hs=class extends Qt{labels={Days:"00",Hours:"00",Minutes:"00",Seconds:"00"};componentWillMount(){super.componentWillMount(),this.setState(()=>_({},this.labels)),this.processAndStartTimer()}render(){return K("div",{style:this.getLabelsParentStyle(),children:Object.keys(this.labels).map(e=>K(sm,{styles:this.getCompiledStyles(),label:e,time:this.state[e],element:this.props.element}))})}getLabelsParentStyle(){return{display:"grid",justifyContent:"center",gridTemplateColumns:"repeat(4, auto)",gap:this.stylesConverter.getSizePx(this.props.element.gap)}}getDisplayStyles(){return{display:"grid",placeContent:"center center"}}getComponentStyles(){return _(_({},super.getComponentStyles()),this.getDisplayStyles())}processAndStartTimer(){this.props.element.timer.start(this.props.element.timerType,e=>{this.labels.Days=String(e.days).padStart(2,"0"),this.labels.Hours=String(e.hours).padStart(2,"0"),this.labels.Minutes=String(e.minutes).padStart(2,"0"),this.labels.Seconds=String(e.seconds).padStart(2,"0"),this.setState(()=>_({},this.labels))})}};function kl(t,e){if(!t)return;let r=new window.CooeeSDK.Swiper(t,{loop:!0,slidesPerView:e.maxInRow,spaceBetween:e.gap+"px",pagination:{type:e.pagination.type,el:t.querySelector(".swiper-pagination"),clickable:!0,renderBullet:(n,i)=>`
|
|
69
69
|
<span class="${i}"
|
|
70
70
|
style="background-color: ${e.pagination.color?.rgba};"></span>
|
|
71
71
|
`,renderProgressbar:n=>`
|
|
72
72
|
<span class="${n}"
|
|
73
73
|
style="background-color: ${e.pagination.color?.rgba};">
|
|
74
74
|
</span>
|
|
75
|
-
`},navigation:{nextEl:t.querySelector(".swiper-button-next"),prevEl:t.querySelector(".swiper-button-prev")},autoplay:e.autoplay?.enabled?{delay:e.autoplay?.delay,disableOnInteraction:!1}:!1,autoHeight:!0});return t.style.setProperty("--swiper-navigation-size",`${e.navigation.size}px`),r}function Ul(t,e,r){let n={color:t.navigation.color?.rgba};return t.pagination.enabled&&(n.transform="translateY(-25%)"),K("div",{class:"swiper-container",ref:e,style:"max-width: 100%",children:[K("div",{class:"swiper-wrapper",children:r()}),t.navigation.enabled&&K("div",{class:"swiper-button-next",style:n,children:K("span",{})}),t.navigation.enabled&&K("div",{class:"swiper-button-prev",style:n,children:K("span",{})}),t.pagination.enabled&&K("div",{className:"swiper-pagination",style:{bottom:0,top:"unset",position:"relative",color:t.pagination.color?.rgba}})]})}var $s=class extends Fe{componentDidMount(){It(()=>{this.setState(()=>({checked:this.props.item.selected.value}))})}render(){return K("div",{style:this.getCompiledStyles(),className:"lc-checkbox",children:K("input",{type:"checkbox",checked:this.state.checked,onChange:this.onChange.bind(this),style:{appearance:"auto"}})})}onChange(e){let{checked:r}=e.target;this.props.item.selected.value=r}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.textAlign=r.alignment,e.justifyContent=r.alignment,e}getComponentStyles(){return Z(_({},this.getTypoStyles()),{display:"flex"})}};var dn=class extends Fe{constructor(e,r){super(e,r)}render(){let e=this.props.element[this.deviceTypeKey],r=e?.src||this.props.element.src||this.props.element.lg?.src;return K("img",{onClick:this.customOnClick.bind(this),className:"lc-image",alt:e?.name||"Image",onMouseEnter:this.handleMouseEnter.bind(this),onMouseLeave:this.handleMouseLeave.bind(this),src:r,style:this.getCompiledStyles()})}customOnClick(e){this.props.element.clc?.at===be.ADD_TO_CART&&this.props.triggerContext.triggerData.items[0]&&this.onClick(e,{item:this.props.triggerContext.triggerData.items[0]}),this.props.onClick&&this.props.onClick("image")}getComponentStyles(){let e=this.mediaStyle.lout;if(!e||e.pos!=="absolute")return{};let r={zIndex:e.zIndex,cursor:this.props.element.clc?.at?"pointer":"auto"};return this.mediaStyle.size?.w&&(r.width=this.mediaStyle.size.w),this.mediaStyle.size?.h&&(r.height=this.mediaStyle.size.h),r}handleMouseEnter(e){let r=this.props.element[this.deviceTypeKey]?.secondarySrc;r&&(e.currentTarget.src=r)}handleMouseLeave(e){e.currentTarget.src=this.props.element[this.deviceTypeKey]?.src}};var hn=class extends Fe{render(){if(!(this.props.element.hide||!this.matchWhenCondition(this.props.element.when)))return K("div",{style:this.getCompiledStyles(),class:"lc-flexbox",children:K(Fn,{elements:this.props.elements,element:this.props.element,triggerContext:this.props.triggerContext})})}getComponentStyles(){let e=this.mediaStyle.flex??new eo,r={display:"flex",gap:e.gap+"px",flexWrap:e.wrap,flexDirection:e.dir,justifyContent:e.jc,alignItems:e.ai};return e.wrap==="nowrap"&&e.scroll&&(e.dir==="column"?r["overflow-y"]="auto":r["overflow-x"]="auto"),r}};var Vs=class extends hn{render(){if(!(this.props.element.hide||!this.matchWhenCondition(this.props.element.when)))return K("div",{style:this.getCompiledStyles(),class:"lc-flexbox",children:K(Co,{elements:this.props.elements,element:this.props.element,triggerContext:this.props.triggerContext,item:this.props.item,noLinks:this.props.noLinks})})}};var Ws=class extends Fe{render(){return K("select",{style:this.getCompiledStyles(),value:this.props.selectedVariant.selectedSellingPlan.value?.mID??"",onChange:this.onChange.bind(this),disabled:this.state.disabled,className:"lc-dropdown",children:this.createSelectItems()})}componentDidMount(){It(()=>{this.setState(()=>({disabled:this.props.triggerContext.triggerData.isBundle()?!this.props.item.selected.value:!1}))})}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.letterSpacing=r.letterSpacing,e.fontSize=r.fs+"px",e.lineHeight=r.lh,e.fontFamily="inherit",e.textAlign=r.alignment,e.fontWeight=r.fw,this.stylesConverter.getColourStyles(r.tc,"color",e),e.boxShadow="none",e}getComponentStyles(){let e={};return this.props.selectedVariant.sellingPlans?.length||(e.visibility="hidden"),_(_({},e),this.getTypoStyles())}createSelectItems(){let e=[],r=this.props.selectedVariant;if(!r.sellingPlans?.length)return[];this.props.triggerContext.triggerData.skipSubscribedItems?r.selectedSellingPlan.value||(r.sellingPlans[0].isSelected=!0,r.changeSellingPlan(r.sellingPlans[0])):e.push(K("option",{value:"",selected:!r.selectedSellingPlan,children:"One time purchase"}));for(let n of r.sellingPlans??[])e.push(K("option",{value:n.mID,selected:n.isSelected,children:n.name}));return e}onChange(e){let r=e.target.value;r?this.props.selectedVariant.selectedSellingPlan.value=this.props.selectedVariant.sellingPlans.find(n=>n.mID===r):this.props.selectedVariant.selectedSellingPlan.value=void 0}};var h0=new RegExp('fill="#[a-zA-Z0-9]+"'),js=class extends Fe{constructor(){super()}render(){let e=this.getCompiledStyles(),r=this.getRating();return r||(e.display="none",r=""),K("div",{style:e,className:"lc-star-rating",dangerouslySetInnerHTML:{__html:r}})}getRating(){let e={size:this.props.element.iconSize,color:this.props.element.c.hex},r=Gi(this.props.element.fullStar,{svg:e},this.props.triggerContext),n=Gi(this.props.element.halfStart,{svg:e},this.props.triggerContext),i=this.props.review;if(!i?.rating)return"";let o="";if(this.props.element.showSingleStar)o=r;else{let s=5,a=`${i.rating}`.split(".");for(let c=0;c<+a[0];c++)o+=r,s--;a[1]&&(o+=n,s--);for(let c=0;c<s;c++)o+=r.replace(h0,'fill="#f1f1f1"')}return o}getComponentStyles(){return{display:"flex",alignItems:"center"}}};var Gs=class extends Fe{render(){return K("select",{style:this.getCompiledStyles(),value:this.props.item.selectedOrFirstVariant.value.mID,onChange:this.onChange.bind(this),disabled:this.state.disabled,className:"lc-dropdown",children:this.createSelectItems()})}componentDidMount(){It(()=>{this.setState(()=>({disabled:this.props.triggerContext.triggerData.isBundle()?!this.props.item.selected.value:!1}))})}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.letterSpacing=r.letterSpacing,e.fontSize=r.fs+"px",e.lineHeight=r.lh,e.fontFamily="inherit",e.textAlign=r.alignment,e.fontWeight=r.fw,this.stylesConverter.getColourStyles(r.tc,"color",e),e.boxShadow="none",e}getComponentStyles(){let e={};return this.props.item.vars?.length===1&&this.props.item.vars[0].name==="Default Title"&&(e.visibility="hidden"),_(_({},e),this.getTypoStyles())}createSelectItems(){let e=[];for(let r of this.props.item.vars)e.push(K("option",{value:r.mID,disabled:!r.isAvailable,children:r.name}));return e}onChange(e){let r=e.target.value,n=this.props.item.vars.find(i=>i.mID===r);this.props.item.setSelectedVariant(n)}};var Co=class extends Fe{constructor(e,r){super(e,r),this.setState(()=>({decoration:"unset"}))}renderElement(e){if(!(e.hide||!this.matchWhenCondition(e.when))){if(e.t===4){let r=e;return r.l==="Star Rating"&&!this.props.item.reviews?.rating?void 0:K(Vs,{element:r,triggerContext:this.props.triggerContext,elements:r.elems,item:this.props.item,noLinks:this.props.noLinks})}if(e.t===6)return this.props.triggerContext.triggerData.isBundle()?K($s,{element:e,item:this.props.item,triggerContext:this.props.triggerContext}):void 0;if(e.t===13){let r=e,n=this.props.item,i=n.variantImage??n.firstImageURL,o=n.variantSecondaryImage??n.secondaryImageURL;r.lg=r.sm={src:i,name:n.name,secondarySrc:o};let s=K(dn,{element:r,onClick:this.customOnClick.bind(this),triggerContext:this.props.triggerContext});return this.props.noLinks?s:K("a",{href:this.props.item.selectedOrFirstVariant.value.link,style:{display:"block"},children:s})}if(e.t===14)return this.renderProductTitle(e);if(e.t===15){let r=e;return this.props.triggerContext.triggerData.isCartEmbed()&&this.props.item.vars?.length===1&&this.props.item.vars[0].name==="Default Title"?void 0:r.showChips?K("cooee-product-options-picker",{item:this.props.item,element:r}):K(Gs,{element:r,item:this.props.item,triggerContext:this.props.triggerContext})}return e.t===16?K(Ws,{element:e,selectedVariant:this.props.item.selectedOrFirstVariant.value,item:this.props.item,triggerContext:this.props.triggerContext}):e.t===19?K(js,{element:e,triggerContext:this.props.triggerContext,review:this.props.item.reviews}):e.t===18||e.t===3?K(Ei,{element:e,item:this.props.item,triggerContext:this.props.triggerContext}):K(Fn,{elements:[e],element:this.props.element,triggerContext:this.props.triggerContext})}}render(){return this.props.elements.map(e=>this.renderElement(e))}getComponentStyles(){return{}}renderProductTitle(e){let r=K(Qt,{element:e,onClick:this.customOnClick.bind(this),triggerContext:this.props.triggerContext});return this.props.noLinks?r:K("a",{href:this.props.item.selectedOrFirstVariant.value.link,style:{display:"block",textDecoration:this.state.decoration},onMouseEnter:this.onMouseEnter.bind(this),onMouseLeave:this.onMouseLeave.bind(this),children:r})}customOnClick(e){this.sendTriggerClicked([this.props.item.toEmbed()],{from:e})}onMouseEnter(){this.setState(()=>({decoration:"underline"}))}onMouseLeave(){this.setState(()=>({decoration:"unset"}))}};var _i=class extends Fe{productElement;constructor(e,r){super(e,r),this.setState(()=>({decoration:"unset"}))}render(){let e=Zn(this.props.element,this.getProductData(),this.props.triggerContext);if(this.productElement=new Rn(e),!(this.productElement.hide||!this.matchWhenCondition(this.productElement.when)))return K("div",{style:_({},this.getCompiledStyles()),class:"lc-single-product",children:K(Co,{element:this.productElement,elements:this.productElement.elems,triggerContext:this.props.triggerContext,item:this.props.item,noLinks:this.productElement.noLinks})})}getComponentStyles(){return{flexShrink:0}}getProductData(){if(!this.props.item)return{};let e=this.props.item,r=e.selectedOrFirstVariant.value,n=e.getTemplateVariables();n.product.quantity=this.props.triggerContext.hasManipulatedProductQuantity()?this.props.triggerContext.getManipulatedQuantity(this.props.item.quantity):this.props.item.quantity;let i=this.props.triggerContext.triggerData.discount?.type===er.BXGY;return!r.hasEffectivePrice()&&i&&(n.product=Z(_(_({},n.product),Mt("effective_price",r.effectivePrice.value)),{price:""})),n.variant.quantity=this.props.triggerContext.hasManipulatedProductQuantity()?this.props.triggerContext.getManipulatedQuantity(r.quantity):r.quantity,{product:n.product,variant:n.variant,svg:{color:"{{ svg.color }}",size:"{{ svg.size }}"}}}};var zs=class extends Fe{swiperRef=null;swiperInstance=null;configuration;gap;constructor(e,r){super(e,r),this.configuration=Cr()?this.props.element.conf.sm:this.props.element.conf.lg,this.gap=(this.configuration.gap??15)+"px"}componentDidMount(){this.props.element.conf[this.deviceTypeKey].disp===2&&$c().then(()=>{this.swiperInstance=kl(this.swiperRef,this.props.element.conf[this.deviceTypeKey])})}componentWillUnmount(){this.swiperInstance&&this.swiperInstance.destroy()}render(){let e=this.props.triggerContext.triggerData.items;e.splice(this.configuration.maxItems??10);let r;if(this.configuration.disp===2){let n=o=>{this.swiperRef=o},i=()=>e?.map(o=>K("div",{class:"swiper-slide",children:this.getProductFragment(o)}));r=K("div",{style:Z(_({},this.getCompiledStyles()),{display:"block"}),class:"lc-product-swiper-list",children:Ul(this.configuration,n,i)})}else r=K("div",{style:this.getCompiledStyles(),class:"lc-product-list",children:e?.map((n,i)=>this.getProductFragment(n,i!==e.length-1))});return r}getComponentStyles(){let e=[0,2].includes(this.configuration.disp),r={display:e?"flex":"grid",justifyContent:"safe "+(this.mediaStyle.flex?.jc??"center"),gap:this.gap,flexDirection:this.mediaStyle.flex?.dir??"row"};if(r.flexDirection==="row"){if(e)r.maxWidth="100%",r.overflowY="auto";else if(this.configuration.disp===1){let n=this.props.triggerContext.triggerData,i=n.items.length,o;n.isBundle()?o=this.props.element.prod.symbol?.hide!==!0?i*2-1:i:o=this.props.element.conf[this.deviceTypeKey].maxInRow,r.gridTemplateColumns=`repeat(${o}, auto)`}}return r}getProductFragment(e,r=!1){return K(Ur,{children:[K(_i,{element:this.props.element.prod,item:e,triggerContext:this.props.triggerContext}),this.props.triggerContext.triggerData.isBundle()&&r&&this.props.element.prod.symbol&&!this.props.element.prod.symbol.hide&&K("div",{style:{display:"flex",alignItems:"center",justifyContent:"center"},children:K(Qt,{element:this.props.element.prod.symbol,triggerContext:this.props.triggerContext})})]},e.mID)}};var Ys=class extends Fe{swiperRef=null;swiperInstance=null;constructor(e,r){super(e,r)}componentDidMount(){$c().then(()=>{this.swiperInstance=kl(this.swiperRef,this.props.element.conf)})}componentWillUnmount(){this.swiperInstance&&this.swiperInstance.destroy()}render(){let e=this.props.element,r=i=>{this.swiperRef=i},n=()=>e.values?.map(i=>K("div",{class:"swiper-slide",onClick:o=>this.onClick(o,{clickAction:this.getClickAction(i)}),children:this.renderElement(i)}));return Ul(e.conf,r,n)}getComponentStyles(){return{}}renderElement(e){let r=this.valueAddedSlide(this.props.element.slide,e);switch(r?.t){case 1:return K(dn,{element:r,triggerContext:this.props.triggerContext});case 4:return K(hn,{elements:r.elems,element:r,triggerContext:this.props.triggerContext});default:w.warn("Unknown slide type for carousal")}}valueAddedSlide(e,r){let n=Zn(e,{form:r},this.props.triggerContext);return Jt.getParsedElement(n)}getClickAction(e){return Zn(this.props.element.clc??{},{form:e},this.props.triggerContext)}};var Fn=class extends Fe{constructor(e,r){super(e,r),this.setState(()=>({decoration:"unset"})),It(()=>{this.setState(()=>({showButton:!this.props.triggerContext.triggerData.isBundle()||!!this.props.triggerContext.selectedItems.length}))})}renderElement(e){if(!e.hide){if(e.t===4){let r=e;return K(hn,{element:r,triggerContext:this.props.triggerContext,elements:r.elems})}if(e.t===61)return K(Hs,{element:e,triggerContext:this.props.triggerContext});if(e.t===3)return this.state.showButton?K(Ei,{element:e,triggerContext:this.props.triggerContext}):void 0;if(e.t===2)return K(Qt,{element:e,triggerContext:this.props.triggerContext});if(e.t===1)return K(dn,{element:e,triggerContext:this.props.triggerContext});if(e.t===11)return K(zs,{element:e,triggerContext:this.props.triggerContext});if(e.t===12)return K(_i,{element:e,item:this.props.triggerContext.triggerData.items[0],triggerContext:this.props.triggerContext});if(e.t===62)return K(Ys,{element:e,triggerContext:this.props.triggerContext})}}render(){return this.props.elements.map(e=>this.renderElement(e))}getComponentStyles(){return{}}};var qs=class extends Fe{clickAction;isClickable;constructor(e,r){super(e,r),this.clickAction=this.props.element.clc,this.isClickable=this.clickAction?.at===be.GO_TO_URL&&!!Ui(this.clickAction.gu?.u)||this.clickAction?.at===be.OPEN_CART||this.clickAction?.at===be.INITIATE_CHECKOUT}componentDidMount(){It(()=>{let e=this.props.triggerContext.triggerData,r=this.props.triggerContext.selectedItems;e.calculateDiscountData(r,this.props.triggerContext.shouldGiveFBTDiscount)})}render(){return K(Ur,{children:[K("div",{style:this.getCompiledStyles(),class:"lc-container",onClick:e=>{this.onClick(e,{clickAction:this.clickAction})},children:K(Fn,{elements:this.props.elements,element:this.props.element,triggerContext:this.props.triggerContext})}),this.props.triggerContext.triggerData.id==="preview"&&K("div",{class:"letscooee-preview-badge",children:["#",this.props.triggerContext.triggerData.shortID," preview"]})]})}getComponentStyles(){let e={position:"relative",overflow:"hidden",display:"block"};return this.isClickable&&(e.cursor="pointer"),e}};var xt=class t{constructor(e){this.engagementTrigger=e;this.triggerContext=new Dr(new Date,this.engagementTrigger)}static renderedEngagements=new Set;static engagementIDsWithTrackedDisplay=new Set;static DEBOUNCE_TIME=1e3;rootContainer;widgetElement;widget;triggerContext;observers=[];runtimeData=pe.get();widgetAPIService=le.get(Rr);eventAPIService=le.get(Re);renderedCount=0;scrollSubscription;variation;isExclusionWithBVariation;renderSilently(){this.render().catch(e=>{we(e,"render-widget",{triggerContext:this.triggerContext})})}destroy(){w.verbose(`${this.engagementTrigger} will be destroyed`),this.preDestroy(),this.removeFromRendered(),this.rootContainer?.remove(),t.engagementIDsWithTrackedDisplay.delete(this.engagementTrigger.shortID),Cf(this.engagementTrigger.content?.afterDeleteJS)}async render(){if(this.engagementTrigger.shouldGetVariationImmediately()){let e=await this.getVariation();this.handleVariationResponse(e)}if(this.rootContainer=await this.getWidgetContainer(!0),!this.rootContainer){w.warn(`${this.engagementTrigger} no section found to render the widget`);return}this.afterRootContainerCreated(),this.widget=this.engagementTrigger.widget,await this.getVariationIfRequired(),await this.runChoresBeforeRender(),this.attachScroll(),await this.checkAndSendEvent(),this.triggerContext.renderer=this,Cf(this.engagementTrigger.content?.afterRenderJS)}isSameTrigger(e){return this.engagementTrigger.shortID===e.shortID}async updateAndReRender(e){w.info(`${this.engagementTrigger} will be updated`),this.updateItems(e.items,this.engagementTrigger.items),await this.update(e),await this.render()}async update(e){}rerender(){this.rootContainer?.isConnected||(w.info(`${this.engagementTrigger} deleted. Will be re-rendered`),this.preDestroy(),this.renderSilently())}preDestroy(){this.scrollSubscription?.unsubscribe(),this.observers.forEach(e=>{e?.disconnect&&e.disconnect()})}afterRootContainerCreated(){}isAllOkToRender(){return!!this.widget}async getVariationIfRequired(){if(this.engagementTrigger.shouldSkipVariation()){w.verbose(`${this.engagementTrigger} already has necessary data to render`);return}let e=await this.observeWidgetContainerInViewport();this.handleVariationResponse(e)}handleVariationResponse(e){e&&(w.log(`${this.engagementTrigger} visitor has been assigned to variation ${e.variation}`),e.items?.length&&(this.engagementTrigger.items=e.items.map(r=>new At(r)),this.engagementTrigger.nonMutableItems=e.items.map(r=>new At(r))),e.bundleFrom&&(this.engagementTrigger.bundleFrom=new At(e.bundleFrom)),e.discount&&(this.engagementTrigger.discount=e.discount),e.placement&&(this.triggerContext.triggerData.placement=e.placement),e.props&&rr.hasKeys(e.props)&&(this.engagementTrigger.props=_(_({},this.engagementTrigger.props),e.props)),e.content&&(this.triggerContext.triggerData.content=new ps(e.content)),this.triggerContext.triggerData.widget=this.widget=new io(e.widget),this.triggerContext.triggerData.contentID=e.contentID,this.triggerContext.triggerData.variation=this.variation=e.variation,this.triggerContext.triggerData.placement=e.placement,this.triggerContext.triggerData.manipulation=e.manipulation,this.triggerContext.triggerData.entryAnimation=e.entryAnimation??"NONE",this.isExclusionWithBVariation=this.engagementTrigger.isExclusionTesting()&&this.variation==="b",this.isExclusionWithBVariation&&(this.rootContainer.style.height="0.5px"))}addToRendered(){this instanceof _t?_t.renderedEngagements.add(this):t.renderedEngagements.add(this),this.renderedCount++,w.info(`${this.engagementTrigger} rendered \u2705 ${Dh(this.renderedCount)} time`)}removeFromRendered(){this instanceof _t?_t.renderedEngagements.delete(this):t.renderedEngagements.delete(this)}async getVariation(){w.log(`${this.engagementTrigger} get variation`);let e={engagementID:this.engagementTrigger.engagementID,isPreview:this.engagementTrigger.id==="preview"};try{return(await this.widgetAPIService.getVariation(e)).data}catch(r){w.error(`${this.engagementTrigger} unable to get the variation`,r);return}}async observeWidgetContainerInViewport(){if(!this.rootContainer){w.warn(`${this.engagementTrigger} No root container found to watch for viewport`);return}let e=window.innerHeight*.3,r={root:null,rootMargin:`${e}px 0px ${e}px 0px`,threshold:0};return this.isInViewport()?this.getVariation():new Promise(n=>{let i=new IntersectionObserver((o,s)=>{o.forEach(async a=>{if(a.isIntersecting){w.log(`${this.engagementTrigger} root container is near the viewport. Fetching variation`);let c=await this.getVariation();n(c),s.unobserve(this.rootContainer)}})},r);i.observe(this.rootContainer),this.observers.push(i)})}attachScroll(){this.scrollSubscription=mi(window,"scroll").pipe(mr(t.DEBOUNCE_TIME)).subscribe(()=>{this.checkAndSendEvent()})}async checkAndSendEvent(){let e=this.engagementTrigger.shortID;if(t.engagementIDsWithTrackedDisplay.has(e)||!this.isInViewport())return;let n={};this.triggerContext.triggerData.items?.length&&(n.promotedMIDs=this.engagementTrigger.items?.map(s=>s.mID));let i=this.isExclusionWithBVariation?"CE Campaign Holdout":"CE Trigger Displayed",o=new Ie(i,n,this.engagementTrigger);o.name==="CE Campaign Holdout"&&(o.trigger.holdout=!0),this.eventAPIService.sendSilently(o),t.engagementIDsWithTrackedDisplay.add(e),this.scrollSubscription.unsubscribe()}generateParentElementID(){return`letscooee-${this.engagementTrigger.shortID}`}createAngularWidget(e){let r=this.widgetElement=document.createElement(e);return r.cart=ye.getCurrent(),r.triggerContext=this.triggerContext,r.engagementTrigger=this.engagementTrigger,r.setAttribute("engagement",this.engagementTrigger.shortID),this.rootContainer.appendChild(r),this.addToRendered(),r}getParentElement(e,r=document){let n=r.getElementById(e);if(n)return n;let i=this.engagementTrigger.objective.toLowerCase().replaceAll("_","-"),o=this.engagementTrigger.shortID;return n=document.createElement("div"),n.id=e,n.className=`letscooee letscooee-engagement engagement-${o} lc-${i}`,n.dataset.engagementId=o,this.engagementTrigger.id==="preview"&&(n.className+=" letscooee-preview"),n.style.display="block",n.style.minHeight="0.5px",n.style.minWidth="0.5px",n}startRendering(){let e=this.rootContainer;this.triggerContext.triggerData.hasSwiperElement()&&(e=this.rootContainer?.shadowRoot||this.rootContainer?.attachShadow({mode:"open"}),Rf(e)),zh(jp(qs,{element:this.widget.cont,triggerContext:this.triggerContext,elements:this.widget.elems}),e),this.addToRendered()}isInViewport(){let e=this.rootContainer?.getBoundingClientRect();if(!e)return!1;let r=window.innerHeight||document.documentElement.clientHeight,i=(Math.min(e.bottom,r)-Math.max(e.top,0))*e.width,o=e.width*e.height,s=i/o*100;return this.engagementTrigger.isAnySplit()?s>0:s>=30}async getWidgetContainer(e){if(this.rootContainer?.isConnected)return this.rootContainer;let r=await this.createParentElementWithPlacement(e);if(r)return r;let n=`.letscooee[data-engagement-id="${this.triggerContext.triggerData.shortID}"]`;return document.querySelector(n)}async createParentElementWithPlacement(e){let r=this.engagementTrigger.placement;if(!r?.selector)return w.info(`\u26A0\uFE0F${this.engagementTrigger} does not have a selector`),null;let n=r.selector,i;if(n.includes(":shadow")){let c=n.split(":shadow");i=(await Hi(c[0].trim()))?.shadowRoot,n=c[1].trim(),i&&Rf(i,!1)}w.verbose(`${this.engagementTrigger} attempt to render ${r.position} "${n}"`);let o=await Hi(n,10,i??document);if(!o)return w.warn(`${this.engagementTrigger} no placement found with ${n}`),null;let s=this.generateParentElementID(),a=this.getParentElement(s);if(!e)return a;switch(r.position){case Ti.BEFORE:{o.parentElement?.insertBefore(a,o);break}case Ti.INSIDE_FIRST:{o.insertBefore(a,o.firstChild);break}case Ti.INSIDE_LAST:{o.appendChild(a);break}case Ti.AFTER:default:o.parentElement?.insertBefore(a,o.nextSibling)}return a}async runChoresBeforeRender(){if(this.isExclusionWithBVariation)return;if(!this.isAllOkToRender()){w.info(`\u26A0\uFE0F ${this.engagementTrigger} could not be rendered`);return}w.verbose(`${this.engagementTrigger} will be rendered`);let e;try{e=await Ml(this.engagementTrigger)}catch(r){w.info(`\u203C\uFE0F${this.engagementTrigger} could not render as items failed to refresh`,r);return}if(!this.engagementTrigger.isCollectionPromoted()&&!e?.length&&this.engagementTrigger.isProductPromoted()){w.info(`\u203C\uFE0F${this.engagementTrigger} could not render as no products promoted`);return}this.engagementTrigger.items=e,this.startRendering()}updateItems(e,r){let n=this.getItemDiff(e,r),i=this.getItemDiff(r,e);r.push(...n);for(let o of i)Xr.remove(r,o)}getItemDiff(e,r){return e.filter(n=>!r.some(i=>i.selectedOrFirstVariant.value.mID===n.selectedOrFirstVariant.value.mID))}};var _t=class extends xt{static renderedEngagements=new Set;constructor(e){super(e)}observeWidgetContainerInViewport(){return this.getVariation()}generateParentElementID(){let e=super.generateParentElementID();return this.engagementTrigger.isSubscriptionUpsell()&&(e+=`-${this.engagementTrigger.items[0].selectedOrFirstVariant.value.mID}`),e}async checkAndSendEvent(){if(!rt.get().isOpen()&&this.runtimeData.pageName!=="cart"){w.log("Do not send display event as neither the cart drawer nor the cart page is open.");return}return super.checkAndSendEvent()}};var Fl=class t{constructor(e,r){this.engagementTrigger=e;this.element=r;this.cartItems=ye.getCurrent().items}cartItems;static renderCartUpsell(e){let r=e.placement;if(!r?.selector){w.warn(`No placement available for ${e.objective}`,e.shortID);return}let n=Array.from(document.querySelectorAll(r.selector));if(!n?.length){w.warn(`No placement found for ${e.objective}`,e.shortID);return}for(let i of n)new t(e,i).render()}render(){let e=this.findCartItemFromHTMLElement();if(!e||this.engagementTrigger.skipSubscribedItems&&e.selling_plan_allocation)return;let r=this.engagementTrigger.items.find(d=>d.mID===e.product_id.toString());if(!r)return;let n=r.vars.find(d=>d.mID===e.id.toString());if(!n)return;let i=new Fr(n),o=e.selling_plan_allocation?.selling_plan;if(o)for(let d of i.sellingPlans??[])d.mID===o.id.toString()&&(d.isSelected=!0,i.changeSellingPlan(d));let s=new At(r);s.vars=[i],s.selectedOrFirstVariant.value=i;let a=`lc-cart-item-${this.engagementTrigger.shortID}-${r.mID}`;this.element.classList.add(a);let c=new Tt(this.engagementTrigger);c.placement.selector=`.${a}`,c.items=[s];let p=new _t(c);p.renderSilently(),this.watchForCartItemDeletion(p,a)}watchForCartItemDeletion(e,r){let n=new MutationObserver(i=>{i.forEach(o=>{o.removedNodes.forEach(s=>{s===this.element&&(w.verbose(`${r} has been removed`),e.destroy(),n.disconnect())})})});n.observe(this.element.parentElement,{childList:!0,subtree:!0})}findCartItemFromHTMLElement(){let e=this.element.innerHTML;return this.cartItems.find(r=>{if(!(e.includes(r.url)||e.includes(r.variant_id))&&(!e.includes(r.product_title)||r.variant_title&&!e.includes(r.variant_title)))return!1;let n=r.selling_plan_allocation?.selling_plan?.name;return!(n&&!e.includes(n))})}};var Hl=class extends _t{ctaExecutor=new Bn;constructor(e){super(e)}async update(e){await super.update(e),this.engagementTrigger.progressBarConfig.update(e.progressBarConfig),await this.checkMilestoneTryCatch(),this.widgetElement.update()}isAllOkToRender(){return!!this.engagementTrigger.progressBarConfig}startRendering(){if(this.widgetElement?.isConnected){this.widgetElement.update(),this.addToRendered();return}this.createAngularWidget("cooee-progressbar"),this.checkMilestoneTryCatch()}async checkMilestoneTryCatch(){try{await this.checkMilestone()}catch(e){we(e,"apply-milestones",{engagementTrigger:this.engagementTrigger})}}async checkMilestone(){let e=await ye.getCurrent().getNormalisedCart(),r=this.engagementTrigger.progressBarConfig,n,i=[],o=[],s=[],a,c,p=[...r.milestones];for(let f of p){if(f.rewardType!==pu.FREE_AUTO_GIFT)continue;if(f.isUIOnly&&!f.allowATC){w.verbose(`Skipping milestone ${f.label} as it is UI only and does not allow ATC`);continue}let E=f.items[0],y=f.reached,T=e.items.find(D=>(D.vID===E.vID||D.mID===E.mID)&&D.properties._letscooee_campaign===this.engagementTrigger.shortID);y&&(a=f,c=T),T&&i.push(T),!y&&T&&r.removeIneligibleItem?(w.verbose(`Removing free gift ${T.vID} from cart`),s.push(T)):y&&!T&&(w.verbose(`Adding free gift ${E.vID} to cart`),o.push(E))}r.restrictToLatestFreebie&&a&&(c?(i=i.filter(f=>f.vID!==c.vID),o=[]):o=[a.items[0]],s.push(...i)),s.length&&await this.removeFreeGifts(s),o.length&&(n=await this.ctaExecutor.addToCart(o,this.engagementTrigger));let d=r.coupons;if(d?.length)try{await zr.applyWithStorefront(d.map(f=>f.couponCode)),rt.get().refreshUI(n,!1)}catch(f){we(f,"cart-apply-discount",{extra:{coupons:d},engagementTrigger:this.engagementTrigger})}}async removeFreeGifts(e){await Promise.all(e.map(r=>this.ctaExecutor.updateLineItem(r,{quantity:0})))}};var Ks=class extends _t{constructor(e){super(e)}async update(e){await super.update(e),this.engagementTrigger.content.update(e.content),this.widgetElement.update()}isAllOkToRender(){return!!this.engagementTrigger.content}startRendering(){if(this.widgetElement?.isConnected){this.addToRendered();return}this.createAngularWidget("cooee-savings-bar")}};var $l=class extends xt{constructor(e){super(e)}isAllOkToRender(){return!!this.engagementTrigger.content?.videoConfig}startRendering(){if(this.widgetElement?.isConnected){this.addToRendered();return}let e,r=this.engagementTrigger.content.videoConfig;r.template==="FLOATING_POPUP"?e="cooee-video-popup":r.template==="STORY"?e="cooee-video-stories":e="cooee-video-playlist",this.createAngularWidget(e)}};var Vl=class extends xt{constructor(e){super(e)}isAllOkToRender(){return!0}startRendering(){if(this.widgetElement?.isConnected){this.addToRendered();return}this.createAngularWidget("cooee-sticky-atc")}};var Wl=class extends xt{constructor(e){super(e)}isAllOkToRender(){return!0}startRendering(){let e=this.getParentElement(`inner-letscooee-${this.engagementTrigger.shortID}`);this.rootContainer.appendChild(e),document.addEventListener("letscooee:inbound:cta:add-bundle",this.inboundCTAListener.bind(this),!1)}async inboundCTAListener(e){let r=this.engagementTrigger,n=`Engagement(id: ${r.engagementID}, shortID: ${r.shortID})`,i=e.detail;if(!rr.hasKeys(i)){w.error(`No detail received for ${n}`);return}w.log("Detail received for BYOB",i);let o=i.campaignID??i.campaignId??i.campaign_id;if(o!==r.shortID&&o!==r.engagementID){w.warn(`Current ${n} is not BYOB. Received: ${o}`);return}let s=i.items;if(!s?.length)return;let a=s.map(c=>new Ct({mID:c.product_id,vID:c.variant_id,quantity:c.quantity||1}));await new mn(this.triggerContext).execute({embeddedItems:a,clickAction:{at:be.ADD_BUNDLE,applyDiscount:!0}})}};var Ro=class{runtimeData=pe.get();processCartWidgetResponse(e){this.runtimeData.isCartDirty=!1,this.runtimeData.cartEngagements=e;let r=[..._t.renderedEngagements];_t.renderedEngagements.clear();for(let n of e){w.info(`${n} received as cart embed`);let i=this.isAlreadyRendered(n,r);if(i>-1){this.rerender(i,n,r);continue}w.verbose(`${n} is new`),n.isProgressBar()?new Hl(n).renderSilently():n.isSubscriptionUpsell()?Fl.renderCartUpsell(n):n.isSavingsBar()?new Ks(n).renderSilently():new _t(n).renderSilently()}this.removeOldWidgets(r)}processPageWidgetResponse(e){let r=[...xt.renderedEngagements];xt.renderedEngagements.clear();for(let n of e){w.info(`${n} received as page embed`);let i=this.isAlreadyRendered(n,r);if(i>-1){this.rerender(i,n,r);continue}w.verbose(`${n} is new`),n.isShoppableVideo()?new $l(n).renderSilently():n.isBYOB()?new Wl(n).renderSilently():n.isStickyATC()?new Vl(n).renderSilently():n.isSavingsBar()?new Ks(n).renderSilently():new xt(n).renderSilently()}this.removeOldWidgets(r)}isAlreadyRendered(e,r){let n=r.findIndex(i=>i.isSameTrigger(e));return n<0||e.isSubscriptionUpsell()?-1:n}async rerender(e,r,n){let[i]=n.splice(e,1);if(i)try{await i.updateAndReRender(r)}catch(o){we(o,"update-and-re-render",{engagementTrigger:r})}}removeOldWidgets(e){for(let r of e)r.destroy()}};Zy(document.body,{childList:!0,subtree:!0},500,Qy).subscribe(()=>{xt.renderedEngagements.forEach(e=>e.rerender()),_t.renderedEngagements.forEach(e=>e.rerender())});var Rr=class t extends Un{static INSTANCE;loadPageWidgetsSubject=new jt;loadCartWidgetsSubject=new jt;pageWidgetLoadCount=0;constructor(){super();let e=this.loadPageWidgetsSubject.pipe(So(n=>n)),r=this.loadPageWidgetsSubject.pipe(So(n=>!n),mr(500));em(e,r).subscribe(()=>{this.loadPageWidgetsFromServer().catch(n=>w.error("Unable to initiate load page widgets",n))}),this.loadCartWidgetsSubject.pipe(mr(500)).subscribe(()=>{this.loadCartWidgetsFromServer().catch(n=>w.error("Unable to initiate load cart widgets",n))}),window.CooeeSDK.cartChange$.subscribe(()=>{this.loadWidgetsSilently()})}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}loadOrRenderWidgetsAfterCartChange(){this.runtimeData.isCartDirty?this.loadWidgetsSilently():this.renderCachedCartWidgets()}loadPageWidgetsSafe(e=!1){fr(ct.replaySubject).then(()=>{this.loadPageWidgetsSubject.next(e)})}loadCartWidgetsSafe(){fr(ct.replaySubject).then(()=>{this.loadCartWidgetsSubject.next()})}loadWidgetsSilently(){fr(ct.replaySubject).then(()=>{this.loadCartWidgetsSafe(),this.loadPageWidgetsSafe()})}async getVariation(e){let r=await this.getAllContext();return Object.assign(e,r),this.backendAPIService.post("/v1/engagement/get-variant",e)}async loadPageWidgetsFromServer(){this.pageWidgetLoadCount++,this.pageWidgetLoadCount===1?w.info("Fetch page widgets (after \u23F0",pe.get().getSDKLoadTimeDiff()+" of SDK load)"):w.info("Fetch page widgets");let e=await this.getAllContext(),r=_({},e);this.backendAPIService.post("/v1/engagement/page-widgets",r).then(n=>{w.info(`Page widgets loaded in \u23F0 ${vr(n.timeTakenMs)}`);let i=n.data.widgets.map(o=>new Tt(o));new Ro().processPageWidgetResponse(i)}).catch(n=>{w.error("Error sending widget getter",n)})}async loadCartWidgetsFromServer(){w.info("Fetch cart widgets");let e=await this.getAllContext(),r=_({},e);this.backendAPIService.post("/v1/engagement/cart-widgets",r).then(n=>{w.info(`Cart widgets loaded in \u23F0 ${vr(n.timeTakenMs)}`);let i=n.data.widgets.map(o=>new Tt(o));new Ro().processCartWidgetResponse(i)}).catch(n=>{w.error("Error sending widget getter",n)})}renderCachedCartWidgets(){new Ro().processCartWidgetResponse(this.runtimeData.cartEngagements)}};var jl=class t{static INSTANCE;constructor(){this.init()}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}init(){Bs.get("conf",{}).then(e=>this.updateGlobalConfig(e))}async processAppConfigurations(e){w.verbose("Received app configuration",e),e.currencyCount=e.currencies?.length;let r=this.updateGlobalConfig(e);Bs.set("conf",r).catch(n=>w.error(n)),Bl.processConfiguration(),r.website&&(zg(r.website.commonJS),xf(r.website.commonCSS)),window.CooeeSDK.cartDrawerToggle$.subscribe(async({open:n})=>{w.info("Cart drawer is now",n?"open":"closed"),n&&(le.get(Rr).loadOrRenderWidgetsAfterCartChange(),await this.trackViewCartEvent())})}updateGlobalConfig(e){let r=Me.globalRef.config.update(e);return rt.forceUpdate(),w.verbose("App configurations",r),r}async trackViewCartEvent(){let e=await ye.getCurrent().getNormalisedCart(),r={value:e.amount,currency:e.currency},n={items:e.items,amount:r,drawer:!0};le.get(Re).sendSafe(new Ie("View Cart",n))}};var ct=class t{static replaySubject=new Rs(1);static INSTANCE;backendAPIService=Nt.getInstance();coreService=jl.getInstance();userID="";deviceID="";appID="";shopifyShop="";constructor(){}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}async populateAuthDataFromStorage(){await this.getOrSetDeviceIDSafe(),this.userID=await Ke.get("id"),this.updateAPIClient()}isAuthenticated(){return!!this.deviceID}authenticate(e){if(w.verbose("Initialising SDK",e),Gy(navigator.userAgent)){w.info("This seems to be a bot. Disabling SDK");return}this.appID=e.appID,this.shopifyShop=e.shopifyShop,this.checkForNewSessionOnPageLoad().then(async()=>{t.replaySubject.next(!0),t.replaySubject.complete()}).catch(r=>{w.error("Unable to initiate session",r)})}async storeAndPopulateAuthData(e){e&&(e.userID&&(this.userID=e.userID,await Ke.set("id",e.userID)),e.deviceID&&(this.deviceID=e.deviceID,await Ke.set("did",e.deviceID)),this.updateAPIClient())}async checkSessionAndGetContext(){return await this.checkForNewSessionUnsafe(!1),this.getContext()}async checkForNewSessionOnPageLoad(){await this.checkForNewSessionSafe(!0)}async getOrSetDeviceIDSafe(){await hc.request("gen_did",async()=>{let e=await Ke.get("did");e||(e=new Et().toHexString(),await Ke.set("did",e)),this.deviceID=e,w.info("Device ID:",this.deviceID)})}async getContext(){Rt.set("lastUsedTime",new Date().getTime());let[e,r,n]=await Promise.all([Rt.get("id",""),Ke.get("sessionNumber",1),Rt.get("landing",{})]);return ki({"cooee_session.number":r}),Ka("Visitor Session",{id:e,number:r,landing_page:n}),{sessionID:e,sessionNumber:r,landingPage:n}}async checkForNewSessionSafe(e){await this.checkForNewSessionUnsafe(e)}async checkForNewSessionUnsafe(e){let r=!1;if(await this.isNewSessionRequired()?(w.info("New session to be started"),await this.startNewSession(),e=!0,r=!0):await this.notSynced()&&(r=!0),e){let n=await this.getContext();w.info(`Session ID: ${n.sessionID} & number: ${n.sessionNumber}`),await this.validateSessionFromServer(Z(_({},n),{newSession:r})),await Rt.set("synced",!0)}}async startNewSession(){w.verbose("Starting new session"),await Rt.clear(),w.verbose("Cleared SessionStorage before starting new session");let e=new Date,r=new Et().toHexString();w.verbose("New session ID to be used",r);let n=await Ke.get("sessionNumber",0)+1;await Promise.all([Ke.set("sessionNumber",n),Rt.set("id",r),Rt.set("lastUsedTime",e.getTime()),Rt.set("landing",ra())])}async isNewSessionRequired(){if(!await Rt.get("id"))return!0;let e=await Rt.get("lastUsedTime",0);return e?(new Date().getTime()-e)/1e3>1800:!0}async notSynced(){return!await Rt.get("synced",!1)}async getSessionValidateData(e){let r=await qy(),n=Sl();return Z(_(_({deviceID:this.deviceID,deviceProps:r,appID:this.appID,shopifyShop:this.shopifyShop},e),n),{sdk:Qs,ad:wl.getAdParams(),occurred:g0(pe.get().jsLoadTime),properties:{}})}async validateSessionFromServer(e){w.verbose("Validating session with server"),await this.populateFirstSeen(),this.backendAPIService.setShopName(this.shopifyShop);let r=await this.getSessionValidateData(e);try{let n=await this.backendAPIService.validateSession(r),i=n.data;w.info(`Auth finished in \u23F0 ${vr(n.timeTakenMs)}`),w.verbose("Validate session Response",i),await this.coreService.processAppConfigurations(i.appSettings),await this.storeAndPopulateAuthData(i)}catch(n){throw w.error(n),n}}async populateFirstSeen(){let e=await Ke.get("firstSeen"),r=e?new Date(e):new Date;e||await Ke.set("firstSeen",r.toISOString()),this.backendAPIService.setFirstSeen(r),Ka("Visitor Info",{first_seen:r.toISOString()})}updateAPIClient(){this.userID&&w.info("User ID:",this.userID),xo.trackDeviceID(this.deviceID),this.backendAPIService.setDeviceId(this.deviceID),Ka("Visitor Info",{device_id:this.deviceID,user_id:this.userID}),Ih({id:this.deviceID})}};function g0(t){return(new Date().getTime()-t.getTime())/1e3>1800?new Date:t}var Nt=class t{static INSTANCE;deviceID="";shopName="";firstSeen="";constructor(){}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}async validateSession(e){return this.post("/v1/event/validate-session",e)}updateProfileSafe(e){fr(ct.replaySubject).then(()=>this.updateProfile(e??{}))}updateProfile(e){this.put("/v1/user/update",e).then(async r=>{w.verbose("Updated user profile"),await ct.getInstance().storeAndPopulateAuthData(r.data)}).catch(r=>{w.error("Error saving user profile",r)})}generateDiscount(e){return this.post("/v1/event/generate-discount",e)}updateDevicePropsSafe(e){fr(ct.replaySubject).then(()=>this.updateDeviceProps({props:e}))}updateDeviceProps(e){this.put("/v1/device/update",e).then(()=>{w.verbose("Updated device properties")}).catch(async r=>{w.error("Error saving device property",r)})}setDeviceId(e){this.deviceID=e??""}setShopName(e){this.shopName=e??""}setFirstSeen(e){this.firstSeen=e?.toUTCString()??""}get(e){return this.requestBackend("GET",e)}post(e,r){return this.requestBackend("POST",e,r)}put(e,r){return this.requestBackend("PUT",e,r)}async requestBackend(e,r,n){if(!di.isECommerceApp()&&!di.getFlags().allowEvents)return w.log(`Rejecting ${e} ${r} as this is not e-commerce app`),Promise.reject();r.startsWith("http")||(r=zt.apiURL+r);let i=this.getDefaultHeaders(),o="keepalive"in new Request(""),s=n?JSON.stringify(n):void 0;if(n&&!o&&s?.includes("CE App Background"))try{return this.performXMLHttpRequest(r,i,n)}catch(c){throw we(c,"http-request",{extra:{body:s}}),c}let a={method:e,headers:i,keepalive:!0};return n&&(a.body=s),Zr(r,a)}performXMLHttpRequest(e,r,n){return new Promise((i,o)=>{let s=new XMLHttpRequest;s.open("POST",e,!0),r.forEach((a,c)=>{s.setRequestHeader(c,a)}),s.onreadystatechange=()=>{if(s.readyState===XMLHttpRequest.DONE)if(s.status>=200&&s.status<300)try{if(s.getResponseHeader("Content-Type")?.includes("application/json")){let c=JSON.parse(s.responseText);i({data:c,headers:r,request:s,status:s.status,statusText:s.statusText})}else o(new Error("Content-Type of response header is not json"))}catch(a){o(a)}else o(new Error(`Received status - ${s.status}(${s.statusText})`))},s.onerror=()=>{o(new Error("Network error occurred during the request."))},s.send(JSON.stringify(n))})}getDefaultHeaders(){let e=new Headers;return e.set("content-type","application/json"),e.set("cooee-sdk",Qs),e.set("cooee-sdk-code",ym.toString()),e.set("cooee-sdk-version",Kr),e.set("cooee-first-seen",this.firstSeen),this.deviceID&&e.append("cooee-device-id",this.deviceID),this.shopName&&e.append("cooee-shop-name",this.shopName),zt.debug&&e.set("cooee-sdk-debug",String(1)),e}};var mn=class{constructor(e){this.triggerContext=e}backendAPIService=Nt.getInstance();eventAPIService=Re.getInstance();async execute(e){let r=pe.get().getCurrentItem(),n=e.clickAction;if(!n)return;let i=e.item,o=this.triggerContext,s=new Bn,a=o.triggerData.redirectBehaviour,c=!!o.triggerData.discount?.type&&!!n?.applyDiscount,p={selectedVariants:o.triggerData.nonMutableItems.map(N=>({itemMID:N.mID,mID:N.selectedOrFirstVariant.value.mID,variantID:N.selectedOrFirstVariant.value.mID})),eID:o.triggerData.engagementID,cID:o.triggerData.contentID},d="",f=[],E=[];if(i?E=[i.toEmbed()]:e.embeddedItem&&(E=[e.embeddedItem]),n.at===be.ADD_BUNDLE){let N=o.selectedItems;if(E=e.embeddedItems??N.map(k=>k.toEmbed()),o.shouldGiveFBTDiscount||e.embeddedItems?.length){let k;e.embeddedItems?k=e.embeddedItems.map(P=>({itemMID:P.mID,mID:P.vID,variantID:P.vID,quantity:P.quantity})):k=N.map(P=>({itemMID:P.mID,mID:P.selectedOrFirstVariant.value.mID,variantID:P.selectedOrFirstVariant.value.mID}));let G=o.triggerData.bundleFrom;o.triggerData.isBundleOnCartDrawer()&&G&&(k.push({itemMID:G.mID,mID:G.selectedOrFirstVariant.value.mID,isPrimary:!0}),E.unshift(G.toEmbed())),p.selectedVariants=k,o.triggerData.isBundleOnPDP()&&p.selectedVariants.forEach(P=>{P.mID===r.vID&&(P.isPrimary=!0)})}else p=void 0;f=e.embeddedItems??N}else if(n.at===be.INITIATE_CHECKOUT){let N=await ye.getCurrent().getNormalisedCart();E=N.items,p.selectedVariants=N.items.map(k=>({itemMID:k.mID,mID:k.vID}))}else if(n.at===be.ADD_TO_CART)f=i?[i]:[e.embeddedItem];else if(n.at===be.QUICK_VIEW){window.cooeeShowQuickItem(this.triggerContext,i),this.sendTriggerClicked(E,{from:"button"},e.video);return}else if(n.at===be.GO_TO_PRODUCT)d=i?zi("/products/"+i.slug):e.embeddedItem?.link;else if(n.at===be.GO_TO_URL){let N=Ui(n.gu?.u);N&&(d=N.href)}else if(n.at===be.UPGRADE_TO_SUBSCRIPTION){let N=await s.upgradeToSubscription(i,o.triggerData);this.triggerContext.triggerData.skipSubscribedItems&&this.triggerContext.renderer.destroy(),rt.get().refreshUI(N)}else if(n.at===be.GO_TO_COLLECTION){let N=this.triggerContext.triggerData.collections?.[0];N&&(d="collections/"+N.handle)}if(this.sendTriggerClicked(E,{from:"button"},e.video),w.verbose({redirectPath:d,redirectBehaviour:a,hasDiscount:c}),!c&&d){location.href=d;return}let y,T=!1;try{y=await this.getOrGenerateDiscountCode(p),w.verbose("Discount code (if any) to apply",y)}catch(N){if(!this.triggerContext.triggerData.isBYOB()){ev.default.error("Unable to get a discount code",N);return}}if(y&&n.at===be.COPY_COUPON_CODE)await s.copyDiscountCode(y);else if(n.at===be.BUY_NOW){let N=await s.createNewCart(r,y,o.triggerData);N&&(location.href=N);return}try{y&&await zr.applyWithStorefront([y])}catch(N){w.error(N),T=!0}let D;if(f?.length&&(D=await s.addToCart(f,o.triggerData)),T&&y){zr.navigate(y,a,d);return}if(d){location.href=d;return}zr.navigateWithoutDiscount(a,D)}sendTriggerClicked(e,r,n){let i=new Ie("CE Trigger Clicked",r,this.triggerContext.triggerData);i.items=e,i.setVideos(n),this.eventAPIService.sendSilently(i)}async getOrGenerateDiscountCode(e){let r=this.triggerContext.triggerData.discount;if(!r?.type)return;let n="";if(r.type===er.STATIC){if(!r.code)throw Sh("No discount code found","warning",{triggerContext:this.triggerContext}),new Error("No discount code found");return r.code}if(e){if(n=await this.generateDiscount(e),!n)throw w.error("No discount code found",e),new Error("Discount code not found or generated");return n}}async generateDiscount(e){try{return(await this.backendAPIService.generateDiscount(e)).data.code}catch(r){throw Sr("Failed to generate a discount code"),we(r,"backend-generate-discount",{triggerContext:this.triggerContext}),r}}};var Gl=class{eventAPIService;modifications=[];constructor(){this.eventAPIService=le.get(Hn)}execute(e){for(let r of e){if(!r.experimentConfig)continue;this.executeExperiment(r)&&this.trackExperimentRan(r)}if(document.querySelector("#lc-hide-body")?.remove(),!document.body){Da("No body element found","error");return}this.setupMutationObserver()}executeExperiment(e){let r=e.experimentConfig?.modifications;return r?.length?r.some(n=>{if(!n.cssSelector)return w.verbose("No CSS Selector available",e?.toString()),!1;this.modifications.push(n);let i=Array.from(document.querySelectorAll(n.cssSelector));return i?.length?(this.executeSingleModification(n,i),!0):!1}):(w.log("Nothing to experiment",e.toString()),!0)}executeSingleModification(e,r){if(r?.length)for(let n of r)Object.assign(n.style,e.style),e.type==="TEXT"&&e.text?n.innerHTML=e.text:e.type==="IMAGE"&&this.updateImage(e,n)}trackExperimentRan(e){if(e.id==="preview"){w.warn("Skipping experiment attribution as its preview",e.toString());return}this.eventAPIService.trackExperiment({name:"CE Experiment Start",experiment:new Dn(e)}).catch(r=>{w.error("Fail to track experiment",r)})}setupMutationObserver(){new MutationObserver(r=>{r.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof HTMLElement&&this.modifications.forEach(o=>{i.matches&&i.matches(o.cssSelector)?(w.verbose("Re-applying experiment",o.toString()),this.executeSingleModification(o,[i])):i.querySelectorAll&&(w.verbose("Re-applying experiment",o.toString()),this.executeSingleModification(o,Array.from(i.querySelectorAll(o.cssSelector))))})})})}).observe(document.body,{childList:!0,subtree:!0})}updateImage(e,r){let n=e.image?.lg?.src,i=e.image?.sm?.src;!n&&!i||(r instanceof HTMLPictureElement?this.updatePictureElement({desktop:n,mobile:i},r):this.updateImageElement({desktop:n,mobile:i},r))}updateImageElement(e,r){Cr()&&e.mobile?(r.setAttribute("src",e.mobile),r.removeAttribute("srcset")):e.desktop&&(r.setAttribute("src",e.desktop),r.removeAttribute("srcset"))}updatePictureElement(e,r){if(r.innerHTML="",e.mobile){let i=document.createElement("source");i.srcset=e.mobile,i.media="(max-width: 767px)",r.append(i)}if(e.desktop){let i=document.createElement("source");i.srcset=e.desktop,i.media="(min-width: 768px)",r.append(i)}let n=document.createElement("img");n.src=e.desktop??e.mobile??"",r.append(n)}};var Hn=class t extends Un{static INSTANCE;constructor(){super()}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}fetchExperimentsSilently(){this.fetchExperimentsSafe().catch(e=>we(e,"fetch-experiments"))}async trackExperiment(e){let r=await this.getAllContext(),n=_(_({},e),r);await this.backendAPIService.post("/v1/event/experiment",n)}async fetchExperimentsSafe(){if(!this.runtimeData.activeExperiments)return;ct.getInstance().isAuthenticated()?await this.fetchExperiments():(await fr(ct.replaySubject),await this.fetchExperiments())}async fetchExperiments(){w.info("Fetch experiments after \u23F0",pe.get().getSDKLoadTimeDiff()+" of SDK load");let e=await this.getAllContext(),r=_({},e);this.backendAPIService.post("/v1/engagement/experiments",r).then(async n=>{w.info(`Experiments fetched in \u23F0 ${vr(n.timeTakenMs)}`);let i=n.data.experiments.map(o=>new Tt(o));new Gl().execute(i)}).catch(n=>{w.error("Error sending experiment getter",n)})}};var zl=class{runtimeData=pe.get();widgetAPIService=le.get(Rr);experimentAPIService=le.get(Hn);meddle(){let e=Me.globalRef;e.account=e.account??[],e.profile=e.profile??[],e.events=e.events??[],e.page=e.page??[],this.meddlePage(),this.meddleAccount(),this.meddleEvents(),this.meddleProfile(),this.exposeMethods()}exposeMethods(){let e=Me.globalRef;e.loadPageWidgets=()=>{this.widgetAPIService.loadPageWidgetsSafe()},e.loadCartWidgets=()=>{this.widgetAPIService.loadCartWidgetsSafe()},e.loadExperiments=()=>{this.experimentAPIService.fetchExperimentsSilently()},e.testCartUpdate=this.testCartUpdate.bind(this),e.previewWidget=Me.previewWidget.bind(Me),e.previewPopup=Me.previewPopup.bind(Me),e.executeCTA=(r,n)=>{new mn(r).execute(n)},e.sendEvent=r=>{Re.getInstance().sendSafe(r)}}overwritePush(e,r){sn(e,"push",r)}meddleAccount(){this.overwritePush(Me.globalRef.account,(...e)=>{this.processAccount(e[0])}),Me.globalRef.account.forEach(this.processAccount.bind(this))}meddleEvents(){this.overwritePush(Me.globalRef.events,(...e)=>{this.processEvent(e[0])}),Me.globalRef.events.forEach(this.processEvent.bind(this))}meddleProfile(){this.overwritePush(Me.globalRef.profile,(...e)=>{this.processProfile(e[0])}),Me.globalRef.profile.forEach(this.processProfile.bind(this))}processAccount(e){e&&(e.appID&&Me.authenticate(e),e.flags&&di.setFlags(e.flags))}processEvent(e){e&&(_m.includes(e[0])?Me.sendEvent(e[0],e[1],_({occurred:this.runtimeData.jsLoadTime},e[2])):Me.sendEvent(e[0],e[1],e[2]))}processProfile(e){e&&Me.updateProfile(e)}processPageName(e){e&&Me.setPageName(e)}meddlePage(){this.overwritePush(Me.globalRef.page,(...e)=>{this.processPage(e[0])}),Me.globalRef.page.forEach(this.processPage.bind(this))}processPage(e){e.currentItem&&this.runtimeData.setCurrentItem(e.currentItem),e.currency&&(this.runtimeData.currencyCode=e.currency),e.shopCurrency&&(this.runtimeData.shopCurrencyCode=e.shopCurrency),e.moneyFormat&&(this.runtimeData.moneyFormat=e.moneyFormat),e.jsLoad&&(this.runtimeData.jsLoadTime=e.jsLoad),e.locale&&(this.runtimeData.locale=e.locale),e.pageName&&Me.setPageName(e.pageName),e.activeExperiment&&(this.runtimeData.activeExperiments=e.activeExperiment),e.cart&&ye.getCurrent().update(e.cart),e.customContext&&(this.runtimeData.customContext=_(_({},this.runtimeData.customContext),e.customContext))}async testCartUpdate(){if(this.runtimeData.pageName!=="product"){window.alert("This feature is only available on a product page");return}let e=py();if(e||(e=this.runtimeData.getCurrentItem()?.vID),!e){window.alert("Could not find a variant to test. Please try a different product page");return}let r=new Tt({id:"preview",shortID:"1",redirectBehaviour:tr.CART_DRAWER});await new mn(new Dr(new Date,r)).execute({clickAction:{at:be.ADD_TO_CART},embeddedItem:new Ct({vID:e})})}};var Ao=class{static SESSION_STORAGE=window.sessionStorage;static SESSION_STORAGE_KEY_PREFIX="cooee".concat("-");static getString(e,r){return this.getItem(e)||r}static setString(e,r){this.setItem(e,r)}static remove(e){this.removeItem(e)}static getItem(e){return this.SESSION_STORAGE.getItem(this.SESSION_STORAGE_KEY_PREFIX.concat(e))}static setItem(e,r){this.SESSION_STORAGE.setItem(this.SESSION_STORAGE_KEY_PREFIX.concat(e),r)}static removeItem(e){this.SESSION_STORAGE.removeItem(this.SESSION_STORAGE_KEY_PREFIX.concat(e))}};var Do=class t{static INSTANCE;static DEBOUNCE_TIME=1e3;static THRESHOLD=10;lastPercent=0;_lastScreenOrScroll=new Date;constructor(){}set lastScreenOrScroll(e){this._lastScreenOrScroll=e}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}resetScrollID(e){Ao.remove("sleid"),this.lastScreenOrScroll=e??new Date}listen(){if(window.scrollY){let e=this.getPercentScrolledY();this.shouldSendScroll(e)&&this.sendScroll(e)}Fi(()=>{this.observeWindowScroll()})}observeWindowScroll(){mi(window,"scroll").pipe(mr(t.DEBOUNCE_TIME),fn(()=>{let e=this.getPercentScrolledY();if(e>100){w.warn("Received scroll percent is more than 100",e);return}if(this.shouldSendScroll(e))return e})).subscribe(e=>{this.sendScroll(e)})}shouldSendScroll(e){return Math.abs(this.lastPercent-e)>=t.THRESHOLD||this.lastPercent!==e&&e===100}sendScroll(e){if(e==null)return;let r={percent:e,timeMS:new Date().getTime()-this._lastScreenOrScroll.getTime()};this.lastPercent=e;let n=Ao.getString("sleid",""),i=new Ie("CE Scroll",r,null,n);le.get(Re).sendSafe(i),Ao.setString("sleid",i.id.toHexString()),this._lastScreenOrScroll=new Date(i.occurred)}getPercentScrolledY(){let e=window.document.body.scrollHeight,r=window.innerHeight;return Math.ceil((window.scrollY+r)/e*100)}};var Yl=class t{static ACTIVE_DURATION="aDur";static INACTIVE_DURATION="iaDur";runtimeData=pe.get();listen(){document.onvisibilitychange=()=>{document.visibilityState==="visible"?this.onVisible():document.visibilityState==="hidden"&&this.onHidden()}}async onVisible(){}async onHidden(){let e=await this.runtimeData.setInactive();if(e===0){w.info("Not sending background event as user was inactive on website");return}w.info(`Sending background event with ${e} seconds`);let r={};r[t.ACTIVE_DURATION]=e,le.get(Re).sendSafe(new Ie("CE App Background",r))}};var ql=class{listen(){return this.overwriteFetchMethod(),this}overwriteFetchMethod(){let e=this,r=window.fetch;window.fetch=async function(n,i){try{await e.modifyRequest(n,i)}catch(o){we(o,"modify-graphql-request",{extra:{body:JSON.stringify(i?.body)}})}return r(n,i)},w.verbose("Securely overwritten window.fetch method for graphql query")}async modifyRequest(e,r){let n=typeof e=="string"?e:e instanceof Request?e.url:"";if(!(n.includes("graphql.json")&&r?.method==="POST")||!r.body)return;let i;if(typeof r.body=="string")try{i=JSON.parse(r.body)}catch{return}else i=r.body;i?.variables?.input&&(w.verbose("Intercepted fetch request of:",n),i?.query.includes("cartCreate")&&(r.body=await this.updatedBody(i),this.sendBuyNowEvent()))}async updatedBody(e){let r=e.variables.input.attributes??[],n=await Qa("Buy Now");return e.variables.input.attributes=[...r,...n],JSON.stringify(e)}sendBuyNowEvent(){let e=pe.get().getCurrentItem();if(!e)return;let r=new Ie("Buy Now Clicked",{items:[e]});le.get(Re).sendSafe(r)}};var No=class{constructor(e,r){this.selectors=e;this.eventName=r;this.selectorString=e.join(",")}static INSTANCE;elements;selectorString;clickListenerCallback=e=>{let r=e.currentTarget,n=new Ie(this.eventName,{class:r.className||void 0,tagName:r.tagName||void 0,id:r.id||void 0});le.get(Re).sendSafe(n),this.removeClickListener(this.clickListenerCallback)};listenSilently(){this.listen().catch(e=>w.error(e))}async listen(){this.elements=await kp(this.selectorString),this.elements.forEach(e=>{e.addEventListener("click",this.clickListenerCallback)})}removeClickListener(e){this.elements?.forEach(r=>{r.removeEventListener("click",e)})}};var Kl=class t extends No{static selectors=[".product__thumbnail-list-inner > button","product-gallery-navigation > button",".product-media--thumb-container",".product-images-inner > img",".m-product-media",".swiper-button-control",".media__thumb",".slick-arrow",".productView-img-container.product-single__media",".product-gallery__thumbnail_item_inner"];constructor(){super(t.selectors,"Item Thumbnail Clicked")}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}};var Xl=class t extends No{static selectors=[".jdgm-widget.jdgm-preview-badge.jdgm-preview-badge--with-link.jdgm--done-setup","reviewsio-product-ratings",".ruk_rating_snippet.tracked:not(.hidden)","a > .loox-rating",".yotpo-reviews-star-ratings-widget",".yotpo.lp-hero__reviews",".pr-rating > a",".rivyoReviewWidget"];constructor(){super(t.selectors,"Review Clicked")}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}};var Jl=class{selector=[".gokwik-checkout button","button.cart__checkout-button","button.cart__checkout","button#checkout","button#checkout2",'button[id*="checkout" i]','button[name*="checkout" i]','button[class*="checkout" i]'].join(",");listen(){Fi(()=>{w.verbose("Execution order:","document ready"),this.useLocationHash()})}useLocationHash(){let e=window.location.hash?.substring(1);if(e)if(e.includes("initiate-checkout")){document.dispatchEvent(new Event("letscooee:outbound:third-party-initiate-checkout"));let r=document.querySelector(this.selector);if(!r){w.verbose("No clickable cart checkout button found");return}w.verbose("Clickable cart checkout button found",r),r.click()}else e.includes("open-cart-drawer")&&rt.get().open()}};var Xs=class{static attachCheckoutListener(){window.gokwikSdk&&window.gokwikSdk.on("checkout_initiated",async()=>{let e=await ye.getCurrent().getNormalisedCart(),r={via:"GoKwik",items:e.items,cartToken:e.token,amount:{value:e.amount,currency:e.currency}},n=new Ie("Checkout Started",r);le.get(Re).sendSafe(n)})}};var Ql=class{static watch(){let e=su();(e==="1"||e==="on")&&Nt.getInstance().updateDevicePropsSafe({debugTill:this.getDebugMillis()}),e==="on"?sessionStorage.cooeeDebug="1":e==="off"&&sessionStorage.removeItem("cooeeDebug"),sessionStorage.cooeeDebug&&this.renderDebugBar()}static renderDebugBar(){let e=document.createElement("cooee-debugger");e.logs=this.logs,Fi(()=>{document.body.appendChild(e)})}static getDebugMillis(){return new Date().getTime()+360*60*1e3}};var Me=class{static globalRef;static authenticated;static async initForMerchantWebsiteOnly(e){if(window.cooeeSDKPreview)return;let r=(window.CooeeSDK?.pageLoadTime??e).getTime()-e.getTime();w.info(`Initialising SDK after ${vr(r)} of page load`),this.initGlobalReference(e),await le.get(ct).populateAuthDataFromStorage(),this.autoAuthenticate(),new zl().meddle(),Rm(),le.get(Rr).loadPageWidgetsSafe(!0),le.get(Hn).fetchExperimentsSilently(),new Yl().listen(),new vi().listen(),new ql().listen(),new Jl().listen(),le.get(Do).listen(),le.get(Xl).listenSilently(),le.get(Kl).listenSilently(),this.attachGoKwikListeners(),this.setupPreviewListeners(),Ql.watch()}static async initForAll(){this.injectWidgetAssets()}static initGlobalReference(e){window.CooeeSDK||sn(window,"CooeeSDK",{}),this.globalRef=window.CooeeSDK,sn(this.globalRef,"config",new Je),sn(this.globalRef,"runtimeData",new pe(e)),sn(this.globalRef,"uaParser",new Tr,!0),sn(this.globalRef,"cartChange$",vi.cartChange$.asObservable()),sn(this.globalRef,"cartDrawerToggle$",rt.cartDrawerToggle$.asObservable()),w.verbose("Global reference initialised"),new Vc(()=>{this.globalRef.uaParser=new Tr})}static injectWidgetAssets(){jg(zt.widgetURL,"cooee-widget-sdk"),Tf()}static autoAuthenticate(){let e=pg();e&&this.authenticate({shopifyShop:e})}static authenticate(e){if(this.authenticated)return;w.info("Begin auth after \u23F0",pe.get().getSDKLoadTimeDiff(),"of SDK load");let r=e.appID?.trim(),n=e.shopifyShop;if((Mp(r)||r.length!==24)&&Mp(n)){w.warn("Cooee App ID or Shop name is not configured");return}this.authenticated=!0,le.get(ct).authenticate(e)}static sendEvent(e,r,n){let i=new Ie(e,r,n?.triggerData);n?.occurred&&(i.occurred=n.occurred),le.get(Re).sendSafe(i)}static updateProfile(e){for(let r in e)if(r.toLowerCase().startsWith("ce "))throw new Error("User property name cannot start with 'CE '");le.get(Nt).updateProfileSafe(e)}static setPageName(e){if(!e)return;let r=pe.get(),n=r.pageName;if(e===n)return;if(r.pageName=e,e==="cart"&&le.get(Rr).loadOrRenderWidgetsAfterCartChange(),vm.some(s=>e.includes(s))){le.get(Do).resetScrollID();return}let i={};n&&(i.ps=n);let o=new Ie("CE Screen View",i);o.occurred=r.jsLoadTime,le.get(Re).sendSafe(o),le.get(Do).resetScrollID(o.occurred)}static previewPopup(e,r){new kn(r).render(e)}static previewWidget(e){new xt(new Tt(e)).renderSilently()}static setupPreviewListeners(){if(window.opener){try{window.opener.postMessage({action:"COOEE_READY_FOR_PREVIEW"},"*")}catch(e){w.error(e)}window.addEventListener("message",e=>{if(w.verbose("Received event",e),!e.origin.includes("letscooee.com")&&!e.origin.includes("localhost"))return;let r=e.data;typeof r=="object"&&(r.action==="POPUP_PREVIEW"?(this.previewPopup(r.engagementTrigger),e.source?.postMessage({action:"PREVIEW_SUCCESSFUL"},e.origin)):r.action==="WIDGET_PREVIEW"&&(this.previewWidget(r.engagementTrigger),e.source?.postMessage({action:"PREVIEW_SUCCESSFUL"},e.origin)))})}}static attachGoKwikListeners(){let e=pe.get();window.addEventListener("kp-modal:opened",()=>{e.isGoKwikPopupOpen=!0}),window.addEventListener("user-loggedin",r=>{let{token:n}=r.detail;n&&this.updateProfile({goKwikToken:n})}),window.gokwikSdk?Xs.attachCheckoutListener():window.addEventListener("gokwikLoaded",Xs.attachCheckoutListener)}};var y0=new Date;wm();Sm();w.verbose("Execution order:","top");window.cooeeShopifyScriptLoaded||(window.cooeeShopifyScriptLoaded=!0,(async()=>(w.verbose("Execution order:","IIFE start"),await Me.initForMerchantWebsiteOnly(y0),await Me.initForAll(),w.verbose("Execution order:","IIFE end")))());w.verbose("Execution order:","bottom");
|
|
75
|
+
`},navigation:{nextEl:t.querySelector(".swiper-button-next"),prevEl:t.querySelector(".swiper-button-prev")},autoplay:e.autoplay?.enabled?{delay:e.autoplay?.delay,disableOnInteraction:!1}:!1,autoHeight:!0});return t.style.setProperty("--swiper-navigation-size",`${e.navigation.size}px`),r}function Ul(t,e,r){let n={color:t.navigation.color?.rgba};return t.pagination.enabled&&(n.transform="translateY(-25%)"),K("div",{class:"swiper-container",ref:e,style:"max-width: 100%",children:[K("div",{class:"swiper-wrapper",children:r()}),t.navigation.enabled&&K("div",{class:"swiper-button-next",style:n,children:K("span",{})}),t.navigation.enabled&&K("div",{class:"swiper-button-prev",style:n,children:K("span",{})}),t.pagination.enabled&&K("div",{className:"swiper-pagination",style:{bottom:0,top:"unset",position:"relative",color:t.pagination.color?.rgba}})]})}var $s=class extends Fe{componentDidMount(){It(()=>{this.setState(()=>({checked:this.props.item.selected.value}))})}render(){return K("div",{style:this.getCompiledStyles(),className:"lc-checkbox",children:K("input",{type:"checkbox",checked:this.state.checked,onChange:this.onChange.bind(this),style:{appearance:"auto"}})})}onChange(e){let{checked:r}=e.target;this.props.item.selected.value=r}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.textAlign=r.alignment,e.justifyContent=r.alignment,e}getComponentStyles(){return Z(_({},this.getTypoStyles()),{display:"flex"})}};var dn=class extends Fe{constructor(e,r){super(e,r)}render(){let e=this.props.element[this.deviceTypeKey],r=e?.src||this.props.element.src||this.props.element.lg?.src;return K("img",{onClick:this.customOnClick.bind(this),className:"lc-image",alt:e?.name||"Image",onMouseEnter:this.handleMouseEnter.bind(this),onMouseLeave:this.handleMouseLeave.bind(this),src:r,style:this.getCompiledStyles()})}customOnClick(e){this.props.element.clc?.at===be.ADD_TO_CART&&this.props.triggerContext.triggerData.items[0]&&this.onClick(e,{item:this.props.triggerContext.triggerData.items[0]}),this.props.onClick&&this.props.onClick("image")}getComponentStyles(){let e=this.mediaStyle.lout;if(!e||e.pos!=="absolute")return{};let r={zIndex:e.zIndex,cursor:this.props.element.clc?.at?"pointer":"auto"};return this.mediaStyle.size?.w&&(r.width=this.mediaStyle.size.w),this.mediaStyle.size?.h&&(r.height=this.mediaStyle.size.h),r}handleMouseEnter(e){let r=this.props.element[this.deviceTypeKey]?.secondarySrc;r&&(e.currentTarget.src=r)}handleMouseLeave(e){e.currentTarget.src=this.props.element[this.deviceTypeKey]?.src}};var hn=class extends Fe{render(){if(!(this.props.element.hide||!this.matchWhenCondition(this.props.element.when)))return K("div",{style:this.getCompiledStyles(),class:"lc-flexbox",children:K(Fn,{elements:this.props.elements,element:this.props.element,triggerContext:this.props.triggerContext})})}getComponentStyles(){let e=this.mediaStyle.flex??new eo,r={display:"flex",gap:e.gap+"px",flexWrap:e.wrap,flexDirection:e.dir,justifyContent:e.jc,alignItems:e.ai};return e.wrap==="nowrap"&&e.scroll&&(e.dir==="column"?r["overflow-y"]="auto":r["overflow-x"]="auto"),r}};var Vs=class extends hn{render(){if(!(this.props.element.hide||!this.matchWhenCondition(this.props.element.when)))return K("div",{style:this.getCompiledStyles(),class:"lc-flexbox",children:K(Co,{elements:this.props.elements,element:this.props.element,triggerContext:this.props.triggerContext,item:this.props.item,noLinks:this.props.noLinks})})}};var Ws=class extends Fe{render(){return K("select",{style:this.getCompiledStyles(),value:this.props.selectedVariant.selectedSellingPlan.value?.mID??"",onChange:this.onChange.bind(this),disabled:this.state.disabled,className:"lc-dropdown",children:this.createSelectItems()})}componentDidMount(){It(()=>{this.setState(()=>({disabled:this.props.triggerContext.triggerData.isBundle()?!this.props.item.selected.value:!1}))})}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.letterSpacing=r.letterSpacing,e.fontSize=r.fs+"px",e.lineHeight=r.lh,e.fontFamily="inherit",e.textAlign=r.alignment,e.fontWeight=r.fw,this.stylesConverter.getColourStyles(r.tc,"color",e),e.boxShadow="none",e}getComponentStyles(){let e={};return this.props.selectedVariant.sellingPlans?.length||(e.visibility="hidden"),_(_({},e),this.getTypoStyles())}createSelectItems(){let e=[],r=this.props.selectedVariant;if(!r.sellingPlans?.length)return[];this.props.triggerContext.triggerData.skipSubscribedItems?r.selectedSellingPlan.value||(r.sellingPlans[0].isSelected=!0,r.changeSellingPlan(r.sellingPlans[0])):e.push(K("option",{value:"",selected:!r.selectedSellingPlan,children:"One time purchase"}));for(let n of r.sellingPlans??[])e.push(K("option",{value:n.mID,selected:n.isSelected,children:n.name}));return e}onChange(e){let r=e.target.value;r?this.props.selectedVariant.selectedSellingPlan.value=this.props.selectedVariant.sellingPlans.find(n=>n.mID===r):this.props.selectedVariant.selectedSellingPlan.value=void 0}};var h0=new RegExp('fill="#[a-zA-Z0-9]+"'),js=class extends Fe{constructor(){super()}render(){let e=this.getCompiledStyles(),r=this.getRating();return r||(e.display="none",r=""),K("div",{style:e,className:"lc-star-rating",dangerouslySetInnerHTML:{__html:r}})}getRating(){let e={size:this.props.element.iconSize,color:this.props.element.c.hex},r=Gi(this.props.element.fullStar,{svg:e},this.props.triggerContext),n=Gi(this.props.element.halfStart,{svg:e},this.props.triggerContext),i=this.props.review;if(!i?.rating)return"";let o="";if(this.props.element.showSingleStar)o=r;else{let s=5,a=`${i.rating}`.split(".");for(let c=0;c<+a[0];c++)o+=r,s--;a[1]&&(o+=n,s--);for(let c=0;c<s;c++)o+=r.replace(h0,'fill="#f1f1f1"')}return o}getComponentStyles(){return{display:"flex",alignItems:"center"}}};var Gs=class extends Fe{render(){return K("select",{style:this.getCompiledStyles(),value:this.props.item.selectedOrFirstVariant.value.mID,onChange:this.onChange.bind(this),disabled:this.state.disabled,className:"lc-dropdown",children:this.createSelectItems()})}componentDidMount(){It(()=>{this.setState(()=>({disabled:this.props.triggerContext.triggerData.isBundle()?!this.props.item.selected.value:!1}))})}getTypoStyles(){let e={},r=this.mediaStyle.typo??new ut;return e.letterSpacing=r.letterSpacing,e.fontSize=r.fs+"px",e.lineHeight=r.lh,e.fontFamily="inherit",e.textAlign=r.alignment,e.fontWeight=r.fw,this.stylesConverter.getColourStyles(r.tc,"color",e),e.boxShadow="none",e}getComponentStyles(){let e={};return this.props.item.vars?.length===1&&this.props.item.vars[0].name==="Default Title"&&(e.visibility="hidden"),_(_({},e),this.getTypoStyles())}createSelectItems(){let e=[];for(let r of this.props.item.vars)e.push(K("option",{value:r.mID,disabled:!r.isAvailable,children:r.name}));return e}onChange(e){let r=e.target.value,n=this.props.item.vars.find(i=>i.mID===r);this.props.item.setSelectedVariant(n)}};var Co=class extends Fe{constructor(e,r){super(e,r),this.setState(()=>({decoration:"unset"}))}renderElement(e){if(!(e.hide||!this.matchWhenCondition(e.when))){if(e.t===4){let r=e;return r.l==="Star Rating"&&!this.props.item.reviews?.rating?void 0:K(Vs,{element:r,triggerContext:this.props.triggerContext,elements:r.elems,item:this.props.item,noLinks:this.props.noLinks})}if(e.t===6)return this.props.triggerContext.triggerData.isBundle()?K($s,{element:e,item:this.props.item,triggerContext:this.props.triggerContext}):void 0;if(e.t===13){let r=e,n=this.props.item,i=n.variantImage??n.firstImageURL,o=n.variantSecondaryImage??n.secondaryImageURL;r.lg=r.sm={src:i,name:n.name,secondarySrc:o};let s=K(dn,{element:r,onClick:this.customOnClick.bind(this),triggerContext:this.props.triggerContext});return this.props.noLinks?s:K("a",{href:this.props.item.selectedOrFirstVariant.value.link,style:{display:"block"},children:s})}if(e.t===14)return this.renderProductTitle(e);if(e.t===15){let r=e;return this.props.triggerContext.triggerData.isCartEmbed()&&this.props.item.vars?.length===1&&this.props.item.vars[0].name==="Default Title"?void 0:r.showChips?K("cooee-product-options-picker",{item:this.props.item}):K(Gs,{element:r,item:this.props.item,triggerContext:this.props.triggerContext})}return e.t===16?K(Ws,{element:e,selectedVariant:this.props.item.selectedOrFirstVariant.value,item:this.props.item,triggerContext:this.props.triggerContext}):e.t===19?K(js,{element:e,triggerContext:this.props.triggerContext,review:this.props.item.reviews}):e.t===18||e.t===3?K(Ei,{element:e,item:this.props.item,triggerContext:this.props.triggerContext}):K(Fn,{elements:[e],element:this.props.element,triggerContext:this.props.triggerContext})}}render(){return this.props.elements.map(e=>this.renderElement(e))}getComponentStyles(){return{}}renderProductTitle(e){let r=K(Qt,{element:e,onClick:this.customOnClick.bind(this),triggerContext:this.props.triggerContext});return this.props.noLinks?r:K("a",{href:this.props.item.selectedOrFirstVariant.value.link,style:{display:"block",textDecoration:this.state.decoration},onMouseEnter:this.onMouseEnter.bind(this),onMouseLeave:this.onMouseLeave.bind(this),children:r})}customOnClick(e){this.sendTriggerClicked([this.props.item.toEmbed()],{from:e})}onMouseEnter(){this.setState(()=>({decoration:"underline"}))}onMouseLeave(){this.setState(()=>({decoration:"unset"}))}};var _i=class extends Fe{productElement;constructor(e,r){super(e,r),this.setState(()=>({decoration:"unset"}))}render(){let e=Zn(this.props.element,this.getProductData(),this.props.triggerContext);if(this.productElement=new Rn(e),!(this.productElement.hide||!this.matchWhenCondition(this.productElement.when)))return K("div",{style:_({},this.getCompiledStyles()),class:"lc-single-product",children:K(Co,{element:this.productElement,elements:this.productElement.elems,triggerContext:this.props.triggerContext,item:this.props.item,noLinks:this.productElement.noLinks})})}getComponentStyles(){return{flexShrink:0}}getProductData(){if(!this.props.item)return{};let e=this.props.item,r=e.selectedOrFirstVariant.value,n=e.getTemplateVariables();n.product.quantity=this.props.triggerContext.hasManipulatedProductQuantity()?this.props.triggerContext.getManipulatedQuantity(this.props.item.quantity):this.props.item.quantity;let i=this.props.triggerContext.triggerData.discount?.type===er.BXGY;return!r.hasEffectivePrice()&&i&&(n.product=Z(_(_({},n.product),Mt("effective_price",r.effectivePrice.value)),{price:""})),n.variant.quantity=this.props.triggerContext.hasManipulatedProductQuantity()?this.props.triggerContext.getManipulatedQuantity(r.quantity):r.quantity,{product:n.product,variant:n.variant,svg:{color:"{{ svg.color }}",size:"{{ svg.size }}"}}}};var zs=class extends Fe{swiperRef=null;swiperInstance=null;configuration;gap;constructor(e,r){super(e,r),this.configuration=Cr()?this.props.element.conf.sm:this.props.element.conf.lg,this.gap=(this.configuration.gap??15)+"px"}componentDidMount(){this.props.element.conf[this.deviceTypeKey].disp===2&&$c().then(()=>{this.swiperInstance=kl(this.swiperRef,this.props.element.conf[this.deviceTypeKey])})}componentWillUnmount(){this.swiperInstance&&this.swiperInstance.destroy()}render(){let e=this.props.triggerContext.triggerData.items;e.splice(this.configuration.maxItems??10);let r;if(this.configuration.disp===2){let n=o=>{this.swiperRef=o},i=()=>e?.map(o=>K("div",{class:"swiper-slide",children:this.getProductFragment(o)}));r=K("div",{style:Z(_({},this.getCompiledStyles()),{display:"block"}),class:"lc-product-swiper-list",children:Ul(this.configuration,n,i)})}else r=K("div",{style:this.getCompiledStyles(),class:"lc-product-list",children:e?.map((n,i)=>this.getProductFragment(n,i!==e.length-1))});return r}getComponentStyles(){let e=[0,2].includes(this.configuration.disp),r={display:e?"flex":"grid",justifyContent:"safe "+(this.mediaStyle.flex?.jc??"center"),gap:this.gap,flexDirection:this.mediaStyle.flex?.dir??"row"};if(r.flexDirection==="row"){if(e)r.maxWidth="100%",r.overflowY="auto";else if(this.configuration.disp===1){let n=this.props.triggerContext.triggerData,i=n.items.length,o;n.isBundle()?o=this.props.element.prod.symbol?.hide!==!0?i*2-1:i:o=this.props.element.conf[this.deviceTypeKey].maxInRow,r.gridTemplateColumns=`repeat(${o}, auto)`}}return r}getProductFragment(e,r=!1){return K(Ur,{children:[K(_i,{element:this.props.element.prod,item:e,triggerContext:this.props.triggerContext}),this.props.triggerContext.triggerData.isBundle()&&r&&this.props.element.prod.symbol&&!this.props.element.prod.symbol.hide&&K("div",{style:{display:"flex",alignItems:"center",justifyContent:"center"},children:K(Qt,{element:this.props.element.prod.symbol,triggerContext:this.props.triggerContext})})]},e.mID)}};var Ys=class extends Fe{swiperRef=null;swiperInstance=null;constructor(e,r){super(e,r)}componentDidMount(){$c().then(()=>{this.swiperInstance=kl(this.swiperRef,this.props.element.conf)})}componentWillUnmount(){this.swiperInstance&&this.swiperInstance.destroy()}render(){let e=this.props.element,r=i=>{this.swiperRef=i},n=()=>e.values?.map(i=>K("div",{class:"swiper-slide",onClick:o=>this.onClick(o,{clickAction:this.getClickAction(i)}),children:this.renderElement(i)}));return Ul(e.conf,r,n)}getComponentStyles(){return{}}renderElement(e){let r=this.valueAddedSlide(this.props.element.slide,e);switch(r?.t){case 1:return K(dn,{element:r,triggerContext:this.props.triggerContext});case 4:return K(hn,{elements:r.elems,element:r,triggerContext:this.props.triggerContext});default:w.warn("Unknown slide type for carousal")}}valueAddedSlide(e,r){let n=Zn(e,{form:r},this.props.triggerContext);return Jt.getParsedElement(n)}getClickAction(e){return Zn(this.props.element.clc??{},{form:e},this.props.triggerContext)}};var Fn=class extends Fe{constructor(e,r){super(e,r),this.setState(()=>({decoration:"unset"})),It(()=>{this.setState(()=>({showButton:!this.props.triggerContext.triggerData.isBundle()||!!this.props.triggerContext.selectedItems.length}))})}renderElement(e){if(!e.hide){if(e.t===4){let r=e;return K(hn,{element:r,triggerContext:this.props.triggerContext,elements:r.elems})}if(e.t===61)return K(Hs,{element:e,triggerContext:this.props.triggerContext});if(e.t===3)return this.state.showButton?K(Ei,{element:e,triggerContext:this.props.triggerContext}):void 0;if(e.t===2)return K(Qt,{element:e,triggerContext:this.props.triggerContext});if(e.t===1)return K(dn,{element:e,triggerContext:this.props.triggerContext});if(e.t===11)return K(zs,{element:e,triggerContext:this.props.triggerContext});if(e.t===12)return K(_i,{element:e,item:this.props.triggerContext.triggerData.items[0],triggerContext:this.props.triggerContext});if(e.t===62)return K(Ys,{element:e,triggerContext:this.props.triggerContext})}}render(){return this.props.elements.map(e=>this.renderElement(e))}getComponentStyles(){return{}}};var qs=class extends Fe{clickAction;isClickable;constructor(e,r){super(e,r),this.clickAction=this.props.element.clc,this.isClickable=this.clickAction?.at===be.GO_TO_URL&&!!Ui(this.clickAction.gu?.u)||this.clickAction?.at===be.OPEN_CART||this.clickAction?.at===be.INITIATE_CHECKOUT}componentDidMount(){It(()=>{let e=this.props.triggerContext.triggerData,r=this.props.triggerContext.selectedItems;e.calculateDiscountData(r,this.props.triggerContext.shouldGiveFBTDiscount)})}render(){return K(Ur,{children:[K("div",{style:this.getCompiledStyles(),class:"lc-container",onClick:e=>{this.onClick(e,{clickAction:this.clickAction})},children:K(Fn,{elements:this.props.elements,element:this.props.element,triggerContext:this.props.triggerContext})}),this.props.triggerContext.triggerData.id==="preview"&&K("div",{class:"letscooee-preview-badge",children:["#",this.props.triggerContext.triggerData.shortID," preview"]})]})}getComponentStyles(){let e={position:"relative",overflow:"hidden",display:"block"};return this.isClickable&&(e.cursor="pointer"),e}};var xt=class t{constructor(e){this.engagementTrigger=e;this.triggerContext=new Dr(new Date,this.engagementTrigger)}static renderedEngagements=new Set;static engagementIDsWithTrackedDisplay=new Set;static DEBOUNCE_TIME=1e3;rootContainer;widgetElement;widget;triggerContext;observers=[];runtimeData=pe.get();widgetAPIService=le.get(Rr);eventAPIService=le.get(Re);renderedCount=0;scrollSubscription;variation;isExclusionWithBVariation;renderSilently(){this.render().catch(e=>{we(e,"render-widget",{triggerContext:this.triggerContext})})}destroy(){w.verbose(`${this.engagementTrigger} will be destroyed`),this.preDestroy(),this.removeFromRendered(),this.rootContainer?.remove(),t.engagementIDsWithTrackedDisplay.delete(this.engagementTrigger.shortID),Cf(this.engagementTrigger.content?.afterDeleteJS)}async render(){if(this.engagementTrigger.shouldGetVariationImmediately()){let e=await this.getVariation();this.handleVariationResponse(e)}if(this.rootContainer=await this.getWidgetContainer(!0),!this.rootContainer){w.warn(`${this.engagementTrigger} no section found to render the widget`);return}this.afterRootContainerCreated(),this.widget=this.engagementTrigger.widget,await this.getVariationIfRequired(),await this.runChoresBeforeRender(),this.attachScroll(),await this.checkAndSendEvent(),this.triggerContext.renderer=this,Cf(this.engagementTrigger.content?.afterRenderJS)}isSameTrigger(e){return this.engagementTrigger.shortID===e.shortID}async updateAndReRender(e){w.info(`${this.engagementTrigger} will be updated`),this.updateItems(e.items,this.engagementTrigger.items),await this.update(e),await this.render()}async update(e){}rerender(){this.rootContainer?.isConnected||(w.info(`${this.engagementTrigger} deleted. Will be re-rendered`),this.preDestroy(),this.renderSilently())}preDestroy(){this.scrollSubscription?.unsubscribe(),this.observers.forEach(e=>{e?.disconnect&&e.disconnect()})}afterRootContainerCreated(){}isAllOkToRender(){return!!this.widget}async getVariationIfRequired(){if(this.engagementTrigger.shouldSkipVariation()){w.verbose(`${this.engagementTrigger} already has necessary data to render`);return}let e=await this.observeWidgetContainerInViewport();this.handleVariationResponse(e)}handleVariationResponse(e){e&&(w.log(`${this.engagementTrigger} visitor has been assigned to variation ${e.variation}`),e.items?.length&&(this.engagementTrigger.items=e.items.map(r=>new At(r)),this.engagementTrigger.nonMutableItems=e.items.map(r=>new At(r))),e.bundleFrom&&(this.engagementTrigger.bundleFrom=new At(e.bundleFrom)),e.discount&&(this.engagementTrigger.discount=e.discount),e.placement&&(this.triggerContext.triggerData.placement=e.placement),e.props&&rr.hasKeys(e.props)&&(this.engagementTrigger.props=_(_({},this.engagementTrigger.props),e.props)),e.content&&(this.triggerContext.triggerData.content=new ps(e.content)),this.triggerContext.triggerData.widget=this.widget=new io(e.widget),this.triggerContext.triggerData.contentID=e.contentID,this.triggerContext.triggerData.variation=this.variation=e.variation,this.triggerContext.triggerData.placement=e.placement,this.triggerContext.triggerData.manipulation=e.manipulation,this.triggerContext.triggerData.entryAnimation=e.entryAnimation??"NONE",this.isExclusionWithBVariation=this.engagementTrigger.isExclusionTesting()&&this.variation==="b",this.isExclusionWithBVariation&&(this.rootContainer.style.height="0.5px"))}addToRendered(){this instanceof _t?_t.renderedEngagements.add(this):t.renderedEngagements.add(this),this.renderedCount++,w.info(`${this.engagementTrigger} rendered \u2705 ${Dh(this.renderedCount)} time`)}removeFromRendered(){this instanceof _t?_t.renderedEngagements.delete(this):t.renderedEngagements.delete(this)}async getVariation(){w.log(`${this.engagementTrigger} get variation`);let e={engagementID:this.engagementTrigger.engagementID,isPreview:this.engagementTrigger.id==="preview"};try{return(await this.widgetAPIService.getVariation(e)).data}catch(r){w.error(`${this.engagementTrigger} unable to get the variation`,r);return}}async observeWidgetContainerInViewport(){if(!this.rootContainer){w.warn(`${this.engagementTrigger} No root container found to watch for viewport`);return}let e=window.innerHeight*.3,r={root:null,rootMargin:`${e}px 0px ${e}px 0px`,threshold:0};return this.isInViewport()?this.getVariation():new Promise(n=>{let i=new IntersectionObserver((o,s)=>{o.forEach(async a=>{if(a.isIntersecting){w.log(`${this.engagementTrigger} root container is near the viewport. Fetching variation`);let c=await this.getVariation();n(c),s.unobserve(this.rootContainer)}})},r);i.observe(this.rootContainer),this.observers.push(i)})}attachScroll(){this.scrollSubscription=mi(window,"scroll").pipe(mr(t.DEBOUNCE_TIME)).subscribe(()=>{this.checkAndSendEvent()})}async checkAndSendEvent(){let e=this.engagementTrigger.shortID;if(t.engagementIDsWithTrackedDisplay.has(e)||!this.isInViewport())return;let n={};this.triggerContext.triggerData.items?.length&&(n.promotedMIDs=this.engagementTrigger.items?.map(s=>s.mID));let i=this.isExclusionWithBVariation?"CE Campaign Holdout":"CE Trigger Displayed",o=new Ie(i,n,this.engagementTrigger);o.name==="CE Campaign Holdout"&&(o.trigger.holdout=!0),this.eventAPIService.sendSilently(o),t.engagementIDsWithTrackedDisplay.add(e),this.scrollSubscription.unsubscribe()}generateParentElementID(){return`letscooee-${this.engagementTrigger.shortID}`}createAngularWidget(e){let r=this.widgetElement=document.createElement(e);return r.cart=ye.getCurrent(),r.triggerContext=this.triggerContext,r.engagementTrigger=this.engagementTrigger,r.setAttribute("engagement",this.engagementTrigger.shortID),this.rootContainer.appendChild(r),this.addToRendered(),r}getParentElement(e,r=document){let n=r.getElementById(e);if(n)return n;let i=this.engagementTrigger.objective.toLowerCase().replaceAll("_","-"),o=this.engagementTrigger.shortID;return n=document.createElement("div"),n.id=e,n.className=`letscooee letscooee-engagement engagement-${o} lc-${i}`,n.dataset.engagementId=o,this.engagementTrigger.id==="preview"&&(n.className+=" letscooee-preview"),n.style.display="block",n.style.minHeight="0.5px",n.style.minWidth="0.5px",n}startRendering(){let e=this.rootContainer;this.triggerContext.triggerData.hasSwiperElement()&&(e=this.rootContainer?.shadowRoot||this.rootContainer?.attachShadow({mode:"open"}),Rf(e)),zh(jp(qs,{element:this.widget.cont,triggerContext:this.triggerContext,elements:this.widget.elems}),e),this.addToRendered()}isInViewport(){let e=this.rootContainer?.getBoundingClientRect();if(!e)return!1;let r=window.innerHeight||document.documentElement.clientHeight,i=(Math.min(e.bottom,r)-Math.max(e.top,0))*e.width,o=e.width*e.height,s=i/o*100;return this.engagementTrigger.isAnySplit()?s>0:s>=30}async getWidgetContainer(e){if(this.rootContainer?.isConnected)return this.rootContainer;let r=await this.createParentElementWithPlacement(e);if(r)return r;let n=`.letscooee[data-engagement-id="${this.triggerContext.triggerData.shortID}"]`;return document.querySelector(n)}async createParentElementWithPlacement(e){let r=this.engagementTrigger.placement;if(!r?.selector)return w.info(`\u26A0\uFE0F${this.engagementTrigger} does not have a selector`),null;let n=r.selector,i;if(n.includes(":shadow")){let c=n.split(":shadow");i=(await Hi(c[0].trim()))?.shadowRoot,n=c[1].trim(),i&&Rf(i,!1)}w.verbose(`${this.engagementTrigger} attempt to render ${r.position} "${n}"`);let o=await Hi(n,10,i??document);if(!o)return w.warn(`${this.engagementTrigger} no placement found with ${n}`),null;let s=this.generateParentElementID(),a=this.getParentElement(s);if(!e)return a;switch(r.position){case Ti.BEFORE:{o.parentElement?.insertBefore(a,o);break}case Ti.INSIDE_FIRST:{o.insertBefore(a,o.firstChild);break}case Ti.INSIDE_LAST:{o.appendChild(a);break}case Ti.AFTER:default:o.parentElement?.insertBefore(a,o.nextSibling)}return a}async runChoresBeforeRender(){if(this.isExclusionWithBVariation)return;if(!this.isAllOkToRender()){w.info(`\u26A0\uFE0F ${this.engagementTrigger} could not be rendered`);return}w.verbose(`${this.engagementTrigger} will be rendered`);let e;try{e=await Ml(this.engagementTrigger)}catch(r){w.info(`\u203C\uFE0F${this.engagementTrigger} could not render as items failed to refresh`,r);return}if(!this.engagementTrigger.isCollectionPromoted()&&!e?.length&&this.engagementTrigger.isProductPromoted()){w.info(`\u203C\uFE0F${this.engagementTrigger} could not render as no products promoted`);return}this.engagementTrigger.items=e,this.startRendering()}updateItems(e,r){let n=this.getItemDiff(e,r),i=this.getItemDiff(r,e);r.push(...n);for(let o of i)Xr.remove(r,o)}getItemDiff(e,r){return e.filter(n=>!r.some(i=>i.selectedOrFirstVariant.value.mID===n.selectedOrFirstVariant.value.mID))}};var _t=class extends xt{static renderedEngagements=new Set;constructor(e){super(e)}observeWidgetContainerInViewport(){return this.getVariation()}generateParentElementID(){let e=super.generateParentElementID();return this.engagementTrigger.isSubscriptionUpsell()&&(e+=`-${this.engagementTrigger.items[0].selectedOrFirstVariant.value.mID}`),e}async checkAndSendEvent(){if(!rt.get().isOpen()&&this.runtimeData.pageName!=="cart"){w.log("Do not send display event as neither the cart drawer nor the cart page is open.");return}return super.checkAndSendEvent()}};var Fl=class t{constructor(e,r){this.engagementTrigger=e;this.element=r;this.cartItems=ye.getCurrent().items}cartItems;static renderCartUpsell(e){let r=e.placement;if(!r?.selector){w.warn(`No placement available for ${e.objective}`,e.shortID);return}let n=Array.from(document.querySelectorAll(r.selector));if(!n?.length){w.warn(`No placement found for ${e.objective}`,e.shortID);return}for(let i of n)new t(e,i).render()}render(){let e=this.findCartItemFromHTMLElement();if(!e||this.engagementTrigger.skipSubscribedItems&&e.selling_plan_allocation)return;let r=this.engagementTrigger.items.find(d=>d.mID===e.product_id.toString());if(!r)return;let n=r.vars.find(d=>d.mID===e.id.toString());if(!n)return;let i=new Fr(n),o=e.selling_plan_allocation?.selling_plan;if(o)for(let d of i.sellingPlans??[])d.mID===o.id.toString()&&(d.isSelected=!0,i.changeSellingPlan(d));let s=new At(r);s.vars=[i],s.selectedOrFirstVariant.value=i;let a=`lc-cart-item-${this.engagementTrigger.shortID}-${r.mID}`;this.element.classList.add(a);let c=new Tt(this.engagementTrigger);c.placement.selector=`.${a}`,c.items=[s];let p=new _t(c);p.renderSilently(),this.watchForCartItemDeletion(p,a)}watchForCartItemDeletion(e,r){let n=new MutationObserver(i=>{i.forEach(o=>{o.removedNodes.forEach(s=>{s===this.element&&(w.verbose(`${r} has been removed`),e.destroy(),n.disconnect())})})});n.observe(this.element.parentElement,{childList:!0,subtree:!0})}findCartItemFromHTMLElement(){let e=this.element.innerHTML;return this.cartItems.find(r=>{if(!(e.includes(r.url)||e.includes(r.variant_id))&&(!e.includes(r.product_title)||r.variant_title&&!e.includes(r.variant_title)))return!1;let n=r.selling_plan_allocation?.selling_plan?.name;return!(n&&!e.includes(n))})}};var Hl=class extends _t{ctaExecutor=new Bn;constructor(e){super(e)}async update(e){await super.update(e),this.engagementTrigger.progressBarConfig.update(e.progressBarConfig),await this.checkMilestoneTryCatch(),this.widgetElement.update()}isAllOkToRender(){return!!this.engagementTrigger.progressBarConfig}startRendering(){if(this.widgetElement?.isConnected){this.widgetElement.update(),this.addToRendered();return}this.createAngularWidget("cooee-progressbar"),this.checkMilestoneTryCatch()}async checkMilestoneTryCatch(){try{await this.checkMilestone()}catch(e){we(e,"apply-milestones",{engagementTrigger:this.engagementTrigger})}}async checkMilestone(){let e=await ye.getCurrent().getNormalisedCart(),r=this.engagementTrigger.progressBarConfig,n,i=[],o=[],s=[],a,c,p=[...r.milestones];for(let f of p){if(f.rewardType!==pu.FREE_AUTO_GIFT)continue;if(f.isUIOnly&&!f.allowATC){w.verbose(`Skipping milestone ${f.label} as it is UI only and does not allow ATC`);continue}let E=f.items[0],y=f.reached,T=e.items.find(D=>(D.vID===E.vID||D.mID===E.mID)&&D.properties._letscooee_campaign===this.engagementTrigger.shortID);y&&(a=f,c=T),T&&i.push(T),!y&&T&&r.removeIneligibleItem?(w.verbose(`Removing free gift ${T.vID} from cart`),s.push(T)):y&&!T&&(w.verbose(`Adding free gift ${E.vID} to cart`),o.push(E))}r.restrictToLatestFreebie&&a&&(c?(i=i.filter(f=>f.vID!==c.vID),o=[]):o=[a.items[0]],s.push(...i)),s.length&&await this.removeFreeGifts(s),o.length&&(n=await this.ctaExecutor.addToCart(o,this.engagementTrigger));let d=r.coupons;if(d?.length)try{await zr.applyWithStorefront(d.map(f=>f.couponCode)),rt.get().refreshUI(n,!1)}catch(f){we(f,"cart-apply-discount",{extra:{coupons:d},engagementTrigger:this.engagementTrigger})}}async removeFreeGifts(e){await Promise.all(e.map(r=>this.ctaExecutor.updateLineItem(r,{quantity:0})))}};var Ks=class extends _t{constructor(e){super(e)}async update(e){await super.update(e),this.engagementTrigger.content.update(e.content),this.widgetElement.update()}isAllOkToRender(){return!!this.engagementTrigger.content}startRendering(){if(this.widgetElement?.isConnected){this.addToRendered();return}this.createAngularWidget("cooee-savings-bar")}};var $l=class extends xt{constructor(e){super(e)}isAllOkToRender(){return!!this.engagementTrigger.content?.videoConfig}startRendering(){if(this.widgetElement?.isConnected){this.addToRendered();return}let e,r=this.engagementTrigger.content.videoConfig;r.template==="FLOATING_POPUP"?e="cooee-video-popup":r.template==="STORY"?e="cooee-video-stories":e="cooee-video-playlist",this.createAngularWidget(e)}};var Vl=class extends xt{constructor(e){super(e)}isAllOkToRender(){return!0}startRendering(){if(this.widgetElement?.isConnected){this.addToRendered();return}this.createAngularWidget("cooee-sticky-atc")}};var Wl=class extends xt{constructor(e){super(e)}isAllOkToRender(){return!0}startRendering(){let e=this.getParentElement(`inner-letscooee-${this.engagementTrigger.shortID}`);this.rootContainer.appendChild(e),document.addEventListener("letscooee:inbound:cta:add-bundle",this.inboundCTAListener.bind(this),!1)}async inboundCTAListener(e){let r=this.engagementTrigger,n=`Engagement(id: ${r.engagementID}, shortID: ${r.shortID})`,i=e.detail;if(!rr.hasKeys(i)){w.error(`No detail received for ${n}`);return}w.log("Detail received for BYOB",i);let o=i.campaignID??i.campaignId??i.campaign_id;if(o!==r.shortID&&o!==r.engagementID){w.warn(`Current ${n} is not BYOB. Received: ${o}`);return}let s=i.items;if(!s?.length)return;let a=s.map(c=>new Ct({mID:c.product_id,vID:c.variant_id,quantity:c.quantity||1}));await new mn(this.triggerContext).execute({embeddedItems:a,clickAction:{at:be.ADD_BUNDLE,applyDiscount:!0}})}};var Ro=class{runtimeData=pe.get();processCartWidgetResponse(e){this.runtimeData.isCartDirty=!1,this.runtimeData.cartEngagements=e;let r=[..._t.renderedEngagements];_t.renderedEngagements.clear();for(let n of e){w.info(`${n} received as cart embed`);let i=this.isAlreadyRendered(n,r);if(i>-1){this.rerender(i,n,r);continue}w.verbose(`${n} is new`),n.isProgressBar()?new Hl(n).renderSilently():n.isSubscriptionUpsell()?Fl.renderCartUpsell(n):n.isSavingsBar()?new Ks(n).renderSilently():new _t(n).renderSilently()}this.removeOldWidgets(r)}processPageWidgetResponse(e){let r=[...xt.renderedEngagements];xt.renderedEngagements.clear();for(let n of e){w.info(`${n} received as page embed`);let i=this.isAlreadyRendered(n,r);if(i>-1){this.rerender(i,n,r);continue}w.verbose(`${n} is new`),n.isShoppableVideo()?new $l(n).renderSilently():n.isBYOB()?new Wl(n).renderSilently():n.isStickyATC()?new Vl(n).renderSilently():n.isSavingsBar()?new Ks(n).renderSilently():new xt(n).renderSilently()}this.removeOldWidgets(r)}isAlreadyRendered(e,r){let n=r.findIndex(i=>i.isSameTrigger(e));return n<0||e.isSubscriptionUpsell()?-1:n}async rerender(e,r,n){let[i]=n.splice(e,1);if(i)try{await i.updateAndReRender(r)}catch(o){we(o,"update-and-re-render",{engagementTrigger:r})}}removeOldWidgets(e){for(let r of e)r.destroy()}};Zy(document.body,{childList:!0,subtree:!0},500,Qy).subscribe(()=>{xt.renderedEngagements.forEach(e=>e.rerender()),_t.renderedEngagements.forEach(e=>e.rerender())});var Rr=class t extends Un{static INSTANCE;loadPageWidgetsSubject=new jt;loadCartWidgetsSubject=new jt;pageWidgetLoadCount=0;constructor(){super();let e=this.loadPageWidgetsSubject.pipe(So(n=>n)),r=this.loadPageWidgetsSubject.pipe(So(n=>!n),mr(500));em(e,r).subscribe(()=>{this.loadPageWidgetsFromServer().catch(n=>w.error("Unable to initiate load page widgets",n))}),this.loadCartWidgetsSubject.pipe(mr(500)).subscribe(()=>{this.loadCartWidgetsFromServer().catch(n=>w.error("Unable to initiate load cart widgets",n))}),window.CooeeSDK.cartChange$.subscribe(()=>{this.loadWidgetsSilently()})}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}loadOrRenderWidgetsAfterCartChange(){this.runtimeData.isCartDirty?this.loadWidgetsSilently():this.renderCachedCartWidgets()}loadPageWidgetsSafe(e=!1){fr(ct.replaySubject).then(()=>{this.loadPageWidgetsSubject.next(e)})}loadCartWidgetsSafe(){fr(ct.replaySubject).then(()=>{this.loadCartWidgetsSubject.next()})}loadWidgetsSilently(){fr(ct.replaySubject).then(()=>{this.loadCartWidgetsSafe(),this.loadPageWidgetsSafe()})}async getVariation(e){let r=await this.getAllContext();return Object.assign(e,r),this.backendAPIService.post("/v1/engagement/get-variant",e)}async loadPageWidgetsFromServer(){this.pageWidgetLoadCount++,this.pageWidgetLoadCount===1?w.info("Fetch page widgets (after \u23F0",pe.get().getSDKLoadTimeDiff()+" of SDK load)"):w.info("Fetch page widgets");let e=await this.getAllContext(),r=_({},e);this.backendAPIService.post("/v1/engagement/page-widgets",r).then(n=>{w.info(`Page widgets loaded in \u23F0 ${vr(n.timeTakenMs)}`);let i=n.data.widgets.map(o=>new Tt(o));new Ro().processPageWidgetResponse(i)}).catch(n=>{w.error("Error sending widget getter",n)})}async loadCartWidgetsFromServer(){w.info("Fetch cart widgets");let e=await this.getAllContext(),r=_({},e);this.backendAPIService.post("/v1/engagement/cart-widgets",r).then(n=>{w.info(`Cart widgets loaded in \u23F0 ${vr(n.timeTakenMs)}`);let i=n.data.widgets.map(o=>new Tt(o));new Ro().processCartWidgetResponse(i)}).catch(n=>{w.error("Error sending widget getter",n)})}renderCachedCartWidgets(){new Ro().processCartWidgetResponse(this.runtimeData.cartEngagements)}};var jl=class t{static INSTANCE;constructor(){this.init()}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}init(){Bs.get("conf",{}).then(e=>this.updateGlobalConfig(e))}async processAppConfigurations(e){w.verbose("Received app configuration",e),e.currencyCount=e.currencies?.length;let r=this.updateGlobalConfig(e);Bs.set("conf",r).catch(n=>w.error(n)),Bl.processConfiguration(),r.website&&(zg(r.website.commonJS),xf(r.website.commonCSS)),window.CooeeSDK.cartDrawerToggle$.subscribe(async({open:n})=>{w.info("Cart drawer is now",n?"open":"closed"),n&&(le.get(Rr).loadOrRenderWidgetsAfterCartChange(),await this.trackViewCartEvent())})}updateGlobalConfig(e){let r=Me.globalRef.config.update(e);return rt.forceUpdate(),w.verbose("App configurations",r),r}async trackViewCartEvent(){let e=await ye.getCurrent().getNormalisedCart(),r={value:e.amount,currency:e.currency},n={items:e.items,amount:r,drawer:!0};le.get(Re).sendSafe(new Ie("View Cart",n))}};var ct=class t{static replaySubject=new Rs(1);static INSTANCE;backendAPIService=Nt.getInstance();coreService=jl.getInstance();userID="";deviceID="";appID="";shopifyShop="";constructor(){}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}async populateAuthDataFromStorage(){await this.getOrSetDeviceIDSafe(),this.userID=await Ke.get("id"),this.updateAPIClient()}isAuthenticated(){return!!this.deviceID}authenticate(e){if(w.verbose("Initialising SDK",e),Gy(navigator.userAgent)){w.info("This seems to be a bot. Disabling SDK");return}this.appID=e.appID,this.shopifyShop=e.shopifyShop,this.checkForNewSessionOnPageLoad().then(async()=>{t.replaySubject.next(!0),t.replaySubject.complete()}).catch(r=>{w.error("Unable to initiate session",r)})}async storeAndPopulateAuthData(e){e&&(e.userID&&(this.userID=e.userID,await Ke.set("id",e.userID)),e.deviceID&&(this.deviceID=e.deviceID,await Ke.set("did",e.deviceID)),this.updateAPIClient())}async checkSessionAndGetContext(){return await this.checkForNewSessionUnsafe(!1),this.getContext()}async checkForNewSessionOnPageLoad(){await this.checkForNewSessionSafe(!0)}async getOrSetDeviceIDSafe(){await hc.request("gen_did",async()=>{let e=await Ke.get("did");e||(e=new Et().toHexString(),await Ke.set("did",e)),this.deviceID=e,w.info("Device ID:",this.deviceID)})}async getContext(){Rt.set("lastUsedTime",new Date().getTime());let[e,r,n]=await Promise.all([Rt.get("id",""),Ke.get("sessionNumber",1),Rt.get("landing",{})]);return ki({"cooee_session.number":r}),Ka("Visitor Session",{id:e,number:r,landing_page:n}),{sessionID:e,sessionNumber:r,landingPage:n}}async checkForNewSessionSafe(e){await this.checkForNewSessionUnsafe(e)}async checkForNewSessionUnsafe(e){let r=!1;if(await this.isNewSessionRequired()?(w.info("New session to be started"),await this.startNewSession(),e=!0,r=!0):await this.notSynced()&&(r=!0),e){let n=await this.getContext();w.info(`Session ID: ${n.sessionID} & number: ${n.sessionNumber}`),await this.validateSessionFromServer(Z(_({},n),{newSession:r})),await Rt.set("synced",!0)}}async startNewSession(){w.verbose("Starting new session"),await Rt.clear(),w.verbose("Cleared SessionStorage before starting new session");let e=new Date,r=new Et().toHexString();w.verbose("New session ID to be used",r);let n=await Ke.get("sessionNumber",0)+1;await Promise.all([Ke.set("sessionNumber",n),Rt.set("id",r),Rt.set("lastUsedTime",e.getTime()),Rt.set("landing",ra())])}async isNewSessionRequired(){if(!await Rt.get("id"))return!0;let e=await Rt.get("lastUsedTime",0);return e?(new Date().getTime()-e)/1e3>1800:!0}async notSynced(){return!await Rt.get("synced",!1)}async getSessionValidateData(e){let r=await qy(),n=Sl();return Z(_(_({deviceID:this.deviceID,deviceProps:r,appID:this.appID,shopifyShop:this.shopifyShop},e),n),{sdk:Qs,ad:wl.getAdParams(),occurred:g0(pe.get().jsLoadTime),properties:{}})}async validateSessionFromServer(e){w.verbose("Validating session with server"),await this.populateFirstSeen(),this.backendAPIService.setShopName(this.shopifyShop);let r=await this.getSessionValidateData(e);try{let n=await this.backendAPIService.validateSession(r),i=n.data;w.info(`Auth finished in \u23F0 ${vr(n.timeTakenMs)}`),w.verbose("Validate session Response",i),await this.coreService.processAppConfigurations(i.appSettings),await this.storeAndPopulateAuthData(i)}catch(n){throw w.error(n),n}}async populateFirstSeen(){let e=await Ke.get("firstSeen"),r=e?new Date(e):new Date;e||await Ke.set("firstSeen",r.toISOString()),this.backendAPIService.setFirstSeen(r),Ka("Visitor Info",{first_seen:r.toISOString()})}updateAPIClient(){this.userID&&w.info("User ID:",this.userID),xo.trackDeviceID(this.deviceID),this.backendAPIService.setDeviceId(this.deviceID),Ka("Visitor Info",{device_id:this.deviceID,user_id:this.userID}),Ih({id:this.deviceID})}};function g0(t){return(new Date().getTime()-t.getTime())/1e3>1800?new Date:t}var Nt=class t{static INSTANCE;deviceID="";shopName="";firstSeen="";constructor(){}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}async validateSession(e){return this.post("/v1/event/validate-session",e)}updateProfileSafe(e){fr(ct.replaySubject).then(()=>this.updateProfile(e??{}))}updateProfile(e){this.put("/v1/user/update",e).then(async r=>{w.verbose("Updated user profile"),await ct.getInstance().storeAndPopulateAuthData(r.data)}).catch(r=>{w.error("Error saving user profile",r)})}generateDiscount(e){return this.post("/v1/event/generate-discount",e)}updateDevicePropsSafe(e){fr(ct.replaySubject).then(()=>this.updateDeviceProps({props:e}))}updateDeviceProps(e){this.put("/v1/device/update",e).then(()=>{w.verbose("Updated device properties")}).catch(async r=>{w.error("Error saving device property",r)})}setDeviceId(e){this.deviceID=e??""}setShopName(e){this.shopName=e??""}setFirstSeen(e){this.firstSeen=e?.toUTCString()??""}get(e){return this.requestBackend("GET",e)}post(e,r){return this.requestBackend("POST",e,r)}put(e,r){return this.requestBackend("PUT",e,r)}async requestBackend(e,r,n){if(!di.isECommerceApp()&&!di.getFlags().allowEvents)return w.log(`Rejecting ${e} ${r} as this is not e-commerce app`),Promise.reject();r.startsWith("http")||(r=zt.apiURL+r);let i=this.getDefaultHeaders(),o="keepalive"in new Request(""),s=n?JSON.stringify(n):void 0;if(n&&!o&&s?.includes("CE App Background"))try{return this.performXMLHttpRequest(r,i,n)}catch(c){throw we(c,"http-request",{extra:{body:s}}),c}let a={method:e,headers:i,keepalive:!0};return n&&(a.body=s),Zr(r,a)}performXMLHttpRequest(e,r,n){return new Promise((i,o)=>{let s=new XMLHttpRequest;s.open("POST",e,!0),r.forEach((a,c)=>{s.setRequestHeader(c,a)}),s.onreadystatechange=()=>{if(s.readyState===XMLHttpRequest.DONE)if(s.status>=200&&s.status<300)try{if(s.getResponseHeader("Content-Type")?.includes("application/json")){let c=JSON.parse(s.responseText);i({data:c,headers:r,request:s,status:s.status,statusText:s.statusText})}else o(new Error("Content-Type of response header is not json"))}catch(a){o(a)}else o(new Error(`Received status - ${s.status}(${s.statusText})`))},s.onerror=()=>{o(new Error("Network error occurred during the request."))},s.send(JSON.stringify(n))})}getDefaultHeaders(){let e=new Headers;return e.set("content-type","application/json"),e.set("cooee-sdk",Qs),e.set("cooee-sdk-code",ym.toString()),e.set("cooee-sdk-version",Kr),e.set("cooee-first-seen",this.firstSeen),this.deviceID&&e.append("cooee-device-id",this.deviceID),this.shopName&&e.append("cooee-shop-name",this.shopName),zt.debug&&e.set("cooee-sdk-debug",String(1)),e}};var mn=class{constructor(e){this.triggerContext=e}backendAPIService=Nt.getInstance();eventAPIService=Re.getInstance();async execute(e){let r=pe.get().getCurrentItem(),n=e.clickAction;if(!n)return;let i=e.item,o=this.triggerContext,s=new Bn,a=o.triggerData.redirectBehaviour,c=!!o.triggerData.discount?.type&&!!n?.applyDiscount,p={selectedVariants:o.triggerData.nonMutableItems.map(N=>({itemMID:N.mID,mID:N.selectedOrFirstVariant.value.mID,variantID:N.selectedOrFirstVariant.value.mID})),eID:o.triggerData.engagementID,cID:o.triggerData.contentID},d="",f=[],E=[];if(i?E=[i.toEmbed()]:e.embeddedItem&&(E=[e.embeddedItem]),n.at===be.ADD_BUNDLE){let N=o.selectedItems;if(E=e.embeddedItems??N.map(k=>k.toEmbed()),o.shouldGiveFBTDiscount||e.embeddedItems?.length){let k;e.embeddedItems?k=e.embeddedItems.map(P=>({itemMID:P.mID,mID:P.vID,variantID:P.vID,quantity:P.quantity})):k=N.map(P=>({itemMID:P.mID,mID:P.selectedOrFirstVariant.value.mID,variantID:P.selectedOrFirstVariant.value.mID}));let G=o.triggerData.bundleFrom;o.triggerData.isBundleOnCartDrawer()&&G&&(k.push({itemMID:G.mID,mID:G.selectedOrFirstVariant.value.mID,isPrimary:!0}),E.unshift(G.toEmbed())),p.selectedVariants=k,o.triggerData.isBundleOnPDP()&&p.selectedVariants.forEach(P=>{P.mID===r.vID&&(P.isPrimary=!0)})}else p=void 0;f=e.embeddedItems??N}else if(n.at===be.INITIATE_CHECKOUT){let N=await ye.getCurrent().getNormalisedCart();E=N.items,p.selectedVariants=N.items.map(k=>({itemMID:k.mID,mID:k.vID}))}else if(n.at===be.ADD_TO_CART)f=i?[i]:[e.embeddedItem];else if(n.at===be.QUICK_VIEW){window.cooeeShowQuickItem(this.triggerContext,i),this.sendTriggerClicked(E,{from:"button"},e.video);return}else if(n.at===be.GO_TO_PRODUCT)d=i?zi("/products/"+i.slug):e.embeddedItem?.link;else if(n.at===be.GO_TO_URL){let N=Ui(n.gu?.u);N&&(d=N.href)}else if(n.at===be.UPGRADE_TO_SUBSCRIPTION){let N=await s.upgradeToSubscription(i,o.triggerData);this.triggerContext.triggerData.skipSubscribedItems&&this.triggerContext.renderer.destroy(),rt.get().refreshUI(N)}else if(n.at===be.GO_TO_COLLECTION){let N=this.triggerContext.triggerData.collections?.[0];N&&(d="collections/"+N.handle)}if(this.sendTriggerClicked(E,{from:"button"},e.video),w.verbose({redirectPath:d,redirectBehaviour:a,hasDiscount:c}),!c&&d){location.href=d;return}let y,T=!1;try{y=await this.getOrGenerateDiscountCode(p),w.verbose("Discount code (if any) to apply",y)}catch(N){if(!this.triggerContext.triggerData.isBYOB()){ev.default.error("Unable to get a discount code",N);return}}if(y&&n.at===be.COPY_COUPON_CODE)await s.copyDiscountCode(y);else if(n.at===be.BUY_NOW){let N=await s.createNewCart(r,y,o.triggerData);N&&(location.href=N);return}try{y&&await zr.applyWithStorefront([y])}catch(N){w.error(N),T=!0}let D;if(f?.length&&(D=await s.addToCart(f,o.triggerData)),T&&y){zr.navigate(y,a,d);return}if(d){location.href=d;return}zr.navigateWithoutDiscount(a,D)}sendTriggerClicked(e,r,n){let i=new Ie("CE Trigger Clicked",r,this.triggerContext.triggerData);i.items=e,i.setVideos(n),this.eventAPIService.sendSilently(i)}async getOrGenerateDiscountCode(e){let r=this.triggerContext.triggerData.discount;if(!r?.type)return;let n="";if(r.type===er.STATIC){if(!r.code)throw Sh("No discount code found","warning",{triggerContext:this.triggerContext}),new Error("No discount code found");return r.code}if(e){if(n=await this.generateDiscount(e),!n)throw w.error("No discount code found",e),new Error("Discount code not found or generated");return n}}async generateDiscount(e){try{return(await this.backendAPIService.generateDiscount(e)).data.code}catch(r){throw Sr("Failed to generate a discount code"),we(r,"backend-generate-discount",{triggerContext:this.triggerContext}),r}}};var Gl=class{eventAPIService;modifications=[];constructor(){this.eventAPIService=le.get(Hn)}execute(e){for(let r of e){if(!r.experimentConfig)continue;this.executeExperiment(r)&&this.trackExperimentRan(r)}if(document.querySelector("#lc-hide-body")?.remove(),!document.body){Da("No body element found","error");return}this.setupMutationObserver()}executeExperiment(e){let r=e.experimentConfig?.modifications;return r?.length?r.some(n=>{if(!n.cssSelector)return w.verbose("No CSS Selector available",e?.toString()),!1;this.modifications.push(n);let i=Array.from(document.querySelectorAll(n.cssSelector));return i?.length?(this.executeSingleModification(n,i),!0):!1}):(w.log("Nothing to experiment",e.toString()),!0)}executeSingleModification(e,r){if(r?.length)for(let n of r)Object.assign(n.style,e.style),e.type==="TEXT"&&e.text?n.innerHTML=e.text:e.type==="IMAGE"&&this.updateImage(e,n)}trackExperimentRan(e){if(e.id==="preview"){w.warn("Skipping experiment attribution as its preview",e.toString());return}this.eventAPIService.trackExperiment({name:"CE Experiment Start",experiment:new Dn(e)}).catch(r=>{w.error("Fail to track experiment",r)})}setupMutationObserver(){new MutationObserver(r=>{r.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof HTMLElement&&this.modifications.forEach(o=>{i.matches&&i.matches(o.cssSelector)?(w.verbose("Re-applying experiment",o.toString()),this.executeSingleModification(o,[i])):i.querySelectorAll&&(w.verbose("Re-applying experiment",o.toString()),this.executeSingleModification(o,Array.from(i.querySelectorAll(o.cssSelector))))})})})}).observe(document.body,{childList:!0,subtree:!0})}updateImage(e,r){let n=e.image?.lg?.src,i=e.image?.sm?.src;!n&&!i||(r instanceof HTMLPictureElement?this.updatePictureElement({desktop:n,mobile:i},r):this.updateImageElement({desktop:n,mobile:i},r))}updateImageElement(e,r){Cr()&&e.mobile?(r.setAttribute("src",e.mobile),r.removeAttribute("srcset")):e.desktop&&(r.setAttribute("src",e.desktop),r.removeAttribute("srcset"))}updatePictureElement(e,r){if(r.innerHTML="",e.mobile){let i=document.createElement("source");i.srcset=e.mobile,i.media="(max-width: 767px)",r.append(i)}if(e.desktop){let i=document.createElement("source");i.srcset=e.desktop,i.media="(min-width: 768px)",r.append(i)}let n=document.createElement("img");n.src=e.desktop??e.mobile??"",r.append(n)}};var Hn=class t extends Un{static INSTANCE;constructor(){super()}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}fetchExperimentsSilently(){this.fetchExperimentsSafe().catch(e=>we(e,"fetch-experiments"))}async trackExperiment(e){let r=await this.getAllContext(),n=_(_({},e),r);await this.backendAPIService.post("/v1/event/experiment",n)}async fetchExperimentsSafe(){if(!this.runtimeData.activeExperiments)return;ct.getInstance().isAuthenticated()?await this.fetchExperiments():(await fr(ct.replaySubject),await this.fetchExperiments())}async fetchExperiments(){w.info("Fetch experiments after \u23F0",pe.get().getSDKLoadTimeDiff()+" of SDK load");let e=await this.getAllContext(),r=_({},e);this.backendAPIService.post("/v1/engagement/experiments",r).then(async n=>{w.info(`Experiments fetched in \u23F0 ${vr(n.timeTakenMs)}`);let i=n.data.experiments.map(o=>new Tt(o));new Gl().execute(i)}).catch(n=>{w.error("Error sending experiment getter",n)})}};var zl=class{runtimeData=pe.get();widgetAPIService=le.get(Rr);experimentAPIService=le.get(Hn);meddle(){let e=Me.globalRef;e.account=e.account??[],e.profile=e.profile??[],e.events=e.events??[],e.page=e.page??[],this.meddlePage(),this.meddleAccount(),this.meddleEvents(),this.meddleProfile(),this.exposeMethods()}exposeMethods(){let e=Me.globalRef;e.loadPageWidgets=()=>{this.widgetAPIService.loadPageWidgetsSafe()},e.loadCartWidgets=()=>{this.widgetAPIService.loadCartWidgetsSafe()},e.loadExperiments=()=>{this.experimentAPIService.fetchExperimentsSilently()},e.testCartUpdate=this.testCartUpdate.bind(this),e.previewWidget=Me.previewWidget.bind(Me),e.previewPopup=Me.previewPopup.bind(Me),e.executeCTA=(r,n)=>{new mn(r).execute(n)},e.sendEvent=r=>{Re.getInstance().sendSafe(r)}}overwritePush(e,r){sn(e,"push",r)}meddleAccount(){this.overwritePush(Me.globalRef.account,(...e)=>{this.processAccount(e[0])}),Me.globalRef.account.forEach(this.processAccount.bind(this))}meddleEvents(){this.overwritePush(Me.globalRef.events,(...e)=>{this.processEvent(e[0])}),Me.globalRef.events.forEach(this.processEvent.bind(this))}meddleProfile(){this.overwritePush(Me.globalRef.profile,(...e)=>{this.processProfile(e[0])}),Me.globalRef.profile.forEach(this.processProfile.bind(this))}processAccount(e){e&&(e.appID&&Me.authenticate(e),e.flags&&di.setFlags(e.flags))}processEvent(e){e&&(_m.includes(e[0])?Me.sendEvent(e[0],e[1],_({occurred:this.runtimeData.jsLoadTime},e[2])):Me.sendEvent(e[0],e[1],e[2]))}processProfile(e){e&&Me.updateProfile(e)}processPageName(e){e&&Me.setPageName(e)}meddlePage(){this.overwritePush(Me.globalRef.page,(...e)=>{this.processPage(e[0])}),Me.globalRef.page.forEach(this.processPage.bind(this))}processPage(e){e.currentItem&&this.runtimeData.setCurrentItem(e.currentItem),e.currency&&(this.runtimeData.currencyCode=e.currency),e.shopCurrency&&(this.runtimeData.shopCurrencyCode=e.shopCurrency),e.moneyFormat&&(this.runtimeData.moneyFormat=e.moneyFormat),e.jsLoad&&(this.runtimeData.jsLoadTime=e.jsLoad),e.locale&&(this.runtimeData.locale=e.locale),e.pageName&&Me.setPageName(e.pageName),e.activeExperiment&&(this.runtimeData.activeExperiments=e.activeExperiment),e.cart&&ye.getCurrent().update(e.cart),e.customContext&&(this.runtimeData.customContext=_(_({},this.runtimeData.customContext),e.customContext))}async testCartUpdate(){if(this.runtimeData.pageName!=="product"){window.alert("This feature is only available on a product page");return}let e=py();if(e||(e=this.runtimeData.getCurrentItem()?.vID),!e){window.alert("Could not find a variant to test. Please try a different product page");return}let r=new Tt({id:"preview",shortID:"1",redirectBehaviour:tr.CART_DRAWER});await new mn(new Dr(new Date,r)).execute({clickAction:{at:be.ADD_TO_CART},embeddedItem:new Ct({vID:e})})}};var Ao=class{static SESSION_STORAGE=window.sessionStorage;static SESSION_STORAGE_KEY_PREFIX="cooee".concat("-");static getString(e,r){return this.getItem(e)||r}static setString(e,r){this.setItem(e,r)}static remove(e){this.removeItem(e)}static getItem(e){return this.SESSION_STORAGE.getItem(this.SESSION_STORAGE_KEY_PREFIX.concat(e))}static setItem(e,r){this.SESSION_STORAGE.setItem(this.SESSION_STORAGE_KEY_PREFIX.concat(e),r)}static removeItem(e){this.SESSION_STORAGE.removeItem(this.SESSION_STORAGE_KEY_PREFIX.concat(e))}};var Do=class t{static INSTANCE;static DEBOUNCE_TIME=1e3;static THRESHOLD=10;lastPercent=0;_lastScreenOrScroll=new Date;constructor(){}set lastScreenOrScroll(e){this._lastScreenOrScroll=e}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}resetScrollID(e){Ao.remove("sleid"),this.lastScreenOrScroll=e??new Date}listen(){if(window.scrollY){let e=this.getPercentScrolledY();this.shouldSendScroll(e)&&this.sendScroll(e)}Fi(()=>{this.observeWindowScroll()})}observeWindowScroll(){mi(window,"scroll").pipe(mr(t.DEBOUNCE_TIME),fn(()=>{let e=this.getPercentScrolledY();if(e>100){w.warn("Received scroll percent is more than 100",e);return}if(this.shouldSendScroll(e))return e})).subscribe(e=>{this.sendScroll(e)})}shouldSendScroll(e){return Math.abs(this.lastPercent-e)>=t.THRESHOLD||this.lastPercent!==e&&e===100}sendScroll(e){if(e==null)return;let r={percent:e,timeMS:new Date().getTime()-this._lastScreenOrScroll.getTime()};this.lastPercent=e;let n=Ao.getString("sleid",""),i=new Ie("CE Scroll",r,null,n);le.get(Re).sendSafe(i),Ao.setString("sleid",i.id.toHexString()),this._lastScreenOrScroll=new Date(i.occurred)}getPercentScrolledY(){let e=window.document.body.scrollHeight,r=window.innerHeight;return Math.ceil((window.scrollY+r)/e*100)}};var Yl=class t{static ACTIVE_DURATION="aDur";static INACTIVE_DURATION="iaDur";runtimeData=pe.get();listen(){document.onvisibilitychange=()=>{document.visibilityState==="visible"?this.onVisible():document.visibilityState==="hidden"&&this.onHidden()}}async onVisible(){}async onHidden(){let e=await this.runtimeData.setInactive();if(e===0){w.info("Not sending background event as user was inactive on website");return}w.info(`Sending background event with ${e} seconds`);let r={};r[t.ACTIVE_DURATION]=e,le.get(Re).sendSafe(new Ie("CE App Background",r))}};var ql=class{listen(){return this.overwriteFetchMethod(),this}overwriteFetchMethod(){let e=this,r=window.fetch;window.fetch=async function(n,i){try{await e.modifyRequest(n,i)}catch(o){we(o,"modify-graphql-request",{extra:{body:JSON.stringify(i?.body)}})}return r(n,i)},w.verbose("Securely overwritten window.fetch method for graphql query")}async modifyRequest(e,r){let n=typeof e=="string"?e:e instanceof Request?e.url:"";if(!(n.includes("graphql.json")&&r?.method==="POST")||!r.body)return;let i;if(typeof r.body=="string")try{i=JSON.parse(r.body)}catch{return}else i=r.body;i?.variables?.input&&(w.verbose("Intercepted fetch request of:",n),i?.query.includes("cartCreate")&&(r.body=await this.updatedBody(i),this.sendBuyNowEvent()))}async updatedBody(e){let r=e.variables.input.attributes??[],n=await Qa("Buy Now");return e.variables.input.attributes=[...r,...n],JSON.stringify(e)}sendBuyNowEvent(){let e=pe.get().getCurrentItem();if(!e)return;let r=new Ie("Buy Now Clicked",{items:[e]});le.get(Re).sendSafe(r)}};var No=class{constructor(e,r){this.selectors=e;this.eventName=r;this.selectorString=e.join(",")}static INSTANCE;elements;selectorString;clickListenerCallback=e=>{let r=e.currentTarget,n=new Ie(this.eventName,{class:r.className||void 0,tagName:r.tagName||void 0,id:r.id||void 0});le.get(Re).sendSafe(n),this.removeClickListener(this.clickListenerCallback)};listenSilently(){this.listen().catch(e=>w.error(e))}async listen(){this.elements=await kp(this.selectorString),this.elements.forEach(e=>{e.addEventListener("click",this.clickListenerCallback)})}removeClickListener(e){this.elements?.forEach(r=>{r.removeEventListener("click",e)})}};var Kl=class t extends No{static selectors=[".product__thumbnail-list-inner > button","product-gallery-navigation > button",".product-media--thumb-container",".product-images-inner > img",".m-product-media",".swiper-button-control",".media__thumb",".slick-arrow",".productView-img-container.product-single__media",".product-gallery__thumbnail_item_inner"];constructor(){super(t.selectors,"Item Thumbnail Clicked")}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}};var Xl=class t extends No{static selectors=[".jdgm-widget.jdgm-preview-badge.jdgm-preview-badge--with-link.jdgm--done-setup","reviewsio-product-ratings",".ruk_rating_snippet.tracked:not(.hidden)","a > .loox-rating",".yotpo-reviews-star-ratings-widget",".yotpo.lp-hero__reviews",".pr-rating > a",".rivyoReviewWidget"];constructor(){super(t.selectors,"Review Clicked")}static getInstance(){return this.INSTANCE||(this.INSTANCE=new t),this.INSTANCE}};var Jl=class{selector=[".gokwik-checkout button","button.cart__checkout-button","button.cart__checkout","button#checkout","button#checkout2",'button[id*="checkout" i]','button[name*="checkout" i]','button[class*="checkout" i]'].join(",");listen(){Fi(()=>{w.verbose("Execution order:","document ready"),this.useLocationHash()})}useLocationHash(){let e=window.location.hash?.substring(1);if(e)if(e.includes("initiate-checkout")){document.dispatchEvent(new Event("letscooee:outbound:third-party-initiate-checkout"));let r=document.querySelector(this.selector);if(!r){w.verbose("No clickable cart checkout button found");return}w.verbose("Clickable cart checkout button found",r),r.click()}else e.includes("open-cart-drawer")&&rt.get().open()}};var Xs=class{static attachCheckoutListener(){window.gokwikSdk&&window.gokwikSdk.on("checkout_initiated",async()=>{let e=await ye.getCurrent().getNormalisedCart(),r={via:"GoKwik",items:e.items,cartToken:e.token,amount:{value:e.amount,currency:e.currency}},n=new Ie("Checkout Started",r);le.get(Re).sendSafe(n)})}};var Ql=class{static watch(){let e=su();(e==="1"||e==="on")&&Nt.getInstance().updateDevicePropsSafe({debugTill:this.getDebugMillis()}),e==="on"?sessionStorage.cooeeDebug="1":e==="off"&&sessionStorage.removeItem("cooeeDebug"),sessionStorage.cooeeDebug&&this.renderDebugBar()}static renderDebugBar(){let e=document.createElement("cooee-debugger");e.logs=this.logs,Fi(()=>{document.body.appendChild(e)})}static getDebugMillis(){return new Date().getTime()+360*60*1e3}};var Me=class{static globalRef;static authenticated;static async initForMerchantWebsiteOnly(e){if(window.cooeeSDKPreview)return;let r=(window.CooeeSDK?.pageLoadTime??e).getTime()-e.getTime();w.info(`Initialising SDK after ${vr(r)} of page load`),this.initGlobalReference(e),await le.get(ct).populateAuthDataFromStorage(),this.autoAuthenticate(),new zl().meddle(),Rm(),le.get(Rr).loadPageWidgetsSafe(!0),le.get(Hn).fetchExperimentsSilently(),new Yl().listen(),new vi().listen(),new ql().listen(),new Jl().listen(),le.get(Do).listen(),le.get(Xl).listenSilently(),le.get(Kl).listenSilently(),this.attachGoKwikListeners(),this.setupPreviewListeners(),Ql.watch()}static async initForAll(){this.injectWidgetAssets()}static initGlobalReference(e){window.CooeeSDK||sn(window,"CooeeSDK",{}),this.globalRef=window.CooeeSDK,sn(this.globalRef,"config",new Je),sn(this.globalRef,"runtimeData",new pe(e)),sn(this.globalRef,"uaParser",new Tr,!0),sn(this.globalRef,"cartChange$",vi.cartChange$.asObservable()),sn(this.globalRef,"cartDrawerToggle$",rt.cartDrawerToggle$.asObservable()),w.verbose("Global reference initialised"),new Vc(()=>{this.globalRef.uaParser=new Tr})}static injectWidgetAssets(){jg(zt.widgetURL,"cooee-widget-sdk"),Tf()}static autoAuthenticate(){let e=pg();e&&this.authenticate({shopifyShop:e})}static authenticate(e){if(this.authenticated)return;w.info("Begin auth after \u23F0",pe.get().getSDKLoadTimeDiff(),"of SDK load");let r=e.appID?.trim(),n=e.shopifyShop;if((Mp(r)||r.length!==24)&&Mp(n)){w.warn("Cooee App ID or Shop name is not configured");return}this.authenticated=!0,le.get(ct).authenticate(e)}static sendEvent(e,r,n){let i=new Ie(e,r,n?.triggerData);n?.occurred&&(i.occurred=n.occurred),le.get(Re).sendSafe(i)}static updateProfile(e){for(let r in e)if(r.toLowerCase().startsWith("ce "))throw new Error("User property name cannot start with 'CE '");le.get(Nt).updateProfileSafe(e)}static setPageName(e){if(!e)return;let r=pe.get(),n=r.pageName;if(e===n)return;if(r.pageName=e,e==="cart"&&le.get(Rr).loadOrRenderWidgetsAfterCartChange(),vm.some(s=>e.includes(s))){le.get(Do).resetScrollID();return}let i={};n&&(i.ps=n);let o=new Ie("CE Screen View",i);o.occurred=r.jsLoadTime,le.get(Re).sendSafe(o),le.get(Do).resetScrollID(o.occurred)}static previewPopup(e,r){new kn(r).render(e)}static previewWidget(e){new xt(new Tt(e)).renderSilently()}static setupPreviewListeners(){if(window.opener){try{window.opener.postMessage({action:"COOEE_READY_FOR_PREVIEW"},"*")}catch(e){w.error(e)}window.addEventListener("message",e=>{if(w.verbose("Received event",e),!e.origin.includes("letscooee.com")&&!e.origin.includes("localhost"))return;let r=e.data;typeof r=="object"&&(r.action==="POPUP_PREVIEW"?(this.previewPopup(r.engagementTrigger),e.source?.postMessage({action:"PREVIEW_SUCCESSFUL"},e.origin)):r.action==="WIDGET_PREVIEW"&&(this.previewWidget(r.engagementTrigger),e.source?.postMessage({action:"PREVIEW_SUCCESSFUL"},e.origin)))})}}static attachGoKwikListeners(){let e=pe.get();window.addEventListener("kp-modal:opened",()=>{e.isGoKwikPopupOpen=!0}),window.addEventListener("user-loggedin",r=>{let{token:n}=r.detail;n&&this.updateProfile({goKwikToken:n})}),window.gokwikSdk?Xs.attachCheckoutListener():window.addEventListener("gokwikLoaded",Xs.attachCheckoutListener)}};var y0=new Date;wm();Sm();w.verbose("Execution order:","top");window.cooeeShopifyScriptLoaded||(window.cooeeShopifyScriptLoaded=!0,(async()=>(w.verbose("Execution order:","IIFE start"),await Me.initForMerchantWebsiteOnly(y0),await Me.initForAll(),w.verbose("Execution order:","IIFE end")))());w.verbose("Execution order:","bottom");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as C,b}from"./chunk-
|
|
1
|
+
import{a as C,b}from"./chunk-JQR4R7BU.js";import{e as g,f as h,i as u,l as f}from"./chunk-J2BQWQD2.js";import{Ba as l,Qa as c,X as m,na as n,oa as i,pa as r,v as s}from"./chunk-KHVPWQ5E.js";import"./chunk-V7UGKYBN.js";var _=class d{dialogRef=s(u);eventData=s(h);triggerData=s(g)().triggerData;onShareAndClose(p,o){p.stopPropagation();let{url:t,text:a}=b(this.triggerData,this.eventData.video,o!=="Clipboard");switch(o){case"Whatsapp":window.open(`https://wa.me/?text=${a}%20${t}`,"_blank","noopener,noreferrer");break;case"X(Twitter)":window.open(`https://x.com/intent/post?text=${a}&url=${t}`,"_blank","noopener,noreferrer");break;case"Clipboard":navigator.clipboard.writeText(t).catch(()=>{let e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)});break;default:}o&&C(this.triggerData,this.eventData.video,this.eventData.index,o),this.dialogRef.close()}static \u0275fac=function(o){return new(o||d)};static \u0275cmp=m({type:d,selectors:[["cooee-share-dialog"]],decls:19,vars:0,consts:[[1,"share-dialog"],[1,"share-dialog-header"],["type","button","aria-label","Close",1,"close-button",3,"click"],["name","close","aria-hidden","true"],[1,"share-options"],["type","button","aria-label","Share on WhatsApp",1,"share-option",3,"click"],["name","whatsapp","aria-hidden","true"],["type","button","aria-label","Share on X",1,"share-option",3,"click"],["name","x-twitter","aria-hidden","true"],["type","button","aria-label","Copy link",1,"share-option",3,"click"],["name","copy","aria-hidden","true"]],template:function(o,t){o&1&&(n(0,"div",0)(1,"div",1)(2,"h3"),c(3,"Share"),i(),n(4,"button",2),l("click",function(e){return t.onShareAndClose(e)}),r(5,"cooee-icon",3),i()(),n(6,"div",4)(7,"button",5),l("click",function(e){return t.onShareAndClose(e,"Whatsapp")}),r(8,"cooee-icon",6),n(9,"span"),c(10,"Whatsapp"),i()(),n(11,"button",7),l("click",function(e){return t.onShareAndClose(e,"X(Twitter)")}),r(12,"cooee-icon",8),n(13,"span"),c(14,"X"),i()(),n(15,"button",9),l("click",function(e){return t.onShareAndClose(e,"Clipboard")}),r(16,"cooee-icon",10),n(17,"span"),c(18,"Copy link"),i()()()())},dependencies:[f],styles:["@keyframes _ngcontent-%COMP%_slideInScale{0%{opacity:0;transform:scale(.9) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}.share-dialog[_ngcontent-%COMP%]{background:#fff;border-radius:12px;padding:20px;min-width:280px;box-shadow:0 8px 32px #00000026;color:#333;animation:_ngcontent-%COMP%_slideInScale .25s ease-out}.share-dialog-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.share-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-family:var(--lc-heading-family),serif;margin:0;font-size:18px;font-weight:600}.share-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;font-family:var(--lc-text-family),serif}.share-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#0002;border:1px solid #e9ecef;border-radius:8px;color:#333;font-size:16px;font-weight:500;cursor:pointer;transition:all .2s ease}.share-option[_ngcontent-%COMP%]:hover{background:#0004;border-color:#dee2e6;transform:translateY(-1px)}.share-option[_ngcontent-%COMP%]:active{transform:translateY(0)}.share-option[_ngcontent-%COMP%] cooee-icon[_ngcontent-%COMP%]{width:24px;height:24px}.share-option[_ngcontent-%COMP%] cooee-icon[name=whatsapp][_ngcontent-%COMP%]{color:#25d366}.share-option[_ngcontent-%COMP%] cooee-icon[name=x-twitter][_ngcontent-%COMP%], .share-option[_ngcontent-%COMP%] cooee-icon[name=copy][_ngcontent-%COMP%]{color:#000}.share-option[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1;text-align:left}button.close-button[_ngcontent-%COMP%]{background-color:transparent;border:none}button.close-button[_ngcontent-%COMP%] cooee-icon[name=close][_ngcontent-%COMP%]{border-radius:100%;color:#000}"]})};export{_ as ShareDialogComponent};
|