(()=>{"use strict";var e={857:e=>{var t=function(e){var t;return!!e&&"object"==typeof e&&"[object RegExp]"!==(t=Object.prototype.toString.call(e))&&"[object Date]"!==t&&e.$$typeof!==r},r="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function i(e,t){return!1!==t.clone&&t.isMergeableObject(e)?a(Array.isArray(e)?[]:{},e,t):e}function n(e,t,r){return e.concat(t).map(function(e){return i(e,r)})}function o(e){return Object.keys(e).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[])}function l(e,t){try{return t in e}catch(e){return!1}}function a(e,r,s){(s=s||{}).arrayMerge=s.arrayMerge||n,s.isMergeableObject=s.isMergeableObject||t,s.cloneUnlessOtherwiseSpecified=i;var c,u,d=Array.isArray(r);return d!==Array.isArray(e)?i(r,s):d?s.arrayMerge(e,r,s):(u={},(c=s).isMergeableObject(e)&&o(e).forEach(function(t){u[t]=i(e[t],c)}),o(r).forEach(function(t){(!l(e,t)||Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))&&(l(e,t)&&c.isMergeableObject(r[t])?u[t]=(function(e,t){if(!t.customMerge)return a;var r=t.customMerge(e);return"function"==typeof r?r:a})(t,c)(e[t],r[t],c):u[t]=i(r[t],c))}),u)}a.all=function(e,t){if(!Array.isArray(e))throw Error("first argument should be an array");return e.reduce(function(e,r){return a(e,r,t)},{})},e.exports=a}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e=r(857),t=r.n(e);class i{static ucFirst(e){return e.charAt(0).toUpperCase()+e.slice(1)}static lcFirst(e){return e.charAt(0).toLowerCase()+e.slice(1)}static toDashCase(e){return e.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()}static toLowerCamelCase(e,t){let r=i.toUpperCamelCase(e,t);return i.lcFirst(r)}static toUpperCamelCase(e,t){return t?e.split(t).map(e=>i.ucFirst(e.toLowerCase())).join(""):i.ucFirst(e.toLowerCase())}static parsePrimitive(e){try{return/^\d+(.|,)\d+$/.test(e)&&(e=e.replace(",",".")),JSON.parse(e)}catch(t){return e.toString()}}}class n{static isNode(e){return"object"==typeof e&&null!==e&&(e===document||e===window||e instanceof Node)}static hasAttribute(e,t){if(!n.isNode(e))throw Error("The element must be a valid HTML Node!");return"function"==typeof e.hasAttribute&&e.hasAttribute(t)}static getAttribute(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(r&&!1===n.hasAttribute(e,t))throw Error('The required property "'.concat(t,'" does not exist!'));if("function"!=typeof e.getAttribute){if(r)throw Error("This node doesn't support the getAttribute function!");return}return e.getAttribute(t)}static getDataAttribute(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],o=t.replace(/^data(|-)/,""),l=i.toLowerCamelCase(o,"-");if(!n.isNode(e)){if(r)throw Error("The passed node is not a valid HTML Node!");return}if(void 0===e.dataset){if(r)throw Error("This node doesn't support the dataset attribute!");return}let a=e.dataset[l];if(void 0===a){if(r)throw Error('The required data attribute "'.concat(t,'" does not exist on ').concat(e,"!"));return a}return i.parsePrimitive(a)}static querySelector(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(r&&!n.isNode(e))throw Error("The parent node is not a valid HTML Node!");let i=e.querySelector(t)||!1;if(r&&!1===i)throw Error('The required element "'.concat(t,'" does not exist in parent node!'));return i}static querySelectorAll(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(r&&!n.isNode(e))throw Error("The parent node is not a valid HTML Node!");let i=e.querySelectorAll(t);if(0===i.length&&(i=!1),r&&!1===i)throw Error('At least one item of "'.concat(t,'" must exist in parent node!'));return i}}class o{publish(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=new CustomEvent(e,{detail:t,cancelable:r});return this.el.dispatchEvent(i),i}subscribe(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this,n=e.split("."),o=r.scope?t.bind(r.scope):t;if(r.once&&!0===r.once){let t=o;o=function(r){i.unsubscribe(e),t(r)}}return this.el.addEventListener(n[0],o),this.listeners.push({splitEventName:n,opts:r,cb:o}),!0}unsubscribe(e){let t=e.split(".");return this.listeners=this.listeners.reduce((e,r)=>([...r.splitEventName].sort().toString()===t.sort().toString()?this.el.removeEventListener(r.splitEventName[0],r.cb):e.push(r),e),[]),!0}reset(){return this.listeners.forEach(e=>{this.el.removeEventListener(e.splitEventName[0],e.cb)}),this.listeners=[],!0}get el(){return this._el}set el(e){this._el=e}get listeners(){return this._listeners}set listeners(e){this._listeners=e}constructor(e=document){this._el=e,e.$emitter=this,this._listeners=[]}}class l{init(){throw Error('The "init" method for the plugin "'.concat(this._pluginName,'" is not defined.'))}update(){}_init(){this._initialized||(this.init(),this._initialized=!0)}_update(){this._initialized&&this.update()}_mergeOptions(e){let r=i.toDashCase(this._pluginName),o=n.getDataAttribute(this.el,"data-".concat(r,"-config"),!1),l=n.getAttribute(this.el,"data-".concat(r,"-options"),!1),a=[this.constructor.options,this.options,e];o&&a.push(window.PluginConfigManager.get(this._pluginName,o));try{l&&a.push(JSON.parse(l))}catch(e){throw console.error(this.el),Error('The data attribute "data-'.concat(r,'-options" could not be parsed to json: ').concat(e.message))}return t().all(a.filter(e=>e instanceof Object&&!(e instanceof Array)).map(e=>e||{}))}_registerInstance(){window.PluginManager.getPluginInstancesFromElement(this.el).set(this._pluginName,this),window.PluginManager.getPlugin(this._pluginName,!1).get("instances").push(this)}_getPluginName(e){return e||(e=this.constructor.name),e}constructor(e,t={},r=!1){if(!n.isNode(e))throw Error("There is no valid element given.");this.el=e,this.$emitter=new o(this.el),this._pluginName=this._getPluginName(r),this.options=this._mergeOptions(t),this._initialized=!1,this._registerInstance(),this._init()}}class a extends l{init(){let e=document.querySelectorAll(this.options.checkboxSelector);for(let t of(this.itemSelection={},e)){let e=t.dataset.productId,r=t.dataset.connectionId,i=this._getQuantity(r);this.itemSelection[r]={},this.itemSelection[r].productId=e,this.itemSelection[r].qty=i,"checkbox"===t.type&&this.registerCheckboxEvent(t)}for(let e of document.querySelectorAll(this.options.qtySelectBoxSelector))this.registerQtySelectBoxEvent(e);for(let e of document.querySelectorAll(this.options.variantSelectBoxSelector))this.registerVariantSelectBoxEvent(e)}registerCheckboxEvent(e){e.addEventListener("change",this.handleCheckboxChange.bind(this))}registerQtySelectBoxEvent(e){e.addEventListener("change",this.handleQtySelectBoxChange.bind(this))}registerVariantSelectBoxEvent(e){e.addEventListener("change",this.handleVariantSelectBoxChange.bind(this))}handleCheckboxChange(e){let t=e.target,r=t.checked,i=t.dataset.connectionId,n=this._getQuantity(i);if(r){if(null!==this.itemSelection[i].qty)return;this.itemSelection[i].qty=n}else this.itemSelection[i].qty=null,0===Object.values(this.itemSelection).filter(e=>null!==e).length&&(t.checked=!0,this.itemSelection[i].qty=n);this.determineCalculatedBundlePrice()}handleQtySelectBoxChange(e){let t=e.target,r=t.dataset.connectionId,i=parseInt(t.value);this._getQuantityInput(r).value=i,null!==this.itemSelection[r].qty&&(this.itemSelection[r].qty=i,this.determineCalculatedBundlePrice())}handleVariantSelectBoxChange(e){let t=e.target,r=t.dataset.connectionId,i=t.value;this.itemSelection[r].productId=i,this.determineCalculatedBundlePrice()}determineCalculatedBundlePrice(){let e=this.options.calculateBundlePriceUrl;fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({itemSelection:this.itemSelection})}).then(e=>e.json()).then(e=>{e.hasOwnProperty("calculatedBundlePrice")&&(this.rerenderPricing(e),this.rerenderBundleItemControlInputs(e.products))})}rerenderBundleItemControlInputs(e){for(let t in e){let r=e[t],i=document.querySelectorAll(".zeobv-bundle-item-qty-select-".concat(t)),n=document.querySelectorAll(".bundle-product-item-selection-".concat(t)),o=document.querySelector("#zeobv-bundle-item-availability-".concat(t));if(r.available){for(let e of(o.classList.remove("zeobv-bundle-item-availability--unavailable"),o.classList.add("zeobv-bundle-item-availability--available"),n))e.checked=!0,e.removeAttribute("disabled");for(let e of i)e.removeAttribute("disabled"),this.rerenderQtySelectBoxOptions(e,r)}else{for(let e of(o.classList.remove("zeobv-bundle-item-availability--available"),o.classList.add("zeobv-bundle-item-availability--unavailable"),n))e.checked=!1,e.setAttribute("disabled","disabled");for(let e of i)e.setAttribute("disabled","disabled")}}}rerenderQtySelectBoxOptions(e,t){let r=t.maxPurchase?t.maxPurchase:100,i=t.minPurchase?t.minPurchase:1,n=t.purchaseSteps?t.purchaseSteps:1,o=parseInt(e.value);e.innerHTML="";for(let t=i;t<=r;t+=n){let r=document.createElement("option");r.value=t,r.text=t,e.appendChild(r)}let l=!1;e.value=o,o>r?(l=!0,e.value=r):o<i&&(l=!0,e.value=i),l&&this.handleQtySelectBoxChange({target:e})}rerenderPricing(e){this._renderBundlePrice(e),this._renderBundleItemPrices(e)}_renderBundlePrice(e){let t=document.querySelector(".product-detail-price");if(!t||(t.innerHTML=this._replacePrice(t.innerHTML,e.calculatedBundlePrice.unitPrice),!t.classList.contains("with-list-price")))return;let r=document.querySelector(".product-detail-list-price-wrapper .list-price-price");r&&(r.innerHTML=this._replacePrice(r.innerHTML,e.calculatedBundlePrice.listPrice.price))}_renderBundleItemPrices(e){let t=0;for(let i in e.calculatedProductPrices){var r;let n=e.calculatedProductPrices[i],o=e.products[i];if(!n)continue;let l=document.querySelectorAll(this.options.bundleItemPriceSelectorTemplate.replace("%connectionId%",i));if(0===l.length)continue;let a=((r=n.listPrice)===null||void 0===r?void 0:r.price)||n.unitPrice,s=this._getQuantity(i),c=a*s;for(let e of(null!==s&&s>0&&(null==o?void 0:o.available)&&(t+=c),l))e.innerHTML=this._replacePrice(e.innerHTML,c)}let i=document.querySelectorAll("[data-price-total]");if(0!==i.length)for(let e of i)e.innerHTML=this._replacePrice(e.innerHTML,t)}_replacePrice(e,t){return e.replace(/\d.+[^\*]/,this._formatPrice(t))}_getQuantity(e){return parseInt(this._getQuantityInput(e).value)}_getQuantityInput(e){return document.getElementById("zeobv-bundle-item-quantity-".concat(e))}_formatPrice(e){return new Intl.NumberFormat(document.documentElement.lang||"de-DE",{style:"decimal",minimumFractionDigits:2,maximumFractionDigits:2}).format(+(Math.round(e+"e+2")+"e-2"))}}a.options={checkboxSelector:".bundle-product-item-selection",qtySelectBoxSelector:".zeobv-bundle-item-qty-select",variantSelectBoxSelector:".zeobv-bundle-item-variant-select",bundleItemPriceSelectorTemplate:"[data-price-%connectionId%]",calculateBundlePriceUrl:null},window.PluginManager&&window.PluginManager.register("DiztechBundleConfigurator",a,"[data-diztech-bundle-configurator]")})()})();