{"version":3,"sources":["webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/store-locator/store-locator-map.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/dom-utils/create-element-from-string/create-element-from-string.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/dom-utils/create-element-from-string/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/cartridge/client/default/js/utilities/store/store/actions.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/store/store/mutations.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/store/store/state.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/store/index.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/store/lib/component.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/utilities/store/store/store.js"],"names":["STORE_ACCORDION_ITEM_HIDDEN","HIDDEN_CLASS","DETAIL_ID_PREFIX","STORE_SELECT_ZOOM_LEVEL","MOBILE_ZOOM_LEVEL","MARKER_ZINDEX_DEFAULT","MARKER_ZINDEX_ACTIVE","MARKER_ZINDEX_MOUSEOVER","JS_HOOK_MAP","JS_HOOK_SELECT_STORE_BUTTON","JS_HOOK_CALL_STORE_BUTTON","JS_HOOK_MAP_SELECTED_STORE","JS_HOOK_MAP_SELECTED_STORE_INFO","JS_HOOK_MAP_SELECTED_STORE_MODAL_CONTENT","JS_HOOK_MAP_SELECTED_STORE_MODAL","JS_HOOK_STORE_ITEM","STORE_LOCATOR_ITEM_ACTIVE","JS_HOOK_SELECTED_ITEM_ACTIVE","JS_HOOK_MAP_TAB","JS_HOOK_SHOW_MORE_STORES","JS_HOOK_RESET_BOUNDS","JS_HOOK_STORE_LOCATOR_FORM","StoreLocatorMap","Component","constructor","element","store","googleMapLoaded","dataset","mapStylingId","lat","lng","data","markers","markerSize","ScreenDimensions","isTabletLandscapeAndBigger","markerSizeSm","markerIcon","markerIconHover","markerExperienceIcon","markerExperienceIconHover","markerIconFlagship","markerIconFlagshipHover","markerIconShowroom","markerIconShowroomHover","markerIconMonobrand","markerIconMonobrandHover","markerIconDesign","markerIconDesignHover","clustererIcon","map","document","querySelector","storeItems","querySelectorAll","selectedModal","selectedModalContent","mapTab","showMoreStores","selectedStoreWrapper","selectedModalState","html","yDown","ui","selectedStoreInfo","selectStoreButton","callStoreButton","resetBounds","mapOptions","zoom","bindEvents","hideSwipeElement","prepareSelectedStoreHtml","el","createElementFromString","fragment","createDocumentFragment","header","createElement","classList","add","elements","forEach","node","appendChild","hoursElement","id","onWindowResize","google","maps","event","trigger","GoogleMaps","utilities","centerMap","getCenter","isReady","state","mapsApiReady","getTouch","e","changedTouches","isStoreType","item","type","result","JSON","stringify","toLowerCase","includes","zoomMap","zoomLevel","setZoom","DetectTouch","touch","style","display","setItemListActive","activeElement","elementIsHidden","contains","remove","click","ScrollTo","scrollTo","showSelectedItemModal","innerHTML","addEventListener","selectStore","Events","$on","_","onAccordionOpen","onStoreClick","firstTouch","detectTouch","clientY","itemModalSwipe","offset","yUp","yDiff","yDiffAbs","Math","abs","max","modalSwipeAnimation","direction","transform","marker","setActiveMarker","setSelectedStore","position","thisForm","setAttribute","setTimeout","onSearchHandler","$trigger","selectedStore","markerId","stores","replace","find","ID","href","phone","createMap","getMapOptions","addListenerOnce","addDomListener","window","initMarkers","clearMarkers","setMarkers","setMapBounds","location","LatLng","value","Object","keys","length","fitBoundsToVisibleMarkers","storeItem","addMarkerToMap","addMarkers","getMarkerOptions","isFlagship","storeType","isFlagshipStore","isMonoBrand","isShowroom","isDesignSpace","iconURL","latitude","longitude","title","name","url","isExperienceStore","icon","scaledSize","Size","getMarker","currentMarker","isActive","handleMarkerMouseout","setZIndex","setIcon","scaledMarkerSizeSm","handleMarkerClick","handleMarkerMouseover","options","createMarker","addListener","clusterer","initMap","scaledMarkerSize","stateChanged","prevState","str","div","res","children","installMediaQueryWatcher","mediaQuery","layoutChangedCallback","mql","matchMedia","matches","media","MEDIA_QUERIES","reference","breakpoint","screenHeight","height","screenWidth","width","RafThrottle","set","namespace","fn","updateWidth","mqObject","index","innerWidth","innerHeight","setSearchParam","context","payload","commit","setStores","setApi","setLocation","setSyncedInputValues","searchParam","syncedInputValues","Store","actions","mutations","initialState","props","watch","watchCollection","subscribe","prop","callback","newState","previousPropState","newPropState","Array","isArray","undefined","params","status","callbacks","self","Proxy","key","processCallbacks","console","warn","String","dispatch","actionKey","error","dispatchWithPromise","Promise","resolve","reject","Error","_state","_prevState","filter","cb","then","catch","mutationKey","assign","push"],"mappings":"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","file":"js/StoreLocatorMap.js","sourcesContent":["/* global google */\nimport GoogleMaps from '@utilities/google-maps'\nimport Events from '@utilities/events'\nimport createElementFromString from '@utilities/dom-utils/create-element-from-string'\nimport ScreenDimensions from '@utilities/screen-dimensions'\nimport Component from '@utilities/store/lib/component'\nimport store from '@utilities/store'\nimport DetectTouch from '@utilities/detect-touch'\nimport ScrollTo from '@utilities/scroll-to'\n\nconst STORE_ACCORDION_ITEM_HIDDEN = 'store__accordion-item--hidden'\nconst HIDDEN_CLASS = 'u-hidden'\nconst DETAIL_ID_PREFIX = 'store-details-'\nconst STORE_SELECT_ZOOM_LEVEL = 14\nconst MOBILE_ZOOM_LEVEL = 10;\nconst MARKER_ZINDEX_DEFAULT = 0\nconst MARKER_ZINDEX_ACTIVE = 100\nconst MARKER_ZINDEX_MOUSEOVER = 150\nconst JS_HOOK_MAP = '[js-hook-store-locator-map]'\nconst JS_HOOK_SELECT_STORE_BUTTON = '[js-hook-select-store]'\nconst JS_HOOK_CALL_STORE_BUTTON = '[js-hook-call-store]'\nconst JS_HOOK_MAP_SELECTED_STORE = '[js-hook-map-selected-store]'\nconst JS_HOOK_MAP_SELECTED_STORE_INFO = '[js-hook-map-selected-store-info]'\nconst JS_HOOK_MAP_SELECTED_STORE_MODAL_CONTENT = '[js-hook-map-selected-modal-content]'\nconst JS_HOOK_MAP_SELECTED_STORE_MODAL = '[js-hook-map-selected-modal]'\nconst JS_HOOK_STORE_ITEM = '[js-hook-store-item]'\nconst STORE_LOCATOR_ITEM_ACTIVE = 'store-locator__item--active'\nconst JS_HOOK_SELECTED_ITEM_ACTIVE = 'store-locator__selected-content--active'\nconst JS_HOOK_MAP_TAB = '[js-hook-storelocator-map]'\nconst JS_HOOK_SHOW_MORE_STORES = '[js-hook-show-more-stores]'\nconst JS_HOOK_RESET_BOUNDS = '[js-hook-store-locator-reset-bounds-input]'\nconst JS_HOOK_STORE_LOCATOR_FORM = '[js-hook-store-locator-form]'\n\nclass StoreLocatorMap extends Component {\n  constructor(element) {\n    super({\n      store,\n      element,\n    })\n\n    this.googleMapLoaded = false\n\n    const { mapStylingId, lat, lng, ...data } = this.element.dataset || {}\n\n    // Markers\n    this.markers = []\n    this.markerSize = ScreenDimensions.isTabletLandscapeAndBigger ? [30, 38] : [21, 27]\n    this.markerSizeSm = [21, 27]\n    this.markerIcon = data.markerIcon\n    this.markerIconHover = data.markerIconHover\n    this.markerExperienceIcon = data.markerExperienceIcon\n    this.markerExperienceIconHover = data.markerExperienceIconHover\n    this.markerIconFlagship = data.markerIconFlagship\n    this.markerIconFlagshipHover = data.markerIconFlagshipHover\n    this.markerIconShowroom = data.markerIconShowroom\n    this.markerIconShowroomHover = data.markerIconShowroomHover\n    this.markerIconMonobrand = data.markerIconMonobrand\n    this.markerIconMonobrandHover = data.markerIconMonobrandHover\n    this.markerIconDesign = data.markerIconDesign\n    this.markerIconDesignHover = data.markerIconDesignHover\n    this.clustererIcon = data.clustererIcon\n\n    this.map = document.querySelector(JS_HOOK_MAP)\n    this.storeItems = [...document.querySelectorAll(JS_HOOK_STORE_ITEM)]\n    this.selectedModal = document.querySelector(JS_HOOK_MAP_SELECTED_STORE_MODAL)\n    this.selectedModalContent = document.querySelector(JS_HOOK_MAP_SELECTED_STORE_MODAL_CONTENT)\n    this.mapTab = document.querySelector(JS_HOOK_MAP_TAB)\n    this.showMoreStores = document.querySelector(JS_HOOK_SHOW_MORE_STORES)\n    const selectedStoreWrapper = document.querySelector(JS_HOOK_MAP_SELECTED_STORE)\n\n    this.selectedModalState = 0\n    this.html = document.querySelector(\"html\")\n\n    this.yDown = null\n\n    this.ui = {\n      selectedStoreWrapper,\n      selectedStoreInfo:\n        selectedStoreWrapper?.querySelector(JS_HOOK_MAP_SELECTED_STORE_INFO) || false,\n      selectStoreButton: selectedStoreWrapper?.querySelector(JS_HOOK_SELECT_STORE_BUTTON) || false,\n      callStoreButton: selectedStoreWrapper?.querySelector(JS_HOOK_CALL_STORE_BUTTON) || false,\n      resetBounds: document.querySelector(JS_HOOK_RESET_BOUNDS) || false\n    }\n\n    // Location\n    this.mapOptions = {\n      mapStylingId,\n      zoom: 7,\n      lat,\n      lng,\n    }\n\n    this.bindEvents()\n    this.hideSwipeElement()\n  }\n\n  static prepareSelectedStoreHtml({ html }) {\n    const el = createElementFromString(html)\n    const fragment = document.createDocumentFragment()\n\n    const header = document.createElement('div')\n    header.classList.add('store__header')\n\n    const elements = [...el.querySelectorAll('.store__header > *')]\n    elements.forEach((node) => header.appendChild(node))\n\n    const hoursElement = el.querySelector('.store__hours')\n    hoursElement.id = `selected-store-hours`\n\n    fragment.appendChild(header)\n    fragment.appendChild(hoursElement)\n\n    return fragment\n  }\n\n  /**\n   * Resize the map on window resize, the HTML5 canvas\n   * doesn't support this otherwise...\n   */\n  static onWindowResize() {\n    google.maps.event.trigger(GoogleMaps.utilities.map, 'resize')\n    GoogleMaps.utilities.centerMap(GoogleMaps.utilities.map.getCenter())\n  }\n\n  static isReady(state) {\n    return state && state.mapsApiReady\n  }\n\n  static getTouch (e) {\n    return e.changedTouches[0]\n  }\n\n  static isStoreType(item, type) {\n    const result = JSON.stringify(item).toLowerCase().includes(type)\n    return result;\n  }\n\n  static zoomMap(zoomLevel) {\n    GoogleMaps.utilities.setZoom(zoomLevel || STORE_SELECT_ZOOM_LEVEL);\n  }\n\n  hideSwipeElement() {\n    if(!DetectTouch.touch) {\n      this.selectedModal.style.display = `none`;\n    }\n  }\n\n  setItemListActive(id) {\n    const activeElement = document.querySelector(`.${STORE_LOCATOR_ITEM_ACTIVE}`)\n    const element = document.querySelector(`#${id}`);\n    const elementIsHidden = element && element.classList.contains(STORE_ACCORDION_ITEM_HIDDEN)\n\n    if (activeElement) {\n      activeElement.classList.remove(STORE_LOCATOR_ITEM_ACTIVE)\n    }\n\n    if (elementIsHidden) {\n      this.showMoreStores.click()\n    }\n\n    element.classList.add(STORE_LOCATOR_ITEM_ACTIVE)\n\n    if (ScreenDimensions.isTabletLandscapeAndBigger) {\n      ScrollTo.scrollTo(element, 350, 250)\n    }\n\n    if (!ScreenDimensions.isTabletLandscapeAndBigger) {\n      this.mapTab.click()\n      ScrollTo.scrollTo(this.map)\n    }\n\n    this.showSelectedItemModal(element)\n  }\n\n  showSelectedItemModal(item) {\n    if (this.selectedModalContent) {\n      this.selectedModalContent.innerHTML = item.innerHTML\n      this.selectedModalContent.classList.add(JS_HOOK_SELECTED_ITEM_ACTIVE)\n      this.selectedModalState = 1\n    }\n  }\n\n  /**\n   * Bind general events\n   */\n  bindEvents() {\n    if (this.ui.selectStoreButton)\n      this.ui.selectStoreButton.addEventListener('click', () => this.selectStore())\n\n    Events.$on(`accordion::opened`, (_, data) => this.onAccordionOpen(data))\n    Events.$on(`store::click`, (_, data) => this.onStoreClick(data))\n    Events.$on('map::zoom', () => StoreLocatorMap.zoomMap())\n\n    if (this.selectedModal) {\n      this.selectedModal.addEventListener('touchstart', e => {\n        const firstTouch = StoreLocatorMap.getTouch(e);\n        this.html.classList.add('no--scroll');\n        this.detectTouch(firstTouch.clientY)\n      });\n\n      this.selectedModal.addEventListener('touchend', e => {\n        this.itemModalSwipe(e);\n      });\n    }\n\n    if(this.mapTab) {\n      this.mapTab.addEventListener('click', () => {\n        StoreLocatorMap.zoomMap(MOBILE_ZOOM_LEVEL);\n      })\n    }\n  }\n\n  itemModalSwipe(e) {\n    const offset = 50\n\n    if (!this.yDown) {\n      return\n    }\n\n    const {\n      clientY: yUp\n    } = StoreLocatorMap.getTouch(e)\n\n    const yDiff = this.yDown - yUp\n    const yDiffAbs = Math.abs(this.yDown - yUp)\n\n    if (Math.max(yDiffAbs) < offset ) {\n      return\n    }\n\n    if ( yDiff > 0 ){\n      this.modalSwipeAnimation(this.selectedModal, 'down')\n    } else {\n      this.modalSwipeAnimation(this.selectedModal, 'up')\n    }\n  }\n\n  detectTouch(yDown) {\n    this.yDown = yDown\n  }\n\n  modalSwipeAnimation(element, direction) {\n    if (this.selectedModalState !== 0) {\n      // const calculateHeight = (this.selectedModalContent.offsetHeight + 70)\n\n      if (direction === 'up') {\n        element.style.transform = `translateY(90%)`\n      } else if (direction === 'down') {\n        element.style.transform = `translateY(0px)`\n      }\n\n      this.html.classList.remove('no--scroll')\n    }\n  }\n\n  /**\n   * When an accordion gets opened, activate and goto marker\n   */\n  onAccordionOpen({ id }) {\n    const marker = this.markers?.[id]\n\n    if (!marker) return\n\n    this.setActiveMarker(marker)\n    this.setSelectedStore(id)\n    GoogleMaps.utilities.setZoom(STORE_SELECT_ZOOM_LEVEL)\n    GoogleMaps.utilities.centerMap(marker.position)\n  }\n\n  onStoreClick(id) {\n    const marker = this.markers?.[id]\n\n    if (!marker) return\n\n    const thisForm = document.querySelector(JS_HOOK_STORE_LOCATOR_FORM);\n    thisForm.setAttribute('data-map-events', 'false');\n\n    this.setActiveMarker(marker)\n    this.setSelectedStore(id)\n    GoogleMaps.utilities.setZoom(STORE_SELECT_ZOOM_LEVEL)\n    GoogleMaps.utilities.centerMap(marker.position)\n\n    this.setItemListActive(id)\n\n    setTimeout(() => {\n      thisForm.setAttribute('data-map-events', 'true');\n    }, 1000);\n  }\n\n  onSearchHandler() {\n    if (this.ui.selectedStoreWrapper) this.ui.selectedStoreWrapper.classList.add(HIDDEN_CLASS)\n  }\n\n  selectStore() {\n    Events.$trigger('store-locator::setStore', { data: { selectedStore: this.selectedStore } })\n  }\n\n  setSelectedStore(markerId) {\n    const { stores = [] } = store.state\n\n    if (!this.ui.selectedStoreWrapper) return\n\n    this.ui.selectedStoreWrapper.classList.add(HIDDEN_CLASS)\n    this.ui.selectedStoreInfo.innerHTML = ''\n    this.selectedStore = null\n\n    const id = markerId.replace(DETAIL_ID_PREFIX, '')\n    const selectedStore = stores.find(({ ID }) => ID === id)\n    if (!selectedStore) return\n\n    this.selectedStore = selectedStore\n\n    if (this.ui.callStoreButton)\n      this.ui.callStoreButton.href = selectedStore.phone ? `tel:${selectedStore.phone}` : ''\n\n    this.ui.selectedStoreInfo.appendChild(StoreLocatorMap.prepareSelectedStoreHtml(selectedStore))\n    this.ui.selectedStoreWrapper.classList.remove(HIDDEN_CLASS)\n  }\n\n  /**\n   * Create a Google Maps map\n   * @param {Number} zoom - the zoomlevel to init\n   * @param {Number} lat - the latitude coordinate to init\n   * @param {Number} long - the longitude coordinate to init\n   */\n  createMap() {\n    GoogleMaps.utilities.createMap(\n      this.element,\n      GoogleMaps.utilities.getMapOptions(this.mapOptions),\n    )\n\n    google.maps.event.addListenerOnce(GoogleMaps.utilities.map, 'idle', () => {\n      google.maps.event.addDomListener(window, 'resize', () => StoreLocatorMap.onWindowResize())\n    })\n\n    this.googleMapLoaded = true\n  }\n\n  /**\n   * Clear markers, set markers and fit bounds to visible markers\n   */\n  initMarkers() {\n    this.clearMarkers()\n    this.setMarkers()\n    this.setMapBounds()\n  }\n\n  setMapBounds() {\n    const { lat, lng } = store.state.location\n    const position = new google.maps.LatLng(lat, lng)\n    const resetBounds = this.ui.resetBounds.value\n\n    if (resetBounds === 'true') {\n      if (Object.keys(this.markers).length > 0) {\n        GoogleMaps.utilities.fitBoundsToVisibleMarkers(position)\n      } else {\n        GoogleMaps.utilities.centerMap(position)\n      }\n    }\n  }\n\n  /**\n   * Add markers to the map\n   */\n  setMarkers() {\n    const { stores } = store.state\n    if (!stores) return\n\n    const markers = stores.map((storeItem) => this.addMarkerToMap(storeItem))\n    GoogleMaps.utilities.addMarkers(markers, this.clustererIcon)\n  }\n\n  /**\n   * Get the marker options object\n   * @param {Object} item - store item object\n   */\n  getMarkerOptions(item) {\n    const isFlagship = StoreLocatorMap.isStoreType(item.storeType, \"flagship\");\n    const isFlagshipStore = StoreLocatorMap.isStoreType(item.storeType, \"flagship_store\");\n    const isMonoBrand = StoreLocatorMap.isStoreType(item.storeType, \"monobrand\");\n    const isShowroom = StoreLocatorMap.isStoreType(item.storeType, \"showroom\");\n    const isDesignSpace = StoreLocatorMap.isStoreType(item.storeType, \"flos_design_space\");\n    let iconURL = this.markerIcon;\n\n    if (isFlagship || isFlagshipStore) {\n      iconURL = this.markerIconFlagship;\n    } else if (isMonoBrand) {\n      iconURL = this.markerExperienceIcon;\n    } else if (isShowroom) {\n      iconURL = this.markerIconShowroom;\n    } else if (isDesignSpace) {\n      iconURL = this.markerIconDesign;\n    }\n\n    return {\n      position: new google.maps.LatLng(item.latitude, item.longitude),\n      title: item.name,\n      id: DETAIL_ID_PREFIX + item.ID,\n      url: item.url,\n      isExperienceStore: item.isExperienceStore || false,\n      isFlagship: isFlagship || false,\n      isMonoBrand: isMonoBrand || false,\n      isShowroom: isShowroom || false,\n      isDesignSpace: isDesignSpace || false,\n      icon: {\n        url: iconURL,\n        scaledSize: new google.maps.Size(this.markerSizeSm[0], this.markerSizeSm[1]),\n      },\n    }\n  }\n\n  /**\n   * Get marker by id\n   * @param {id} ID - id in list of markers\n   */\n  getMarker(id) {\n    return this.markers[DETAIL_ID_PREFIX + id]\n  }\n\n  /**\n   * Set active marker\n   * @param {marker} Google maps marker\n   */\n  setActiveMarker(marker) {\n    if (this.currentMarker) {\n      this.currentMarker.isActive = false\n      this.handleMarkerMouseout(this.currentMarker)\n    }\n\n    let iconURL = this.markerIconHover;\n\n    if (marker.isFlagship || marker.isFlagshipStore) {\n      iconURL = this.markerIconFlagshipHover;\n    } else if (marker.isMonoBrand) {\n      iconURL = this.markerExperienceIconHover;\n    } else if (marker.isShowroom) {\n      iconURL = this.markerIconShowroomHover;\n    } else if (marker.isDesignSpace) {\n      iconURL = this.markerIconDesignHover;\n    }\n\n    marker.setZIndex(MARKER_ZINDEX_ACTIVE)\n    marker.setIcon({\n      url: iconURL,\n      scaledSize: this.scaledMarkerSizeSm,\n    })\n\n    marker.isActive = true\n    this.currentMarker = marker\n\n    this.setItemListActive(marker.id)\n  }\n\n  /**\n   * Handle click of marker on map\n   * @param {Object} marker - the marker object\n   */\n  handleMarkerClick(marker) {\n    this.setActiveMarker(marker)\n    Events.$trigger('store-locator::setActive', { data: { id: marker.id } })\n  }\n\n  /**\n   * Handle mouseover of marker on map\n   * @param {Object} marker - the marker object\n   */\n  handleMarkerMouseover(marker) {\n    let iconURL = this.markerIconHover;\n\n    if (marker.isFlagship || marker.isFlagshipStore) {\n      iconURL = this.markerIconFlagshipHover;\n    } else if (marker.isMonoBrand) {\n      iconURL = this.markerExperienceIconHover;\n    } else if (marker.isShowroom) {\n      iconURL = this.markerIconShowroomHover;\n    } else if (marker.isDesignSpace) {\n      iconURL = this.markerIconDesignHover;\n    }\n\n    marker.setZIndex(MARKER_ZINDEX_MOUSEOVER)\n    marker.setIcon({\n      url: iconURL,\n      scaledSize: this.scaledMarkerSizeSm,\n    })\n  }\n\n  /**\n   * Handle mouseover of marker on map\n   * @param {Object} marker - the marker object\n   */\n  handleMarkerMouseout(marker) {\n    if (marker.isActive) return\n\n    let iconURL = this.markerIcon;\n\n    if (marker.isFlagship || marker.isFlagshipStore) {\n      iconURL = this.markerIconFlagship;\n    } else if (marker.isMonoBrand) {\n      iconURL = this.markerExperienceIcon;\n    } else if (marker.isShowroom) {\n      iconURL = this.markerIconShowroom;\n    } else if (marker.isDesignSpace) {\n      iconURL = this.markerIconDesign;\n    }\n\n    marker.setZIndex(MARKER_ZINDEX_DEFAULT)\n    marker.setIcon({\n      url: iconURL,\n      scaledSize: this.scaledMarkerSizeSm,\n    })\n  }\n\n  /**\n   * Add a marker of a store to the map\n   * @param {Object} item - store item object\n   */\n  addMarkerToMap(item) {\n    if (!this.markers[item.ID]) {\n      const options = this.getMarkerOptions(item)\n      const marker = GoogleMaps.utilities.createMarker(options)\n      this.markers[DETAIL_ID_PREFIX + item.ID] = marker\n\n      // Marker events\n      marker.addListener('mouseover', () => this.handleMarkerMouseover(marker))\n      marker.addListener('mouseout', () => this.handleMarkerMouseout(marker))\n      marker.addListener('click', () => this.handleMarkerClick(marker))\n    }\n\n    return this.markers[DETAIL_ID_PREFIX + item.ID]\n  }\n\n  clearMarkers() {\n    this.markers = []\n    if (GoogleMaps.utilities.clusterer) GoogleMaps.utilities.clusterer.clearMarkers()\n  }\n\n  initMap() {\n    this.scaledMarkerSize = new google.maps.Size(this.markerSize[0], this.markerSize[1])\n    this.scaledMarkerSizeSm = new google.maps.Size(this.markerSizeSm[0], this.markerSizeSm[1])\n\n    this.createMap()\n    this.initMarkers()\n  }\n\n  /**\n   * Gets called when store state changes\n   */\n  stateChanged() {\n    const { state, prevState } = store\n\n    if (!StoreLocatorMap.isReady(state)) return\n\n    // Load map view;\n    // On firstLoad and no google maps initialized yet\n    if (!this.googleMapLoaded) this.initMap()\n\n    if (state.stores !== prevState.stores) {\n      this.initMarkers()\n      this.onSearchHandler()\n    }\n\n    // if (state.stores?.length === 0) GoogleMaps.utilities.setZoom(11)\n  }\n}\n\nexport default StoreLocatorMap\n","\n/**\n * Creates an element from the given string.\n *\n * @param str the markup text\n *\n * @returns the created element\n */\nconst createElementFromString = (str) => {\n  const div = document.createElement('div');\n  let res;\n  div.innerHTML = str;\n  if (div.children.length) {\n    res = div.children[0]; // eslint-disable-line prefer-destructuring\n  }\n  return res;\n};\n\nexport default createElementFromString;\n","\nimport createElementFromString from './create-element-from-string';\n\nexport default createElementFromString;\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","export default {\n  setSearchParam(context, payload) {\n    context.commit('setSearchParam', payload);\n  },\n  setStores(context, payload) {\n    context.commit('setStores', payload);\n  },\n  setApi(context, payload) {\n    context.commit('setApi', payload);\n  },\n  setLocation(context, payload) {\n    context.commit('setLocation', payload);\n  },\n  setSyncedInputValues(context, payload) {\n    context.commit('setSyncedInputValues', payload);\n  }\n};\n\n","export default {\n  setSearchParam(state, payload) {\n    state.searchParam = payload.searchParam;\n    return state;\n  },\n  setStores(state, payload) {\n    state.stores = payload.stores;\n    return state;\n  },\n  setApi(state, payload) {\n    state.mapsApiReady = payload.mapsApiReady;\n    return state;\n  },\n  setLocation(state, payload) {\n    state.location = payload.location;\n    return state;\n  },\n  setSyncedInputValues(state, payload) {\n    state.syncedInputValues = payload.syncedInputValues;\n    return state;\n  }\n};\n","/**\n * A state object\n * @typedef {Object<string, any>} State\n * @property {array} stores Array of items\n */\n/**\n * @type {State} state\n * @returns {State} state\n */\nexport default {\n  searchParam: '',\n  mapsApiReady: false,\n  stores: [],\n  location: {},\n  syncedInputValues: []\n};\n","import actions from './store/actions'\nimport mutations from './store/mutations'\nimport initialState from './store/state'\nimport Store from './store/store'\n\nexport default new Store({\n  actions,\n  mutations,\n  initialState,\n})\n","// @ts-ignore\nimport idx from 'idx'\n\nimport Store from '../store/store'\n\nclass Component {\n  constructor(props = {}) {\n    this.watch = Component.watch || function() {}\n    this.watchCollection = Component.watchCollection || function() {}\n    this.stateChanged = this.stateChanged || function() {}\n    if (props.store instanceof Store) {\n      // This fires every time the state updates\n      props.store.subscribe((state, prevState) => {\n        this.stateChanged(state, prevState)\n      })\n    }\n\n    if (props.element) {\n      this.element = props.element\n    }\n  }\n\n  static watchCollection(store, prop, callback) {\n    const { state: newState, prevState } = store\n    const previousPropState = idx(prevState, _ => _[prop])\n    const newPropState = idx(newState, _ => _[prop])\n    if (Array.isArray(previousPropState)) {\n      if (\n        previousPropState &&\n        previousPropState.length &&\n        newPropState.length !== previousPropState.length\n      ) {\n        // Make sure the callback is a function\n        if (typeof callback === 'function') {\n          return callback()\n        }\n      }\n    }\n    return undefined\n  }\n\n  static watch(store, prop, callback) {\n    const { state: newState, prevState } = store\n    const previousPropState = idx(prevState, _ => _[prop])\n    const newPropState = idx(newState, _ => _[prop])\n    if (\n      typeof newPropState === 'boolean' ||\n      typeof newPropState === 'string' ||\n      typeof newPropState === 'number'\n    ) {\n      if (previousPropState && newPropState !== previousPropState) {\n        // Make sure the callback is a function\n        if (typeof callback === 'function') {\n          return callback()\n        }\n      }\n    }\n    return undefined\n  }\n}\nexport default Component\n","class Store {\n  constructor(params) {\n    // Add some default objects to hold our actions, mutations and state\n    // Look in the passed params object for actions and mutations\n    // that might have been passed in\n    this.actions = params.actions || {}\n    this.mutations = params.mutations || {}\n    this.state = {}\n    this.prevState = {}\n\n    // A status enum to set during actions and mutations\n    this.status = 'resting'\n\n    // We store callbacks for when the state changes in here\n    this.callbacks = []\n\n    // Set our state to be a Proxy. We are setting the default state by\n    // checking the params and defaulting to an empty object if no default\n    // state is passed in\n    const self = this\n    self.state = new Proxy(params.initialState || {}, {\n      set(state, key, value) {\n        // Set the value as we would normally\n        state[key] = value\n\n        // eslint-disable-next-line\n        // console.log(`stateChange: ${String(key)}: ${value}`)\n\n        // Fire off our callback processor because if there's listeners,\n        // they're going to want to know that something has changed\n        self.processCallbacks(self.state, self.prevState)\n\n        if (self.status !== 'mutation') {\n          // eslint-disable-next-line\n          console.warn(`You should use a mutation to set ${String(key)}`)\n        }\n        // Reset the status ready for the next operation\n        self.status = 'resting'\n\n        return true\n      },\n    })\n  }\n\n  /**\n   * A dispatcher for actions that looks in the actions\n   * collection and runs the action if it can find it\n   *\n   * @param {string} actionKey\n   * @param {object} payload\n   * @returns {boolean}\n   * @memberof Store\n   */\n  dispatch(actionKey, payload) {\n    // Run a quick check to see if the action actually exists\n    // before we try to run it\n    if (typeof this.actions[actionKey] !== 'function') {\n      console.error(`Action \"${actionKey}\" doesn't exist.`)\n      return false\n    }\n\n    // Let anything that's watching the status know that we're dispatching an action\n    this.status = 'action'\n\n    // Actually call the action and pass it the Store context and whatever payload was passed\n    return this.actions[actionKey](this, payload)\n  }\n\n  /**\n   * A dispatcher for actions that looks in the actions\n   * collection and runs the action if it can find it\n   * and returns a Promise that resolves when the action is completed\n   *\n   * @param {string} actionKey\n   * @param {object} payload\n   * @returns {Promise}\n   * @memberof Store\n   */\n  dispatchWithPromise(actionKey, payload) {\n    return new Promise((resolve, reject) => {\n      // Run a quick check to see if the action actually exists\n      // before we try to run it\n      if (typeof this.actions[actionKey] !== 'function') {\n        console.error(`Action \"${actionKey}\" doesn't exist.`);\n        reject(new Error(`Action \"${actionKey}\" doesn't exist.`));\n      } else {\n        // Add a callback to the store\n        // eslint-disable-next-line no-unused-vars\n        const callback = (_state, _prevState) => {\n          if (this.status === 'mutation') {\n            // Action has completed, remove the callback and resolve the Promise\n            this.callbacks = this.callbacks.filter(cb => cb !== callback);\n            resolve();\n          }\n        };\n  \n        this.subscribe(callback);\n        this.dispatch(actionKey, payload)\n          .then(() => {})\n          .catch((error) => {\n            this.callbacks = this.callbacks.filter(cb => cb !== callback);\n            reject(error);\n          });\n      }\n    });\n  }\n\n  \n\n  /**\n   * Look for a mutation and modify the state object\n   * if that mutation exists by calling it\n   *\n   * @param {string} mutationKey\n   * @param {object} payload\n   * @returns {boolean}\n   * @memberof Store\n   */\n  commit(mutationKey, payload) {\n    // Run a quick check to see if this mutation actually exists\n    // before trying to run it\n    if (typeof this.mutations[mutationKey] !== 'function') {\n      console.error(`Mutation \"${mutationKey}\" doesn't exist`)\n      return false\n    }\n\n    // Let anything that's watching the status know that we're mutating state\n    this.status = 'mutation'\n\n    this.prevState = Object.assign({}, this.state)\n\n    // Get a new version of the state by running the mutation and storing the result of it\n    const newState = this.mutations[mutationKey](this.state, payload)\n\n    // Update the old state with the new state returned from our mutation\n    this.state = newState\n\n    return true\n  }\n\n  /**\n   * Fire off each callback that's run whenever the state changes\n   * We pass in some data as the one and only parameter.\n   * Returns a boolean depending if callbacks were found or not\n   *\n   * @param {object} state\n   * @param {object} prevState\n   * @returns {boolean}\n   */\n  processCallbacks(state, prevState) {\n    if (!this.callbacks.length) {\n      return false\n    }\n\n    // We've got callbacks, so loop each one and fire it off\n    this.callbacks.forEach(callback => callback(state, prevState))\n\n    return true\n  }\n\n  /**\n   * Allow an outside entity to subscribe to state changes with a valid callback.\n   * Returns boolean based on wether or not the callback was added to the collection\n   *\n   * @param {function} callback\n   * @returns {boolean}\n   */\n  subscribe(callback) {\n    if (typeof callback !== 'function') {\n      console.error('You can only subscribe to Store changes with a valid function')\n      return false\n    }\n\n    // A valid function, so it belongs in our collection\n    this.callbacks.push(callback)\n\n    return true\n  }\n}\n\nexport default Store\n"],"sourceRoot":""}