1if(!customElements.get("product-configurator")){class ProductConfigurator extends HTMLElement{constructor(){super(),this.selectedVariant=null,this.additionalProducts=[],this.selectedAdditionalVariants=new Map,this.baseProductPrice=0,this.currentStep=1,this.isSubmitting=!1,this.priceFormatter=null}connectedCallback(){if(this.form=this.querySelector("form"),this.productIdInput=document.getElementById("productID"),this.additionalProductsInputsContainer=document.getElementById("additionalProductsInputs"),this.nav=document.getElementById("configuratorNav"),this.navTabs=document.querySelectorAll(".configurator__nav__tab"),this.stepsWrapper=document.getElementById("configuratorSteps"),this.steps=document.querySelectorAll(".configurator__step"),this.totalPriceElement=document.getElementById("totalPrice"),this.greenleazeButton=document.getElementById("greenleaze-configurator-button"),this.purchasePriceSmallElement=document.getElementById("configuratorPurchasePrice"),this.productImage=document.getElementById("configuratorProductImage"),this.additionalProductsWrapper=document.querySelector(".configurator__additional-product-wrapper"),this.configuratorType=this.getAttribute("data-configurator-type")||"",this.nextButton=this.querySelector("product-configurator-next-button"),this.nextButtonLabelElement=this.nextButton&&this.nextButton.querySelector(".content"),this.defaultNextLabel=this.nextButtonLabelElement&&this.nextButtonLabelElement.textContent.trim()||"",!this.#validateRequiredElements())return;const currency=this.getAttribute("data-currency")||"EUR",locale=this.getAttribute("data-locale")||"fr-FR";this.priceFormatter=new Intl.NumberFormat(locale,{style:"currency",currency}),this.#initializeBasePrice(),this.nav.style.setProperty("--number-of-steps",this.navTabs.length),this.#initializeAccessibility(),this.#buildOptionIndexMap(),this.updateSelectedVariant()}#handleize(str){return(str||"").toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}#buildOptionIndexMap(){this.optionIndexByName=new Map,typeof PRODUCT<"u"&&Array.isArray(PRODUCT.options)&&PRODUCT.options.forEach((name,index)=>{this.optionIndexByName.set(this.#handleize(name),index)})}#variantMatches(selections,v){for(const[name,value]of selections){const idx=this.optionIndexByName?.get(name);if(idx===void 0)continue;if(((v.options||[])[idx]||"").toLowerCase().trim()!==value)return!1}return!0}#validateRequiredElements(){return!!(this.form&&this.productIdInput&&this.additionalProductsInputsContainer&&this.nav&&this.totalPriceElement&&this.productImage)}#initializeBasePrice(){const dataPrice=this.getAttribute("data-base-price");dataPrice?this.baseProductPrice=Number(dataPrice):typeof PRODUCT<"u"&&PRODUCT.price&&(this.baseProductPrice=Number(PRODUCT.price)),this.#updateTotalPrice()}#initializeAccessibility(){this.navTabs.forEach((tab,index)=>{tab.setAttribute("role","tab"),tab.setAttribute("aria-selected",index===0?"true":"false"),tab.setAttribute("tabindex",index===0?"0":"-1")}),this.steps.forEach((step,index)=>{step.setAttribute("role","tabpanel"),step.setAttribute("aria-hidden",index===0?"false":"true")})}updateStep(index){index<1||index>this.navTabs.length||(this.currentStep=index,this.#updateStepUI(),this.#updateAccessibility(),this.#announceStepChange())}goToNextStep(){this.isSubmitting||(this.currentStep===this.navTabs.length?this.#submitForm():this.updateStep(this.currentStep+1))}#submitForm(){if(!this.selectedVariant)return;this.isSubmitting=!0,this.#showNextButtonLoading();const formData=new FormData(this.form);fetch("/cart/add.js",{method:"POST",body:formData}).then(response=>response.json()).then(data=>{window.location.href="/checkout"}).catch(()=>{this.#hideNextButtonLoading(),this.form.submit()})}#updateStepUI(){this.style.setProperty("--configurator-step",this.currentStep),this.navTabs.forEach((tab,index)=>{const isActive=index+1<=this.currentStep;tab.classList.toggle("configurator__nav__tab--active",isActive)}),this.steps.forEach((step,index)=>{const isActive=index+1===this.currentStep;step.classList.toggle("configurator__step--active",index+1<=this.currentStep)}),this.#updateNextButtonLabel()}#updateNextButtonLabel(){if(!this.nextButtonLabelElement)return;const type=this.configuratorType,isLeasingOrLocation=type==="Leasing"||type==="Location",isLastStep=this.currentStep===this.navTabs.length;isLeasingOrLocation&&isLastStep?this.nextButtonLabelElement.textContent="Louer":this.nextButtonLabelElement.textContent=this.defaultNextLabel||"Suivant"}
1#updateAccessibility(){this.navTabs.forEach((tab,index)=>{const isActive=index+1===this.currentStep;tab.setAttribute("aria-selected",isActive?"true":"false"),tab.setAttribute("tabindex",isActive?"0":"-1")}),this.steps.forEach((step,index)=>{const isVisible=index+1===this.currentStep;step.setAttribute("aria-hidden",isVisible?"false":"true")})}#announceStepChange(){let liveRegion=document.getElementById("configurator-live-region");liveRegion||(liveRegion=document.createElement("div"),liveRegion.id="configurator-live-region",liveRegion.setAttribute("aria-live","polite"),liveRegion.setAttribute("aria-atomic","true"),liveRegion.className="sr-only",document.body.appendChild(liveRegion)),liveRegion.textContent=`\xC9tape ${this.currentStep} sur ${this.navTabs.length}`}addAdditionalProduct(productId){if(typeof ALL_ADDITIONAL_PRODUCTS>"u")return;const product=ALL_ADDITIONAL_PRODUCTS.find(p=>p.id===Number(productId));product&&(this.additionalProducts.some(p=>p.id===product.id)||(this.additionalProducts.push(product),this.#updateAdditionalProductsUI(),this.#updateAdditionalProductsInputs(),this.#updateTotalPrice()))}removeAdditionalProduct(productId){this.additionalProducts=this.additionalProducts.filter(product=>product.id!==Number(productId)),this.selectedAdditionalVariants.delete(Number(productId)),this.#updateAdditionalProductsUI(),this.#updateAdditionalProductsInputs(),this.#updateTotalPrice()}updateAdditionalProductVariant(productId,variant){this.selectedAdditionalVariants.set(Number(productId),variant),this.#updateAdditionalProductsInputs(),this.#updateTotalPrice()}#updateAdditionalProductsUI(){if(!this.additionalProductsWrapper)return;const fragment=document.createDocumentFragment();this.additionalProducts.forEach(product=>{const container=this.#createAdditionalProductElement(product);fragment.appendChild(container)}),this.additionalProductsWrapper.innerHTML="",this.additionalProductsWrapper.appendChild(fragment)}#createAdditionalProductElement(product){const container=document.createElement("div");container.classList.add("configurator__additional-product");const img=new Image;return img.src=product.featured_image,img.alt=product.title,img.width=40,img.height=40,img.loading="lazy",container.appendChild(img),container}#updateAdditionalProductsInputs(){if(!this.additionalProductsInputsContainer)return;const fragment=document.createDocumentFragment();this.additionalProducts.forEach((product,index)=>{if(!product.variants||!product.variants[0])return;const selectedVariant=this.selectedAdditionalVariants.get(product.id),variantId=selectedVariant?selectedVariant.id:product.variants[0].id,input=document.createElement("input");input.type="hidden",input.name=`items[${index+1}][id]`,input.value=variantId,fragment.appendChild(input)}),this.additionalProductsInputsContainer.innerHTML="",this.additionalProductsInputsContainer.appendChild(fragment)}recalculateTotalPrice(){this.#updateTotalPrice()}updateSelectedVariant(){if(typeof PRODUCT>"u")return;const selectedOptions=this.querySelectorAll(".configurator__option--option .configurator__option__input:checked");if(selectedOptions.length===0)return;const selectedValues=Array.from(selectedOptions).map(input=>input.value.toLowerCase().trim()),selectedSelections=new Map;if(selectedOptions.forEach(input=>{selectedSelections.set(input.name,input.value.toLowerCase().trim())}),this.selectedVariant=this.#findMatchingVariant(selectedSelections,selectedValues),this.selectedVariant){this.#updateProductImage(),this.#updateBaseProductPrice(),this.#updateProductIdInput(),this.#updateUrlVariant(),this.#updateOptionImages();const datesElement=document.getElementById("variant-delivery-dates"),outputElement=document.getElementById("livraison_estimee");if(datesElement&&outputElement)try{const selectedDate=JSON.parse(datesElement.textContent)[this.selectedVariant.id];outputElement.textContent=selectedDate||"Non sp\xE9cifi\xE9e"}catch(e){console.error("Erreur lors de la mise \xE0 jour de la date : ",e)}}this.#updateOptionAvailability()}#updateOptionAvailability(){if(typeof PRODUCT>"u"||!PRODUCT.variants)return;const allInputs=Array.from(this.querySelectorAll(".configurator__option--option .configurator__option__input"));if(!allInputs.length)return;const selectedByName=new Map;
1allInputs.forEach(input=>{input.checked&&selectedByName.set(input.name,input.value.toLowerCase().trim())}),allInputs.forEach(input=>{const option=input.closest("product-configurator-option");if(!option)return;if(!this.optionIndexByName?.has(input.name)){option.classList.remove("configurator__option--unavailable");return}const thisValue=input.value.toLowerCase().trim(),testSelections=new Map(selectedByName);testSelections.set(input.name,thisValue);const hasVariant=PRODUCT.variants.some(v=>v.available!==!1&&this.#variantMatches(testSelections,v));option.classList.toggle("configurator__option--unavailable",!hasVariant)})}#findMatchingVariant(selections,selectedValues){if(!PRODUCT.variants)return null;const match=PRODUCT.variants.find(v=>this.#variantMatches(selections,v));return match||PRODUCT.variants.find(variant=>{const variantOptions=(variant.options||[]).map(o=>o.toLowerCase().trim());return selectedValues.every(value=>variantOptions.includes(value))})}#updateProductImage(){if(!this.productImage||!this.selectedVariant?.featured_image)return;const baseSrc=this.selectedVariant.featured_image.src.replace(/(\?|&)(width|height)=\d+/g,""),sep=baseSrc.includes("?")?"&":"?",newImageSrc=`${baseSrc}${sep}height=1600`,newSrcset=`${baseSrc}${sep}height=1600 1x, ${baseSrc}${sep}height=2400 2x, ${baseSrc}${sep}height=3200 3x`;this.productImage.classList.add("configurator__product-image--loading");const img=new Image;img.onload=()=>{this.productImage.src=newImageSrc,this.productImage.srcset=newSrcset,this.productImage.alt=this.selectedVariant.title||"Product image",requestAnimationFrame(()=>{this.productImage.classList.remove("configurator__product-image--loading")})},img.onerror=()=>{this.productImage.classList.remove("configurator__product-image--loading")},img.src=newImageSrc}#updateOptionImages(){if(!PRODUCT.variants)return;const checkedInputs=this.querySelectorAll(".configurator__option--option .configurator__option__input:checked"),selectedMap=new Map;checkedInputs.forEach(input=>{selectedMap.set(input.name,input.value.toLowerCase().trim())});const findVariant=selections=>{let match=PRODUCT.variants.find(v=>v.available!==!1&&this.#variantMatches(selections,v));if(match)return match;const variantOnly=new Map;return selections.forEach((value,name)=>{this.optionIndexByName?.has(name)&&variantOnly.set(name,value)}),PRODUCT.variants.find(v=>this.#variantMatches(variantOnly,v))};this.querySelectorAll(".configurator__option--option .configurator__option__input").forEach(input=>{const img=input.closest("product-configurator-option")?.querySelector(".configurator__option__image");if(!img)return;const testSelections=new Map(selectedMap);testSelections.set(input.name,input.value.toLowerCase().trim());const variant=findVariant(testSelections);if(variant?.featured_image?.src){const baseSrc=variant.featured_image.src.replace(/(\?|&)(width|height)=\d+/g,""),sep=baseSrc.includes("?")?"&":"?",newSrc=`${baseSrc}${sep}height=400`;if(img.src===newSrc)return;img.classList.add("configurator__option__image--loading");const preload=new Image;preload.onload=()=>{img.src=newSrc,img.srcset=`${baseSrc}${sep}height=400 1x, ${baseSrc}${sep}height=800 2x, ${baseSrc}${sep}height=1200 3x`,requestAnimationFrame(()=>{img.classList.remove("configurator__option__image--loading")})},preload.onerror=()=>{img.classList.remove("configurator__option__image--loading")},preload.src=newSrc}})}#updateBaseProductPrice(){this.selectedVariant?.price&&(this.baseProductPrice=Number(this.selectedVariant.price),this.#updateTotalPrice())}#updateProductIdInput(){!this.productIdInput||!this.selectedVariant?.id||(this.productIdInput.value=this.selectedVariant.id)}#updateUrlVariant(){if(!this.selectedVariant?.id)return;const url=new URL(window.location.href);url.searchParams.set("variant",this.selectedVariant.id),window.history.replaceState({},"",url.toString())}#getSubOptionsTotal(){let total=0;return this.querySelectorAll("product-configurator-option[data-raw-price]").forEach(option=>{const input=option.querySelector("input");input&&input.checked&&(total+=parseInt(option.dataset.rawPrice||"0",10))}),total}#updateTotalPrice(){if(!this.totalPriceElement)return;let totalPrice=this.baseProductPrice;
1this.additionalProducts.forEach(product=>{const selectedVariant=this.selectedAdditionalVariants.get(product.id);totalPrice+=selectedVariant?selectedVariant.price:product.price||0}),totalPrice+=this.#getSubOptionsTotal();const type=this.configuratorType,isAchat=type==="Achat"||type==="",isLeasing=type==="Leasing",priceInCurrency=totalPrice/100,formattedPurchase=this.priceFormatter?this.priceFormatter.format(priceInCurrency):`${priceInCurrency.toFixed(2)} \u20AC`;if(isAchat&&(this.totalPriceElement.textContent=formattedPurchase),isLeasing&&this.purchasePriceSmallElement){const prefix=this.purchasePriceSmallElement.dataset.prefix||"Acheter pour ";this.purchasePriceSmallElement.textContent=prefix+formattedPurchase}this.#updateGreenleaze()}#updateGreenleaze(){if(typeof window.updateGreenleazeConfigurator!="function")return;const variantId=this.selectedVariant?.id||this.productIdInput?.value;if(!variantId)return;let accessoryTotal=0;this.additionalProducts.forEach(product=>{const selectedVariant=this.selectedAdditionalVariants.get(product.id);accessoryTotal+=selectedVariant?selectedVariant.price:product.price||0}),accessoryTotal+=this.#getSubOptionsTotal(),window.updateGreenleazeConfigurator(this.baseProductPrice,variantId,accessoryTotal)}#showNextButtonLoading(){this.nextButton&&(this.nextButton.classList.add("configurator__next-button--loading"),this.nextButton.setAttribute("aria-busy","true"),this.nextButtonLabelElement&&(this.nextButtonLabelElement.textContent="Chargement..."))}#hideNextButtonLoading(){this.nextButton&&(this.nextButton.classList.remove("configurator__next-button--loading"),this.nextButton.removeAttribute("aria-busy"),this.#updateNextButtonLabel())}toggleOptionByHandle(handle,checked){handle&&this.querySelectorAll(`.configurator__option-container[handle="${handle}"]`).forEach(option=>{option.classList.toggle("configurator__option-container--hidden",checked),option.setAttribute("aria-hidden",checked?"true":"false")})}async prepareCartForGreenleaze(){await fetch("/cart/clear.js",{method:"POST"});const items=[],mainVariantId=this.selectedVariant?.id||this.productIdInput?.value;mainVariantId&&items.push({id:mainVariantId,quantity:1}),this.additionalProducts.forEach(product=>{const selectedVariant=this.selectedAdditionalVariants.get(product.id),variantId=selectedVariant?selectedVariant.id:product.variants?.[0]?.id;variantId&&items.push({id:variantId,quantity:1})}),items.length>0&&await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items})})}}customElements.define("product-configurator",ProductConfigurator)}if(!customElements.get("product-configurator-option")){class ProductConfiguratorOption extends HTMLElement{constructor(){super(),this.handleChange=this.handleChange.bind(this)}connectedCallback(){this.input=this.querySelector("input"),this.configurator=this.closest("product-configurator"),!(!this.input||!this.configurator)&&this.input.addEventListener("change",this.handleChange)}disconnectedCallback(){this.input&&this.input.removeEventListener("change",this.handleChange)}handleChange(e){this.configurator.updateSelectedVariant(),this.configurator.recalculateTotalPrice();const hideHandle=this.getAttribute("hide");hideHandle&&this.configurator.toggleOptionByHandle(hideHandle,e.target.checked)}}customElements.define("product-configurator-option",ProductConfiguratorOption)}if(!customElements.get("product-configurator-option-product")){class ProductConfiguratorOptionProduct extends HTMLElement{constructor(){super(),this.handleChange=this.handleChange.bind(this),this.handleVariantChange=this.handleVariantChange.bind(this)}connectedCallback(){this.input=this.querySelector("input"),this.configurator=this.closest("product-configurator"),this.productId=this.getAttribute("product-id"),this.variantInputs=this.querySelectorAll('.configurator__option__variant-options input[type="radio"]'),!(!this.input||!this.configurator||!this.productId)&&(this.input.addEventListener("change",this.handleChange),this.variantInputs.forEach(radio=>{radio.addEventListener("change",this.handleVariantChange)}))}disconnectedCallback(){this.input&&this.input.removeEventListener("change",this.handleChange),this.variantInputs&&this.variantInputs.forEac
1h(radio=>{radio.removeEventListener("change",this.handleVariantChange)})}handleChange(e){e.target.checked?(this.configurator.addAdditionalProduct(this.productId),this.#syncSelectedVariant()):this.configurator.removeAdditionalProduct(this.productId)}handleVariantChange(e){e.stopPropagation();const group=e.target.closest(".configurator__option__variant-options");if(group){group.querySelectorAll("label").forEach(l=>{l.classList.remove("configurator__option__variant-pill--active","configurator__option__variant-color--active")});const label=e.target.closest("label");if(label){const cls=label.classList.contains("configurator__option__variant-color")?"configurator__option__variant-color--active":"configurator__option__variant-pill--active";label.classList.add(cls)}}this.#syncSelectedVariant()}#syncSelectedVariant(){const checkedInputs=this.querySelectorAll('.configurator__option__variant-options input[type="radio"]:checked');if(checkedInputs.length===0)return;const product=ALL_ADDITIONAL_PRODUCTS.find(p=>p.id===Number(this.productId));if(!product||!product.variants)return;const selectedOptions=[];checkedInputs.forEach(input=>{const idx=parseInt(input.dataset.optionIndex,10);selectedOptions[idx]=input.value});const variant=product.variants.find(v=>selectedOptions.every((val,i)=>val===void 0||v.options&&v.options[i]===val));if(variant){this.configurator.updateAdditionalProductVariant(this.productId,variant),this.dataset.rawPrice=String(variant.price);const priceEl=this.querySelector(".configurator__option__price");if(priceEl&&this.configurator.priceFormatter){const formatted=this.configurator.priceFormatter.format(variant.price/100);priceEl.textContent=formatted,priceEl.dataset.purchasePrice=formatted}const imgEl=this.querySelector(".configurator__option__image");if(imgEl&&variant.featured_image&&variant.featured_image.src){const baseSrc=variant.featured_image.src.replace(/(\?|&)(width|height)=\d+/g,""),sep=baseSrc.includes("?")?"&":"?";imgEl.style.opacity="0.3",imgEl.style.transition="opacity 300ms ease-in-out";const preload=new Image;preload.onload=()=>{imgEl.src=`${baseSrc}${sep}height=100`,imgEl.srcset=`${baseSrc}${sep}height=100 1x, ${baseSrc}${sep}height=200 2x, ${baseSrc}${sep}height=300 3x`,imgEl.alt=variant.title||"",requestAnimationFrame(()=>{imgEl.style.opacity=""})},preload.src=`${baseSrc}${sep}height=200`}}}}customElements.define("product-configurator-option-product",ProductConfiguratorOptionProduct)}if(!customElements.get("product-configurator-nav-tab")){class ProductConfiguratorNavTab extends HTMLElement{constructor(){super(),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}connectedCallback(){this.index=Number(this.getAttribute("index")),this.configurator=this.closest("product-configurator"),!(!this.configurator||isNaN(this.index))&&(this.addEventListener("click",this.handleClick),this.addEventListener("keydown",this.handleKeyDown),this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"))}disconnectedCallback(){this.removeEventListener("click",this.handleClick),this.removeEventListener("keydown",this.handleKeyDown)}handleClick(){this.configurator.updateStep(this.index)}handleKeyDown(e){(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.configurator.updateStep(this.index))}}customElements.define("product-configurator-nav-tab",ProductConfiguratorNavTab)}if(!customElements.get("product-configurator-next-button")){class ProductConfiguratorNextButton extends HTMLElement{constructor(){super(),this.handleClick=this.handleClick.bind(this)}connectedCallback(){this.configurator=this.closest("product-configurator"),this.configurator&&(this.addEventListener("click",this.handleClick),this.hasAttribute("role")||this.setAttribute("role","button"),this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"))}disconnectedCallback(){this.removeEventListener("click",this.handleClick)}handleClick(){const isLeasing=this.configurator.configuratorType==="Leasing",isLastStep=this.configurator.currentStep===this.configurator.navTabs.length;if(isLeasing&&isLastStep){const greenleazeButton=document.getElementById("greenleaze-configurator-button");if(greenleazeButton){this.#clearGreenleazeError(),this.#showLouerLoading();const onError=e=>{this.#hideLouerLoading(),this.#showGreenleazeError(e.detail?.message)};window.addEventListener("greenleazeRedirectError",onError,{once:!0}),greenleazeButton.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}));return}}this.configurator.goToNextStep()}#showLouerLoading(){this.classList.add("configurator__next-button--loading"),this.setAttribute("aria-busy","true");const label=this.querySelector(".content");label&&(label.textContent="Chargement...")}#hideLouerLoading(){this.classList.remove("configurator__next-button--loading"),this.removeAttribute("aria-busy");const label=this.querySelector(".content");
1if(label){const type=this.configurator?.configuratorType||"",isLeasingOrLocation=type==="Leasing"||type==="Location";label.textContent=isLeasingOrLocation?"Louer":this.configurator?.defaultNextLabel||"Suivant"}}#showGreenleazeError(message){const el=document.getElementById("configurator-greenleaze-error");el&&(el.textContent=message||"Une erreur s'est produite.",el.removeAttribute("hidden"))}#clearGreenleazeError(){const el=document.getElementById("configurator-greenleaze-error");el&&(el.textContent="",el.setAttribute("hidden",""))}}customElements.define("product-configurator-next-button",ProductConfiguratorNextButton)}(function(){function getInitialVariantId(){const btn=document.getElementById("greenleaze-configurator-button");return btn&&btn.dataset.variantId?btn.dataset.variantId:"0"}window.updateGreenleazeConfigurator=function(basePriceTTC,variantId,accessoryPriceTTC){const button=document.getElementById("greenleaze-configurator-button");if(!button)return;typeof basePriceTTC<"u"&&(button.dataset.price=String(Math.round(basePriceTTC))),typeof accessoryPriceTTC<"u"&&(button.dataset.accessoryPrice=String(Math.round(accessoryPriceTTC))),typeof variantId<"u"&&(button.dataset.variantId=String(variantId));const basePrice=parseInt(button.dataset.price||"0",10),accessoryPrice=parseInt(button.dataset.accessoryPrice||"0",10),vid=button.dataset.variantId||getInitialVariantId();if(!window.initPriceGreenleaze||typeof getAllPricesForProduct!="function")return;button.dataset.initialBasePrice||(button.dataset.initialBasePrice=String(basePrice));const initialBasePrice=parseInt(button.dataset.initialBasePrice,10),priceHT=initialBasePrice/1.2/100,pricesForProduct=getAllPricesForProduct(priceHT);if(!pricesForProduct)return;const durations=Object.keys(pricesForProduct).map(Number).filter(d=>pricesForProduct[d]).sort((a,b)=>a-b);if(!durations.length)return;const defaultDuration=durations[durations.length-1],VALID_DURATION_LABELS=["6 mois","12 mois","24 mois","36 mois"],metafieldLabel=(button.dataset.leasingDuration||"").trim();let chosenDuration=defaultDuration;if(metafieldLabel&&VALID_DURATION_LABELS.includes(metafieldLabel)){const parsedDuration=parseInt(metafieldLabel,10);durations.includes(parsedDuration)&&(chosenDuration=parsedDuration)}const baseMonthly=parseFloat(pricesForProduct[chosenDuration].monthly),configType=button.dataset.configuratorType||"",isLeasingOrLocation=configType==="Leasing"||configType==="Location",initialPriceHT=initialBasePrice/1.2/100,ratePerEuroHT=initialPriceHT>0?baseMonthly/initialPriceHT:0,variantDeltaMonthly=Math.max(0,basePrice-initialBasePrice)/1.2/100*ratePerEuroHT;let accessoryMonthly=0;if(accessoryPrice>0){const accessoryPriceHT=accessoryPrice/1.2/100,pricesForAccessories=getAllPricesForProduct(accessoryPriceHT);pricesForAccessories&&pricesForAccessories[chosenDuration]&&(accessoryMonthly=parseFloat(pricesForAccessories[chosenDuration].monthly))}const totalMonthly=Math.round(baseMonthly+variantDeltaMonthly+accessoryMonthly);if(isLeasingOrLocation){button.textContent=totalMonthly+" \u20AC/mois";const totalPriceElement=document.getElementById("totalPrice");totalPriceElement&&(totalPriceElement.style.display="none")}else button.textContent="Louer \xE0 partir de "+totalMonthly+" \u20AC/mois";updateAccessoryPriceLabels(isLeasingOrLocation,chosenDuration);let trackingId=window.greenleaze_tracking||window.ShopifyAnalytics&&window.ShopifyAnalytics.lib&&window.ShopifyAnalytics.lib.user&&window.ShopifyAnalytics.lib.user().traits&&window.ShopifyAnalytics.lib.user().traits().uniqToken;trackingId||(window.greenleaze_tracking=typeof self<"u"&&self.crypto&&self.crypto.randomUUID?self.crypto.randomUUID():"config-"+Date.now(),trackingId=window.greenleaze_tracking),window._greenleazeConfiguratorDuration=chosenDuration,window._greenleazeConfiguratorTrackingId=trackingId,button.dataset.greenleazeDuration=String(chosenDuration)};function updateAccessoryPriceLabels(isLeasingOrLocation,chosenDuration){document.querySelectorAll("product-configurator-option-product").forEach(function(option){const priceEl=option.querySelector(".configurator__option__price");if(!priceEl)return;if(!isLeasingOrLocation){const purchasePrice=priceEl.dataset.purchasePrice;purchasePrice&&(priceEl.textContent=purchasePrice);return}const rawPrice=parseInt(option.dataset.rawPrice||"0",10);if(rawPrice<=0||typeof getAllPricesForProduct!="function")return;const priceHT=rawPrice/1.2/100,prices=getAllPricesForProduct(priceHT);if(prices&&prices[chosenDuration]){const monthly=Math.round(parseFloat(prices[chosenDuration].monthly));priceEl.textContent="\xE0 partir de "+monthly+" \u20AC/mois"}})}window.addEventListener("greenleazePriceActualize",function(){const button=document.getElementById("greenleaze-configurator-button");if(button){const price=parseInt(button.dataset.price||"0",10),vid=button.dataset.variantId||getInitialVariantId(),accessoryPrice=parseInt(button.dataset.accessoryPrice||"0",10);window.updateGreenleazeConfigurator(price,vid,accessoryPrice)}}),document.addEventListener("click",function(e){if(!e.target.closest("#greenleaze-configurator-button"))return;e.preventDefault();const button=document.getElementById("greenleaze-configurator-button"),configType=button&&button.dataset.configuratorType||"",isLeasingOrLocation=configType==="Leasing"||configType==="Location",isAchat=configType==="Achat"||configType==="",redirectUrl=button&&button.dataset.associatedProductUrl;if(isAchat&&redirectUrl){window.location.href=redirectUrl;return}if(isLeasingOrLocation&&e.isTrusted)return;let duration=parseInt(button.dataset.greenleazeDuration,10)||window._greenleazeConfiguratorDuration,trackingId=window._greenleazeConfiguratorTrackingId||window.greenleaze_tracking;if(!duration)return;trackingId||(window.greenleaze_tracking=typeof self<"u"&&self.crypto&&self.crypto.randomUUID?self.crypto.randomUUID():"config-"+Date.now(),trackingId=window.greenleaze_tracking);function sendCartAndRedirectToGreenleaze(){fetch(window.Shopify&&window.Shopify.routes?window.Shopify.routes.root+"cart.js":"/cart.js").then(function(r){return r.json()}).then(function(cart){return cart&&cart.items&&cart.items.forEac
1h(function(item){item.image&&item.image.startsWith("//")&&(item.image="https:"+item.image)}),fetch("/apps/greenleaze-proxy/send-card",{method:"POST",headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"},body:JSON.stringify({cartContents:JSON.stringify(cart),duration,durationUnit:"monthly",fixedDuration:button.dataset.forcedDuration==="true",trackingId,trackingData:null,postHogtrackingId:null})})}).then(function(res){if(!res.ok)throw new Error("Une erreur s'est produite, veuillez r\xE9essayer.");return res.json().then(function(data){return{ok:res.ok,data}})}).then(function(result){if(result.data&&result.data.redirectUrl){let url=result.data.redirectUrl;if(button.dataset.forcedDuration==="true"){const durationParam="duration="+encodeURIComponent(duration),durationRegex=/[?&]duration=[^&]*/;durationRegex.test(url)?url=url.replace(durationRegex,m=>m.startsWith("?")?"?"+durationParam:"&"+durationParam):url+=(url.includes("?")?"&":"?")+durationParam}window.location.href=url}else{const msg=result.data&&result.data.message||"Une erreur s'est produite.";window.dispatchEvent(new CustomEvent("greenleazeRedirectError",{detail:{message:msg}})),typeof window.postMessage=="function"&&window.postMessage({type:"greenleazeError",message:msg},"*")}}).catch(function(err){const msg=err&&err.message||"Une erreur s'est produite.";window.dispatchEvent(new CustomEvent("greenleazeRedirectError",{detail:{message:msg}}))})}const configurator=document.querySelector("product-configurator");configurator&&configurator.prepareCartForGreenleaze?configurator.prepareCartForGreenleaze().then(sendCartAndRedirectToGreenleaze).catch(function(err){const msg=err&&err.message||"Erreur pr\xE9paration panier.";window.dispatchEvent(new CustomEvent("greenleazeRedirectError",{detail:{message:msg}}))}):fetch("/cart/clear.js",{method:"POST"}).then(sendCartAndRedirectToGreenleaze).catch(function(err){const msg=err&&err.message||"Erreur vidage panier.";window.dispatchEvent(new CustomEvent("greenleazeRedirectError",{detail:{message:msg}}))})})})(); 2//# sourceMappingURL=/cdn/shop/t/19/assets/component-configurator.js.map?v=170396014648429179201791285423
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.