{"version":3,"sources":["webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/product-attribute/product-attribute.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/product-attribute/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/add-alert-message/add-alert-message.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/add-alert-message/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/create-message-string/create-message-string.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/create-message-string/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/api-error-handler/api-error-handler.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/api-error-handler/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/error-handler/error-handler.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/error-handler/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/replace.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/screen-dimensions/screen-dimensions.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/screen-dimensions/index.js","webpack:///./cartridges/app_designholding_flos/cartridge/client/default/js/components/product-attribute/product-attribute.js","webpack:///./cartridges/app_designholding_flos/cartridge/client/default/js/components/product-attribute/index.js"],"names":["JS_HOOK_PRODUCT_DETAIL_WRAPPER","JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER","JS_HOOK_PRODUCT_PRICE_WRAPPER","JS_HOOK_PRODUCT_BADGES_WRAPPER","JS_HOOK_PRODUCT_DELIVERY_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER","JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER","JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER","JS_HOOK_PRODUCT_ID","JS_HOOK_PRODUCT_TITLE","JS_HOOK_PRODUCT_SUBTITLE","JS_HOOK_PRODUCT_DESIGNERS","JS_HOOK_PRODUCT_ACCORDIONS","JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP","JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE","JS_HOOK_ADD_TO_CART_BUTTON","JS_HOOK_ADD_TO_CART_BUTTON_LABEL","JS_HOOK_OUT_OF_STOCK_BUTTON","JS_HOOK_SEO_TEXT","JS_HOOK_PRODUCT_BREADCRUMB","JS_HOOK_PRODUCT_INCLUDED_BULB","JS_HOOK_PRODUCT_SAMPLES","JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL","JS_HOOK_PRODUCT_STOCK","JS_HOOK_MODAL","JS_HOOK_SWATCH_RADIO","JS_HOOK_COLOR_SWATCH","JS_HOOK_LINKED_PRODUCTS_SLIDER","JS_HOOK_RELATED_SLIDER","JS_HOOK_PRODUCT_DETAIL_BLOCK","PRODUCT_DETAIL_CLASS","JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA","JS_HOOK_PRODUCT_ADD_TO_CART_DATA","JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA","DISABLED","SLIDER_HIDDEN","ProductAttribute","constructor","element","setUI","bindEvents","updateHistory","url","Events","$trigger","data","state","productChange","shouldShowAddToCart","available","readyToOrder","updatePrices","priceHtml","price","replace","updateBadges","badgesHtml","badges","updateDelivery","deliveryHtml","delivery","updateImageGallery","imageGridHtml","imageGallery","updateProductID","id","pid","updateProductTitle","productName","document","title","updateProductSubTitle","productSubTitle","updateProductDesigners","designersHtml","updateProductAccordions","accordionsHtml","updateSeoText","longDescription","updateAttributesDesktop","variationAttributesDesktopHtml","attributes","updateAttributesMobile","variationAttributesMobileHtml","updateProductBreadcrumb","breadcrumbHtml","updateIncludedBulb","includedBulbHtml","updateProductSamples","productSamplesHtml","updateProductAddedToCartModal","addedToCartModalHtml","updateProductStock","productStockHtml","updateSparePartsAnchor","sparePartsAnchorHtml","updateSparePartsList","sparePartsListHtml","updateSparePartsSlider","sparePartsSliderHtml","updateSparePartsViewProductButton","sparePartsViewProductHtml","updateDesignersContentArea","designersContentArea","designersContentAreaHook","querySelector","updateProductDetailBlock","productDetailBlock","updateLinkedProductsSlider","linkedProductsSliderHtml","linkedProducts","ajaxProductTiles","querySelectorAll","promises","forEach","ajaxProductTile","productTileUrl","dataset","promise","API","get","then","response","innerHTML","catch","error","console","info","push","Promise","all","moduleInit","async","updateSidebarBlock","getPromoPage","pdpSidebarBlockId","sidebarBlockWrapperDataset","sidebarUrl","updatePdpSlider","product","relatedSlider","recommendedSlider","crossSelling","crossSellingProductRecommendations","classList","show","rebindEvents","bindModals","bindSelectEvents","bindSwatchEvents","bindRadioEvents","initModules","updateGTMAddToCartGA","productAddToCartGTMDataHTML","addToCartDataElement","outerHTML","updateGTMAddToCartGAModalButtonData","addTocartGAData","addToCartModalDataElements","index","length","addToCartModalDataElement","gtmObj","gtmAddToCart","ga4Obj","gtmAddToCartGA","updateGTMViewItemData","viewItemData","window","ga4Data","JSON","parse","ecommerce","ui","selects","swatches","radios","productDetail","addToCartButtons","addToCartButtonLabels","outOfStockButtons","updateButtonLabel","buttonLabel","label","innerText","updateButton","button","setAttribute","removeAttribute","select","addEventListener","e","onChangeHandler","radio","swatch","onClickHandler","productDetailWrapper","modals","modal","modalId","location","reload","getContent","getContentSuccess","errorHandler","updateHtml","masterName","updateBundleIds","productBundleIds","productDetails","bundledProductIds","baseProductId","recommendedBulbsObj","gtmViewItem","Error","selectedProductUrl","ScreenDimensions","isTabletLandscapeAndBigger","target","body","offset","nodeName","options","selectedIndex","parentElement","JS_HOOK_MESSAGE","JS_HOOK_CONTENT","addAlertMessage","message","hook","type","scroll","selector","status","el","content","variantClass","className","contains","add","remove","focus","createMessageString","errors","errorHtml","apiErrorHandler","redirectUrl","href","serverErrors","errorMessage","responseJSON","fullReplace","item","toString","installMediaQueryWatcher","mediaQuery","layoutChangedCallback","mql","matchMedia","addListener","event","matches","media","MEDIA_QUERIES","reference","breakpoint","screenHeight","height","screenWidth","width","RafThrottle","set","namespace","fn","updateWidth","mqObject","innerWidth","innerHeight","JS_HOOK_HELP_ME_CHOOSE_BUTTON","ON_ORDER_SECTION","ADD_TO_CART_SECTION","setAddToCartButton","onOrderSections","section","addToCartSections","helpMeChooseButtons","setGoToStoreButton","setDiscontinuedButton","availability","onOrder","discontinued"],"mappings":"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","file":"js/ProductAttribute.js","sourcesContent":["import API from '@utilities/api'\nimport { body } from '@utilities/dom-elements'\nimport errorHandler from '@utilities/errors/error-handler'\nimport Events from '@utilities/events'\nimport moduleInit from '@utilities/module-init'\nimport replace from '@utilities/replace'\nimport ScreenDimensions from '@utilities/screen-dimensions'\n\nconst JS_HOOK_PRODUCT_DETAIL_WRAPPER = '[js-hook-product-detail]'\nconst JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER = '[js-hook-image-gallery-wrapper]'\nconst JS_HOOK_PRODUCT_PRICE_WRAPPER = '[js-product-price-wrapper]'\nconst JS_HOOK_PRODUCT_BADGES_WRAPPER = '[js-product-badges-wrapper]'\nconst JS_HOOK_PRODUCT_DELIVERY_WRAPPER = '[js-hook-product-delivery-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER = '[js-hook-spare-parts-anchor-link-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER = '[js-hook-spare-parts-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER = '[js-hook-spare-parts-slider-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER = '[js-hook-spare-parts-viewproduct-wrapper]'\nconst JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER = '[js-hook-sidebar-block-wrapper]'\nconst JS_HOOK_PRODUCT_ID = '[js-hook-product-id]'\nconst JS_HOOK_PRODUCT_TITLE = '[js-hook-product-attribute-title]'\nconst JS_HOOK_PRODUCT_SUBTITLE = '[js-hook-product-attribute-subtitle]'\nconst JS_HOOK_PRODUCT_DESIGNERS = '[js-hook-product-designers]'\nconst JS_HOOK_PRODUCT_ACCORDIONS = '[js-hook-product-accordions]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP = '[js-hook-product-attribute-desktop]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE = '[js-hook-product-attribute-mobile]'\nconst JS_HOOK_ADD_TO_CART_BUTTON = '[js-hook-add-to-cart]'\nconst JS_HOOK_ADD_TO_CART_BUTTON_LABEL = '[js-hook-button-label]'\nconst JS_HOOK_OUT_OF_STOCK_BUTTON = '[js-hook-out-of-stock-button]'\nconst JS_HOOK_SEO_TEXT = '[js-hook-seo-text]'\nconst JS_HOOK_PRODUCT_BREADCRUMB = '[js-hook-product-breadcrumb]'\nconst JS_HOOK_PRODUCT_INCLUDED_BULB = '[js-hook-product-included-bulb]'\nconst JS_HOOK_PRODUCT_SAMPLES = '[js-hook-product-samples-wrapper]'\nconst JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL = '[js-hook-added-to-cart-modal]'\nconst JS_HOOK_PRODUCT_STOCK = '[js-hook-product-stock-wrapper]'\nconst JS_HOOK_MODAL = '[js-hook-modal]'\nconst JS_HOOK_SWATCH_RADIO = '[js-hook-swatch-radio]'\nconst JS_HOOK_COLOR_SWATCH = '[js-hook-color-swatch]'\nconst JS_HOOK_LINKED_PRODUCTS_SLIDER = '[js-hook-linked-products-slider]'\nconst JS_HOOK_RELATED_SLIDER = '[js-hook-related-slider]'\nconst JS_HOOK_PRODUCT_DETAIL_BLOCK = '[js-hook-product-detail-block]'\nconst PRODUCT_DETAIL_CLASS = '.c-product-detail'\nconst JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA = '[js-hook-product-designers-content-area]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_DATA = '[js-hook-product-add-to-cart-data]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA = '[add-to-cart-modal-data]'\n\nconst DISABLED = 'disabled'\nconst SLIDER_HIDDEN = 'slider--hidden'\n\nclass ProductAttribute {\n  constructor(element) {\n    this.element = element\n\n    this.setUI()\n    this.bindEvents()\n  }\n\n  static updateHistory(url) {\n    Events.$trigger('history::push', {\n      data: {\n        url,\n        state: {\n          productChange: true,\n        },\n      },\n    })\n  }\n\n  /**\n   * @param available is map from product object. False or true\n   * @param readyToOrder is map from product object. Default value false\n   */\n  static shouldShowAddToCart(available, readyToOrder = false) {\n    return available && readyToOrder\n  }\n\n  static updatePrices({ priceHtml: price }) {\n    replace(price, JS_HOOK_PRODUCT_PRICE_WRAPPER)\n  }\n\n  static updateBadges({ badgesHtml: badges }) {\n    replace(badges, JS_HOOK_PRODUCT_BADGES_WRAPPER)\n  }\n\n  static updateDelivery({ deliveryHtml: delivery }) {\n    replace(delivery, JS_HOOK_PRODUCT_DELIVERY_WRAPPER)\n  }\n\n  static updateImageGallery({ imageGridHtml: imageGallery }) {\n    replace(imageGallery, JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER, true)\n  }\n\n  static updateProductID({ id: pid }) {\n    replace(pid, `${JS_HOOK_PRODUCT_ID}`)\n  }\n\n  static updateProductTitle(productName) {\n    replace(productName, `${JS_HOOK_PRODUCT_TITLE}`)\n    document.title = productName\n  }\n\n  static updateProductSubTitle(productSubTitle) {\n    replace(productSubTitle, `${JS_HOOK_PRODUCT_SUBTITLE}`)\n  }\n\n  static updateProductDesigners({ designersHtml }) {\n    replace(designersHtml, `${JS_HOOK_PRODUCT_DESIGNERS}`)\n  }\n\n  static updateProductAccordions({ accordionsHtml }) {\n    replace(accordionsHtml, `${JS_HOOK_PRODUCT_ACCORDIONS}`)\n  }\n\n  static updateSeoText({ longDescription }) {\n    replace(longDescription, `${JS_HOOK_SEO_TEXT}`)\n  }\n\n  static updateAttributesDesktop({ variationAttributesDesktopHtml: attributes }) {\n    replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP}`)\n  }\n\n  static updateAttributesMobile({ variationAttributesMobileHtml: attributes }) {\n    replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE}`)\n  }\n\n  static updateProductBreadcrumb({ breadcrumbHtml }) {\n    replace(breadcrumbHtml, `${JS_HOOK_PRODUCT_BREADCRUMB}`)\n  }\n\n  static updateIncludedBulb({ includedBulbHtml }) {\n    replace(includedBulbHtml, `${JS_HOOK_PRODUCT_INCLUDED_BULB}`)\n  }\n\n  static updateProductSamples({ productSamplesHtml }) {\n    replace(productSamplesHtml, `${JS_HOOK_PRODUCT_SAMPLES}`)\n  }\n\n  static updateProductAddedToCartModal({ addedToCartModalHtml }) {\n    replace(addedToCartModalHtml, `${JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL}`)\n  }\n\n  static updateProductStock({ productStockHtml }) {\n    replace(productStockHtml, `${JS_HOOK_PRODUCT_STOCK}`)\n  }\n\n  static updateSparePartsAnchor({ sparePartsAnchorHtml }) {\n    replace(sparePartsAnchorHtml, JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER)\n  }\n\n  static updateSparePartsList({ sparePartsListHtml }) {\n    replace(sparePartsListHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER}`)\n  }\n\n  static updateSparePartsSlider({ sparePartsSliderHtml }) {\n    replace(sparePartsSliderHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER}`)\n  }\n\n  static updateSparePartsViewProductButton({ sparePartsViewProductHtml }) {\n    replace(sparePartsViewProductHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER}`)\n  }\n\n  static updateDesignersContentArea({ designersContentArea }) {\n    const designersContentAreaHook = document.querySelector(JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA)\n    if (designersContentAreaHook) {\n      replace(designersContentArea, `${JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA}`)\n    }\n  }\n\n  static updateProductDetailBlock({ productDetailBlock }) {\n    replace(productDetailBlock, `${JS_HOOK_PRODUCT_DETAIL_BLOCK}`)\n  }\n\n  static updateLinkedProductsSlider({ linkedProductsSliderHtml }) {\n    const linkedProducts = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n\n    if (linkedProducts) {\n      replace(linkedProductsSliderHtml, `${JS_HOOK_LINKED_PRODUCTS_SLIDER}`)\n\n      const ajaxProductTiles = [...linkedProducts.querySelectorAll('.ajax-product-tile')]\n\n      if (ajaxProductTiles) {\n        const promises = []\n\n        ajaxProductTiles.forEach((ajaxProductTile) => {\n          const { productTileUrl } = ajaxProductTile.dataset\n\n          if (productTileUrl) {\n            const promise = API.get(productTileUrl)\n              .then((response) => {\n                if (response.data) ajaxProductTile.innerHTML = response.data\n              })\n              .catch((error) => {\n                console.info(error)\n              })\n\n            promises.push(promise)\n          }\n        })\n\n        Promise.all(promises)\n          .then(() => {\n            moduleInit.async('[js-hook-basic-slider]', () =>\n              import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n            )\n          })\n          .catch((error) => {\n            console.info(error)\n          })\n      } else {\n        moduleInit.async('[js-hook-basic-slider]', () =>\n          import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n        )\n      }\n    }\n  }\n\n  static updateSidebarBlock(data) {\n    replace(data, `${JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER}`)\n  }\n\n  static getPromoPage({ pdpSidebarBlockId }) {\n    const sidebarBlockWrapperDataset = document.querySelector(JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER)\n    if (sidebarBlockWrapperDataset) {\n      const { sidebarUrl } = sidebarBlockWrapperDataset.dataset\n\n      if (pdpSidebarBlockId) {\n        API.get(sidebarUrl + pdpSidebarBlockId)\n          .then((response) => {\n            ProductAttribute.updateSidebarBlock(response.data)\n          })\n          .catch((error) => {\n            console.info(error)\n            ProductAttribute.updateSidebarBlock('')\n          })\n      } else {\n        ProductAttribute.updateSidebarBlock('')\n      }\n    }\n  }\n\n  static updatePdpSlider(product) {\n    const relatedSlider = document.querySelector(JS_HOOK_RELATED_SLIDER)\n    const recommendedSlider = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n    const crossSelling = product.crossSellingProductRecommendations\n\n    if (recommendedSlider && relatedSlider) {\n      recommendedSlider.classList[crossSelling.show ? 'remove' : 'add'](SLIDER_HIDDEN)\n      relatedSlider.classList[crossSelling.show ? 'add' : 'remove'](SLIDER_HIDDEN)\n    }\n  }\n\n  rebindEvents() {\n    // Fire Event to Update Images\n    Events.$trigger('lazyimage::update')\n\n    Events.$trigger('in-view::update')\n    Events.$trigger('events::dom-reinit')\n    Events.$trigger('scroll-to::reinit-elements')\n\n    this.bindModals()\n\n    this.bindSelectEvents()\n    this.bindSwatchEvents()\n    this.bindRadioEvents()\n  }\n\n  static initModules() {\n    moduleInit.async('[js-hook-product-attribute]', () =>\n      import(/* webpackChunkName: \"js/ProductAttribute\" */ '@components/product-attribute'),\n    )\n\n    moduleInit.async('[js-hook-custom-select-box]', () =>\n      import(/* webpackChunkName: \"js/CustomSelectBox\" */ '@components/custom-select-box'),\n    )\n\n    moduleInit.async('[js-hook-accordion]', () =>\n      import(/* webpackChunkName: \"js/Accordion\" */ '@components/accordion'),\n    )\n\n    moduleInit.async('[js-hook-high-res-image-gallery]', () =>\n      import(/* webpackChunkName: \"js/HighResImageGallery\" */ '@components/high-res-image-gallery'),\n    )\n\n    moduleInit.async('[js-hook-image-zoom]', () =>\n      import(/* webpackChunkName: \"js/ImageZoom\" */ '@components/image-zoom'),\n    )\n\n    moduleInit.async('[js-hook-image-modal]', () =>\n      import(/* webpackChunkName: \"js/ImageModal\" */ '@components/image-modal'),\n    )\n\n    moduleInit.async('[js-hook-product-sample-modal-toggle]', () =>\n      import(\n        /* webpackChunkName: \"js/ProductSampleModalToggle\" */ '@components/product-sample-modal-toggle'\n      ),\n    )\n\n    moduleInit.async('[js-hook-product-sample-form]', () =>\n      import(/* webpackChunkName: \"js/ProductSampleForm\" */ '@components/product-sample-form'),\n    )\n\n    moduleInit.async('[js-hook-add-to-cart]', () =>\n      import(/* webpackChunkName: \"js/AddToCart\" */ '@components/add-to-cart'),\n    )\n\n    moduleInit.async('[js-hook-toggle]', () =>\n      import(/* webpackChunkName: \"js/Toggle\" */ '@components/toggle'),\n    )\n  }\n\n  static updateGTMAddToCartGA(productAddToCartGTMDataHTML) {\n    if (productAddToCartGTMDataHTML) {\n      const addToCartDataElement = document.querySelector(JS_HOOK_PRODUCT_ADD_TO_CART_DATA)\n\n      if (addToCartDataElement) addToCartDataElement.outerHTML = productAddToCartGTMDataHTML\n    }\n  }\n\n  static updateGTMAddToCartGAModalButtonData(addTocartGAData) {\n    if (addTocartGAData) {\n      const addToCartModalDataElements = document.querySelectorAll(\n        JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA,\n      )\n\n      if (addToCartModalDataElements) {\n        for (let index = 0; index < addToCartModalDataElements.length; index++) {\n          const addToCartModalDataElement = addToCartModalDataElements[index]\n\n          addToCartModalDataElement.dataset.gtmObj = addTocartGAData.gtmAddToCart\n          addToCartModalDataElement.dataset.ga4Obj = addTocartGAData.gtmAddToCartGA\n        }\n      }\n    }\n  }\n\n  static updateGTMViewItemData(viewItemData) {\n    if (viewItemData) {\n      window.ga4Data = JSON.parse(viewItemData)\n\n      Events.$trigger('gtm::push', { data: { ecommerce: null } })\n      Events.$trigger('gtm::push', { data: window.ga4Data })\n    }\n  }\n\n  setUI() {\n    this.ui = {\n      selects: [...this.element.querySelectorAll('select')],\n      swatches: [...this.element.querySelectorAll(JS_HOOK_COLOR_SWATCH)],\n      radios: [...this.element.querySelectorAll(JS_HOOK_SWATCH_RADIO)],\n      productDetail: document.querySelector(PRODUCT_DETAIL_CLASS),\n      addToCartButtons: [...document.querySelectorAll(JS_HOOK_ADD_TO_CART_BUTTON)],\n      addToCartButtonLabels: [\n        ...document.querySelectorAll(\n          `${JS_HOOK_ADD_TO_CART_BUTTON} ${JS_HOOK_ADD_TO_CART_BUTTON_LABEL}`,\n        ),\n      ],\n      outOfStockButtons: [...document.querySelectorAll(JS_HOOK_OUT_OF_STOCK_BUTTON)],\n    }\n  }\n\n  updateButtonLabel({ buttonLabel }) {\n    this.ui.addToCartButtonLabels.forEach((label) => {\n      label.innerText = buttonLabel\n    })\n  }\n\n  updateButton({ id, available, readyToOrder }) {\n    this.ui.addToCartButtons.forEach((button) => {\n      button.setAttribute('data-pid', id)\n\n      if (ProductAttribute.shouldShowAddToCart(available, readyToOrder)) {\n        button.removeAttribute(DISABLED)\n      } else {\n        button.setAttribute(DISABLED, true)\n      }\n    })\n  }\n\n  bindSelectEvents() {\n    this.ui.selects.forEach((select) => {\n      select.addEventListener('change', (e) => this.onChangeHandler(e))\n    })\n  }\n\n  bindRadioEvents() {\n    this.ui.radios.forEach((radio) => {\n      radio.addEventListener('change', (e) => this.onChangeHandler(e))\n    })\n  }\n\n  bindSwatchEvents() {\n    this.ui.swatches.forEach((swatch) => {\n      swatch.addEventListener('click', (e) => this.onClickHandler(e))\n    })\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  bindModals() {\n    const productDetailWrapper = document.querySelector(JS_HOOK_PRODUCT_DETAIL_WRAPPER)\n\n    if (!productDetailWrapper) return\n\n    const modals = [...productDetailWrapper.querySelectorAll(JS_HOOK_MODAL)]\n\n    modals.forEach((modal) => {\n      const modalId = modal.id\n\n      Events.$trigger('modal::bind', { data: modalId })\n    })\n  }\n\n  /**\n   * Binds events\n   */\n  bindEvents() {\n    this.bindSelectEvents()\n    this.bindSwatchEvents()\n    this.bindRadioEvents()\n\n    window.addEventListener('popstate', () => {\n      // todo: extend updateHTML to variant selects + reinit events\n      // instead of reloading page\n      // this.getContent(document.location.href);\n      window.location.reload()\n    })\n  }\n\n  getContent(url) {\n    Events.$trigger('loader::show')\n\n    API.get(url)\n      .then((response) => this.getContentSuccess(response.data))\n      .catch((error) => errorHandler(error))\n  }\n\n  updateHtml(product, productAddToCartGTMDataHTML) {\n    if (product.masterName) {\n      ProductAttribute.updateProductTitle(product.masterName)\n      ProductAttribute.updateProductSubTitle(product.productName)\n    } else {\n      ProductAttribute.updateProductTitle(product.productName)\n    }\n\n    ProductAttribute.updateImageGallery(product)\n    ProductAttribute.updatePrices(product)\n    ProductAttribute.updateBadges(product)\n    ProductAttribute.updateDelivery(product)\n    ProductAttribute.updateProductID(product)\n    ProductAttribute.updateProductDesigners(product)\n    ProductAttribute.updateProductAccordions(product)\n    ProductAttribute.updateSeoText(product)\n    ProductAttribute.updateAttributesDesktop(product)\n    ProductAttribute.updateAttributesMobile(product)\n    ProductAttribute.updateProductBreadcrumb(product)\n    ProductAttribute.updateIncludedBulb(product)\n    ProductAttribute.updateProductSamples(product)\n    ProductAttribute.updateProductAddedToCartModal(product)\n    ProductAttribute.updateProductStock(product)\n    ProductAttribute.updateSparePartsAnchor(product)\n    ProductAttribute.updateSparePartsList(product)\n    ProductAttribute.updateSparePartsSlider(product)\n    ProductAttribute.updateSparePartsViewProductButton(product)\n    ProductAttribute.updateLinkedProductsSlider(product)\n    ProductAttribute.updateDesignersContentArea(product)\n    ProductAttribute.updateProductDetailBlock(product)\n\n    ProductAttribute.updatePdpSlider(product)\n\n    ProductAttribute.getPromoPage(product)\n\n    ProductAttribute.updateGTMAddToCartGA(productAddToCartGTMDataHTML)\n\n    this.updateButtonLabel(product)\n    this.updateButton(product)\n\n    this.setUI()\n\n    // Bind events again to new DOM elements\n    this.rebindEvents()\n    ProductAttribute.initModules()\n\n    Events.$trigger('loader::hide')\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  updateBundleIds(productBundleIds, product) {\n    if (productBundleIds) {\n      const productDetails = document.querySelector(PRODUCT_DETAIL_CLASS)\n      productDetails.dataset.bundledProductIds = productBundleIds\n      productDetails.dataset.baseProductId = `${product.id || ''}`\n      Events.$trigger('product::specsheet')\n    }\n  }\n\n  getContentSuccess(data) {\n    const { product } = data\n    const { productAddToCartGTMDataHTML } = data\n    const { recommendedBulbsObj } = data\n    const { gtmViewItem } = data\n    const { bundledProductIds } = data\n\n    if (!product) {\n      throw new Error('No product data found')\n    }\n\n    ProductAttribute.updateHistory(product.selectedProductUrl)\n    this.updateHtml(product, productAddToCartGTMDataHTML)\n    this.updateBundleIds(bundledProductIds, product)\n\n    ProductAttribute.updateGTMAddToCartGAModalButtonData(recommendedBulbsObj)\n    ProductAttribute.updateGTMViewItemData(gtmViewItem)\n\n    if (!ScreenDimensions.isTabletLandscapeAndBigger) {\n      Events.$trigger('scroll-to::scroll', {\n        data: {\n          target: body,\n          offset: 0,\n        },\n      })\n    }\n  }\n\n  onChangeHandler(e) {\n    let data = e.target.dataset\n    if (e.target.nodeName === 'SELECT') {\n      data = e.target.options[e.target.selectedIndex].dataset\n    }\n\n    if (!data.url) return\n\n    this.getContent(data.url)\n  }\n\n  onClickHandler(e) {\n    const data = e.target.parentElement.dataset;\n    if (!data.url) return\n\n    this.getContent(data.url)\n  }\n}\n\nexport default ProductAttribute\n","/**\n *  @shelf-version: 1.1.0\n */\n\nimport ProductAttribute from './product-attribute';\n\nexport default ProductAttribute;\n","import Events from '@utilities/events'\n\nconst JS_HOOK_MESSAGE = '[js-hook-message]'\nconst JS_HOOK_CONTENT = '[js-hook-alert-content]'\n\n/**\n * Add alert message to page\n *\n * @param {String} message -  the message string to show\n * @param {String} hook - [js-hook-message] or custom hook\n * @param {String} type - success, warning or error type\n */\nconst addAlertMessage = function ({ message, hook, type, scroll = false }) {\n  const selector = hook || JS_HOOK_MESSAGE\n  const status = type || 'error'\n\n  const el = document.querySelector(selector)\n\n  if (!el) return\n  const content = el.querySelector(JS_HOOK_CONTENT)\n  content.innerHTML = message\n\n  // Add classes and show\n  const variantClass = `alert--${status}`;\n  el.className = el.className.replace(/(?:^|\\W)alert--(\\w+)(?!\\w)/g, ` ${variantClass}`)\n  if(!el.classList.contains(variantClass)) el.classList.add(variantClass)\n  el.classList.remove('u-hidden')\n  el.removeAttribute('aria-hidden')\n  el.focus()\n\n  // Scroll to alert\n  if (!el.classList.contains('is--relative') && !scroll) return\n  Events.$trigger('scroll-to::scroll', {\n    data: {\n      target: el,\n      offset: 130,\n    },\n  })\n}\nexport default addAlertMessage\n","import addAlertMessage from './add-alert-message'\n\nexport default addAlertMessage\n","const createMessageString = function (errors) {\n  let errorHtml = ''\n  errors.forEach((error) => {\n    errorHtml += `<p>${error}</p>`\n  })\n  return errorHtml\n}\nexport default createMessageString\n","import createMessageString from './create-message-string'\n\nexport default createMessageString\n","import createMessageString from '@utilities/errors/create-message-string'\nimport addAlertMessage from '../add-alert-message'\n\n/**\n * Process API error\n *\n * @param {Object|String} error - error message\n * @param {string} selector - error message selector\n */\nconst apiErrorHandler = function (error, selector) {\n  if (!error) return\n  const { redirectUrl } = error\n  if (redirectUrl) {\n    window.location.href = redirectUrl\n  } else if (error.serverErrors && error.serverErrors.length) {\n    addAlertMessage({\n      message: createMessageString(error.serverErrors),\n      hook: selector,\n      type: 'error',\n      scroll: 'true'\n    })\n  } else {\n    const errorMessage = error.errorMessage || error.message || error.responseJSON\n    if (!errorMessage) return\n    addAlertMessage({ message: errorMessage, hook: selector, type: 'error', scroll: 'true' })\n  }\n}\n\nexport default apiErrorHandler\n","import apiErrorHandler from './api-error-handler'\n\nexport default apiErrorHandler\n","import idx from 'idx'\nimport Events from '@utilities/events'\nimport apiErrorHandler from '../api-error-handler'\n\n/**\n * Process errors from API or JS errors\n *\n * @param {Object} error - error message\n */\nconst errorHandler = function (error) {\n  Events.$trigger('loader::hide')\n  const data = idx(error, (_) => _.response.data)\n  if (data) {\n    apiErrorHandler(data)\n  } else {\n    throw new Error(`JAVASCRIPT ERROR: ${error}`)\n  }\n}\n\nexport default errorHandler\n","import errorHandler from './error-handler'\n\nexport default errorHandler\n","/**\n * Replace content of DOM elements\n * @param {Object} content - DOM element\n * @param {String} selector - selector to replace with content\n * @param {Boolean} fullReplace - flag indicating whether the element should be replaced in its entirety\n * \n * @return {Void}\n */\nconst replace = function(content, selector, fullReplace) {\n  const el = [...document.querySelectorAll(selector)];\n\n  el.forEach(item => {\n    if (fullReplace) {\n      item.outerHTML = content.toString() || '';\n    } else {\n      item.innerHTML = content.toString() || '';\n    }\n  });\n};\nexport default replace;\n","import RafThrottle from '@utilities/raf-throttle'\n\nconst installMediaQueryWatcher = (mediaQuery, layoutChangedCallback) => {\n  const mql = window.matchMedia(mediaQuery)\n  mql.addListener((event) => layoutChangedCallback(event.matches, event.media))\n  layoutChangedCallback(mql.matches, mql.media)\n}\n\nconst MEDIA_QUERIES = [\n  {\n    reference: 'isMobile',\n    breakpoint: 320,\n  },\n  {\n    reference: 'isMobilePlus',\n    breakpoint: 480,\n  },\n  {\n    reference: 'isTabletPortrait',\n    breakpoint: 768,\n  },\n  {\n    reference: 'isTabletLandscape',\n    breakpoint: 1024,\n  },\n  {\n    reference: 'isLaptop',\n    breakpoint: 1240,\n  },\n  {\n    reference: 'isDesktop',\n    breakpoint: 1600,\n  },\n  {\n    reference: 'isWidescreen',\n    breakpoint: 1920,\n  },\n]\n\nclass ScreenDimensions {\n  get screenHeight() {\n    return this.height\n  }\n\n  get screenWidth() {\n    return this.width\n  }\n\n  constructor() {\n    RafThrottle.set([\n      {\n        element: window,\n        event: 'resize',\n        namespace: 'ScreenDimensionsWidthChange',\n        fn: () => this.updateWidth(),\n      },\n    ])\n\n    MEDIA_QUERIES.forEach((mqObject, index) => {\n      const { breakpoint } = mqObject\n\n      installMediaQueryWatcher(`(min-width: ${breakpoint}px)`, (matches) => {\n        this[`${mqObject.reference}AndBigger`] = matches\n      })\n\n      if (!index) {\n        installMediaQueryWatcher(`(max-width: ${breakpoint}px)`, (matches) => {\n          this[mqObject.reference] = matches\n        })\n      } else if (MEDIA_QUERIES[index + 1]) {\n        installMediaQueryWatcher(\n          `(min-width: ${breakpoint}px) and (max-width: ${\n            MEDIA_QUERIES[index + 1].breakpoint - 1\n          }px)`,\n          (matches) => {\n            this[mqObject.reference] = matches\n          },\n        )\n      } else {\n        installMediaQueryWatcher(`(min-width: ${breakpoint}px)`, (matches) => {\n          this[mqObject.reference] = matches\n        })\n      }\n    })\n\n    this.updateWidth()\n  }\n\n  updateWidth() {\n    // eslint-disable-next-line\n    ;(this.width = window.innerWidth), (this.height = window.innerHeight)\n  }\n}\n\nexport default new ScreenDimensions()\n","/**\n * @shelf-version: 1.1.0\n */\n\nimport ScreenDimensions from './screen-dimensions'\n\nexport default ScreenDimensions\n","import API from '@utilities/api'\nimport { body } from '@utilities/dom-elements'\nimport errorHandler from '@utilities/errors/error-handler'\nimport Events from '@utilities/events'\nimport moduleInit from '@utilities/module-init'\nimport replace from '@utilities/replace'\nimport ScreenDimensions from '@utilities/screen-dimensions'\n\nconst JS_HOOK_PRODUCT_DETAIL_WRAPPER = '[js-hook-product-detail]'\nconst JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER = '[js-hook-image-gallery-wrapper]'\nconst JS_HOOK_PRODUCT_PRICE_WRAPPER = '[js-hook-price]'\nconst JS_HOOK_PRODUCT_BADGES_WRAPPER = '[js-product-badges-wrapper]'\nconst JS_HOOK_PRODUCT_DELIVERY_WRAPPER = '[js-hook-product-delivery-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER = '[js-hook-spare-parts-anchor-link-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER = '[js-hook-spare-parts-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER = '[js-hook-spare-parts-slider-wrapper]'\nconst JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER = '[js-hook-spare-parts-viewproduct-wrapper]'\nconst JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER = '[js-hook-sidebar-block-wrapper]'\nconst JS_HOOK_PRODUCT_ID = '[js-hook-product-id]'\nconst JS_HOOK_PRODUCT_TITLE = '[js-hook-product-attribute-title]'\nconst JS_HOOK_PRODUCT_SUBTITLE = '[js-hook-product-attribute-subtitle]'\nconst JS_HOOK_PRODUCT_DESIGNERS = '[js-hook-product-designers]'\nconst JS_HOOK_PRODUCT_ACCORDIONS = '[js-hook-product-accordions]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP = '[js-hook-product-attribute-desktop]'\nconst JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE = '[js-hook-product-attribute-mobile]'\nconst JS_HOOK_ADD_TO_CART_BUTTON = '[js-hook-add-to-cart]'\nconst JS_HOOK_ADD_TO_CART_BUTTON_LABEL = '[js-hook-button-label]'\nconst JS_HOOK_OUT_OF_STOCK_BUTTON = '[js-hook-out-of-stock-button]'\nconst JS_HOOK_HELP_ME_CHOOSE_BUTTON = '[js-hook-help-me-choose-button]'\nconst JS_HOOK_SEO_TEXT = '[js-hook-seo-text]'\nconst JS_HOOK_PRODUCT_BREADCRUMB = '[js-hook-product-breadcrumb]'\nconst JS_HOOK_PRODUCT_INCLUDED_BULB = '[js-hook-product-included-bulb]'\nconst JS_HOOK_PRODUCT_SAMPLES = '[js-hook-product-samples-wrapper]'\nconst JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL = '[js-hook-added-to-cart-modal]'\nconst JS_HOOK_PRODUCT_STOCK = '[js-hook-product-stock-wrapper]'\nconst JS_HOOK_MODAL = '[js-hook-modal]'\nconst JS_HOOK_SWATCH_RADIO = '[js-hook-swatch-radio]'\nconst JS_HOOK_COLOR_SWATCH = '[js-hook-color-swatch]'\nconst JS_HOOK_LINKED_PRODUCTS_SLIDER = '[js-hook-linked-products-slider]'\nconst JS_HOOK_RELATED_SLIDER = '[js-hook-related-slider]'\nconst JS_HOOK_PRODUCT_DETAIL_BLOCK = '[js-hook-product-detail-block]'\nconst PRODUCT_DETAIL_CLASS = '.c-product-detail'\nconst JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA = '[js-hook-product-designers-content-area]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_DATA = '[js-hook-product-add-to-cart-data]'\nconst JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA = '[add-to-cart-modal-data]'\n// const JS_HOOK_STICKY_BUTTON = '[js-hook-product-detail-sticky-button]';\n\nconst SLIDER_HIDDEN = 'slider--hidden'\nconst ON_ORDER_SECTION = '.fl-onorder-section';\nconst ADD_TO_CART_SECTION = '.fl-addtocart-section';\n\nclass ProductAttribute {\n  constructor(element) {\n    this.element = element\n\n    this.setUI()\n    this.bindEvents()\n  }\n\n  static updateHistory(url) {\n    Events.$trigger('history::push', {\n      data: {\n        url,\n        state: {\n          productChange: true,\n        },\n      },\n    })\n  }\n\n  /**\n   * @param available is map from product object. False or true\n   * @param readyToOrder is map from product object. Default value false\n   */\n  static shouldShowAddToCart(available, readyToOrder = false) {\n    return available && readyToOrder\n  }\n\n  static updatePrices({ priceHtml: price }) {\n    replace(price, JS_HOOK_PRODUCT_PRICE_WRAPPER)\n  }\n\n  static updateBadges({ badgesHtml: badges }) {\n    replace(badges, JS_HOOK_PRODUCT_BADGES_WRAPPER)\n  }\n\n  static updateDelivery({ deliveryHtml: delivery }) {\n    replace(delivery, JS_HOOK_PRODUCT_DELIVERY_WRAPPER)\n  }\n\n  static updateImageGallery({ imageGridHtml: imageGallery }) {\n    replace(imageGallery, JS_HOOK_PRODUCT_IMAGE_GALLERY_WRAPPER, true)\n  }\n\n  static updateProductID({ id: pid }) {\n    replace(pid, `${JS_HOOK_PRODUCT_ID}`)\n  }\n\n  static updateProductTitle(productName) {\n    replace(productName, `${JS_HOOK_PRODUCT_TITLE}`)\n    document.title = productName\n  }\n\n  static updateProductSubTitle(productSubTitle) {\n    replace(productSubTitle, `${JS_HOOK_PRODUCT_SUBTITLE}`)\n  }\n\n  static updateProductDesigners({ designersHtml }) {\n    replace(designersHtml, `${JS_HOOK_PRODUCT_DESIGNERS}`)\n  }\n\n  static updateProductAccordions({ accordionsHtml }) {\n    replace(accordionsHtml, `${JS_HOOK_PRODUCT_ACCORDIONS}`)\n  }\n\n  static updateSeoText({ longDescription }) {\n    replace(longDescription, `${JS_HOOK_SEO_TEXT}`)\n  }\n\n  static updateAttributesDesktop({ variationAttributesDesktopHtml: attributes }) {\n    replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_DESKTOP}`)\n  }\n\n  static updateAttributesMobile({ variationAttributesMobileHtml: attributes }) {\n    replace(attributes, `${JS_HOOK_PRODUCT_ATTRIBUTE_MOBILE}`)\n  }\n\n  static updateProductBreadcrumb({ breadcrumbHtml }) {\n    replace(breadcrumbHtml, `${JS_HOOK_PRODUCT_BREADCRUMB}`)\n  }\n\n  static updateIncludedBulb({ includedBulbHtml }) {\n    replace(includedBulbHtml, `${JS_HOOK_PRODUCT_INCLUDED_BULB}`)\n  }\n\n  static updateProductSamples({ productSamplesHtml }) {\n    replace(productSamplesHtml, `${JS_HOOK_PRODUCT_SAMPLES}`)\n  }\n\n  static updateProductAddedToCartModal({ addedToCartModalHtml }) {\n    replace(addedToCartModalHtml, `${JS_HOOK_PRODUCT_ADDED_TO_CART_MODAL}`)\n  }\n\n  static updateProductStock({ productStockHtml }) {\n    replace(productStockHtml, `${JS_HOOK_PRODUCT_STOCK}`)\n  }\n\n  static updateSparePartsAnchor({ sparePartsAnchorHtml }) {\n    replace(sparePartsAnchorHtml, JS_HOOK_PRODUCT_SPARE_PARTS_ANCHOR_WRAPPER)\n  }\n\n  static updateSparePartsList({ sparePartsListHtml }) {\n    replace(sparePartsListHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_WRAPPER}`)\n  }\n\n  static updateSparePartsSlider({ sparePartsSliderHtml }) {\n    replace(sparePartsSliderHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_SLIDER_WRAPPER}`)\n  }\n\n  static updateSparePartsViewProductButton({ sparePartsViewProductHtml }) {\n    replace(sparePartsViewProductHtml, `${JS_HOOK_PRODUCT_SPARE_PARTS_VIEWPRODUCT_WRAPPER}`)\n  }\n\n  static updateDesignersContentArea({ designersContentArea }) {\n    const designersContentAreaHook = document.querySelector(JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA)\n    if (designersContentAreaHook) {\n      replace(designersContentArea, `${JS_HOOK_PRODUCT_DESIGNERS_CONTENT_AREA}`)\n    }\n  }\n\n  static updateProductDetailBlock({ productDetailBlock }) {\n    replace(productDetailBlock, `${JS_HOOK_PRODUCT_DETAIL_BLOCK}`)\n  }\n\n  static updateLinkedProductsSlider({ linkedProductsSliderHtml }) {\n    const linkedProducts = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n\n    if (linkedProducts) {\n      replace(linkedProductsSliderHtml, `${JS_HOOK_LINKED_PRODUCTS_SLIDER}`)\n\n      const ajaxProductTiles = [...linkedProducts.querySelectorAll('.ajax-product-tile')]\n\n      if (ajaxProductTiles) {\n        const promises = []\n\n        ajaxProductTiles.forEach((ajaxProductTile) => {\n          const { productTileUrl } = ajaxProductTile.dataset\n\n          if (productTileUrl) {\n            const promise = API.get(productTileUrl)\n              .then((response) => {\n                if (response.data) ajaxProductTile.innerHTML = response.data\n              })\n              .catch((error) => {\n                console.info(error)\n              })\n\n            promises.push(promise)\n          }\n        })\n\n        Promise.all(promises)\n          .then(() => {\n            moduleInit.async('[js-hook-basic-slider]', () =>\n              import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n            )\n          })\n          .catch((error) => {\n            console.info(error)\n          })\n      } else {\n        moduleInit.async('[js-hook-basic-slider]', () =>\n          import(/* webpackChunkName: \"js/BasicSlider\" */ '@components/basic-slider'),\n        )\n      }\n    }\n  }\n\n  static updateSidebarBlock(data) {\n    replace(data, `${JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER}`)\n  }\n\n  static getPromoPage({ pdpSidebarBlockId }) {\n    const sidebarBlockWrapperDataset = document.querySelector(JS_HOOK_PRODUCT_SIDEBAR_BLOCK_WRAPPER)\n    if (sidebarBlockWrapperDataset) {\n      const { sidebarUrl } = sidebarBlockWrapperDataset.dataset\n\n      if (pdpSidebarBlockId) {\n        API.get(sidebarUrl + pdpSidebarBlockId)\n          .then((response) => {\n            ProductAttribute.updateSidebarBlock(response.data)\n          })\n          .catch((error) => {\n            console.info(error)\n            ProductAttribute.updateSidebarBlock('')\n          })\n      } else {\n        ProductAttribute.updateSidebarBlock('')\n      }\n    }\n  }\n\n  static updatePdpSlider(product) {\n    const relatedSlider = document.querySelector(JS_HOOK_RELATED_SLIDER)\n    const recommendedSlider = document.querySelector(JS_HOOK_LINKED_PRODUCTS_SLIDER)\n    const crossSelling = product.crossSellingProductRecommendations\n\n    if (recommendedSlider && relatedSlider) {\n      recommendedSlider.classList[crossSelling.show ? 'remove' : 'add'](SLIDER_HIDDEN)\n      relatedSlider.classList[crossSelling.show ? 'add' : 'remove'](SLIDER_HIDDEN)\n    }\n  }\n\n  setAddToCartButton(id) {\n    this.ui.onOrderSections.forEach((section) => {\n      section.classList.add('d-none');\n    });\n    this.ui.addToCartSections.forEach((section) => {\n      section.classList.remove('d-none');\n    });\n    this.ui.helpMeChooseButtons.forEach((section) => {\n      section.classList.remove('d-none');\n    });\n    this.ui.addToCartButtons.forEach((button) => {\n      button.setAttribute('data-pid', id)\n    });\n  }\n\n  setGoToStoreButton() {\n    this.ui.onOrderSections.forEach((section) => {\n      section.classList.remove('d-none');\n    });\n    this.ui.helpMeChooseButtons.forEach((section) => {\n      section.classList.add('d-none');\n    });\n    this.ui.addToCartSections.forEach((section) => {\n      section.classList.add('d-none');\n    });\n  }\n\n  setDiscontinuedButton() {\n    this.ui.onOrderSections.forEach((section) => {\n      section.classList.add('d-none');\n    });\n    this.ui.helpMeChooseButtons.forEach((section) => {\n      section.classList.add('d-none');\n    });\n    this.ui.addToCartSections.forEach((section) => {\n      section.classList.add('d-none');\n    });\n  }\n\n  rebindEvents() {\n    // Fire Event to Update Images\n    Events.$trigger('lazyimage::update')\n\n    Events.$trigger('in-view::update')\n    Events.$trigger('events::dom-reinit')\n    Events.$trigger('scroll-to::reinit-elements')\n\n    this.bindModals()\n\n    this.bindSelectEvents()\n    this.bindSwatchEvents()\n    this.bindRadioEvents()\n  }\n\n  static initModules() {\n    moduleInit.async('[js-hook-product-attribute]', () =>\n      import(/* webpackChunkName: \"js/ProductAttribute\" */ '@components/product-attribute'),\n    )\n\n    moduleInit.async('[js-hook-custom-select-box]', () =>\n      import(/* webpackChunkName: \"js/CustomSelectBox\" */ '@components/custom-select-box'),\n    )\n\n    moduleInit.async('[js-hook-accordion]', () =>\n      import(/* webpackChunkName: \"js/Accordion\" */ '@components/accordion'),\n    )\n\n    moduleInit.async('[js-hook-high-res-image-gallery]', () =>\n      import(/* webpackChunkName: \"js/HighResImageGallery\" */ '@components/high-res-image-gallery'),\n    )\n\n    moduleInit.async('[js-hook-image-zoom]', () =>\n      import(/* webpackChunkName: \"js/ImageZoom\" */ '@components/image-zoom'),\n    )\n\n    moduleInit.async('[js-hook-image-modal]', () =>\n      import(/* webpackChunkName: \"js/ImageModal\" */ '@components/image-modal'),\n    )\n\n    moduleInit.async('[js-hook-product-sample-modal-toggle]', () =>\n      import(\n        /* webpackChunkName: \"js/ProductSampleModalToggle\" */ '@components/product-sample-modal-toggle'\n      ),\n    )\n\n    moduleInit.async('[js-hook-product-sample-form]', () =>\n      import(/* webpackChunkName: \"js/ProductSampleForm\" */ '@components/product-sample-form'),\n    )\n\n    moduleInit.async('[js-hook-add-to-cart]', () =>\n      import(/* webpackChunkName: \"js/AddToCart\" */ '@components/add-to-cart'),\n    )\n\n    moduleInit.async('[js-hook-go-to-stores]', () =>\n      import(/* webpackChunkName: \"js/GoToStore\" */ '@components/go-to-stores'),\n    )\n\n    moduleInit.async('[js-hook-toggle]', () =>\n      import(/* webpackChunkName: \"js/Toggle\" */ '@components/toggle'),\n    )\n  }\n\n  static updateGTMAddToCartGA(productAddToCartGTMDataHTML) {\n    if (productAddToCartGTMDataHTML) {\n      const addToCartDataElement = document.querySelector(JS_HOOK_PRODUCT_ADD_TO_CART_DATA)\n\n      if (addToCartDataElement) addToCartDataElement.outerHTML = productAddToCartGTMDataHTML\n    }\n  }\n\n  static updateGTMAddToCartGAModalButtonData(addTocartGAData) {\n    if (addTocartGAData) {\n      const addToCartModalDataElements = document.querySelectorAll(\n        JS_HOOK_PRODUCT_ADD_TO_CART_MODAL_DATA,\n      )\n\n      if (addToCartModalDataElements) {\n        for (let index = 0; index < addToCartModalDataElements.length; index++) {\n          const addToCartModalDataElement = addToCartModalDataElements[index]\n\n          addToCartModalDataElement.dataset.gtmObj = addTocartGAData.gtmAddToCart\n          addToCartModalDataElement.dataset.ga4Obj = addTocartGAData.gtmAddToCartGA\n        }\n      }\n    }\n  }\n\n  static updateGTMViewItemData(viewItemData) {\n    if (viewItemData) {\n      window.ga4Data = JSON.parse(viewItemData)\n\n      Events.$trigger('gtm::push', { data: { ecommerce: null } })\n      Events.$trigger('gtm::push', { data: window.ga4Data })\n    }\n  }\n\n  setUI() {\n    this.ui = {\n      selects: [...this.element.querySelectorAll('select')],\n      swatches: [...this.element.querySelectorAll(JS_HOOK_COLOR_SWATCH)],\n      radios: [...this.element.querySelectorAll(JS_HOOK_SWATCH_RADIO)],\n      productDetail: document.querySelector(PRODUCT_DETAIL_CLASS),\n      addToCartSections: [...document.querySelectorAll(ADD_TO_CART_SECTION)],\n      onOrderSections: [...document.querySelectorAll(ON_ORDER_SECTION)],\n      addToCartButtons: [...document.querySelectorAll(JS_HOOK_ADD_TO_CART_BUTTON)],\n      addToCartButtonLabels: [\n        ...document.querySelectorAll(\n          `${JS_HOOK_ADD_TO_CART_BUTTON} ${JS_HOOK_ADD_TO_CART_BUTTON_LABEL}`,\n        ),\n      ],\n      helpMeChooseButtons: [...document.querySelectorAll(JS_HOOK_HELP_ME_CHOOSE_BUTTON)],\n      outOfStockButtons: [...document.querySelectorAll(JS_HOOK_OUT_OF_STOCK_BUTTON)],\n    }\n  }\n\n  updateButtonLabel({ buttonLabel }) {\n    this.ui.addToCartButtonLabels.forEach((label) => {\n      label.innerText = buttonLabel\n    });\n  }\n\n  updateButton({ id, available, availability }) {\n    if (available) {\n      this.setAddToCartButton(id)\n    } else if (availability.onOrder) {\n      this.setGoToStoreButton()\n    } else if (availability.discontinued) {\n      this.setDiscontinuedButton()\n    }\n  }\n\n  bindSelectEvents() {\n    this.ui.selects.forEach((select) => {\n      select.addEventListener('change', (e) => this.onChangeHandler(e))\n    })\n  }\n\n  bindRadioEvents() {\n    this.ui.radios.forEach((radio) => {\n      radio.addEventListener('change', (e) => this.onChangeHandler(e))\n    })\n  }\n\n  bindSwatchEvents() {\n    this.ui.swatches.forEach((swatch) => {\n      swatch.addEventListener('click', (e) => this.onClickHandler(e))\n    })\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  bindModals() {\n    const productDetailWrapper = document.querySelector(JS_HOOK_PRODUCT_DETAIL_WRAPPER)\n\n    if (!productDetailWrapper) return\n\n    const modals = [...productDetailWrapper.querySelectorAll(JS_HOOK_MODAL)]\n\n    modals.forEach((modal) => {\n      const modalId = modal.id\n\n      Events.$trigger('modal::bind', { data: modalId })\n    })\n  }\n\n  /**\n   * Binds events\n   */\n  bindEvents() {\n    this.bindSelectEvents()\n    this.bindSwatchEvents()\n    this.bindRadioEvents()\n\n    window.addEventListener('popstate', () => {\n      // todo: extend updateHTML to variant selects + reinit events\n      // instead of reloading page\n      // this.getContent(document.location.href);\n      window.location.reload()\n    })\n  }\n\n  getContent(url) {\n    Events.$trigger('loader::show')\n\n    API.get(url)\n      .then((response) => this.getContentSuccess(response.data))\n      .catch((error) => errorHandler(error))\n  }\n\n  updateHtml(product, productAddToCartGTMDataHTML) {\n    if (product.masterName) {\n      ProductAttribute.updateProductTitle(product.masterName)\n      ProductAttribute.updateProductSubTitle(product.productName)\n    } else {\n      ProductAttribute.updateProductTitle(product.productName)\n    }\n\n    ProductAttribute.updateImageGallery(product)\n    ProductAttribute.updatePrices(product)\n    ProductAttribute.updateBadges(product)\n    ProductAttribute.updateDelivery(product)\n    ProductAttribute.updateProductID(product)\n    ProductAttribute.updateProductDesigners(product)\n    ProductAttribute.updateProductAccordions(product)\n    ProductAttribute.updateSeoText(product)\n    ProductAttribute.updateAttributesDesktop(product)\n    ProductAttribute.updateAttributesMobile(product)\n    ProductAttribute.updateProductBreadcrumb(product)\n    ProductAttribute.updateIncludedBulb(product)\n    ProductAttribute.updateProductSamples(product)\n    ProductAttribute.updateProductAddedToCartModal(product)\n    ProductAttribute.updateProductStock(product)\n    ProductAttribute.updateSparePartsAnchor(product)\n    ProductAttribute.updateSparePartsList(product)\n    ProductAttribute.updateSparePartsSlider(product)\n    ProductAttribute.updateSparePartsViewProductButton(product)\n    ProductAttribute.updateLinkedProductsSlider(product)\n    ProductAttribute.updateDesignersContentArea(product)\n    ProductAttribute.updateProductDetailBlock(product)\n\n    ProductAttribute.updatePdpSlider(product)\n\n    ProductAttribute.getPromoPage(product)\n\n    ProductAttribute.updateGTMAddToCartGA(productAddToCartGTMDataHTML)\n\n    this.updateButtonLabel(product)\n    this.updateButton(product)\n\n    this.setUI()\n\n    // Bind events again to new DOM elements\n    this.rebindEvents()\n    ProductAttribute.initModules()\n\n    Events.$trigger('loader::hide')\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  updateBundleIds(productBundleIds, product) {\n    if (productBundleIds) {\n      const productDetails = document.querySelector(PRODUCT_DETAIL_CLASS)\n      productDetails.dataset.bundledProductIds = productBundleIds\n      productDetails.dataset.baseProductId = `${product.id || ''}`\n      Events.$trigger('product::specsheet')\n    }\n  }\n\n  getContentSuccess(data) {\n    const { product } = data\n    const { productAddToCartGTMDataHTML } = data\n    const { recommendedBulbsObj } = data\n    const { gtmViewItem } = data\n    const { bundledProductIds } = data\n\n    if (!product) {\n      throw new Error('No product data found')\n    }\n\n    ProductAttribute.updateHistory(product.selectedProductUrl)\n    this.updateHtml(product, productAddToCartGTMDataHTML)\n    this.updateBundleIds(bundledProductIds, product)\n\n    ProductAttribute.updateGTMAddToCartGAModalButtonData(recommendedBulbsObj)\n    ProductAttribute.updateGTMViewItemData(gtmViewItem)\n\n    if (!ScreenDimensions.isTabletLandscapeAndBigger) {\n      Events.$trigger('scroll-to::scroll', {\n        data: {\n          target: body,\n          offset: 0,\n        },\n      })\n    }\n  }\n\n  onChangeHandler(e) {\n    let data = e.target.dataset\n    if (e.target.nodeName === 'SELECT') {\n      data = e.target.options[e.target.selectedIndex].dataset\n    }\n\n    if (!data.url) return\n\n    this.getContent(data.url)\n  }\n\n  onClickHandler(e) {\n    const data = e.target.parentElement.dataset;\n    if (!data.url) return\n\n    this.getContent(data.url)\n  }\n}\n\nexport default ProductAttribute\n","/**\n *  @shelf-version: 1.1.0\n */\n\nimport ProductAttribute from './product-attribute';\n\nexport default ProductAttribute;\n"],"sourceRoot":""}