!function(){"use strict";const t=(()=>{try{const t="kaching_local_storage_test";return localStorage.setItem(t,t),localStorage.removeItem(t),!0}catch(t){return!1}})()?window.localStorage:window.sessionStorage,n=()=>new URLSearchParams(window.location.search).get("kaching");let e;let i;const r=()=>(void 0===i&&(i="debug"===n()),i);let o;const s=async(n,e,i,r,o)=>{try{const s="kaching_visited_deal_blocks",a=t.getItem(s),c=a?JSON.parse(a):[];if(c.includes(e))return;c.push(e),t.setItem(s,JSON.stringify(c));const u=`${"https://kaching-bundles-stats-50cc8a504c1c.herokuapp.com"}/impressions`;await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({shopDomain:n,dealBlockId:e,productId:i,abTestVariantId:r,sessionId:o})})}catch(s){console.error(s)}},a=async(t,n={},e=1)=>{if(Math.random()>e)return;l("sendStorefrontEvent",{name:t,data:n});const i=window.location.href;return await fetch("https://storefront-events-25baffeb7686.herokuapp.com/popup/events",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({event:{name:t,data:n,url:i,shop:window.Shopify.shop}})})},c=async(t,n,e,i=.1)=>{if(Math.random()>i)return;if("Failed to fetch"===n)return;if(n&&(n.includes("Cannot define multiple custom elements with the same tag name")||n.includes("Failed to execute 'define' on 'CustomElementRegistry'")||n.includes("CustomElementRegistry.define")))return;const r=window.location.href,o=window.Shopify.shop;return await fetch("https://storefront-events-25baffeb7686.herokuapp.com/bundles/errors",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({error:{filename:t,message:n,stack:e,url:r,shop:o}})})},u=()=>{const t=["kaching-bundles.js","kaching-bundles-block.js"];window.addEventListener("error",(async function(n){try{await(async n=>{const{filename:e,message:i,error:o}=n;for(const s of t)if(e.includes(s)){if(r()||I())return void l("Error",n);await c(e,i,o.stack)}})(n)}catch(e){console.error(e)}})),window.addEventListener("unhandledrejection",(async function(n){try{await(async n=>{if("object"!=typeof n.reason)return;const{message:e,stack:i}=n.reason;if(i)for(const o of t)if(i.includes(o)){if(r()||I())return void l("Unhandled rejection",n);await c(o,e,i)}})(n)}catch(e){console.error(e)}}))};function l(t,e=null){(r()||(void 0===o&&(o="dev"===n()),o))&&console.debug("[Kaching Bundles]",t,e)}const d=()=>{const t=t=>{window.dispatchEvent(new Event(t))},n=history.pushState;history.pushState=function(...e){const i=n.apply(this,e);return t("pushstate"),t("locationchange"),i};const e=history.replaceState;history.replaceState=function(...n){const i=e.apply(this,n);return t("replacestate"),t("locationchange"),i},m(window,"popstate",(()=>{t("locationchange")}))},h=(t,n,e,i=0)=>{const r=Object.getPrototypeOf(t);if(r.hasOwnProperty(n)){const o=Object.getOwnPropertyDescriptor(r,n);if(!o.configurable)return;Object.defineProperty(t,n,{configurable:!0,get:function(...t){return o.get.apply(this,t)},set:function(...t){const r=this[n];o.set.apply(this,t);const s=this[n];return"function"==typeof e&&setTimeout(e.bind(this,r,s),i),s}})}},p=(t,n=document.body)=>{try{return n.querySelector(t)}catch(e){return null}},f=(t,n=document.body)=>{try{return[...n.querySelectorAll(t)]}catch(e){return[]}},m=(t,n,e)=>t.addEventListener(n,e),w=t=>document.createElement(t),_=(t,n,e)=>t.setAttribute(n,e),y=t=>t.dataset,g=t=>{const n=p(t);if(!n)return;const e=JSON.parse(n.textContent);return l("jsonFromElement",e),e},b=(t,n)=>{let e=0,i=t;for(;i!==n&&i!==document.body;)e++,i=i.parentNode;if(i!==n)throw new Error("The specified child node is not a descendant of the parent node.");return e},v=(t,n)=>{const e=new Range;return e.setStart(t,0),e.setEnd(n,0),e.collapsed&&(e.setStart(n,0),e.setEnd(t,0)),e.commonAncestorContainer},k=(t,n,e=1/0)=>{let i=null,r=1/0;for(const o of n){const n=v(t,o),s=b(t,n);s>e||s{const t=document.currentScript;if(!t)return!1;return t.src.includes("kaching-bundles-dev")},P=(t,n={})=>{const e=window.Shopify.routes,i=(e&&e.root||"/")+t,r=new URLSearchParams;for(const[s,a]of Object.entries(n))r.append(s,a);const o=r.toString();return o?`${i}?${o}`:i},S=(t,n)=>{new MutationObserver(((e,i)=>{for(const r of e)"childList"===r.type&&r.removedNodes.forEach((e=>{e.contains(t)&&(i.disconnect(),n())}))})).observe(document.body,{childList:!0,subtree:!0})},N=[['[data-icon="gpicon-product-cartbutton"]','[data-icon="gpicon-product-quantity"]'],["gp-product-button","gp-product-quantity"],["product-form",".product-form__quantity"],['[data-pf-type="ProductATC"]','[data-pf-type="ProductQuantity"]'],[".product-form__item--submit",'label[for="Quantity-product-template"]'],[".product-single__add-to-cart",".product-single__quantity"],[".product-info__buy-buttons",".product-info__quantity-selector"],[".ProductForm__BuyButtons, .ProductForm__AddToCart",".ProductForm__QuantitySelector"],['[data-block-type="buy-buttons"]','[data-block-type="quantity-selector"]'],[".product-page--submit-action",".quantity-controls__outer"],[".product-form__payment-container",".product-form__info-item--quantity"],["[data-product-submit]",".product-quantity-input"],[".product-form--atc",".product-form--atc-qty"],[".purchase-details",".purchase-details__quantity"],[".product-single__form .payment-buttons",".product__quantity"],[".product-form--wide",".product-single__quantity"],[".product-single__add-to-cart",".product-single__quantity"],[".product-form--button-container",null],[".product-form__item--submit",".product-form__item--quantity"],[".product-detail__form__action",null],[".product__submit__buttons",null],[".buy-buttons-row",".quantity-wrapper"],[".t4s-product-form__buttons","[data-quantity-wrapper]"],[".qty-wrapper--with-payment-button",".product-qty"],[".shopify-product-form",".product-quantity-block"],[".shopify-product-form",".product-block-quantity-selector"],[".type_buy_buttons",".type_quantity_selector"],[".product-single__form .add-to-cart",".product__quantity"],[".purchase-section",".quantity.form"],[".product-form__buttons",".quantity_selector"],[".product__atc",".quantity--input"],[".product-form__payment-container",".quantity-selector"],[".ecom-product-single__add-to-cart",".ecom-product-single__quantity"],[".product-form__submit",".product__quantity"],[".product-info__add-to-cart","quantity-input"],[".yv-checkout-btn",".yv-product-quantity"],[".product-add-to-cart-container","quantity-selector"],[".product__block__buttons",".product__block__quantity"],["x-buy-button","x-quantity-input"],['[data-instant-action-type="redirect-to-cart"]','[data-instant-type="container"]:has(> .instant-quantity-input)']];class C extends Error{constructor(t){super(t),this.name="CartFetchError"}}const $="kaching_session_id",q=()=>{const n=new URL(window.location.href),e=new URLSearchParams(n.search),i=e.get("preview_kaching_session_id");i&&(t.setItem($,i),e.delete("preview_kaching_session_id"),n.search=e.toString(),window.history.replaceState({},"",n.toString()))},T=()=>t.getItem($)||V(),V=()=>{const n=x();return t.setItem($,n),n},x=()=>"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():F(),F=()=>"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(t=>(+t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+t/4).toString(16))),A=async()=>{const t=await fetch(P("cart.js"));if(!t.ok)throw new C("Failed to fetch cart");return(await t.json()).attributes._kaching_session_id},O=async t=>{const n=new FormData;n.append("attributes[_kaching_session_id]",t);const e=await fetch(P("cart/update.js"),{method:"POST",body:n});return await e.json()},D=(t,n)=>{const e=t.slice(-1);return parseInt(e,16)%n+1};class B{constructor(t,n,e,i,r){if(l("AddToCartForm",[t]),this.t=t,this.i=n,this.o=e,this.u=i,r){this.l("properties[__kaching_session_id]").value=T()}}update(t){l("AddToCartForm#update",[this.t,t]),this.h(t.id),this.p(t.quantity),this.m(t.properties),this._(t.selling_plan)}currentVariantId(){const t=this.v("id");if(t)return Number(t.value)}h(t){const n=this.l("id");n.disabled=!1,n.value=String(t)}p(t){l("AddToCartForm#_updateQuantityInput",t);let n=null;n=this.o?this.l("quantity"):this.v("quantity"),n&&(n.disabled=!1,n.value=String(t))}m(t){var n,e;if(t.__kaching_bundles){const i=this.l("properties[__kaching_bundles]");let r=t.__kaching_bundles;const o=null==(e=null==(n=window.Shopify.theme)?void 0:n.schema_name)?void 0:e.toLowerCase();(null==o?void 0:o.startsWith("shrine pro"))&&(r=btoa(r)),i.value=r}else{const t=this.v("properties[__kaching_bundles]");null==t||t.remove()}}_(t){if(this.u)if(t){this.l("selling_plan").value=String(t)}else{const t=this.v("selling_plan");null==t||t.remove()}}l(t){return this.v(t)||this.k(t)}v(t){return p(`[name="${t}"]`,this.t)}k(t){const n=w("input");return n.type="hidden",n.name=t,this.t.prepend(n),n}}class j{constructor(t){this.storefrontApiVersion="2025-04",this.storefrontAccessToken=t}async query(t,{variables:n}={variables:{}}){var e;let i=`https://${window.Shopify.shop}/api/${this.storefrontApiVersion}/graphql.json`;const r=null==(e=t.match(/query\s+(\w+)/))?void 0:e[1];r&&(i+=`?operation_name=${r}`);const o=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":this.storefrontAccessToken},body:JSON.stringify({query:t,variables:n})});let s=null;try{if(s=await o.text(),!s)throw new Error("Empty graphql response");return JSON.parse(s).data}catch(c){throw a("storefront_graphql_error",{status:o.status,body:s}),c}}}const G="$app:kaching_bundles",E="\n id\n availableForSale\n price {\n amount\n }\n compareAtPrice {\n amount\n }\n selectedOptions {\n name\n value\n }\n image {\n id\n url(transform: { maxWidth: 200, maxHeight: 200 })\n }\n unitPriceMeasurement {\n quantityUnit\n quantityValue\n referenceUnit\n referenceValue\n }\n sellingPlanAllocations(first: 100) @include(if: $includeSellingPlans) {\n nodes {\n sellingPlan {\n id\n }\n priceAdjustments {\n price {\n amount\n }\n }\n }\n }\n",M=async(t,{country:n,language:e,productIds:i,removeUnavailableVariants:r,includeSellingPlans:o})=>{const s=i.map((t=>`gid://shopify/Product/${t}`));let a=(await t.query(`\n query FetchProducts($productGIDs: [ID!]!, $includeSellingPlans: Boolean!) @inContext(country: ${n}, language: ${e}) {\n nodes(ids: $productGIDs) {\n ... on Product {\n id\n handle\n onlineStoreUrl\n availableForSale\n title\n featuredImage {\n url\n }\n options {\n name\n optionValues {\n id\n name\n swatch {\n color\n image {\n previewImage {\n url(transform: { maxWidth: 200, maxHeight: 200 })\n }\n }\n }\n }\n }\n variants(first: 250) {\n nodes {\n ${E}\n }\n }\n collections(first: 50) {\n nodes {\n id\n }\n }\n metafield: metafield(namespace: "${G}", key: "text") {\n value\n }\n metafield2: metafield(namespace: "${G}", key: "text2") {\n value\n }\n metafield3: metafield(namespace: "${G}", key: "text3") {\n value\n }\n metafield4: metafield(namespace: "${G}", key: "text4") {\n value\n }\n legacy_metafield_text: metafield(namespace: "kaching_bundles", key: "text") {\n value\n }\n legacy_metafield_text2: metafield(namespace: "kaching_bundles", key: "text2") {\n value\n }\n sellingPlanGroups(first: 100) @include(if: $includeSellingPlans) {\n nodes {\n sellingPlans(first: 100) {\n nodes {\n id\n name\n priceAdjustments {\n adjustmentValue {\n __typename\n ... on SellingPlanPercentagePriceAdjustment {\n adjustmentPercentage\n }\n ... on SellingPlanFixedAmountPriceAdjustment {\n adjustmentAmount {\n amount\n }\n }\n ... on SellingPlanFixedPriceAdjustment {\n price {\n amount\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n `,{variables:{productGIDs:s,includeSellingPlans:o}})).nodes.filter((t=>null!=t));return a=await Promise.all(a.map((n=>U(t,n)))),a.map((t=>R(t,r)))},U=async(t,n)=>{if(n.variants.nodes.length<250)return n;const e=new Set,i=[],r=[],o=async o=>{let s=!0,a=null;for(;s;){const c=await t.query(`\n query($productGID: ID!, $cursor: String, $reverse: Boolean) {\n product(id: $productGID) {\n variants(first: 250, after: $cursor, reverse: $reverse) {\n nodes {\n ${E}\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n `,{variables:{productGID:n.id,cursor:a,reverse:o}}),{nodes:u,pageInfo:l}=c.product.variants;for(const t of u){if(e.has(t.id)){s=!1;break}e.add(t.id),o?r.push(t):i.push(t)}l.hasNextPage||(s=!1),a=l.endCursor}};return await Promise.all([o(!1),o(!0)]),n.variants.nodes=[...i,...r.reverse()],l("fetchAllVariantsForProduct",{productId:n.id,variants:n.variants.nodes.length}),a("2048_variants",{variants:n.variants.nodes.length}),n},R=(t,n)=>{var e,i,r,o,s,a,c,u;let l=t.variants.nodes.map((({unitPriceMeasurement:t,...n})=>{var e,i,r,o;return{id:Number(n.id.split("/").pop()),availableForSale:n.availableForSale,price:Math.round(100*Number(n.price.amount)),compareAtPrice:n.compareAtPrice?Math.round(100*Number(n.compareAtPrice.amount)):null,options:n.selectedOptions.map((t=>t.value)),imageId:n.image?Number(n.image.id.split("/").pop()):null,image:(null==(e=n.image)?void 0:e.url)||null,unitPriceQuantityValue:(null==t?void 0:t.quantityValue)||null,unitPriceQuantityUnit:(null==(i=null==t?void 0:t.quantityUnit)?void 0:i.toLowerCase())||null,unitPriceReferenceValue:(null==t?void 0:t.referenceValue)||null,unitPriceReferenceUnit:(null==(r=null==t?void 0:t.referenceUnit)?void 0:r.toLowerCase())||null,sellingPlans:(null==(o=n.sellingPlanAllocations)?void 0:o.nodes.map((t=>({id:Number(t.sellingPlan.id.split("/").pop()),price:t.priceAdjustments.length>0?Math.round(100*Number(t.priceAdjustments[0].price.amount)):Math.round(100*Number(n.price.amount))}))))||[]}}));if(n){const t=l.filter((t=>t.availableForSale));t.length>0&&(l=t)}const d=t.options.map(((t,n)=>{const e=t.optionValues.map((t=>{var n,e,i,r;return{id:Number(t.id.split("/").pop()),defaultName:t.name,name:t.name,swatch:{color:(null==(n=t.swatch)?void 0:n.color)||null,image:(null==(r=null==(i=null==(e=t.swatch)?void 0:e.image)?void 0:i.previewImage)?void 0:r.url)||null}}}));return{defaultName:t.name,name:t.name,position:n+1,optionValues:J(e,n,l)}})),h=t=>{const n=t.priceAdjustments[0];if(!n)return null;const e=n.adjustmentValue;switch(e.__typename){case"SellingPlanPercentagePriceAdjustment":return{type:"percentage",value:e.adjustmentPercentage};case"SellingPlanFixedAmountPriceAdjustment":return{type:"fixed_amount",value:100*Number(e.adjustmentAmount.amount)};case"SellingPlanFixedPriceAdjustment":return{type:"price",value:100*Number(e.price.amount)};default:throw new Error(`Unknown price adjustment type: ${e.__typename}`)}},p=(null==(e=t.sellingPlanGroups)?void 0:e.nodes.flatMap((t=>t.sellingPlans.nodes.map((t=>({id:Number(t.id.split("/").pop()),name:t.name,priceAdjustment:h(t)}))))))||[];return{id:Number(t.id.split("/").pop()),url:t.onlineStoreUrl,availableForSale:t.availableForSale,title:t.title,image:(null==(i=t.featuredImage)?void 0:i.url)||null,collectionIds:t.collections.nodes.map((t=>Number(t.id.split("/").pop()))),options:d,selectedVariantId:Number(t.variants.nodes[0].id.split("/").pop()),variants:l,sellingPlans:p,metafields:{text:(null==(r=t.metafield)?void 0:r.value)||null,text2:(null==(o=t.metafield2)?void 0:o.value)||null,text3:(null==(s=t.metafield3)?void 0:s.value)||null,text4:(null==(a=t.metafield4)?void 0:a.value)||null},legacyMetafields:{kaching_bundles:{text:(null==(c=t.legacy_metafield_text)?void 0:c.value)||null,text2:(null==(u=t.legacy_metafield_text2)?void 0:u.value)||null}}}},J=(t,n,e)=>t.filter((t=>e.filter((e=>e.options[n]===t.name)).length>0)),Q=t=>{const n=t.options.map(((t,n)=>({defaultName:t.name,position:n+1,optionValues:t.optionValues.map((t=>({id:Number(t.id.split("/").pop()),defaultName:t.name})))})));return{id:Number(t.id.split("/").pop()),options:n}},L=async(t,n,e=200)=>(await t.query("\n query FetchMediaImages($mediaImageIds: [ID!]!, $size: Int!) {\n nodes(ids: $mediaImageIds) {\n ... on MediaImage {\n id\n image {\n url(transform: { maxWidth: $size, maxHeight: $size })\n }\n }\n }\n }\n ",{variables:{mediaImageIds:n,size:e}})).nodes.filter(Boolean).map((t=>({gid:t.id,url:t.image.url}))),z=async t=>{var n;const e=null==(n=(await t.query(`\n query FetchDealBlocks {\n shop {\n metafield(namespace: "${G}", key: "deal_blocks") {\n value\n }\n }\n }\n `)).shop.metafield)?void 0:n.value;return e?JSON.parse(e):[]},K=async(t,n)=>{const e=n.dealBars.map((t=>t.mediaImageGID)).filter((t=>null!=t)).filter((t=>!t.includes("placeholder")));if(!e.length)return[];let i=300;"d1b96b-5.myshopify.com"===window.Shopify.shop&&(i=1200);return await L(t,e,i)},H=async(t,n)=>{const e=n.dealBars.map((({freeGifts:t})=>(t||[]).map((t=>t.mediaImageGID)))).reduce(((t,n)=>t.concat(n)),[]).filter((t=>null!=t)).filter((t=>!t.includes("placeholder")));if(!e.length)return[];return await L(t,e,300)},W=async(t,n)=>{const e=n.dealBars.map((({upsells:t})=>(t||[]).map((t=>t.mediaImageGID)))).reduce(((t,n)=>t.concat(n)),[]).filter((t=>null!=t));if(!e.length)return[];return await L(t,e,300)},X=async(t,n)=>{if(!n.swatchOptions)return[];const e=n.swatchOptions.reduce(((t,n)=>[...t,...n.images.map((t=>t.mediaImageGID)).filter((t=>null!=t))]),[]);if(!e.length)return[];return await L(t,e,300)},Y=async(t,n)=>{if(!n.collectionBreaksEnabled||!n.collectionBreaks)return[];const e=n.collectionBreaks.mediaImageGID;if(!e)return[];return await L(t,[e],300)},Z=async(t,n,e)=>{var i;if(!t)return;if(0===n.length)return;const r=tt(e);if(0===r.length)return;const o=n.map((t=>t.id)),s=null==(i=r.find((t=>t.localization)))?void 0:i.localization,a=new j(t);try{const t=await(async(t,n,e)=>{const i=n.map((t=>`gid://shopify/Product/${t}`));let r="";return e&&(r=`@inContext(country: ${e.country}, language: ${e.language})`),(await t.query(`\n query FetchProductsInDefaultLanguage($productGIDs: [ID!]!) ${r} {\n nodes(ids: $productGIDs) {\n ... on Product {\n id\n options {\n name\n optionValues {\n id\n name\n }\n }\n }\n }\n localization {\n country {\n isoCode\n }\n language {\n isoCode\n }\n }\n }\n `,{variables:{productGIDs:i}})).nodes.filter((t=>null!=t)).map(Q)})(a,o,s);for(const e of n){const n=t.find((t=>t.id===e.id));n&&nt(e,n)}}catch(c){console.error("[Kaching Bundles] Failed to fetch swatches",c),setTimeout((()=>{throw c}),0)}},tt=t=>t.map((t=>t.swatchOptions||[])).reduce(((t,n)=>t.concat(n)),[]).filter((t=>null!=t)).filter((t=>"default"!==t.swatchType)),nt=(t,n)=>{for(const e of n.options){const n=t.options.find((t=>t.position===e.position));if(n){n.defaultName=e.defaultName;for(const t of e.optionValues){const e=n.optionValues.find((n=>n.id===t.id));e&&(e.defaultName=t.defaultName)}}}},et=(t,n)=>{if(l("_updateNativePrice",{discountedPrice:t,fullPrice:n}),n.amount>0){const e=f("[data-kaching-price-compare]");if(e.length>0)for(const i of e)n.amount>t.amount?(i.innerHTML=n.formatted,i.style.display=""):i.style.display="none";else{const t=[".price--large .price__sale .price-item--regular",".lumin-price .price__sale .price-item--regular",".product-page-price .price__sale .price-item--regular",'gp-product-price div[type="compare"]',"product-price .compare-at-price",".pp-product-price .pp-price-item--sale",".product__price-and-badge .product__price--compare",".product-block--price span[data-compare-price]",".main-product__block-price .m-price__sale .m-price-item--regular",".product-info__price compare-at-price",'.product-info__block-item[data-block-type="price"] compare-at-price',".product-form__info-item .price--compare",'[data-product-type="compare_at_price"]'].flatMap((t=>f(t)));for(const e of t)e.innerHTML=n.formatted}}if(t.amount>0){const n=f("[data-kaching-price]");if(n.length>0)for(const e of n)e.innerHTML=t.formatted;else{const n=[".price--large .price__regular .price-item--regular",".price--large .price__sale .price-item--sale",".lumin-price .price__sale .price-item--sale",".product-page-price .price__regular .price-item--regular",".product-page-price .price__sale .price-item--sale",'gp-product-price div[type="regular"]',"product-price .price",".pp-product-price .pp-price-item--regular",".product__price-and-badge .product__price--regular",".product-block--price span[data-product-price]",".main-product__block-price .m-price__sale .m-price-item--sale",".product-info__price sale-price",'.product-info__block-item[data-block-type="price"] sale-price',".product-form__info-item .price:not(.price--compare)",'[data-product-type="price"]'].flatMap((t=>f(t)));for(const e of n)e.innerHTML=t.formatted}}if(t.amount>0&&n.amount>0){const e=Math.round((n.amount-t.amount)/n.amount*100),i=f("[data-kaching-price-badge]");if(i.length>0)for(const t of i)e>0?(t.innerHTML=t.innerHTML.replace(/\d+%/,`${e}%`),t.style.display=""):t.style.display="none";else{const t=[".price--large .price__badge-sale",".lumin-price .price__badge-sale",".product-page-price .price__badge-sale","gp-product-tag div[data-gp-text]",".product__price-and-badge span[data-price-off-amount]",".product-block--price span[data-save-price]",".product-info__price on-sale-badge"].flatMap((t=>f(t)));for(const n of t)!/\d/.test(n.innerHTML)||n.innerHTML.includes("%")?n.innerHTML=n.innerHTML.replace(/\d+%/,`${e}%`):n.style.display="none"}}},it=window;class rt{constructor(t,n,e,i,r,o,s,a,c){var u;if(this.I=[],this.P=!1,l("DealBlock",{dealBlockElement:t,cartForm:n,addToCartButton:e,quantityInput:i,variantPicker:r,globalConfig:o,translations:s,dealBlockSettings:a,product:c}),this.S=t,this.t=n,this.N=e,this.C=i,this.$=r,this.q=o,this.T=s,this.V=a,this.i=c,this.F=window.Shopify.country,this.A=window.Shopify.locale.split("-")[0].toUpperCase(),this.q.featureFlags.initialize_with_form_variant){let t=this.i.selectedVariantId||this.i.variants[0].id;const n=null==(u=this.t)?void 0:u.querySelector('input[name="id"]');if(n){const e=Number(n.value);e&&(t=e)}this.O=t}else this.O=this.i.selectedVariantId||this.i.variants[0].id;this.D=n&&new B(n,c,!i,!!a.subscriptionsEnabled||a.dealBars.some((t=>"subscription"===t.dealBarType)),!!a.abTestVariantNumber),this.B()}replaceVariantPicker(t){this.$=t}replaceAddToCartButton(t){this.N=t,this.j()}replaceQuantityInput(t){this.C=t,this.G()}B(){_(this.S,"config",JSON.stringify(this.q)),_(this.S,"translations",JSON.stringify(this.T)),_(this.S,"deal-block",JSON.stringify(this.V)),_(this.S,"product",JSON.stringify(this.i)),_(this.S,"current-variant-id",String(this.O)),this.M(),this.U(),this.R(),this.J(),this.t&&this.L()}async M(){if(!this.q.storefrontAccessToken)return;const t=new j(this.q.storefrontAccessToken),n=await(async(t,n)=>{const[e,i,r,o,s]=await Promise.all([K(t,n),H(t,n),W(t,n),X(t,n),Y(t,n)]);return[...e,...i,...r,...o,...s]})(t,this.V);_(this.S,"media-images",JSON.stringify(n))}async U(){if(!this.q.storefrontAccessToken)return;const t=this.V.dealBars.flatMap((({freeGifts:t})=>t?t.map((t=>t.productGID)):[])).filter((t=>null!=t)),n=this.V.dealBars.flatMap((({upsells:t})=>t?t.map((t=>t.productGID)):[])).filter((t=>null!=t)),e=this.V.dealBars.flatMap((({bundleProducts:t})=>t?t.map((t=>t.productGID)):[])).filter((t=>null!=t)).filter((t=>"default"!==t)),i=Array.from(new Set([...t,...n,...e]));if(!i.length)return;const r=new j(this.q.storefrontAccessToken),o=await M(r,{country:this.F,language:this.A,productIds:i.map((t=>Number(t.split("/").pop()))),removeUnavailableVariants:!0,includeSellingPlans:this.q.accessScopes.includes("unauthenticated_read_selling_plans")});await Z(this.q.storefrontAccessToken,o,[this.V]),_(this.S,"other-products",JSON.stringify(o))}async R(){if(!this.q.storefrontAccessToken)return;const{collectionBreaksEnabled:t,collectionBreaks:n}=this.V;if(!t||!n)return;const e=(n.excludedProducts||[]).map((({id:t})=>t)),i=(n.selectedProducts||[]).map((({id:t})=>t)),r=(n.selectedCollections||[]).map((({id:t})=>t)),o=new j(this.q.storefrontAccessToken);let s=await(async(t,{country:n,language:e,blockVisibility:i,excludedProductGIDs:r,selectedProductGIDs:o,selectedCollectionGIDs:s})=>{const a=250;switch(i){case"selected-products":return o.slice(0,a);case"all-products":case"excluded-products":{let o=(await t.query(`\n query FetchProductGIDs($limit: Int!) @inContext(country: ${n}, language: ${e}) {\n products(first: $limit) {\n nodes {\n id\n }\n }\n }\n `,{variables:{limit:a}})).products.nodes.map((t=>t.id));return"excluded-products"===i&&(o=o.filter((t=>!r.includes(t)))),o}case"selected-collections":return(await t.query("\n query FetchCollectionProductGIDs($collectionGIDs: [ID!]!, $limit: Int!) {\n nodes(ids: $collectionGIDs) {\n ... on Collection {\n products(first: $limit) {\n nodes {\n id\n }\n }\n }\n }\n }\n ",{variables:{collectionGIDs:s,limit:a}})).nodes.flatMap((t=>t.products.nodes.map((t=>t.id)))).splice(0,a)}})(o,{country:this.F,language:this.A,blockVisibility:n.visibility,excludedProductGIDs:e,selectedProductGIDs:i,selectedCollectionGIDs:r});s=s.slice(0,250);const a=(c=50,s.reduce(((t,n,e)=>{const i=Math.floor(e/c);return t[i]||(t[i]=[]),t[i].push(n),t}),[]));var c;let u=(await Promise.all(a.map((t=>M(o,{country:this.F,language:this.A,productIds:t.map((t=>Number(t.split("/").pop()))),removeUnavailableVariants:!1,includeSellingPlans:this.q.accessScopes.includes("unauthenticated_read_selling_plans")}))))).flat();u=u.filter((t=>t.availableForSale)),await Z(this.q.storefrontAccessToken,u,[this.V]),_(this.S,"collection-breaks-products",JSON.stringify(u)),setTimeout((()=>{this.K(u)}),1e3)}async J(){if(!this.V.dealBars.some((t=>{var n;return null==(n=t.upsells)?void 0:n.some((t=>"complementary"===t.productSource))})))return;if(!this.q.storefrontAccessToken)return;const t=new j(this.q.storefrontAccessToken),n=await(async(t,{productId:n,country:e,language:i})=>{var r;return(null==(r=(await t.query(`\n query FetchComplementaryProductGIDs($productGID: ID!) @inContext(country: ${e}, language: ${i}) {\n productRecommendations(productId: $productGID, intent: COMPLEMENTARY) {\n id\n }\n }\n `,{variables:{productGID:`gid://shopify/Product/${n}`}})).productRecommendations)?void 0:r.map((t=>t.id)))||[]})(t,{country:this.F,language:this.A,productId:this.i.id});if(!n.length)return;let e=await M(t,{country:this.F,language:this.A,productIds:n.map((t=>Number(t.split("/").pop()))),removeUnavailableVariants:!0,includeSellingPlans:this.q.accessScopes.includes("unauthenticated_read_selling_plans")});e=e.filter((t=>t.availableForSale)),await Z(this.q.storefrontAccessToken,e,[this.V]),_(this.S,"complementary-products",JSON.stringify(e))}K(t){for(const n of t){const t=n.variants[0].image||n.image;if(t){(new Image).src=t}}}L(){if(this.H(),this.W(),this.X(),this.G(),this.Y(),this.Z(),!window.kachingBundlesDisableAddToCartHandling){this.j();try{this.tt()}catch(t){console.error(t)}}}tt(){m(document.body,"kaching-unavailable-option-value-selected",(t=>{const{swatch:n}=t.detail;a("unavailable-option-value-selected-3",{swatch:n})}))}H(){d(),m(it,"locationchange",(()=>{const t=new URLSearchParams(it.location.search).get("variant");t&&this.nt(Number(t))}))}W(){const t=p('input[name="id"]',this.t);t&&h(t,"value",((t,n)=>{l("_listenForVariantIdInputChange",[t,n]),t!==n&&n&&this.nt(Number(n))}))}X(){const t=p('select[name="id"]',this.t);if(!t)return;let n;window.setInterval((()=>{const e=t.value;n!==e&&e&&(l("_listenForVariantIdSelectChange",[n,e]),n=e,this.nt(Number(e)))}),100)}nt(t){if(l("handleNativeVariantChange",{variantId:t,currentVariantId:this.O}),t!=this.O&&this.i.variants.find((n=>n.id==t))){if(this.q.featureFlags.remove_variant_change_delay&&window.kachingBundlesCurrentVariantChangeInProgress||(this.O=t),this.q.featureFlags.remove_variant_change_delay){if(window.kachingBundlesCurrentVariantChangeInProgress)return void l("handleNativeVariantChange","skipping")}else if(this.S.dataset.nativeVariantChangeInProgress||window.kachingBundlesCurrentVariantChangeInProgress)return void l("handleNativeVariantChange","skipping");this.S.dataset.nativeVariantChangeInProgress="true",setTimeout((()=>{delete this.S.dataset.nativeVariantChangeInProgress}),this.q.featureFlags.remove_variant_change_delay?1e3:500),_(this.S,"current-variant-id",String(t))}}G(){this.C&&(m(this.C,"change",(()=>{const t=Number(this.C.value);l("_listenForQuantityInputChange change",t),this.et(t)})),h(this.C,"value",((t,n)=>{t!==n&&(l("_listenForQuantityInputChange observe",[t,n]),this.et(Number(n)))})))}et(t){window.kachingBundlesQuantityChangeInProgress||(!this.q.keepQuantityInput||window.kachingBundlesCurrentVariantChangeInProgress||this.S.dataset.nativeVariantChangeInProgress?this.it():this.q.keepQuantityInput&&_(this.S,"quantity",String(t)))}it(){if(!this.C||0===this.I.length)return;if(window.kachingBundlesDisableAddToCartHandling&&!this.q.keepQuantityInput)return;window.kachingBundlesQuantityChangeInProgress=!0;const t=this.I.filter((t=>this.rt(t))),n=(t.find((({id:t})=>t==this.O))||t[0]).quantity;l("_updateQuantityInput",n),this.C.value=String(n),"119a01-bf.myshopify.com"===window.Shopify.shop&&this.C.dispatchEvent(new Event("input",{bubbles:!0})),this.C.dispatchEvent(new Event("change",{bubbles:!0})),setTimeout((()=>{delete window.kachingBundlesQuantityChangeInProgress}),100)}Y(){this.$&&m(this.S,"variant-selected",(t=>{const{variantId:n}=t.detail;l("listenForBlockVariantSelect",n),this.ot(n)}))}Z(){m(this.S,"variants-changed",(t=>{var n;clearTimeout(this.st);const{pricing:e,preselected:i}=t.detail;this.I=this.S.items(),l("listenForBlockVariantsChange",{items:this.I,pricing:e,preselected:i});const r=this.I.filter((t=>this.rt(t))),o=r.find((t=>t.id==this.O))||r[0];if(this.ot(o.id),this.D.update(o),this.it(),null==(n=this.N)||n.updatePrice(e.discountedPrice),i&&setTimeout((()=>{var t;return null==(t=this.N)?void 0:t.updatePrice(e.discountedPrice)}),300),this.ct(),i&&(this.st=setTimeout((()=>{this.it(),delete this.st}),1e3)),setTimeout((()=>{for(const t of this.I)if(t.properties.__kaching_bundles){const n=JSON.parse(t.properties.__kaching_bundles);n.bxgy&&a("bxgy_item",{property:n})}})),this.V.updateNativePrice){clearTimeout(this.ut);const t="item"===this.V.updateNativePriceType?e.discountedPricePerItem:e.discountedPrice,n="item"===this.V.updateNativePriceType?e.fullPricePerItem:e.fullPrice;et(t,n),this.ut=setTimeout((()=>{et(t,n)}),1e3)}this.lt()}))}lt(){var t,n,e,i;l("reconvertPrices");try{(null==(t=window.bucksCC)?void 0:t.reConvert)&&window.bucksCC.reConvert(),(null==(n=window.baCurr)?void 0:n.refreshConversion)&&window.baCurr.refreshConversion(),(null==(e=window.DoublyGlobalCurrency)?void 0:e.convertAll)&&window.DoublyGlobalCurrency.convertAll(),(null==(i=window.conversionBearAutoCurrencyConverter)?void 0:i.convertPricesOnPage)&&window.conversionBearAutoCurrencyConverter.convertPricesOnPage(),window.mlvedaload&&window.mlvedaload()}catch(r){console.error(r)}}ot(t){const n=this.i.variants.find((n=>n.id==t));if(l("_changeCurrentVariant",{variantId:t,currentVariantId:this.O}),this.O==t)return;if(this.O=t,!this.$)return;(!this.q.featureFlags.remove_variant_change_delay||!this.S.dataset.nativeVariantChangeInProgress)&&(clearTimeout(window.kachingBundlesCurrentVariantChangeInProgress),window.kachingBundlesCurrentVariantChangeInProgress=setTimeout((()=>{delete window.kachingBundlesCurrentVariantChangeInProgress}),1e3));for(const[e,i]of n.options.entries()){const t=this.i.options[e],r=t.name,o=t.optionValues.find((t=>t.name===i)).id;this.$.select(e+1,o,r,i,this.i.id,n.id)}}j(){if(!this.N)return;this.N.onClickIfConditionMet((()=>!window.kachingBundlesDisableAddToCartHandling&&(!!this.V.skipCart||(!!this.dt()||(!!this.ht()||this.I.length>1)))),(async()=>{if(this.V.skipCart)return await this.ft(),window.kachingCartApi&&(l("Kaching Cart update tiered promotions bar"),await window.kachingCartApi.updateTieredPromotionsBar()),void(window.location.href=P("checkout"));if(this.dt()){try{window.upcartOpenCart&&window.upcartOpenCart()}catch(t){console.error("upcartOpenCart error",t)}return await this.ft(),void(window.upcartRefreshCart&&window.upcartRefreshCart())}if(this.ht()){try{window.opusOpen&&window.opusOpen()}catch(t){console.error("opusOpen error",t)}return await this.ft(),void(window.opusRefreshCart&&window.opusRefreshCart())}return this.wt()}),(()=>this.V.skipCart||this.dt()||this.ht())),this._t(),this.yt()}_t(){window.upcartShouldSkipAddToCartInterceptor=!0;const t=window.upcartShouldSkipAddToCart;window.upcartShouldSkipAddToCart=n=>{if("function"==typeof t){if(!0===t(n))return!0}return n.includes("kaching_bundles=true")}}yt(){["the-gloria-skincare.myshopify.com","xzxihx-8t.myshopify.com","e76602-61.myshopify.com"].includes(window.Shopify.shop)&&(window.OpusNoATC=!0)}dt(){return!!p("#UpcartPopup")||!!window.upcartDocumentOrShadowRoot}ht(){return window.opusActive&&a("opus_cart"),["the-gloria-skincare.myshopify.com","xzxihx-8t.myshopify.com","e76602-61.myshopify.com"].includes(window.Shopify.shop)&&window.opusActive||!1}async wt(){l("addItemsExceptCurrentToCart",this.I);const t=this.D.currentVariantId();setTimeout((()=>{t!=this.O&&a("different_current_variant_v3",{form:t,object:this.O})}));const n=this.I.findIndex((n=>this.rt(n)&&n.id==t)),e=this.I.filter(((t,e)=>e!==n));await this.gt({items:e,partial:!0})}async ft(){l("addAllItemsToCart",this.I);let t=this.I;0===t.length&&(t=[{id:this.D.currentVariantId(),quantity:1,properties:{}}]),await this.gt({items:t})}bt(){const t=f('[name^="properties"]').map((t=>[t.name.match(/properties\[(.*)\]/)[1],t.value])).filter((([t])=>"__kaching_bundles"!==t));return Object.fromEntries(t)}rt(t){const n=this.vt(t);return!n||(n.main||!1)}vt(t){if(!t.properties.__kaching_bundles)return null;return JSON.parse(t.properties.__kaching_bundles)}async gt({items:t,partial:n=!1}){const e=this.bt(),i=t.map((t=>{var n;return this.rt(t)||(null==(n=this.vt(t))?void 0:n.collectionBreaksProduct)?{...t,properties:{...e,...t.properties}}:t}));setTimeout((()=>this.kt(e)));const r={kaching_bundles:"true"};n&&(r.partial="true");const o={"Content-Type":"application/json"};n||(o["X-Kaching-Cart-Ignore"]="1"),await fetch(P("cart/add.js",r),{method:"POST",body:JSON.stringify({items:i}),headers:o})}kt(t){if(!this.V.collectionBreaksEnabled)return;const n=Object.fromEntries(Object.entries(t).filter((([t])=>!t.startsWith("__kaching_"))));0!==Object.keys(n).length&&a("collection_break_properties",{properties:n})}ct(){const t="kaching-bundles-form--different-variants-selected";this.I.length>1?this.t.classList.add(t):this.t.classList.remove(t)}}class ot{static find(t,n){let e=t.parentElement;for(;e;){if(n){const t=f(n,e);if(t.length>0)return new ot(t)}const t=p(["variant-selects","variant-radios","variant-picker","product-variants","gp-product-variants",".gf_variants-wrapper",'[data-pf-type="ProductVariantSwatches"]',".product-selectors",".product-block-variant-picker","dm-variant-selects"].join(", "),e);if(t)return new ot([t]);let i=f([".selector-wrapper",".radio-wrapper",".variant-wrapper","div[data-product-option]",".pp-variant-picker"].join(", "),e);if(["28212b.myshopify.com","9bd9ad.myshopify.com"].includes(window.Shopify.shop)&&(i=f(".selector-wrapper, .radio-wrapper, .variant-wrapper, .select-wrapper, div[data-product-option]",e)),i.length>0){const t=i.filter((t=>!i.some((n=>n!==t&&n.contains(t)))));return new ot(t)}e=e.parentElement}return null}constructor(t){this.It=t}elements(){return this.It}hide(){for(const t of this.It)t.style.display="none",t.parentElement.classList.add("kaching-bundles--variant-selects-hidden")}select(t,n,e,i,r,o){l("VariantPicker#select",[t,n,e,i]),this.Pt(t,n,e,i,r)||this.St(t,e,i)||this.Nt(o)}Pt(t,n,e,i,r){const o=this.It.map((t=>[...t.querySelectorAll("input")])).flat();let s=o.filter((n=>[e,`${e}-${t}`,`options[${e}]`,`option${t}`,`option-${r}-${t-1}`].includes(n.name.trim())));s.length||(s=o.filter((n=>!!n.dataset.optionPosition&&Number(n.dataset.optionPosition)===t))),s.length||(s=o.filter((t=>"radio"===t.type)));const a=s.find((t=>t.value==i||t.value===String(n)));return!!a&&(l("VariantPicker#_clickRadioInput",a),a.click(),!0)}St(t,n,e){const i=this.It.map((t=>[...t.querySelectorAll("select")])).flat().find((e=>!![`options[${n}]`,`option${t}`].includes(e.name)||(e.dataset.index===`option${t}`||(e.dataset.optionName===n||(e.id==="SingleOptionSelector-product-"+(t-1)||e.id===`p-variant-dropdown-${t}`)))));if(!i)return!1;return!![...i.options].find((t=>t.value==e))&&(i.value===e?(l("VariantPicker#_setSelectValue - already set",{variantSelect:i,optionValue:e}),!0):(l("VariantPicker#_setSelectValue",{variantSelect:i,optionValue:e}),i.value=e,i.dispatchEvent(new Event("change",{bubbles:!0})),!0))}Nt(t){const n=this.It.map((t=>[...t.querySelectorAll("select")])).flat().find((n=>[...n.options].find((n=>Number(n.value)===t))));return!!n&&(n.value===String(t)?(l("VariantPicker#_setSelectVariantId - already set",{variantSelect:n,variantId:t}),!0):(l("VariantPicker#_setSelectVariantId",{variantSelect:n,variantId:t}),n.value=String(t),n.dispatchEvent(new Event("change",{bubbles:!0})),!0))}}class st{constructor(t){var n;this.Ct=!1,this.$t=!1,this.element=t;try{if(!this.qt(this.element))return;a("add-to-cart-button-price-4",{theme:null==(n=window.Shopify.theme)?void 0:n.schema_name})}catch(e){console.error(e)}}onClickIfConditionMet(t,n,e){this.element.addEventListener("click",(async i=>{const r=t(),o=e();l("AddToCartButton#interceptClick",{conditionMet:r,preventDefault:o,submitInProgress:this.Ct,ignoreClick:this.$t}),r&&(this.Ct?this.Ct=!1:this.$t||(this.Ct=!0,this.$t=!0,this.element.disabled=!0,setTimeout((()=>{this.$t=!1}),1e3),i.preventDefault(),i.stopPropagation(),i.stopImmediatePropagation(),await n(),this.element.disabled=!1,o?this.Ct=!1:(await new Promise((t=>setTimeout(t,200))),this.element.click())))}),!0)}updatePrice(t){const n=this.qt(this.element);n&&(n.innerHTML=t.amount>0?t.formatted:"")}qt(t){if(!t.childNodes.length)return null;const n=t.childNodes[0].nodeValue;if(n&&n.match(/\d/)&&!n.match(/[a-zA-Z]{4}/)&&!n.includes("%"))return t;for(const e of t.childNodes){const t=this.qt(e);if(t)return t}return null}}let at,ct,ut=null,lt=[];const dt=async()=>{if(ut)return ut;ut=(async()=>{if(!at.storefrontAccessToken)return;const t=new j(at.storefrontAccessToken);ct=await z(t)})();try{await ut}catch(t){throw ut=null,t}},ht=async()=>{var t;await dt();const n=ct.filter((t=>{if(!t.abTestVariantId)return!0;const n=T(),e=D(n,t.abTestVariantsCount);return t.abTestVariantNumber===e})),e=null==(t=lt.find((t=>t.locale===at.locale)))?void 0:t.translations;return n.map((t=>{const n=(null==e?void 0:e.dealBlocks[t.id])||{};return pt(t,n)}))},pt=(t,n)=>{var e;const i=t=>({id:t.id,title:n[t.title]||t.title,mediaImageGID:t.mediaImageGID,freeGifts:a(t.freeGifts),upsells:c(t.upsells),dealBarType:"quantity-break",quantity:Number(t.quantity),discount:ft(t.discountType,t.discountValue)}),r=t=>({id:t.id,title:n[t.title]||t.title,mediaImageGID:t.mediaImageGID,freeGifts:a(t.freeGifts),upsells:c(t.upsells),dealBarType:"bxgy",buyQuantity:Number(t.buyQuantity),getQuantity:Number(t.getQuantity)}),o=t=>({id:t.id,title:n[t.title]||t.title,mediaImageGID:t.mediaImageGID,freeGifts:a(t.freeGifts),upsells:c(t.upsells),dealBarType:"bundle",bundleProducts:s(t.bundleProducts)}),s=t=>t.map((t=>({id:t.id,productId:"default"===t.productGID?"default":mt(t.productGID),variantId:t.variantGID?mt(t.variantGID):null,quantity:Number(t.quantity),discount:ft(t.discountType,t.discountValue)}))),a=t=>{if(!t)return[];return t.filter((t=>t.productGID)).map((t=>({id:t.id,productId:mt(t.productGID),variantId:t.variantGID?mt(t.variantGID):null,quantity:Number(t.quantity)})))},c=t=>t?t.map((t=>({id:t.id,productId:t.productGID?mt(t.productGID):null,variantId:t.variantGID?mt(t.variantGID):null,quantity:Number(t.quantity),discount:ft(t.discountType,t.discountValue)}))):[];return{id:t.id,nanoId:t.nanoId,collectionBreaksEnabled:null!=(e=t.collectionBreaksEnabled)&&e,differentVariantsEnabled:t.differentVariantsEnabled,dealBars:t.dealBars.map((t=>{switch(t.dealBarType){case void 0:case"quantity-break":return i(t);case"bxgy":return r(t);case"bundle":return o(t);default:return null}})).filter((t=>null!==t))}},ft=(t,n)=>t&&"default"!==t?{type:t,value:Number(n)}:null,mt=t=>Number(t.split("/").pop()),wt=['[data-pf-type^="ProductATC"]',"button.gp-button-atc","gp-product-button button","x-buy-button",'button[type="submit"]','input[type="submit"]'],_t=['form[action*="/cart/add"]',"form[data-instant-form-product-url]"],yt=()=>{"visualPreviewInitialLoad"!==new URLSearchParams(window.location.search).get("source")&&console.log('%c❗ [Kaching Bundles] Please add "Add to cart" button to the page template',"color: white; font-weight: bold; background: linear-gradient(90deg, #8181d7, #93e9e5); padding: 5px 8px; border-radius: 3px;")};class gt{constructor(t,n,e,i,r){this.C=null,this.$=null,this.N=null;const o={...n};o.moneyFormat=this.Tt(n.moneyFormat,i.showPricesWithoutDecimals),o.currencyRate=this.Vt(n.currencyRate,i.currency),this.q=o,this.T=e,this.V=i,t.innerHTML='',y(t).initialized="true",this.S=p("kaching-bundles-block",t),this.t=this.xt(),this.Ft(),this.At(),this.Ot(),this.Dt(),this.Bt(),this.jt(),this.Gt(),this.Et=new rt(this.S,this.t,this.N,this.C,this.$,this.q,e,i,r)}Tt(t,n){return n?t.includes("amount_no_decimals")?t:t.replace(/\{\{.+\}\}/g,"{{ amount_no_decimals }}"):t}Vt(t,n){return n?window.Shopify.currency.active===n.currencyCode?1:1/n.currencyRate*t:t}Ot(){const t=this.Mt();t||yt();const n=t&&new st(t);this.N=n}Mt(){if(!this.t)return null;if(this.q.customSelectors.addToCartButton){const t=p(this.q.customSelectors.addToCartButton,this.t);if(t)return t}const t=[];for(const e of wt){const n=f(e,this.t);t.push(...n)}const n=k(this.S,t);return n||this.t.querySelector("button")}Dt(){this.N&&S(this.N.element,(()=>{var t;this.Ot(),l("observeAddToCartButtonRemoval found new add to cart button",this.N),a("add_to_cart_button_removed",{recreated:!!this.N,theme:null==(t=window.Shopify.theme)?void 0:t.schema_name},.01),this.Et.replaceAddToCartButton(this.N),this.Dt()}))}Bt(){const t=ot.find(this.S,this.q.customSelectors.variantPicker);t&&(this.V.hideVariantPicker&&t.hide(),this.$=t)}jt(){this.$&&S(this.$.elements()[0],(()=>{var t;this.Bt(),l("observeVariantPickerRemoval found new variant picker",this.$),a("variant_picker_removed",{recreated:!!this.$,theme:null==(t=window.Shopify.theme)?void 0:t.schema_name},.01),this.Et.replaceVariantPicker(this.$),this.jt()}))}xt(){let t=this.S.parentElement;for(;t;){for(const n of _t)for(const e of[this.q.customSelectors.addToCartButton,...wt,"button"]){if(!e)continue;const i=p(`${n} ${e}`,t);if(i)return i.closest(n)}t=t.parentElement}return null}Ft(){const t=this.Ut(),n=k(this.S,t,6);if(!n)return;this.q.keepQuantityInput||(n.style.display="none");const e=n.matches("input")?n:n.querySelector("input");this.C=e}At(){this.C&&S(this.C,(()=>{var t;this.Ft(),l("observeQuantityInputRemoval found new quantity input",this.C),a("quantity_input_removed",{recreated:!!this.C,theme:null==(t=window.Shopify.theme)?void 0:t.schema_name},.01),this.Et.replaceQuantityInput(this.C),this.At()}))}Ut(){const t=this.q.customSelectors.quantity;if(t){const n=f(t);if(n.length)return n}for(const[n,e]of N){if(!e)continue;const t=f(e);if(t.length)return t}return f(".product-form__quantity")}Gt(){const t=setInterval((()=>{(void 0!==window.FastClick||void 0!==window.T4SThemeSP&&void 0!==window.T4SThemeSP.FastClick||void 0!==window.BEEThemeSP&&void 0!==window.BEEThemeSP.FastClick)&&(clearInterval(t),f("*",this.S).forEach((t=>{return e="needsclick",(n=t)&&n.classList.add(e);var n,e})))}),500)}}class bt{constructor(t){this.q=t,setTimeout((()=>{const t=document.querySelector('link[href*="kaching-bundles-block.css"]');t&&S(t,(()=>{var t;a("css_removed",{theme:null==(t=window.Shopify.theme)?void 0:t.schema_name},.01)}))}),100)}init(){this.Rt();const t=f("kaching-bundle, kaching-bundle-deals");this.Jt(t),0===t.length&&this.Qt(),this.Lt(),this.q.abTestsRunning&&(async()=>{try{q();const t=T();await A()!==t&&await O(t)}catch(t){if(!(t instanceof C))throw t;console.error(t)}})()}Rt(){const t=g("script#kaching-bundles-translations")||[],n=t.find((t=>t.locale===this.q.locale));this.T=null==n?void 0:n.translations,(async t=>{lt=t})(t)}Jt(t){const n=g("script.kaching-bundles-product");if(n)for(const e of t)e.getAttribute("product-id")||e.setAttribute("product-id",n.id)}Qt(){if(!p("script.kaching-bundles-deal-block-settings"))return;const t=this.zt();if(!t.length)return void yt();const n=g("script.kaching-bundles-product"),e=n&&n.id||this.q.productId;for(const i of t){const t=w("kaching-bundle");t.setAttribute("product-id",e),i.parentElement.insertBefore(t,i)}}async Lt(){var t,n;const e=[...f("kaching-bundle, kaching-bundle-deals")].filter((t=>t.getAttribute("product-id")));l("_initializePlaceholders",e);if(0===e.filter((t=>!y(t).initialized)).length)return;const i=await this.Kt(e);l("placeholdersData",i);const r=Array.from(i.values()).map((({dealBlock:t})=>t)).filter((t=>null!=t)),o=Array.from(i.values()).map((({product:t})=>t)).filter((t=>null!=t));await Z(this.q.storefrontAccessToken,o,r);const a=T();for(const c of e){const e=Number(c.getAttribute("product-id")),{product:r,dealBlock:o}=i.get(e);if(!r||!o)continue;this.q.webPixel?setTimeout((()=>{var t;null==(t=window.Shopify.analytics)||t.publish("kaching_bundle_viewed",{product_id:e,deal_block_id:o.id,ab_test_variant_id:o.abTestVariantId,session_id:a})})):setTimeout((()=>{s(this.q.shopifyDomain,o.id,e,o.abTestVariantId,a)}),2e3);const u={...{...this.q.defaultTranslations,...null==(t=this.T)?void 0:t.system},...null==(n=this.T)?void 0:n.dealBlocks[o.id]};new gt(c,this.q,u,o,r)}}async Kt(t){var n;const e=t.map((t=>Number(t.getAttribute("product-id")))),i=this.q.locale===this.q.liquidLocale?[...f("script.kaching-bundles-product")]:[],r=new Map(i.map((t=>{const n=Number(y(t).productId),e=JSON.parse(t.textContent);return 250===e.variants.length?null:[n,e]})).filter((t=>null!==t))),o=e.filter((t=>!r.has(t))),s=[...f("script.kaching-bundles-deal-block-settings")],a=new Map;for(const f of e){const t=s.filter((t=>Number(y(t).productId)===f));t.length&&a.set(f,t.map((t=>t.textContent?JSON.parse(t.textContent):null)))}const c=e.filter((t=>!a.has(t))),u=this.q.storefrontAccessToken?new j(this.q.storefrontAccessToken):null,l=o.length>0&&u?M(u,{country:window.Shopify.country,language:window.Shopify.locale.split("-")[0].toUpperCase(),productIds:o,removeUnavailableVariants:!1,includeSellingPlans:this.q.accessScopes.includes("unauthenticated_read_selling_plans")}):[],d=c.length>0&&u?z(u):[],[h,p]=await Promise.all([l,d]),m=new Map(o.map((t=>[t,h.find((n=>n.id==t))]))),w=new Map([...r,...m]),_=T(),g=new Map;for(const f of e){const t=w.get(f);if(!t)continue;const e=(null==(n=a.get(f))?void 0:n.filter((t=>t)))||p;e.sort(((t,n)=>{const e=!!t.marketId;return e===!!n.marketId?0:e?-1:1}));let i=this.Ht(e,t);i=i.filter((t=>!t.marketId||t.marketId===this.q.marketId)),i=i.filter((t=>{if(!t.abTestVariantId)return!0;const n=D(_,t.abTestVariantsCount);return t.abTestVariantNumber===n})),this.q.b2bCustomer&&(i=i.filter((t=>!t.excludeB2bCustomers))),i.length?g.set(f,{product:t,dealBlock:i[0]}):g.set(f,{product:t,dealBlock:null})}return g}Ht(t,n){const e=[],i=t.filter((t=>"selected-products"===t.blockVisibility));for(const a of i)a.selectedProductIds.map(Number).includes(n.id)&&e.push(a);const r=t.filter((t=>"selected-collections"===t.blockVisibility));for(const a of r)n.collectionIds.some((t=>a.selectedCollectionIds.map(Number).includes(t)))&&e.push(a);const o=t.filter((t=>"excluded-products"===t.blockVisibility));for(const a of o)a.excludedProductIds.map(Number).includes(n.id)||(a.excludedCollectionIds||[]).some((t=>n.collectionIds.includes(t)))||e.push(a);const s=t.filter((t=>"all-products"===t.blockVisibility));for(const a of s)e.push(a);return e}zt(){const t=this.Wt();if(t)return[t];const n=this.Xt();if(n)return[n];const e=this.Yt();return e?[e]:[]}Wt(){const t=f("gp-product-button");for(const n of t)if(!n.closest("gp-sticky"))return n;return null}Xt(){for(const t of N){const n=p(t[0]);if(n){if(n.closest(".dbtfy-sticky-addtocart, .cart-drawer"))continue;return setTimeout((()=>{var e;const i=n.closest('[class*="cart"], [class*="Cart"]');i&&"body"!==i.tagName.toLowerCase()&&(i.classList.toString().includes("add-to-cart")||i.classList.toString().includes("AddToCart")||i.classList.toString().includes("icartShopifyCartContent")||a("theme_position_in_cart_drawer_v8",{selector:t[0],classes:i.classList.toString(),theme:null==(e=window.Shopify.theme)?void 0:e.schema_name},.01))})),n}}return null}Yt(){for(const t of _t)for(const n of[this.q.customSelectors.addToCartButton,...wt,"button"]){if(!n)continue;const e=p(`${t} ${n}`);if(e)return e.parentElement}return null}}const vt=t=>{var n;801===(null==(n=window.Shopify.theme)?void 0:n.theme_store_id)?setTimeout((()=>new bt(t).init()),100):new bt(t).init()},kt=()=>{if(void 0===e&&(e="off"===n()),e){const t=f("style#kaching-bundles-custom-css");for(const n of t)n.remove();return}r()&&(l("App version",(()=>{const t=document.currentScript;if(!t)return null;const n=t.src.match(/\/([^/]+)\/assets\//);return n&&n[1]?n[1]:null})()),l("Shopify domain",window.Shopify.shop));const t=g("script#kaching-bundles-config");if(!t)return;u();const i=window.Shopify.currency;t.currencyRate=i?Number(i.rate):1,t.locale=window.Shopify.locale||t.liquidLocale,window.kachingBundlesKeepQuantityInput&&(t.keepQuantityInput=!0),vt(t),window.Shopify.designMode&&m(window,"shopify:section:load",(()=>{vt(t)})),(()=>{const t=/\b__kaching_/,n=["script","style"],e=e=>{const i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:t=>{const e=t.parentElement;return!e||n.includes(e.tagName.toLowerCase())?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}});let r;for(;r=i.nextNode();){const n=r.textContent||"";if(t.test(n)){const t=r.parentElement;if(t.classList.contains("properties-key-value-key"))continue;if("dt"===t.tagName.toLowerCase()){const n=t.nextElementSibling;"dd"===(null==n?void 0:n.tagName.toLowerCase())&&(n.style.display="none")}t.style.display="none",a("kaching_property_hidden",{text:n,element:t.tagName},.01)}}};new MutationObserver((t=>{for(const n of t)for(const t of n.addedNodes)t.nodeType===Node.ELEMENT_NODE&&e(t)})).observe(document.body,{childList:!0,subtree:!0}),e(document.body)})(),(()=>{const t=document.querySelector('link[href*="kaching-bundles-block.css"]');if(!t)return;const n=t.closest('div[data-block-type="liquid"]');n&&(n.dataset.blockType="liquid-kaching-fix")})(),window.kachingBundlesApi=(at=t,{fetchDeals:ht}),setTimeout((()=>{dt()}),1e3)};window.kachingBundlesDisableAutoInitialize||kt(),window.kachingBundlesInitialize=kt}();