{"version":3,"sources":["webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/add-to-cart/add-to-cart.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/add-to-cart/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/button-loader/button-loader.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/button-loader/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/errors/remove-alert-message/remove-alert-message.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/errors/remove-alert-message/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/etmc-cart-event/etmc-cart-event.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/etmc-cart-event/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/min-max-value/get-max-value/get-max-value.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/min-max-value/get-max-value/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/product/get-product-options.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/product/get-child-products.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/product/get-quantity-selected.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/product/get-pid-value.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/product/get-add-to-cart-url.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/product/index.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/add-to-cart/add-to-cart.js","webpack:///./cartridges/app_designholding_flos/cartridge/client/default/js/components/add-to-cart/index.js"],"names":["ADDTOCART_TOP_POSITION_NAMESPACE","JS_HOOK_ADD_TO_CART","JS_HOOK_PRODUCT_DETAIL","JS_HOOK_SET_ITEMS","JS_HOOK_BUNDLE_ITEMS_FORM","JS_HOOK_PRODUCT_LINE_ITEM","JS_HOOK_STICKY_BUTTON","JS_HOOK_HEADER","JS_HOOK_ADDED_TO_CART_MODAL","JS_HOOK_GTM_DATA","JS_HOOK_ADD_TO_CART_CONFIRMATION","HEADER_SCROLLUP_CLASS","HIDDEN_CLASS","MODAL_TIMER","AddToCart","constructor","element","product","url","reload","dataset","gtmStringObject","document","querySelector","gtmObj","ga4StringObject","ga4Obj","JSON","parse","productDataString","addToCartUrl","forceReload","pidsObj","buttonLoader","ButtonLoader","addedToCartModal","addToCartPid","pid","addToCartIsASet","set","header","updateButtonTopPosition","bindEvents","checkSetItems","setProductsWrapper","closest","setProducts","querySelectorAll","forEach","push","qty","quantity","triggerSuccessEvents","data","recommendedProduct","recommendedGtmObj","recommendedGa4Obj","index","length","currentRecommendedGtmObj","currentRecommendedGa4Obj","Events","$trigger","ecommerce","etmcCartEvent","cart","items","window","location","modalId","setTimeout","addToCartButtons","button","buttonNextSibling","nextElementSibling","hasAttribute","classList","add","remove","addToCartSuccess","error","hide","apiErrorHandler","removeAlertMessage","addToCartError","errorHandler","addToCart","show","API","post","form","then","response","catch","setVariables","getPidValue","productContainer","updateAddToCartForm","stringify","bundleItems","childProducts","getChildProducts","inputs","handleAddToCart","disabled","handleButtonClick","event","preventDefault","getMaxValue","getQuantitySelected","ScreenDimensions","isTabletLandscapeAndBigger","stickyParentEl","headerHeight","offsetHeight","html","contains","style","transform","removeAttribute","addEventListener","RafThrottle","namespace","fn","SUCCESS_CLASS","SUCCESS_TIMER","shouldAnimate","setAttribute","target","showSucces","focus","JS_HOOK_MESSAGE","JS_HOOK_CONTENT","addAlertMessage","message","hook","type","scroll","selector","status","el","content","innerHTML","variantClass","className","replace","offset","createMessageString","errors","errorHtml","redirectUrl","href","serverErrors","errorMessage","responseJSON","Error","JS_HOOK_CLOSE_BTN","errorEl","closeButton","cartItems","_etmc","userEmail","mid","body","email","formatEtmcCart","map","obj","item","id","toString","price","sales","formatted","unique_id","value","maxValue","callback","parseInt","getProductOptions","options","option","elOption","urlValue","selectedValueId","valueId","optionId","elements","JS_HOOK_QTY_INPUT","getQuantitySelector","quantitySelectorQty","isvisible","offsetWidth","quickViewModal","productSet","innerText","pidValue","JS_HOOK_ADD_TO_CART_CONTAINER","getAddToCartUrl","container","installMediaQueryWatcher","mediaQuery","layoutChangedCallback","mql","matchMedia","addListener","matches","media","MEDIA_QUERIES","reference","breakpoint","screenHeight","height","screenWidth","width","updateWidth","mqObject","innerWidth","innerHeight","ADDTOCART_SECTION","ONORDER_SECTION","ADDTOCART_ELEMENT","ONORDER_ELEMENT","addToCartSection","onOrderSection","addToCartButton","onOrderButton","CTAButton","ATCPosition","getBoundingClientRect","ATCPHeight","screen","bottom"],"mappings":"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","file":"js/AddToCart.js","sourcesContent":["import API from '@utilities/api';\nimport RafThrottle from '@utilities/raf-throttle';\nimport { html } from '@utilities/dom-elements';\nimport ScreenDimensions from '@utilities/screen-dimensions';\nimport apiErrorHandler from '@utilities/errors/api-error-handler';\nimport errorHandler from '@utilities/errors/error-handler';\nimport Events from '@utilities/events';\nimport removeAlertMessage from '@utilities/errors/remove-alert-message';\nimport getMaxValue from '@utilities/min-max-value/get-max-value';\nimport ButtonLoader from '@components/button-loader';\n\nimport {\n  getChildProducts,\n  getPidValue,\n  // getProductOptions,\n  getQuantitySelected,\n} from '@utilities/product';\nimport etmcCartEvent from '@utilities/etmc-cart-event';\n\nconst ADDTOCART_TOP_POSITION_NAMESPACE = 'addToCartTopPosition';\n\nconst JS_HOOK_ADD_TO_CART = '[js-hook-add-to-cart]';\nconst JS_HOOK_PRODUCT_DETAIL = '[js-hook-product-detail]';\nconst JS_HOOK_SET_ITEMS = '[js-hook-set-items]';\n// const JS_HOOK_BUNDLE_ITEM = '[js-hook-bundle-item]';\nconst JS_HOOK_BUNDLE_ITEMS_FORM = '[js-hook-bundle-items-form]';\nconst JS_HOOK_PRODUCT_LINE_ITEM = '[js-hook-product-line-item]';\nconst JS_HOOK_STICKY_BUTTON = '[js-hook-product-detail-sticky-button]';\nconst JS_HOOK_HEADER = '[js-hook-header]';\nconst JS_HOOK_ADDED_TO_CART_MODAL = '[js-hook-added-to-cart-modal]';\nconst JS_HOOK_GTM_DATA = '[js-hook-product-add-to-cart-data]';\n\nconst JS_HOOK_ADD_TO_CART_CONFIRMATION = 'js-hook-add-to-cart-confirmation';\n\nconst HEADER_SCROLLUP_CLASS = 'header--is-scrolled-up';\nconst HIDDEN_CLASS = 'u-hidden';\n\nconst MODAL_TIMER = 1000;\n\nclass AddToCart {\n  constructor(element) {\n    this.element = element;\n    const { product, url, reload } = this.element.dataset || {};\n\n    const gtmStringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.gtmObj;\n    const ga4StringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.ga4Obj;\n    this.gtmObj = gtmStringObject === '' ? false : JSON.parse(gtmStringObject);\n    this.ga4Obj = ga4StringObject === '' ? false : JSON.parse(ga4StringObject);\n\n    this.productDataString = product || '';\n    this.addToCartUrl = url || '';\n    this.forceReload = reload || false;\n    this.pidsObj = null;\n    this.buttonLoader = new ButtonLoader(this.element);\n    this.addedToCartModal = document.querySelector(JS_HOOK_ADDED_TO_CART_MODAL);\n    this.addToCartPid = this.element.dataset.pid;\n\n    this.addToCartIsASet = this.element.dataset.set;\n\n    this.header = document.querySelector(JS_HOOK_HEADER);\n\n    this.updateButtonTopPosition();\n    this.bindEvents();\n  }\n\n  /**\n   * Checks whether add-to-cart happens on a Set Product(Detail).\n   * If true; adds all the product ids to the pids object\n   */\n  checkSetItems() {\n    this.pidsObj = [];\n\n    if (this.addToCartIsASet) {\n      const setProductsWrapper = this.element.closest(JS_HOOK_SET_ITEMS);\n      const setProducts = [...setProductsWrapper.querySelectorAll(JS_HOOK_PRODUCT_LINE_ITEM)];\n\n      setProducts.forEach((product) => {\n        this.pidsObj.push({\n          pid: product.dataset.pid,\n          qty: product.dataset.quantity,\n        });\n      });\n    }\n\n    // Old code for set PDP\n    // Might need it later\n\n    // if (\n    //   document.querySelector(JS_HOOK_SET_ITEMS) &&\n    //   this.element.getAttribute('data-global') === true\n    // ) {\n    //   [...document.querySelectorAll(JS_HOOK_PRODUCT_DETAIL)].forEach(detail => {\n    //     const id = detail.querySelector('[js-hook-product-id]');\n    //     const quantitySelect = detail.querySelector('[js-hook-quantity-select]');\n    //\n    //     if (\n    //       detail.dataset &&\n    //       detail.hasAttribute('js-hook-product-set-detail') &&\n    //       id &&\n    //       quantitySelect\n    //     ) {\n    //       this.pidsObj.push({\n    //         pid: id.innerText,\n    //         qty: quantitySelect.value,\n    //         options: getProductOptions(detail)\n    //       });\n    //     }\n    //   });\n    // }\n  }\n\n  /**\n   * Updates the minicart quantity value after the customer has pressed the \"Add to Cart\" button\n   * @param {String} data - ajax response from clicking the add to cart button\n   */\n  triggerSuccessEvents(data) {\n    if (this.element.dataset.recommendedProduct) {\n      // gtm event add_to_cart/add_to_cart_ga when add recommended product\n      let recommendedGtmObj = this.element.dataset.gtmObj ? this.element.dataset.gtmObj : false;\n      let recommendedGa4Obj = this.element.dataset.ga4Obj ? this.element.dataset.ga4Obj : false;\n\n      if (recommendedGtmObj && recommendedGa4Obj) {\n        recommendedGtmObj = JSON.parse(recommendedGtmObj);\n        recommendedGa4Obj = JSON.parse(recommendedGa4Obj);\n\n        for (let index = 0; index < recommendedGtmObj.length; index++) {\n          const currentRecommendedGtmObj = recommendedGtmObj[index];\n          const currentRecommendedGa4Obj = recommendedGa4Obj[index];\n\n          Events.$trigger('gtm::push', { data: currentRecommendedGtmObj });\n          Events.$trigger('gtm::push', { data: { ecommerce: null } });\n          Events.$trigger('gtm::push', { data: currentRecommendedGa4Obj });\n        }\n      }\n\n    } else {\n      // default adding to cart\n      const gtmStringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.gtmObj;\n      const ga4StringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.ga4Obj;\n\n      this.gtmObj = gtmStringObject === '' ? false : JSON.parse(gtmStringObject);\n      this.ga4Obj = ga4StringObject === '' ? false : JSON.parse(ga4StringObject);\n\n      Events.$trigger('gtm::push', { data: this.gtmObj });\n      Events.$trigger('gtm::push', { data: { ecommerce: null } });\n      Events.$trigger('gtm::push', { data: this.ga4Obj });\n    }\n\n    etmcCartEvent(data.cart.items);\n\n    if (this.forceReload) {\n      window.location.reload();\n      return;\n    }\n\n    if (this.addedToCartModal) {\n      const modalId = `recommendation-modal-${this.pid}`;\n\n      setTimeout(() => {\n        Events.$trigger(`modal[${modalId}]::open`);\n      }, MODAL_TIMER);\n    }\n\n    if (this.addToCartIsASet) {\n      const addToCartButtons = [...document.querySelectorAll(JS_HOOK_ADD_TO_CART)];\n\n      addToCartButtons.forEach((button) => {\n        const buttonNextSibling = button.nextElementSibling;\n\n        if (buttonNextSibling?.hasAttribute(JS_HOOK_ADD_TO_CART_CONFIRMATION)) {\n          button.classList.add(HIDDEN_CLASS);\n          buttonNextSibling.classList.remove(HIDDEN_CLASS);\n        }\n      });\n    }\n\n    Events.$trigger('minicart::update', { data });\n  }\n\n  /**\n   * Succes handler of Axios response\n   *\n   * @param {Object} data - Axios response\n   * @return {undefined}\n   */\n  addToCartSuccess(data) {\n    if (data.error) {\n      this.buttonLoader.hide();\n      apiErrorHandler(data);\n    } else {\n      this.buttonLoader.hide(true);\n      removeAlertMessage();\n      this.triggerSuccessEvents(data);\n    }\n  }\n\n  /**\n   * Process API error for addToCart\n   *\n   * @param {Object|string} error\n   */\n  addToCartError(error) {\n    this.buttonLoader.hide();\n    errorHandler(error);\n  }\n\n  addToCart() {\n    this.buttonLoader.show();\n\n    API.post(this.addToCartUrl, this.form)\n      .then((response) => this.addToCartSuccess(response.data))\n      .catch((error) => this.addToCartError(error));\n  }\n\n  /**\n   * Set variables on class scope for later use\n   */\n  setVariables() {\n    if (this.addToCartPid) {\n      this.pid = getPidValue(this.element);\n    }\n    this.productContainer = this.element.closest(JS_HOOK_PRODUCT_DETAIL);\n  }\n\n  /**\n   * Prepare add to cart form for api serialization\n   */\n  updateAddToCartForm(quantity) {\n    this.form = {\n      pid: this.pid,\n      pidsObj: this.pidsObj.length > 0 ? JSON.stringify(this.pidsObj) : null,\n      quantity,\n    };\n\n    const bundleItems = document.querySelector(JS_HOOK_BUNDLE_ITEMS_FORM);\n    if (bundleItems) {\n      this.form.childProducts = getChildProducts(this.inputs);\n    }\n\n    // Not sure what this is suppose to do, doesn't seem to be used.\n\n    // if (!document.querySelector(JS_HOOK_BUNDLE_ITEM)) {\n    //   this.form.options = getProductOptions(this.productContainer);\n    // }\n  }\n\n  /**\n   * Function to handle quantity from event\n   *\n   * @param {Number} quantity - quantity amount\n   */\n  handleAddToCart(quantity) {\n    if (this.element.disabled) return;\n    this.checkSetItems();\n    this.setVariables();\n    this.updateAddToCartForm(quantity);\n\n    if (this.addToCartUrl) {\n      this.addToCart();\n    }\n  }\n\n  /**\n   * Event handler for add to cart button\n   *\n   * @param {Object} event - the event object\n   */\n  handleButtonClick(event) {\n    event.preventDefault();\n    let quantity = null;\n\n    if (this.addToCartPid) {\n      quantity = getMaxValue(getQuantitySelected(this.element));\n    }\n\n    this.handleAddToCart(quantity);\n  }\n\n  // depending on header postiion > reposition add to cart\n  updateButtonTopPosition() {\n    if (ScreenDimensions.isTabletLandscapeAndBigger) return;\n\n    const stickyParentEl = this.element.closest(JS_HOOK_STICKY_BUTTON);\n    const headerHeight = this.header.offsetHeight;\n\n    if (!stickyParentEl) return;\n\n    if (html.classList.contains(HEADER_SCROLLUP_CLASS)) {\n      stickyParentEl.style.transform = `translate3d(0,${headerHeight}px,0)`;\n    } else {\n      stickyParentEl.removeAttribute('style');\n    }\n  }\n\n  /**\n   * Bind all events\n   */\n  bindEvents() {\n    this.element.addEventListener('click', (event) => this.handleButtonClick(event));\n\n    RafThrottle.set([\n      {\n        element: window,\n        event: 'scroll',\n        namespace: ADDTOCART_TOP_POSITION_NAMESPACE,\n        fn: () => this.updateButtonTopPosition(),\n      },\n    ]);\n  }\n}\n\nexport default AddToCart;\n","\nimport AddToCart from './add-to-cart';\n\nexport default AddToCart;\n","import Events from '@utilities/events';\n\nconst SUCCESS_CLASS = 'is--success';\nconst SUCCESS_TIMER = 3000;\n\nclass ButtonLoader {\n  constructor(element, shouldAnimate = true) {\n    this.element = element;\n    this.shouldAnimate = shouldAnimate;\n  }\n\n  /**\n   * Shows the loader\n   */\n  show() {\n    if (!this.element) return;\n    this.element.classList.add('disabled');\n    this.element.classList.remove(SUCCESS_CLASS);\n    this.element.setAttribute('disabled', 'disabled');\n    this.element.setAttribute('tabindex', '-1');\n    if (this.shouldAnimate) Events.$trigger('loader::show', { data: { target: this.element } });\n  }\n\n  /**\n   * Hides the loader\n   */\n  hide(showSucces = false) {\n    if (!this.element) return;\n    if (this.shouldAnimate) Events.$trigger('loader::hide');\n    this.element.classList.remove('disabled');\n    this.element.removeAttribute('disabled');\n    this.element.removeAttribute('tabindex');\n    if (this.shouldAnimate) this.element.focus();\n\n    if (showSucces) {\n      this.element.classList.add(SUCCESS_CLASS);\n      setTimeout(() => {\n        this.element.classList.remove(SUCCESS_CLASS);\n      }, SUCCESS_TIMER);\n    }\n  }\n}\n\nexport default ButtonLoader;\n","import ButtonLoader from './button-loader'\n\nexport default ButtonLoader\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","const JS_HOOK_MESSAGE = '[js-hook-message]'\nconst JS_HOOK_CLOSE_BTN = '[js-hook-alert-close]'\n\nconst removeAlertMessage = function (hook) {\n  const selector = hook || JS_HOOK_MESSAGE\n  const errorEl = document.querySelector(selector)\n  if (!errorEl) return\n  errorEl.classList.add('u-hidden')\n  errorEl.setAttribute('aria-hidden', true)\n\n  const closeButton = errorEl.querySelector(JS_HOOK_CLOSE_BTN)\n  if (closeButton) {\n    closeButton.setAttribute('tabindex', -1)\n  }\n}\nexport default removeAlertMessage\n","import removeAlertMessage from './remove-alert-message'\n\nexport default removeAlertMessage\n","import { body } from '@utilities/dom-elements'\n\nexport default function etmcCartEvent(cartItems) {\n  if (window._etmc) {\n    const { userEmail, mid } = body.dataset\n\n    if (mid) window._etmc.push(['setOrgId', mid])\n    if (userEmail !== 'null') window._etmc.push(['setUserInfo', { email: userEmail }])\n    window._etmc.push(['trackCart', { cart: cartItems.length ? formatEtmcCart(cartItems) : [] }])\n  }\n}\n\nfunction formatEtmcCart(items) {\n  return items.map((obj) => ({\n    item: obj.id,\n    quantity: obj.quantity.toString(),\n    price: obj.price.sales.formatted,\n    unique_id: obj.id,\n  }))\n}\n","import etmcCartEvent from './etmc-cart-event';\n\nexport default etmcCartEvent;\n","/**\n * validate against a maximum value.\n * return original or maximum value if original is > max value\n *\n * @param {string|number} value - inserted value to compare\n * @param {string|number} maxValue - maximum value to compare against\n * @param {Function} callback - Callback for maxFunction statement\n * @returns {number} the quantity value\n */\nconst getMaxValue = function (value, maxValue, callback) {\n  if (parseInt(value, 10) > parseInt(maxValue, 10)) {\n    // Make sure the callback is a function\n    if (typeof callback === \"function\") {\n      // Execute the callback function\n      callback();\n    }\n    return maxValue;\n  }\n  return value;\n};\n\nexport default getMaxValue;\n","\nimport getMaxValue from './get-max-value';\n\nexport default getMaxValue;\n","/**\n * Retrieve product options\n *\n * @param {HTMLElement} productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nconst getProductOptions = function(productContainer) {\n  if (!productContainer) return [];\n  const options = [...productContainer.querySelectorAll('[js-hook-product-option]')].map(option => {\n    const elOption = option.querySelector('.options-select');\n    const urlValue = elOption.value;\n    const selectedValueId = elOption.querySelector(`option[value=\"${urlValue}]`).dataset.valueId;\n\n    return {\n      optionId: option.dataset.optionId,\n      selectedValueId\n    };\n  });\n\n  return options.length ? JSON.stringify(options) : [];\n};\n\nexport default getProductOptions;\n","/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nconst getChildProducts = function (elements, stringify = true) {\n    const childProducts = [];\n    [...elements].forEach((item) => {\n        const { pid, quantity } = item.dataset;\n\n        childProducts.push({\n            pid,\n            quantity,\n        });\n    });\n\n    if(stringify) return childProducts.length ? JSON.stringify(childProducts) : [];\n\n    return childProducts.length ? childProducts : [];\n};\n\nexport default getChildProducts;\n","const JS_HOOK_QTY_INPUT = '[js-hook-quantity-input]';\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nconst getQuantitySelector = function (el) {\n  return el && document.querySelector('[js-hook-set-items]') ?\n    el.closest('[js-hook-product-detail]')?.querySelector(JS_HOOK_QTY_INPUT) :\n    document.querySelector(JS_HOOK_QTY_INPUT);\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {HTMLElement} el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nconst getQuantitySelected = function (el) {\n  const { quantity } = el.dataset;\n  const quantitySelectorQty = getQuantitySelector(el) ? getQuantitySelector(el).value : 1;\n  return quantity || quantitySelectorQty;\n};\n\n\nexport default getQuantitySelected;\n","function isvisible(obj) {\n  return obj.offsetWidth > 0 && obj.offsetHeight > 0;\n}\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nconst getPidValue = function (el) {\n\n  let pid;\n  const quickViewModal = document.querySelector('#quickViewModal');\n  const productSet = document.querySelector('.product-set');\n\n  if (quickViewModal && isvisible(quickViewModal) && !productSet) {\n    pid = el.closest('.modal-content').querySelector('.product-quickview').dataset.id;\n  } else if (document.querySelector('.product-set-detail') || productSet) {\n    pid = el.closest('.product-detail').querySelector('.product-id').innerText;\n  } else if (el.dataset.pid) {\n    const { pid: pidValue } = el.dataset\n    pid = pidValue\n  } else {\n    pid = document.querySelector('.product-detail:not(.bundle-item)').dataset.id;\n  }\n\n  return pid;\n};\n\n\nexport default getPidValue;\n","/**\n * Retrieves url to use when adding a product to the cart\n *\n * @params {HTMLElement} element -Html element of add to cart button\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nconst JS_HOOK_ADD_TO_CART_CONTAINER = '[js-hook-add-to-cart-container]';\nconst getAddToCartUrl = function(element) {\n  const container = element.closest(JS_HOOK_ADD_TO_CART_CONTAINER);\n  return container\n    ? container.querySelector('.add-to-cart-url').value\n    : document.querySelector('.add-to-cart-url').value;\n};\n\nexport default getAddToCartUrl;\n","import getProductOptions from './get-product-options';\nimport getChildProducts from './get-child-products';\nimport getQuantitySelected from './get-quantity-selected';\nimport getPidValue from './get-pid-value';\nimport getAddToCartUrl from './get-add-to-cart-url';\n\n/* eslint-disable  import/prefer-default-export */\nexport {\n  getProductOptions,\n  getChildProducts,\n  getQuantitySelected,\n  getPidValue,\n  getAddToCartUrl,\n}\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 RafThrottle from '@utilities/raf-throttle';\nimport { html } from '@utilities/dom-elements';\nimport ScreenDimensions from '@utilities/screen-dimensions';\nimport apiErrorHandler from '@utilities/errors/api-error-handler';\nimport errorHandler from '@utilities/errors/error-handler';\nimport Events from '@utilities/events';\nimport removeAlertMessage from '@utilities/errors/remove-alert-message';\nimport getMaxValue from '@utilities/min-max-value/get-max-value';\nimport ButtonLoader from '@components/button-loader';\n\nimport {\n  getChildProducts,\n  getPidValue,\n  // getProductOptions,\n  getQuantitySelected,\n} from '@utilities/product';\nimport etmcCartEvent from '@utilities/etmc-cart-event';\n\nconst ADDTOCART_TOP_POSITION_NAMESPACE = 'addToCartTopPosition';\n\nconst ADDTOCART_SECTION = '.fl-addtocart-section';\nconst ONORDER_SECTION = '.fl-onorder-section';\n\nconst ADDTOCART_ELEMENT = '.fl-content-add-to-cart';\nconst ONORDER_ELEMENT = '.fl-content-on-order';\n\nconst JS_HOOK_ADD_TO_CART = '[js-hook-add-to-cart]';\nconst JS_HOOK_PRODUCT_DETAIL = '[js-hook-product-detail]';\nconst JS_HOOK_SET_ITEMS = '[js-hook-set-items]';\n// const JS_HOOK_BUNDLE_ITEM = '[js-hook-bundle-item]';\nconst JS_HOOK_BUNDLE_ITEMS_FORM = '[js-hook-bundle-items-form]';\nconst JS_HOOK_PRODUCT_LINE_ITEM = '[js-hook-product-line-item]';\nconst JS_HOOK_STICKY_BUTTON = '[js-hook-product-detail-sticky-button]';\nconst JS_HOOK_HEADER = '[js-hook-header]';\nconst JS_HOOK_ADDED_TO_CART_MODAL = '[js-hook-added-to-cart-modal]';\nconst JS_HOOK_GTM_DATA = '[js-hook-product-add-to-cart-data]';\n\nconst JS_HOOK_ADD_TO_CART_CONFIRMATION = 'js-hook-add-to-cart-confirmation';\n\nconst HEADER_SCROLLUP_CLASS = 'header--is-scrolled-up';\nconst HIDDEN_CLASS = 'u-hidden';\n\nconst MODAL_TIMER = 1000;\n\nclass AddToCart {\n  constructor(element) {\n    this.element = element;\n    const { product, url, reload } = this.element.dataset || {};\n\n    const gtmStringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.gtmObj;\n    const ga4StringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.ga4Obj;\n    this.gtmObj = gtmStringObject === '' ? false : JSON.parse(gtmStringObject);\n    this.ga4Obj = ga4StringObject === '' ? false : JSON.parse(ga4StringObject);\n\n    this.productDataString = product || '';\n    this.addToCartUrl = url || '';\n    this.forceReload = reload || false;\n    this.pidsObj = null;\n    this.buttonLoader = new ButtonLoader(this.element);\n    this.addedToCartModal = document.querySelector(JS_HOOK_ADDED_TO_CART_MODAL);\n    this.addToCartPid = this.element.dataset.pid;\n\n    this.addToCartIsASet = this.element.dataset.set;\n\n    this.header = document.querySelector(JS_HOOK_HEADER);\n\n    this.updateButtonTopPosition();\n    this.bindEvents();\n  }\n\n  /**\n   * Checks whether add-to-cart happens on a Set Product(Detail).\n   * If true; adds all the product ids to the pids object\n   */\n  checkSetItems() {\n    this.pidsObj = [];\n\n    if (this.addToCartIsASet) {\n      const setProductsWrapper = this.element.closest(JS_HOOK_SET_ITEMS);\n      const setProducts = [...setProductsWrapper.querySelectorAll(JS_HOOK_PRODUCT_LINE_ITEM)];\n\n      setProducts.forEach((product) => {\n        this.pidsObj.push({\n          pid: product.dataset.pid,\n          qty: product.dataset.quantity,\n        });\n      });\n    }\n  }\n\n  /**\n   * Updates the minicart quantity value after the customer has pressed the \"Add to Cart\" button\n   * @param {String} data - ajax response from clicking the add to cart button\n   */\n  triggerSuccessEvents(data) {\n    if (this.element.dataset.recommendedProduct) {\n      // gtm event add_to_cart/add_to_cart_ga when add recommended product\n      let recommendedGtmObj = this.element.dataset.gtmObj ? this.element.dataset.gtmObj : false;\n      let recommendedGa4Obj = this.element.dataset.ga4Obj ? this.element.dataset.ga4Obj : false;\n\n      if (recommendedGtmObj && recommendedGa4Obj) {\n        recommendedGtmObj = JSON.parse(recommendedGtmObj);\n        recommendedGa4Obj = JSON.parse(recommendedGa4Obj);\n\n        for (let index = 0; index < recommendedGtmObj.length; index++) {\n          const currentRecommendedGtmObj = recommendedGtmObj[index];\n          const currentRecommendedGa4Obj = recommendedGa4Obj[index];\n\n          Events.$trigger('gtm::push', { data: currentRecommendedGtmObj });\n          Events.$trigger('gtm::push', { data: { ecommerce: null } });\n          Events.$trigger('gtm::push', { data: currentRecommendedGa4Obj });\n        }\n      }\n\n    } else {\n      // default adding to cart\n      const gtmStringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.gtmObj;\n      const ga4StringObject = document.querySelector(JS_HOOK_GTM_DATA).dataset.ga4Obj;\n\n      this.gtmObj = gtmStringObject === '' ? false : JSON.parse(gtmStringObject);\n      this.ga4Obj = ga4StringObject === '' ? false : JSON.parse(ga4StringObject);\n\n      Events.$trigger('gtm::push', { data: this.gtmObj });\n      Events.$trigger('gtm::push', { data: { ecommerce: null } });\n      Events.$trigger('gtm::push', { data: this.ga4Obj });\n    }\n\n    etmcCartEvent(data.cart.items);\n\n    if (this.forceReload) {\n      window.location.reload();\n      return;\n    }\n\n    if (this.addedToCartModal) {\n      const modalId = `recommendation-modal-${this.pid}`;\n\n      setTimeout(() => {\n        Events.$trigger(`modal[${modalId}]::open`);\n      }, MODAL_TIMER);\n    }\n\n    if (this.addToCartIsASet) {\n      const addToCartButtons = [...document.querySelectorAll(JS_HOOK_ADD_TO_CART)];\n\n      addToCartButtons.forEach((button) => {\n        const buttonNextSibling = button.nextElementSibling;\n\n        if (buttonNextSibling?.hasAttribute(JS_HOOK_ADD_TO_CART_CONFIRMATION)) {\n          button.classList.add(HIDDEN_CLASS);\n          buttonNextSibling.classList.remove(HIDDEN_CLASS);\n        }\n      });\n    }\n\n    Events.$trigger('minicart::update', { data });\n  }\n\n  /**\n   * Succes handler of Axios response\n   *\n   * @param {Object} data - Axios response\n   * @return {undefined}\n   */\n  addToCartSuccess(data) {\n    if (data.error) {\n      this.buttonLoader.hide();\n      apiErrorHandler(data);\n    } else {\n      this.buttonLoader.hide(true);\n      removeAlertMessage();\n      this.triggerSuccessEvents(data);\n    }\n  }\n\n  /**\n   * Process API error for addToCart\n   *\n   * @param {Object|string} error\n   */\n  addToCartError(error) {\n    this.buttonLoader.hide();\n    errorHandler(error);\n  }\n\n  addToCart() {\n    this.buttonLoader.show();\n\n    API.post(this.addToCartUrl, this.form)\n      .then((response) => this.addToCartSuccess(response.data))\n      .catch((error) => this.addToCartError(error));\n  }\n\n  /**\n   * Set variables on class scope for later use\n   */\n  setVariables() {\n    if (this.addToCartPid) {\n      this.pid = getPidValue(this.element);\n    }\n    this.productContainer = this.element.closest(JS_HOOK_PRODUCT_DETAIL);\n  }\n\n  /**\n   * Prepare add to cart form for api serialization\n   */\n  updateAddToCartForm(quantity) {\n    this.form = {\n      pid: this.pid,\n      pidsObj: this.pidsObj.length > 0 ? JSON.stringify(this.pidsObj) : null,\n      quantity,\n    };\n\n    const bundleItems = document.querySelector(JS_HOOK_BUNDLE_ITEMS_FORM);\n    if (bundleItems) {\n      this.form.childProducts = getChildProducts(this.inputs);\n    }\n  }\n\n  /**\n   * Function to handle quantity from event\n   *\n   * @param {Number} quantity - quantity amount\n   */\n  handleAddToCart(quantity) {\n    if (this.element.disabled) return;\n    this.checkSetItems();\n    this.setVariables();\n    this.updateAddToCartForm(quantity);\n\n    if (this.addToCartUrl) {\n      this.addToCart();\n    }\n  }\n\n  /**\n   * Event handler for add to cart button\n   *\n   * @param {Object} event - the event object\n   */\n  handleButtonClick(event) {\n    event.preventDefault();\n    let quantity = null;\n\n    if (this.addToCartPid) {\n      quantity = getMaxValue(getQuantitySelected(this.element));\n    }\n\n    this.handleAddToCart(quantity);\n  }\n\n  // depending on header postiion > reposition add to cart\n  updateButtonTopPosition() {\n    if (ScreenDimensions.isTabletLandscapeAndBigger) return;\n\n    const stickyParentEl = this.element.closest(JS_HOOK_STICKY_BUTTON);\n    const headerHeight = this.header.offsetHeight;\n\n    const addToCartSection = document.querySelector(ADDTOCART_SECTION);\n    const onOrderSection = document.querySelector(ONORDER_SECTION);\n\n    const addToCartButton = document.querySelector(ADDTOCART_ELEMENT).querySelector('button');\n    const onOrderButton = document.querySelector(ONORDER_ELEMENT).querySelector('button');\n\n    let CTAButton = addToCartSection.classList.contains('d-none') && !onOrderSection.classList.contains('d-none') ? onOrderButton : addToCartButton;\n    if (!CTAButton) CTAButton = addToCartButton;\n\n    const ATCPosition = CTAButton.getBoundingClientRect();\n    const ATCPHeight = CTAButton.offsetHeight / 2;\n    const screenHeight = window.screen.height;\n    \n    if (!stickyParentEl) return;\n\n    if (CTAButton) {\n      if (html.classList.contains(HEADER_SCROLLUP_CLASS)) {\n        if (ATCPosition.bottom > screenHeight || ATCPosition.bottom < headerHeight + ATCPHeight) {\n          stickyParentEl.removeAttribute('style');\n        } else {\n          stickyParentEl.style.transform = `translate3d(0,${headerHeight}px,0)`;\n        }\n      } else {\n        // eslint-disable-next-line no-lonely-if\n        if (ATCPosition.bottom > screenHeight || ATCPosition.bottom < ATCPHeight) {\n          stickyParentEl.removeAttribute('style');\n        } else {\n          stickyParentEl.style.transform = `translate3d(0,${headerHeight}px,0)`;\n        }\n      }\n    }\n  }\n\n  /**\n   * Bind all events\n   */\n  bindEvents() {\n    this.element.addEventListener('click', (event) => this.handleButtonClick(event));\n\n    RafThrottle.set([\n      {\n        element: window,\n        event: 'scroll',\n        namespace: ADDTOCART_TOP_POSITION_NAMESPACE,\n        fn: () => this.updateButtonTopPosition(),\n      },\n    ]);\n  }\n}\n\nexport default AddToCart;\n","\nimport AddToCart from './add-to-cart';\n\nexport default AddToCart;\n"],"sourceRoot":""}