{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/basics/js/store/static.js","webpack:///./src/basics/js/store/integrations.js","webpack:///./src/basics/js/store/methods/mapResultData/methods/mapProducts.js","webpack:///./src/basics/js/store/actions.js","webpack:///./src/basics/js/utils.js","webpack:///./src/basics/js/store/mutations.js","webpack:///./src/basics/js/store/modules/pdp.js","webpack:///./src/basics/js/store/modules/configurator-module.js","webpack:///./src/basics/js/store/modules/cart.js","webpack:///./src/basics/js/store/methods/mapResultData/methods/getSuggestion.js","webpack:///./src/basics/js/store/methods/mapResultData/methods/mapSuggestions.js","webpack:///./src/basics/js/store/methods/mapResultData/methods/sortSuggestions.js","webpack:///./src/basics/js/store/methods/mapResultData/mapResultData.js","webpack:///./src/basics/js/methods/urlComposer/urlComposer.js","webpack:///./src/basics/js/methods/gtmlDataLayer/registerGtmDataLayer.js","webpack:///./src/basics/js/store/modules/search.js","webpack:///./src/basics/js/store/modules/plp-module.js","webpack:///./src/basics/js/store/modules/store-locator.js","webpack:///./src/basics/js/store/modules/recommendation-module.js","webpack:///./src/basics/js/store/modules/global-video.js","webpack:///./src/basics/js/store/modules/image-products-overlay.js","webpack:///./src/components/reconfigurator/partials/constants.js","webpack:///./src/basics/js/store/modules/reconfigurator.js","webpack:///./src/basics/js/store/store.js","webpack:///./src/components/buy-section/buy-section-core.js","webpack:///./src/components/quantity/quantity.js","webpack:///./src/components/buy-section/buy-section.js","webpack:///./src/components/product-tile/product-tile.js","webpack:///./src/components/preview-tiles/preview-tiles.js","webpack:///./src/components/form-elements/templates/input-with-label.js","webpack:///./src/components/accordion/accordion.js","webpack:///./src/components/accordion/accordion-group.js","webpack:///./src/components/accordion-flow/accordion-flow.js","webpack:///./src/components/accordion-flow/accordion-flow-item.js","webpack:///./src/components/account-menu/account-menu.js","webpack:///./src/components/buy-section/buy-section-product-line.js","webpack:///./src/components/vue-mixins/copyText.js","webpack:///./src/components/text-to-input/text-to-input.js","webpack:///./src/components/product-line/product-line-core.js","webpack:///./src/components/product-line/product-line-addons.js","webpack:///./src/components/addons-overlay/addons-block.js","webpack:///./src/components/addons-overlay/addons-overlay.js","webpack:///./src/components/product-line/product-line-cart.js","webpack:///./src/components/cart/cart-core.js","webpack:///./src/components/cart/cart-share-validation.js","webpack:///./src/components/cart/cart.js","webpack:///./src/components/cart/cart-share.js","webpack:///./src/components/cart/cart-import-link.js","webpack:///./src/components/category-tile/category-tile.js","webpack:///./src/components/category-tile/category-tile-raw.js","webpack:///./src/components/date-picker/date-picker.js","webpack:///./src/components/checkout-block/checkout-block.js","webpack:///./src/components/order-summary/order-summary.js","webpack:///./src/components/checkout/checkout.js","webpack:///./src/components/feedback-button/feedback-button.js","webpack:///./src/components/order-summary/order-summary-original.js","webpack:///./src/basics/js/validations.js","webpack:///./src/components/checkout/checkout-original.js","webpack:///./src/components/file-upload/file-upload.js","webpack:///./src/components/modal/modal.js","webpack:///./src/components/file-upload-field/file-upload-field.js","webpack:///./src/components/file-upload-field/file-upload-container.js","webpack:///./src/components/claim-flow/claim-flow.js","webpack:///./src/components/configurator/request-configuration.js","webpack:///./src/components/configurator/configurator.js","webpack:///./src/components/variation-dropdown/variation-dropdown.js","webpack:///./src/components/country-selector/country-selector-input.js","webpack:///./src/components/country-selector/country-selector.js","webpack:///./src/components/user-type-selector/user-type-selector.js","webpack:///./src/components/cylindo-overlay/cylindo-overlay.js","webpack:///./src/components/dashboard-header/dashboard-header.js","webpack:///./src/components/data-table/data-table-label.js","webpack:///./src/basics/js/methods/gtmlDataLayer/GoogleTagManager.js","webpack:///./src/components/table-component/table-component.js","webpack:///./src/components/dashboard/dashboard.js","webpack:///./src/components/feedback-button/feedback-button-example-wrapper.js","webpack:///./src/components/form-elements/templates/form-password.js","webpack:///./src/components/gateway/gateway.js","webpack:///./src/basics/js/methods/cookies/cookies.js","webpack:///./src/components/guided-tour/guided-tour.js","webpack:///./src/components/invitation-banner/invitation-banner.js","webpack:///./src/components/guided-tour/guided-tour-controller.js","webpack:///./src/components/header-logo/header-logo.js","webpack:///./src/components/image-products/image-products-data.js","webpack:///./src/basics/js/methods/inView/inView.js","webpack:///./src/components/image-products/image-products-button.js","webpack:///./src/components/hero/hero.js","webpack:///./src/components/viewing-as/viewing-as.js","webpack:///./src/components/main-menu/main-menu.js","webpack:///./src/components/news-letter/news-letter.js","webpack:///./src/components/main-footer/main-footer.js","webpack:///./src/components/cart/mini-cart.js","webpack:///./src/components/newsletter-non-sleek/newsletter.js","webpack:///./src/components/notification-panel/notification-panel.js","webpack:///./src/components/notification-panel/notification-panel-wrapper.js","webpack:///./src/components/notification-panel/notification-panel-examples-wrapper.js","webpack:///./src/components/order-overview/order-overview.js","webpack:///./src/components/overlay-backdrop/overlay-backdrop.js","webpack:///./src/components/product-visualization/product-visualization.js","webpack:///./src/components/image-products/image-products-button.vue?046e","webpack:///src/components/image-products/image-products-button.vue","webpack:///./src/components/image-products/image-products-button.vue?1bb2","webpack:///./src/components/image-products/image-products-button.vue","webpack:///./src/components/slider/slider.js","webpack:///./src/components/inspiration-tile/inspiration-tile-shortcuts-data.js","webpack:///./src/components/inspiration-tile/inspiration-tile.js","webpack:///./src/components/recommendation/recommendation.js","webpack:///./src/components/pdp/pdp.js","webpack:///./src/components/product-filter/form-checkbox-filter.js","webpack:///./src/components/product-filter/form-logical-filter.js","webpack:///./src/components/product-filter/methods/isChecked.js","webpack:///./src/components/product-filter/methods/getLogicalValue.js","webpack:///./src/components/product-filter/accordion-item-filter.js","webpack:///./src/components/product-filter/product-filter.js","webpack:///./src/basics/js/methods/updateBrowserHistory/updateBrowserHistory.js","webpack:///./src/basics/js/methods/updateTileFilters/updateTileFilters.js","webpack:///./src/components/product-filter/tile-filter.js","webpack:///./src/components/product-list-filter/product-list-filter.js","webpack:///./src/components/expandable/expandable.js","webpack:///./src/components/page-header/page-header.js","webpack:///./src/components/room-explorer/touch-scroll.js","webpack:///./src/components/room-explorer/room.js","webpack:///./src/components/room-explorer/room-explorer.js","webpack:///./src/components/room-explorer/room-explorer-overlay.js","webpack:///./src/components/product-line/product-line-room-explorer.js","webpack:///./src/components/room-explorer/room-explorer-product.js","webpack:///./src/components/online-shops/onlineshops.js","webpack:///./src/components/product-line/product-line-search.js","webpack:///./src/components/search-overlay/search-overlay.js","webpack:///./src/components/slider-v2/slider-v2.js","webpack:///./src/components/mosaic-slider/mosaic-slider-zoom.vue?cd38","webpack:///src/components/mosaic-slider/mosaic-slider-zoom.vue","webpack:///./src/components/mosaic-slider/mosaic-slider-zoom.vue?bdf8","webpack:///./src/components/mosaic-slider/mosaic-slider-zoom.vue","webpack:///./src/components/mosaic-slider/mosaic-slider.js","webpack:///./src/components/mosaic-slider/mosaic-slider-overlay.js","webpack:///./src/components/store-locator/partials/filters/filters.js","webpack:///./src/components/store-locator/partials/list/list.js","webpack:///./src/components/store-locator/partials/list-item/list-item.js","webpack:///./src/components/store-locator/partials/map/map-styles.js","webpack:///./src/components/store-locator/store-locator.js","webpack:///./src/components/store-locator/partials/map/map.js","webpack:///./src/components/video-player/video-player-vimeo.js","webpack:///./src/components/tile-list/tile-list.js","webpack:///./src/components/sticky-gallery/sticky-gallery.js","webpack:///./src/components/mega-links/mega-links.js","webpack:///./src/components/sliding-presentation/sliding-presentation.js","webpack:///./src/components/sticky-scroll/sticky-scroll.js","webpack:///./src/components/video-player/video-player-global.js","webpack:///./src/components/product-line/product-line-examples.js","webpack:///./src/components/stores-navigation/stores-navigation.js","webpack:///./src/components/toolbox-hero/toolbox.js","webpack:///./src/components/toolbox-hero/toolbox-hero.js","webpack:///./src/components/experience/series-overview/series-overview-data.js","webpack:///./src/components/experience/series-overview/series-overview.js","webpack:///./src/components/image-products/has-image-products.js","webpack:///./src/components/experience/animated-hero/animated-hero.js","webpack:///./src/components/experience/introduction-block/introduction-block.js","webpack:///./src/components/experience/tabs-bar/tabs-bar.js","webpack:///./src/components/experience/design-explorer/design-explorer-data.js","webpack:///./src/components/usp-spot/usp-spot.js","webpack:///./src/components/experience/design-explorer/design-explorer.js","webpack:///./src/components/experience/property-explorer/property-explorer-data.js","webpack:///./src/components/experience/property-explorer/property-explorer.js","webpack:///./src/components/experience/inspiration-gallery/inspiration-gallery-data.js","webpack:///./src/components/experience/inspiration-gallery/inspiration-gallery.js","webpack:///./src/components/experience/material-explorer/material-explorer-data-2.js","webpack:///./src/components/experience/material-explorer/material-explorer.js","webpack:///./src/components/experience/inspiration-slider/inspiration-slider-data.js","webpack:///./src/components/experience/inspiration-slider/inspiration-slider.js","webpack:///./src/components/experience/scroll-rotator/scroll-rotator-data.js","webpack:///./src/components/experience/scroll-rotator/scroll-rotator.js","webpack:///./src/components/experience/model-explorer/model-explorer-data.js","webpack:///./src/components/experience/model-explorer/model-explorer.js","webpack:///./src/components/experience/material-overlay/material-overlay.js","webpack:///./src/components/experience/explanation-overlay/explanation-overlay.js","webpack:///./src/components/experience/shortcuts-bar/shortcuts-bar-data.js","webpack:///./src/components/experience/shortcuts-bar/shortcuts-bar.js","webpack:///./src/components/experience/shortcuts-overlay/shortcuts-overlay.js","webpack:///./src/components/experience/ar-banner/ar-banner-data.js","webpack:///./src/components/experience/ar-banner/ar-banner.js","webpack:///./src/components/step-guide/step-guide-data.js","webpack:///./src/components/step-guide/step-guide.js","webpack:///./src/components/story-slider/mock/story-slider-mock.js","webpack:///./src/components/story-slider/partials/story-slide-cover/story-slide-cover.vue?7b2e","webpack:///src/components/story-slider/partials/story-slide.vue","webpack:///./src/components/story-slider/partials/story-slide.vue?7ece","webpack:///./src/components/story-slider/partials/story-slide.vue","webpack:///./src/components/story-slider/partials/story-slide-cover/story-slide-cover.vue?dc61","webpack:///src/components/story-slider/partials/story-slide-cover/story-slide-cover.vue","webpack:///./src/components/story-slider/partials/story-slide-cover/story-slide-cover.vue","webpack:///./src/components/story-slider/partials/story-slide-content/story-slide-content.vue?4507","webpack:///src/components/story-slider/partials/story-slide-content/story-slide-content.vue","webpack:///./src/components/story-slider/partials/story-slide-content/story-slide-content.vue?fb0c","webpack:///./src/components/story-slider/partials/story-slide-content/story-slide-content.vue","webpack:///./src/components/story-slider/partials/story-slide-video/story-slide-video.vue?83b4","webpack:///src/components/story-slider/partials/story-slide-video/story-slide-video.vue","webpack:///./src/components/story-slider/partials/story-slide-video/story-slide-video.vue?e829","webpack:///./src/components/story-slider/partials/story-slide-video/story-slide-video.vue","webpack:///./src/components/story-slider/partials/story-slide-products/story-slide-products.vue?8244","webpack:///src/components/story-slider/partials/story-slide-products/story-slide-products.vue","webpack:///./src/components/story-slider/partials/story-slide-products/story-slide-products.vue?260e","webpack:///./src/components/story-slider/partials/story-slide-products/story-slide-products.vue","webpack:///./src/components/story-slider/story-slider.js","webpack:///./src/components/experience/experience-scroll.js","webpack:///./src/components/hero-fragmented/hero-fragmented.js","webpack:///./src/components/inspiration-tile-v2/inspiration-tile-v2.vue?3ed6","webpack:///src/components/inspiration-tile-v2/inspiration-tile-v2.vue","webpack:///./src/components/inspiration-tile-v2/inspiration-tile-v2.vue?e851","webpack:///./src/components/inspiration-tile-v2/inspiration-tile-v2.vue","webpack:///./src/components/data-table/data-table-scroll.js","webpack:///./src/components/horizontal-collapsible/horizontal-collapsible.js","webpack:///./src/components/image-products/image-products-overlay.js","webpack:///./src/components/reconfigurator/partials/presentation-tile/presentation-tile.vue?a821","webpack:///./src/components/reconfigurator/partials/cylindo-viewer/cylindo-viewer.vue?e7cd","webpack:///src/components/reconfigurator/partials/cylindo-viewer/cylindo-viewer.vue","webpack:///./src/components/reconfigurator/partials/cylindo-viewer/cylindo-viewer.vue?0f4e","webpack:///./src/components/reconfigurator/partials/cylindo-viewer/cylindo-viewer.vue","webpack:///src/components/reconfigurator/partials/presentation-tile/presentation-tile.vue","webpack:///./src/components/reconfigurator/partials/presentation-tile/presentation-tile.vue?0830","webpack:///./src/components/reconfigurator/partials/presentation-tile/presentation-tile.vue","webpack:///./src/components/reconfigurator/partials/zoom-overlay/zoom-overlay.vue?39ee","webpack:///src/components/reconfigurator/partials/zoom-overlay/zoom-overlay.vue","webpack:///./src/components/reconfigurator/partials/zoom-overlay/zoom-overlay.vue?8159","webpack:///./src/components/reconfigurator/partials/zoom-overlay/zoom-overlay.vue","webpack:///./src/components/reconfigurator/partials/variant-options/variant-options.vue?dcf0","webpack:///src/components/reconfigurator/partials/variant-options/variant-options.vue","webpack:///./src/components/reconfigurator/partials/variant-options/variant-options.vue?d705","webpack:///./src/components/reconfigurator/partials/variant-options/variant-options.vue","webpack:///./src/components/reconfigurator/partials/attribute-options/attribute-options.vue?ae40","webpack:///src/components/reconfigurator/partials/attribute-options/attribute-options.vue","webpack:///./src/components/reconfigurator/partials/attribute-options/attribute-options.vue?c231","webpack:///./src/components/reconfigurator/partials/attribute-options/attribute-options.vue","webpack:///./src/components/reconfigurator/partials/options-overlay/options-overlay.vue?4b20","webpack:///src/components/reconfigurator/partials/options-overlay/options-overlay.vue","webpack:///./src/components/reconfigurator/partials/options-overlay/options-overlay.vue?0148","webpack:///./src/components/reconfigurator/partials/options-overlay/options-overlay.vue","webpack:///./src/components/reconfigurator/partials/material-group-info-overlay/material-group-info-overlay.vue?ca53","webpack:///src/components/reconfigurator/partials/material-group-info-overlay/material-group-info-overlay.vue","webpack:///./src/components/reconfigurator/partials/material-group-info-overlay/material-group-info-overlay.vue?66c7","webpack:///./src/components/reconfigurator/partials/material-group-info-overlay/material-group-info-overlay.vue","webpack:///./src/components/reconfigurator/partials/configure-panels/configure-panels.vue?46dd","webpack:///./src/components/reconfigurator/partials/swatch-selector/swatch-selector.vue?499c","webpack:///src/components/reconfigurator/partials/swatch-selector/swatch-selector.vue","webpack:///./src/components/reconfigurator/partials/swatch-selector/swatch-selector.vue?2a13","webpack:///./src/components/reconfigurator/partials/swatch-selector/swatch-selector.vue","webpack:///./src/components/reconfigurator/partials/model-selector/model-selector.vue?1f40","webpack:///src/components/reconfigurator/partials/model-selector/model-selector.vue","webpack:///./src/components/reconfigurator/partials/model-selector/model-selector.vue?b37c","webpack:///./src/components/reconfigurator/partials/model-selector/model-selector.vue","webpack:///src/components/reconfigurator/partials/configure-panels/configure-panels.vue","webpack:///./src/components/reconfigurator/partials/configure-panels/configure-panels.vue?f777","webpack:///./src/components/reconfigurator/partials/configure-panels/configure-panels.vue","webpack:///./src/components/reconfigurator/partials/quantity-mobile/quantity-mobile.vue?0949","webpack:///src/components/reconfigurator/partials/quantity-mobile/quantity-mobile.vue","webpack:///./src/components/reconfigurator/partials/quantity-mobile/quantity-mobile.vue?e70a","webpack:///./src/components/reconfigurator/partials/quantity-mobile/quantity-mobile.vue","webpack:///./src/components/usp-spot-banner/usp-spot-banner.js","webpack:///./src/components/index.js","webpack:///./src/components/receipt/receipt.js","webpack:///./src/components/filter-tabs/filter-tabs.js","webpack:///./src/components/reconfigurator/reconfigurator.js","webpack:///./src/components/tooltip/tooltip.js","webpack:///./src/components/hero-minimal/hero-minimal.js","webpack:///./src/basics/js/methods/getUrlSearchParameters/getUrlSearchParametres.js","webpack:///./src/basics/js/methods/popStateHandler/popStateHandler.js","webpack:///./src/basics/js/methods/PriceHelper.js","webpack:///./src/basics/js/app.js"],"names":["root","factory","exports","module","define","amd","a","i","window","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","oldJsonpFunction","slice","createAsyncMutation","type","SUCCESS","FAILURE","PENDING","action","loadingKey","camelCase","stateKey","createMutation","mutation","GET_RECOMMENDATION","GET_PRODUCTS","SET_FILTER_COLOR","GET_OPTION_GROUP_ASYNC","CART_ITEM_ADD_ENDPOINT_ASYNC","CYLINDO_OVERLAY","CONFIGURATOR_OPTIONS_ASYNC","CONFIGURATOR_INITIAL_OPTIONS_ASYNC","CONFIGURATOR_CYLINDO_SKU_ASYNC","CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC","EDIT_ORDER_ASYNC","POST_CAMPAIGN_CODE_ASYNC","GET_CART_ITEMS","UPDATE_QUANTITY_ASYNC","REQUEST_QUOTE_ASYNC","EMPTY_CART_ASYNC","IMPORT_CART_ASYNC","GET_CART_QUANTITY","SHARE_SAVED_LIST_ASYNC","IMPORT_SAVED_LIST_ASYNC","FETCH_STORES","SELECT_COUNTRY","SELECT_USER_TYPE","REQUEST_OVERLAY_PRODUCTS","RECONFIGURATOR_GETSTEP_ASYNC","RECONFIGURATOR_GETVARIANT_ASYNC","loadingDelay","ms","x","Promise","resolve","setTimeout","getRequest","store","url","mutationTypes","delay","commit","fetch","method","headers","then","response","ok","dispatch","status","Error","res","json","catch","err","error","postRequest","body","callback","console","log","postObj","JSON","stringify","postRequestWithFileUpload","formData","FormData","append","options","credentials","mapProducts","products","map","product","primaryName","secondaryName","buySection","sku","formattedPrice","image","altText","alt","variantName","dispatchInfo","quantity","colli","minimumOrderQuantity","setIsMobile","isMobile","setIsIOS","isIOS","setWindowH","wH","setWindowW","wW","setWindowY","wY","setBodyFixed","payload","getInitialOptionGroups","types","optionGroups","openMainSearch","transitionDelay","setClass","onlyMobile","closeMainSearch","openAddonsOverlay","closeAddonsOverlay","openMainMenu","closeMainMenu","openMainServiceNav","closeMainServiceNav","openAccountMenu","closeAccountMenu","openDashboard","closeDashboard","openCountrySelector","closeCountrySelector","openMosaicSliderOverlay","activeIndex","closeMosaicSliderOverlay","showOverlayBackdrop","context","hideOverlayBackdrop","closeAllOverlays","process","results","cartItem","panel","panelId","newVal","productId","variantId","endpointUrl","replace","dataJson","endsWith","index","warn","message","showClose","autoRemove","maxWidth","color","shouldRefreshCartItems","notification","location","href","added","notAdded","notificationOnError","postUrl","orderNumber","countryCode","reload","epiParrentPageId","blockId","userTypeId","path","reloadUrl","uid","Math","random","toString","substring","rInterval","stop","dateNow","Date","now","requestAnimation","requestAnimationFrame","start","intervalFunc","clear","minmax","val","span","lo","hi","appLoaded","state","loaded","windowH","windowW","windowY","htmlTag","document","getElementsByTagName","bodyFixed","logo","querySelector","sniffedScrollPos","pageYOffset","documentElement","scrollTop","clientTop","style","marginTop","classList","contains","add","isFixed","remove","removeProperty","showNotificationPanel","id","notificationPanels","removeNotificationPanel","filter","Vue","set","searchOverlayOpen","mainServiceNavOpen","addonsOverlayOpen","miniCartActive","mainMenuOpen","accountMenuOpen","dashboardOpen","countrySelectorOpen","mosaicSliderOverlayOpen","mosaicSliderOverlayActiveIndex","roomExplorerSingleProduct","roomExplorerOverlayProducts","overlayBackdropContext","overlayBackdropActive","shortcutsOverlayOpen","shortcutsData","explanationOverlayOpen","explanationData","triggerExperienceResize","items","cartItemsCount","cartLoaded","subTotal","cartItems","forEach","item","cartSubTotal","skuToFind","found","el","price","parseInt","unitPrice","toFixed","lineItemId","checkout","campaignCode","code","discountAmount","modalStatus","modals","pdpAddonsProducts","relevantAddonsProducts","newStatus","guidedTourStatus","materialOverlayOpen","materialsData","activeMaterialIndex","productFiltersOpen","tooltipText","txt","newX","event","clientX","innerWidth","tooltipPosX","newY","clientY","innerHeight","tooltipPosY","mutations","actions","configuratorOpen","configuratorActiveSku","showPDPSpinner","removeFromQuery","queryString","params_arr","split","openConfigurator","sourceURL","rtn","newurl","indexOf","join","history","pushState","closeConfigurator","replaceState","setShowPDPSpinner","productCode","selectedOptions","updateCartData","dispatchDate","lineItems","isSuccess","errorMessage","updateShowOrderSummarySpinner","showOrderSummarySpinner","updateCalculatedCart","cartModel","calculatedCart","subTotalExDiscount","discount","total","shippingFee","handlingFee","minimumOrderFee","minimumOrderValue","campaign","vat","updateCartLineItems","cartLineItems","updateDispatchDate","date","orderDispatchDate","updateCouponCode","couponCode","updateErrorMessage","clearErrorMessage","refid","stringifiedFormData","redirUrl","getSuggestion","suggestions","searchTerm","returnSuggestion","Array","isArray","suggestion","mapSuggestions","searchResultPageUrl","tag","count","hits","tagLink","encodeURIComponent","sortSuggestions","sort","b","mapResultData","searchAsYouType","autoCompleteSuggestions","autoComplete","autoCompleteSuggestion","productsTotalCount","totalHits","productsTotalLink","queryResult","tags","endpoint","facets","skip","take","searchQuery","excludeEditorPicks","queryPrefix","totalString","endpointWithQueryString","reduce","facet","facetValues","facetString","skipAndTake","undefined","_registerGtmDataLayer","obj","dontClear","dataLayer","ecommerce","_parseCurrencyString","parseFloat","replaceAll","_getProductFullName","primaryProductName","secondaryProductName","registerAddToCart","productName","currencyCode","registerRemoveFromCart","registerImpression","productsInput","listTypeName","productsAsString","parse","e","impressions","currentPrice","productPrimaryName","productSecondaryName","impression","_getProductsFromString","_getProductsFromQuickSearch","_getProductsFromSearchTileData","searchLoading","filteringInProgress","selectedFacets","productResults","tagResults","urlString","tileListData","availableTotalResults","filterSkip","filterTake","visibleResults","pageId","filterEndpoint","filterInitialLoad","initialFacets","initialResults","initialAvailableTotalResults","initialSelectedFacets","initialSearchQuery","initialPageSize","initialTake","performSearch","composedUrl","performProductFiltering","urlComposer","registerItemsForDataLayer","listOfProducts","updateFilteringInprogress","updatePageId","updateFilterEndpoint","updateFilterTake","updateFilterSkip","skipCount","updateExcludeEditorPicks","exclude","updateVisibleResults","updateResults","updateTileListData","concat","updateAvailableTotalResults","clearResults","updateSearchTerm","updateSearchLoading","updateAutoCompleteSuggestion","updateUrlString","string","updateFacets","mapFacets","jsonFacets","parseFilters","tooltip","separated","active","categories","category","categoryValue","filters","facetValue","showAllValue","unshift","allValue","title","hasSearch","controlType","showAll","updateSelectedFacets","updatedFacets","updateSearchQuery","updatedSearchQuery","hydrateSelectedFacets","hydratedSelectedFacets","selectedFacet","matchingFacet","find","matchingFilter","filterByLatLng","lat","lng","params","mapBounds","south","north","west","east","storeLocatorId","mapReady","storeLocatorReady","mapOptions","mapTypeId","mapTypeControl","zoom","center","mapIdle","mapDrag","mapZoom","mapPlaceSearch","zoomLevel","bypassFetch","useCachedStores","emptySearch","selected","hover","userLocation","granted","asking","show","content","accept","label","cancel","apiKey","uri","libraries","zoomLevelOnListClick","countryFilterOnInitialize","countryFilterOnInitializeKey","markerClusterer","markerClustererStart","maxZoomLevelClusterer","onSetSelectionZoom","askForGeoLocation","onGetGeolocationZoom","onGoToStoreZoom","apiDataKey","gpsFailMessage","gpsFailAcceptLabel","directions","storesFound","storesFoundPlenum","noStoresHead","noStoresMessage","noStoresButtonLabel","goToStore","youAreHere","filterValues","setStorelocatorId","setDefaults","defaults","copy","assign","mapZoomChange","mapCenter","mapDragChange","mapIdleChange","setBounds","bounds","setBypassFetch","hoverStore","hoveredStore","selectStore","selectedStore","placeChosen","place","chosenPlace","geoLocationChange","coords","geoLocationCoords","assortmentFilterChange","chosenAssortmentKey","flagShipFilterChange","onlyFlagShips","setSearchTerm","fetchedInitialStores","cachedStores","latitude","longitude","stores","sortedStores","filteredStores","placeSearch","statusCheck","storesSortedByDistance","storesSortedByFilters","getInitialStores","endPoint","getStoresFromBound","topLeftLat","topLeftLong","bottomRightLat","bottomRightLong","centerLat","centerLon","debounce","searchParams","URLSearchParams","activeVimeoVideoId","activeVideoSrc","setActiveVideo","setActiveVimeoVideoId","setActiveVideoSrc","src","contentData","productsData","overlayOpen","openImageProductsOverlay","skuList","CylindoViewMode","ProductType","OptionsType","ControlsMode","CylindoFeature","CookiePrefix","openReConfigurator","closeReConfigurator","openOptionsOverlay","closeOptionsOverlay","openZoomOverlay","closeZoomOverlay","openMaterialGroupInfoOverlay","closeMaterialGroupInfoOverlay","setCylindoViewMode","setCurrentCylindoSku","setCurrentProductId","setCurrentVariantCode","setStepValues","stepValues","getNextStepData","postData","currentProductId","variantCode","currentVariantCode","step","currentStep","currentVariantFeatures","allFilters","entries","feature","getPreviousStepData","getStepData","updateProductFeature","newFeature","newFeatureId","newFeatureValue","reconfiguratorOpen","reconfiguratorActiveSku","currentCylindoFeatures","totalSteps","optionsOverlayOpen","optionsOverlayItems","optionsOverlayActiveListIndex","activeListIndex","zoomOverlayImage","zoomOverlayOpen","materialGroupInfoOverlayData","materialGroupInfoOverlayOpen","current","currentCylindoSku","cylindoViewMode","newFeatureItem","newFeatureCylindoKey","cylindoFeatureKey","newFeatureCylindoValue","cylindoFeatureValue","newVData","newCData","numberOfSteps","vI","variantInfo","cylindoSku","option","optionId","optionValue","currentProductUrl","variantUrl","finalVariantCode","finalProductId","noVisualUpdate","use","Vuex","Store","env","dev","host","basePath","mockData","country","language","showModal","cylindoAccountId","shownAtcFeedbackProductName","shownAtcFeedbackTypeTitle","cartShareCartIsActive","campaignCodePending","campaignCodeData","pdp","configurator","cart","plp","recommendation","search","storeLocator","globalVideo","imageProductsOverlay","reconfigurator","components","Quantity","props","colliAmount","Number","default","colliProduct","Boolean","colliTotal","quantityValue","this","isLoaded","quantityStep","quantityValueBeforeChange","watch","$emit","mounted","quantityInput","$refs","setColliItemsCount","setupInputKeyEvents","methods","addEventListener","characterCode","which","charCode","keyCode","isValidKey","preventDefault","emitQuantityUpdate","handleClick","clickType","ceil","quantityChange","quantityChangeAbsolute","abs","loggedIn","navLinkUrl","String","required","navLinkText","productTypeTitle","vatLabel","vatLabelAdditional","deliveryLabel","isColliRestricted","colliDescription","switchModeNotice","initialQuantity","addedToCartText","addToCartText","quantityInButton","isDisabled","isAddedToCart","addedToCartStillDuration","visualButtonRevertTimeout","quantityInvalidBool","parentDisableButton","vatLabelShown","computed","mapState","doingBasketUpdate","$store","beforeMounted","mapActions","addToCart","clearTimeout","visualRevertAddToCart","atcText","getGtmContext","$attrs","checkDisabledState","shouldDisable","extends","BuySectionCore","$parent","$on","onBuyButtonDisabled","decrement","newQuantity","increment","validateQuantityInput","BuySection","noBuySection","toLowerCase","tiletypeClass","typeAndVariant","hoverImageUrl","ready","srcSetString","imageUrl","productUrl","productImageAltText","useHoverImage","updateReceiverMethodProductTile","variationItem","setMasterHoverImage","masterImageHover","ref","setAttribute","getAttribute","closeHandler","roomExplorerProductChosen","ProductTile","isOpen","toggle","toggleContent","$el","getElementsByClassName","trigger","TweenLite","to","height","onComplete","from","isActive","hasValue","inputValue","$nextTick","checkInitialState","checkHasValue","handleClickOnInput","handleInput","addCampaignCode","campaignInput","PreviewTiles","InputWithLabel","groupActiveAccordionId","$v","alignToSelf","skipScrollToTop","isMounted","inputfield","checked","open","close","targetY","getBoundingClientRect","top","scrollTo","behavior","Accordion","toggleAccordionItem","AccordionFlowItem","next","goToStep","accordions","stepIsValid","accordion","goToAccordion","AccountSubmenu","initialOpenState","activeMenuId","menu","ease","Power4","easeInOut","toggleMenu","cartUrl","shouldQuantityTriggerUpdate","onProductChange","onQuantityInvalid","onQuantityUpdate","actionType","registerInDataLayer","copyText","attrToCopy","text","currentTarget","copyToClipboard","element","str","createElement","appendChild","select","execCommand","removeChild","initText","inputMode","input","oldValue","toggleInputMode","focus","validate","valueChanged","onEnter","target","blur","BuySectionProductLine","TextToInput","mixins","copyTextMixin","$props","ProductLineCore","ProductLineAddons","isLoading","getAddonsForBlock","getAddonsForOverlay","removeProduct","query","tl","TimelineMax","Power1","easeOut","clearProps","borderColor","kill","removeCartItem","ProductLineCart","transitionEnter","done","dataset","autoAlpha","userInput","email","comment","freeze","form","maxLength","validationFields","CartCore","CartShare","shareSavedListUrl","shareSavedListTitle","shareSavedListMessage","isSharingSavedList","validations","getCartShareCartIsActive","shareSavedList","isValid","UserInput_ShareSavedList_Email","$model","UserInput_ShareSavedList_Comment","closeModal","shareSavedListModal","$touch","$error","requestQuoteUrl","requestQuoteNotifyTitle","requestQuoteNotifyMessage","importCartUrl","importCartNotifyTitle","importCartNotifyMessage","importCartFailedNotifyTitle","importCartFailedtNotifyMessage","emptyCartUrl","emptyCartNotifyTitle","emptyCartNotifyMessage","addCommentMode","numberOfItemsToShow","isRequestingQuote","isImportingCart","isEmptyingCart","requestQuote","requestQuoteModal","requestQuoteComment","importCart","importCartModal","importCartModalFile","files","commentAfterEnter","commentInput","toggleCommentMode","emptyCart","cartImportUrl","cartImportId","cartImportTitle","cartImportMessage","isImporting","hasCartItems","importJob","importCartAndCloseModal","openModal","inputCategories","itemIndex","defaultColor","slider","sliderSettings","slidesPerView","spaceBetween","breakpoints","390","450","768","parsedCategories","activeCategory","getComputedStyle","inner","backgroundColor","pagination","clickable","Swiper","hoverCategory","setProperty","resetCategory","Datepicker","format","eventMsg","languages","lang","disabledDates","localDate","calendar","datepickerelement","openPicker","showCalendar","addressIsUnknown","CustomDatepicker","referenceId","useKnownAddress","showSpinner","changeAddressInput","knownModel","model","forceKnownAddress","invalid","activateForm","accordionToggle","onChange","addReferenceId","buttonStatus","campaignCodeDisabled","couponCodeAccepted","cartData","campaignIdentification","submitCouponCode","removeCampaignCode","elements","field","nodeName","alternate","CheckoutBlock","OrderSummary","placeOrder","groupValidates","groups","submitter","group","flatObject","expand","output","expandedObject","line","stringifyFormData","setAction","actionName","scrollToTopClick","buttonStyle","idleText","doneText","doneRevertDelay","isDone","newValue","visualRevertButtonFeedback","FeedbackButton","campaignCodeModel","campaignCodeIsAdded","currency","campaignCodeIsLoading","isAdded","buttonTextReverted","addCampaignIsDone","getCouponCode","checkoutRemoveCampaignCode","ownReference","referencePerson","externalId","isNewPerson","address","isNewAddress","addressLine","zipcode","attention","requiredIf","DataModel_UserInput_ReferencePerson_IsNewPerson","DataModel_UserInput_Address_IsNewAddress","minLength","OrderSummaryOriginal","referencePersonExternalId","referencePersonIsNewPerson","referencePersonName","referencePersonEmail","addressExternalId","addressIsNewAddress","addressAddressLine","addressZipcode","addressCountry","addressAttention","validateForm","submit","fileList","fileCount","isOver","changeHandler","updateFileList","dragEnterHandler","dragExitHandler","dropHandler","dataTransfer","fileItemDeleteHandler","newFiles","newFilesLength","file","logFileList","getFileList","template","AccordionGroup","requred","footer","size","acceptButton","cancelButton","cssClass","backdropColor","bodyColor","css","modalType","hasFooter","colors","hex","g","match","activeName","$slots","onAccept","onCancel","afterEnter","closeButton","dialogAccept","upload","fieldValue","uploadDefaultLabel","pop","addFile","incrementfilecount","removeFile","decrementfilecount","counter","filesAdded","maxCount","showAddMore","incrementCounter","newFileCount","newCount","FileUploadField","FileUpload","Modal","FileUploadContainer","claimflowSubmitReady","openCloseTiming","stepIndexActive","stepIndexPrev","steps","contentRef","isValidated","hasError","issueTypeRadioModel","productList","isInvalid","isRemovable","productListIndex","orderInput","claimsReferenceInput","issueDescriptionValue","validateStep","errors","fileUpload","productListAdd","productListRemove","headlineClick","headlineIndex","animateContent","nextClick","nextIndex","oldIndex","newIndex","activeRef","activeContentRef","nextRef","nextContentRef","addLabel","submitClaimflow","submitRequestUrl","yourEnquiry","submissionComplete","isSubmittingForm","handleSelectedOptions","successHandler","resetForm","RequestConfiguration","baseUrl","startFrame","activeLevel","activeSlide","activeSlideId","activeGroupType","initialOptionGroupItem","optionGroupIsSaving","selectedOption","selectedOptionGroupId","optionGroupConflictActive","generalConflict","cylindoSettings","cylindoInstance","cylindoIsLoading","cylindoInitDone","cylindoSkuChanged","cylindoGuideActive","cylindoErrorHandlerAdded","cylindoZoomMode","cylindoPanMode","productInfo","upholsteryPreviewStyle","upholsteryPreviewActive","upholsteryPreviewForceInactive","upholsteryPreviewActiveIndex","upholsteryPreviewTimeout","upholsterySelection","upholsterySelectionInfo","upholsterySearchModel","typeId","colorId","nameId","headerProductPreviewActive","headerProductPreviewUrl","upholsteryDropDownValues","nameSelected","upholsteryNameFilter","upholsteryOptions","showMobileOptions","mobileShowProductAfterSave","colorMessageShown","colorMessageTimeout","upholsteryInfoExpanded","upholsteryStickyHeight","upholsteryStickyControlsHeight","configuratorData","variantCylindoSku","filteredUpholsteryNames","disabled","loadInitialOptions","hideAnySlide","upholsteryPreviewUrl","updateCylindo","initCylindo","upholsteryOption","cylindoFeatures","features","getUpholsteryOptions","setInitiallySelectedOptions","apiResponseSuccess","selectedOptionValues","optionGroup","initialSelectedOption","container","urlParams","loadOptions","groupId","loadCylindoSku","selectedOptionId","initialSelectedOptions","updateSelectedOptions","newSelectedOption","combiIds","doFilter","makeFeaturesTuples","featureData","featureKeys","keys","featuresTuples","optionClick","optionGroupType","optionGroupId","setUpholsteryStickyHeight","optionItemId","setActiveUpholsteryItem","boolConflict","conflicting","isConflicting","SetGeneralConflict","cylindoProductData","values","isModularVariant","optionGroupSave","hideSlide","selectedItemInfo","updateBuySectionAfterFetch","updateUpholsteryOptions","searchModel","upholsteryTypeFiltering","upholsteryNameFiltering","upholsteryColorFiltering","upholsterySearch","conflict","hasConflict","mobileSaveAndShowProduct","setFeatures","fetchHeaderProductPreview","isHttps","protocol","getCurrentFrameUrl","setHeaderProductPreview","opts","debug","containerID","accountID","SKU","thumbs","fullscreen","progressBar","customZoomContainer","ARDesktop","ARQuickLook","QRCodeTitleTxt","QRCodeTxt","ARLoadingTxt","ARNotAvailableTxt","ARBackToViewTxt","ARBtnTxt","cylindo","on","viewer","addCylindoEvents","events","THREESIXTY_COMPLETE","SPIN_BEGIN","SPIN_END","ZOOM_ENTER","ZOOM_EXIT","VIEWER_READY","ct","stopPropagation","rotate","openCloseMobileOptions","showAuxilliarySlide","toggleId","showContact","hideAuxilliarySlide","showSlide","groupType","showUpholsteryExample","backgroundImage","hideUpholsteryExample","getDummyUpholstery","imageThumb","imageLarge","imageAlt","itemLabel","info","extra","images","closeColorMessage","openColorMessage","toggleColorMessage","toggleUpholsteryInfo","upholsteryStickyRef","offsetHeight","initialChosenItemCode","initialChosenItemImg","initialChosenItemLabel","chosenItemImg","chosenItemCode","chosenItemLabel","toggleAccordion","alreadyOpen","showHideDropdown","hideDropdown","showDropdown","closeIfOpen","initiator","goToUrl","selectItem","img","acceptChosenItem","initialCountry","initialCountryList","chosenCountry","chosenCountryNative","changeCountry","acceptChosenItemNative","startsWith","VariationDropdown","CountrySelectorInput","initialIsShown","isHidden","isAnimated","isShown","chosenCountryCode","epiBlockId","headline","bodyText","userTypeChosenHandler","pathname","imageData","selectedImageUrl","cylindoData","textContent","vm","presentation","cylindoContent","alternateContent","trackSlideChange","frame","showOverlay","clickedSrc","setOverlayActiveSource","splitIndex","newData","brokenBits1","brokenBits2","closeOverlay","customerName","startAnimationsDelay","repeats","computedStartAnimationsDelay","computedRepeats","paused","cssTiming","dashboardTitleStillDuration","repeatDelay","repeatCount","repeatInterval","startTimeout","setupAnimations","startAnimations","showDashboardText","setInterval","clearInterval","seek","play","nameTextCover","startDelay","className","nameText","dashboardText","dashboardTextCover","stopAnimations","gotoAndStop","defaultState","states","DEFAULT","ASCENDING","DESCENDING","newState","eventName","eventData","createHeaderData","headerObj","defaultSort","returnArrayData","header","toUpperCase","sortBy","sortDirection","DataTableLabel","headerData","parsedData","fetchEndpoint","allowSorting","currentPage","sortUrlParams","tableParameters","pageSize","nextPage","selectedRow","selectedRowPayload","searchInput","debouncedFetchComposedEndpoint","_","fetchComposedEndpoint","useSearchFacets","recordLink","highlightSearchResults","searchHighlightColor","searchableHeaders","parameters","searchAboveTable","tableData","totalRows","filteredDataBasedOnSearchInput","row","includes","highlightedValuesBasedOnSearchInput","rowsWithSearchHit","acc","substr","highlighted","RegExp","tabelDataMappedToHeader","originalData","cloneDeep","colSequence","originalRow","mappedRow","col","uniqueRowLinks","rowLink","totalPageCount","showPager","pagerData","firstVisiblePageNumber","lastVisiblePageNumber","showDotsBefore","showDotsAfter","pagerType","page","displayedPage","pagerArrowBefore","pagerArrowAfter","actionCell","config","tableRow","sortData","colKey","headerCol","goToPage","requestedPagenumber","composedEndpointUrl","Gtm","generalError","DashboardHeader","AccountMenu","TableComponent","firstExampleButtonStatus","secondExampleButtonStatus","thirdExampleButtonStatus","fourthExampleButtonStatus","thirdButtonExampleTimeout","firstExampleButtonRevertCallback","firstExampleButtonClick","secondExampleButtonRevertCallback","secondExampleButtonClick","thirdExampleButtonRevertCallback","thirdExampleButtonClick","thirdExampleButtonReset","fourthExampleButtonRevertCallback","fourthExampleButtonClick","passwordHidden","password","toggleHidden","FormPassword","reURIAllowed","reCNameAllowed","sKey","sValue","vEnd","sPath","sDomain","bSecure","vSameSite","test","cookie","sExpires","constructor","Infinity","toUTCString","makeSetterString","guidedTourStyle","activeSlideColor","slides","getPropertyValue","paginationMidfix","tourId","autoOpen","pmf","querySelectorAll","slideCount","settings","speed","navigation","nextEl","prevEl","keyboard","enabled","fromEdge","reachEnd","lazy","loadPrevNext","watchOverflow","renderCustom","swiper","back","Cookies","GuidedTour","InvitationBanner","tour","dir","scrollPos","deviceHeight","docHeight","stickyItems","pos","lastDirChangePos","stickyFrom","setupStickyItems","scrollHeight","lastScrollTop","onScroll","screen","pauseSticky","animateTop","currentPos","animateBottom","bottom","animateBackToSticky","inView","once","threshold","ratio","observer","IntersectionObserver","isIntersecting","intersectionRatio","unobserve","observe","buttonText","imageProductsOverlayData","isInview","clickHandler","setImageProductsOverlayData","animateButton","ImageProductsButton","muted","toggleSound","videoRef","openVideo","videoType","videoValue","ViewingAs","stickyScrollTopOffset","activeItem","activeSubItem","activeSubRootItem","isScrolledToTop","hasAccountMenu","simulateUser","mobileMenu","desktopMenu","isConfiguring","subRootLevelActive","closeSubRootLevels","setPauseSticky","toggleTopLevel","subLevel","menuItem","getLevelItem","opacity","animateTopLevel","easeIn","isSubLevelActive","toggleSubRootLevel","clickedItem","subRootLevelItem","setSubRootLevelActive","closeSubLevel","openSubLevels","openSubLevelsIcons","loadContentBackgrounds","removeAttribute","handleSearchClick","handleMiniCartClick","openMiniCart","$children","findIndex","$options","er","triggers","labelsProp","shouldShowForm","triggerValue","labels","campaignList","showForm","showNewsletterChoices","that","SleekNote","sleeknoteSiteData","triggerId","handleSubmit","triggerOnclick","NewsLetter","handleCountrySelectorClick","storedItemHeight","closeMiniCart","anyChecked","vals","some","newsletterTypes","consent","setName","setEmail","setType","allowMultipleChecked","setConsent","$invalid","NotificationPanel","atcLink","bgColor","stallDuration","showLink","cssTransitionDuration","removalTimeout","bgColorCss","showPanel","clearRemovalDelay","startRemovalDelay","removePanel","hasMounted","showAtc","showAtcWithButton","showErrorPanel","showErrorTitlePanel","showInfoPanel","showCustomColorInfoPanel","showWarningPanelMessage","showWarningPanelTitle","showWarningPanelTitleMessage","editOrderUrl","editOrderNotifyTitle","editOrderNotifyMessage","isEditingOrder","editOrder","behindHeader","searchMode","CylindoOverlay","showNavigation","overlaySlider","loop","preloadImages","targetSrc","realIndex","click","lazyImageReady","slideChange","render","_vm","_h","$createElement","_c","_self","staticClass","class","attrs","viewBox","_v","_s","_withStripped","component","__file","defaultSettings","centeredSlides","autoHeight","onlyInViewport","loadPrevNextAmount","imageSrc","isPlanner","designer","imageAltText","isConfigurable","trumpet","hasShortcuts","configureShortcutsOverlayData","isLargeTile","openConfigureOverlay","openShortcutsOverlay","ProductTileProd","InspirationTile","limit","tileDataJson","loadMoreUrl","loadMoreText","totalNumberOfProducts","localLimit","showLoadMoreButton","numberOfProducts","tileData","loadMoreCount","onLoadMore","ProductVisualization","Slider","AddonsOverlay","skuCopied","tagName","readMoreClick","targetElement","HTMLElement","scrollIntoView","block","accordionTrigger","attr","onInputChange","mouseLeave","checkbox","selectedFilter","LOGICAL_STATE","control","AccordionItem","FormCheckboxFilter","FormLogicalFilter","filterGroupIndex","showRemainingFilters","allFiltersShown","isChecked","getLogicalValue","checkedFilters","useShowAll","selectedFilters","filteredCategory","AccordionItemFilter","closeProductFilters","openProductFilters","hideContent","addFilter","removeFilter","getFilterItems","onSelect","checkedFilter","doApiStuff","toLocaleString","filterGroups","historyStateAction","historyUnused","skipFilterEndpoint","updateBrowserHistory","editorPicksDOM","formCheckboxFilter","hideBar","navigationLinks","makeRoomForSearch","updateFilteredResult","changeFilter","onReadyToShip","newFilter","existingFilter","linkClass","link","navigationLinksParsed","countCheckedFilters","displayCheckedFilters","ProductFilter","TileFilter","isDirty","ghostProducts","limitProducts","onFilterChange","lastItem","getId","onMoreClick","triggerOnce","expanded","animating","expandButtonHandler","gradientColor","Expandable","bodyBackground","TouchScroll","axis","drag","time","isIE","navigator","userAgent","isFirefox","me","draggable","ondragstart","addEvent","onMouseDown","onMouseMove","onMouseUp","elzoom","getElementById","onMouseWheel","prev","diffx","distance","func","attachEvent","srcElement","returnValue","wait","offsetX","clientWidth","offsetY","clientHeight","cancelEvent","startx","scrollLeft","starty","diffy","animate","sin","cancelAnimationFrame","detail","wheelDelta","allProductsJSON","markers","productMarkerHandler","productJSON","roomExplorerSingleProductChosen","allProductsHandler","roomExplorerOverlayProductsChosen","roomsJson","Room","scrollView","slidesCount","slidesRef","touchScrollers","simulateTouch","allowTouchMove","effect","fadeEffect","crossFade","roomsList","roomId","markerId","catalogEntry","allProducts","room","ts","tsEl","init","ProductLineRoomExplorer","slideContent","showContent","backdropSlidedOut","tileDataParsed","Set","muutoExperience","getCategories","ele","delete","changeMuutoExperience","setFilterValue","setSearchString","onlineShops","filtered","shop","muuto_experience","company_name","website_name","TweenMax","removed","removeAnimationEnd","debouncedPerformSearch","ProductLineSearch","preSearchTerm","searchPageUri","searchTermSuggestionActive","minimumCharacters","isSafari","showGhostContent","showEmptySearch","doSearch","suggestionShow","searchTermSuggestion","showPopularSearches","matchMedia","matches","scrollingElement","resetSearch","mapMutations","handlePopularClick","clickEvent","popularTerm","handleKeyinput","inputEvent","handleTermSuggestionClick","calculateArrowVisibility","isBeginning","isEnd","sliderOptions","showPagination","defaultSliderSettings","handleSlideClick","resize","useCustomCursor","zoomStyle","$event","mousemove","mouseMoveHandler","imageStyle","zoomSrc","noMouse","_e","hasZoom","MosaicSliderZoom","captions","navButtonsVisible","thumbEvent","elm","slideTo","thumbClick","changeCaption","direction","carouselEvent","activeCaption","prevNextCaption","captionTransitionEnd","handleSwiperSlideChange","handleSwiperClick","srczoom","zoomCloseHandler","caption","timeoutHandle","MosaicSlider","storeCountText","assortmentKeys","as","assortmentSelect","fc","flagShipCheckbox","assortmentSelectChange","flagShipCheckboxChange","selectedIndex","StoreLocatorListItem","itemData","city","tagsString","ph","links","trackingAction","trackingLabel","isHighlighted","listItemClick","linkClick","initAutoComplete","autoCompleteInput","offsetTop","storeLocatorList","scrollToTop","storeLocatorSearch","google","maps","places","Autocomplete","addListener","onPlaceChange","getPlace","onPlaceInputClick","geoLocationClick","getUserCordsPermission","position","reject","geolocation","getCurrentPosition","enableHighAccuracy","StoreLocatorFilters","StoreLocatorList","StoreLocatorMap","useClusters","stateRef","mapContainer","markerIcons","icons","w","h","defaultSelected","defaultHover","flagShip","flagShipSelected","flagShipHover","cluster","locationMarker","injectMapsApi","setZoom","sortStoresByDistance","isObject","goToLocation","updateMarkerIcon","geoLocationChanged","handleGeoLocation","sortStoresByFilters","assortmentKeyChanged","onlyFlagShipsChanged","onSearchEnter","storeLocatorMap","mapsScript","languageCode","head","initMap","clientMapType","StyledMapType","mapStyles","Map","mapTypes","addMapEvents","setupIcons","addListenerOnce","getMapCenter","getMapBounds","newPlace","setMap","geometry","icon","MarkerImage","Size","Marker","animation","Animation","DROP","yourSearchMarkerLabel","setAnimation","BOUNCE","viewport","fitBounds","setCenter","latlng","LatLng","mapSize","geoLocationMarker","client_id","useLatLng","getCenter","getBounds","toJSON","updateMarkers","storeData","createMarker","handleMarkerClustering","currentStoresIds","selectedMarker","marker","setVisible","clusterRenderer","svg","btoa","dynamicSize","min","scaledSize","fontSize","zIndex","MAX_ZINDEX","clearMarkers","MarkerClusterer","renderer","storeType","getStoreType","idle","optimized","markerRef","mst","mi","setIcon","panTo","distanceToCenter","getDistanceToCenter","assortmentFilter","flagShipFilter","newStores","storesCount","markerPos","spherical","computeDistanceBetween","getLocationFromAddress","geocoder","Geocoder","geocode","GeocoderStatus","OK","AutocompleteService","getPlacePredictions","description","categoryId","translation","require","vueVimeoPlayer","videoID","playerReady","isPlaying","width","onReady","player","showLoadMore","noResults","loadMoreResults","skipValue","clearTileFilters","imageHeight","aspectRatio","curActive","amount","throttle","update","setActive","idx","componentTop","tail","max","parallaxAmount","firstChild","transform","setHeaderColor","headerColor","getAspectRatio","paddingBottom","beforeDestroy","removeEventListener","mediaLoaded","imageX","imageY","mouseOverHandler","videoSrc","mediaLoadedHandler","mouseOutHandler","getXlinkHref","yLerpPos","limited","leftPos","textScale","textLeftStyle","textRightStyle","mediaStyle","trumpetStyle","browser","getPositionOnPage","parentElement","overflow","styles","animationDuration","scrollRestoration","Hero","MegaLinks","CategoryTile","SlidingPresentation","resizeListener","oldScrollY","resizeTimeout","scrollPosition","containerHeight","sectionProps","sections","scrollListener","forceUpdate","scroll","scrollY","section","y","prop","sectionCount","getOffsetTopRecursive","actualOffset","offsetParent","isIE11","MSInputMethodContext","documentMode","activeVideoVimeoId","showHTMLPlayer","showVimeoPlayer","vimeoId","backgroundHoverColor","storesLabel","hours","bodyRef","bodyBackgroundColor","imageLoaded","labelHeight","listHeight","mobileBehaviour","lineHeight","scrollPanelHeight","currentLine","linksLength","scrollPosTranslated","imageTimeoutHandle","moduleStyle","list","addMobileHandlers","removeMobileHandlers","imageLoadedHandler","updateScrollPosition","scrollPosAdjusted","scrollListTo","scrollHandler","round","toolboxLabel","expandButtonLabel","initialCount","navigationItems","labelColor","initialCountComputed","isExpanded","expandAll","getHoverColor","blendColors","color1","color2","percentage","color3","int_to_hex","num","Toolbox","headlinePartOne","headlinePartTwo","headlineUnbroken","heroVideoSrc","heroImageSrc","windowTrigger","scrolledIntoBanner","scrolledPastBanner","toolboxHeroStyle","bgMediaStyle","windowOffset","maxOffset","imageSrcDefault","imageSrcAlternative","VIEW_STATE","itemList","toggleButtonText","titleText","viewState","toggleViewHandler","hasImageProducts","HasImageProducts","heroType","headlinePartThree","goExploreText","labelText","heroHref","colorStyle","textColor","parallaxStyle","videoStyle","scrollDownHandler","mediaVideoSrc","mediaImageSrc","tabClickHandler","Function","freeMode","linkUrl","linkText","modifier","media","getModifiers","getColorStyle","TabsBar","UspSpot","titleNumber","styleExplorerData","getStyleList","activeStyleIndex","560","1024","1920","styleChangeHandler","getSlideStyle","rangeStartText","rangeEndText","models","linkHref","propertyExplorerData","getPropertyList","activeCategoryModelCount","activeCategoryIndex","activeModelIndex","activeRangePosition","propertyChangeHandler","rangeChangeHandler","mainImages","materialsLabel","subCategoriesLabel","subCategories","seeMoreLabel","ctaLabel","ctaHref","sliderLabel","sliderItems","inspirationGalleryData","getCategoryList","activeCategoryImageCount","randomOffsets","categoryChangeHandler","changeCategory","setTriggerExperienceResize","grid","categoryClickHandler","openMaterialOverlay","byline","headlineNumber","ctaText","categoryList","featuresLabel","featuresList","observeParents","565","767","1023","1279","1923","featureClickHandler","openExplanationOverlay","three","img1Src","img2Src","slideList","activeSlideIndex","slideChangeHandler","currentSlide","button","MESSAGE_POSITION","startAngle","messageList","extraCylindoOptions","hej","overallStyle","startAngleConverted","sA","messageCount","activeMessageIndex","hasScrolledInto","hasScrolledPast","rotationIncrement","synchronizedRotation","cylindoOptions","encoding","deckTopRelative","deckBottomRelative","goToAngle","findActiveIndex","foundIndex","getMessagePositionClass","initInterval","details","unit","plannerLinkHref","plannerLinkText","plannerLinkTarget","readMoreText","modelList","activeModel","grabCursor","1439","slideClickHandler","categoryTabsList","activeCategoryStyle","closeText","activeAccordionIndex","closeMaterialOverlay","setActiveMaterialCategory","inline","closeExplanationOverlay","viewportsBeforeActivation","findInStoreText","productLabel","findInStoreHref","findInStoreTarget","backText","backHref","tryWithARText","configureText","arShortcutsOverlayData","getOffsetStyle","triggerPoint","offset","isStuck","openAROverlay","closeShortcutsOverlay","ctaTarget","iconName","iconSrc","activateClickHandler","stepText","activeSlideStyle","getButtonStyle","sT","productVariant","productHref","chapters","startIndex","endIndex","stories","titlePart1","titlePart2","cursorBackgroundColor","cursorTextColor","buttonHref","buttonLabel","isAssembled","titlePart3","imageSrc1","isDesigner","textColor2","imageSrc2","videoPosterSrc","videoDuration","videoTitlePart1","videoTitlePart2","slideStyle","autoplay","playsinline","preload","domProps","innerHTML","videoSrc1","videoSrc2","playClickHandler","_l","productsHaveVariants","StorySlide","StorySlideCover","StorySlideContent","StorySlideVideo","StorySlideProducts","dragText","useDragCursor","useAutoPlay","activeChapter","activeStoryIndex","activeStoryItem","autoplayProgress","autoplayStarttime","touchStartPreventDefault","cursorX","cursorY","cursorTargetX","cursorTargetY","cursorActive","cursorFocused","cursorStyle","footerClass","chapter","chapterClickHandler","lerp","end","nextButton","prevButton","pageX","pageY","running","AnimatedHero","IntroductionBlock","PropertyExplorer","DesignExplorer","SeriesOverview","MaterialExplorer","MaterialOverlay","InspirationSlider","ScrollRotator","ModelExplorer","InspirationGallery","ExplanationOverlay","ShortcutsOverlay","ShortcutsBar","ArBanner","StepGuide","StorySlider","sectionTriggerPoint","marginOffset","adjustedScrollPosition","modifierClass","headlineFull","media1","media2","hoverTextVisible","hoverTextX","hoverTextY","hoverTextStyles","left","cta","tileClass","tileStyle","srcset","sizes","scrolledToStart","scrolledToEnd","scrollIncrement","scrollYDelta","rect","handleScroll","scrollable","scrollWidth","scrollRight","TileList","InspirationTileV2","DataTableScroll","testActive","countText","closeImageProductsOverlay","isDouble","isPackshot","isCylindo","isContent","isInteractive","anchor","texts","cylindoTexts","hasARCallback","inlineTemplate","staticRenderFns","imageClickHandler","srcLrg","imageLoadError","imageLrgLoadError","directives","rawName","imageLoadSuccess","expression","load","imageLoadHandler","imageErrorHandler","imageLrgLoadSuccess","isFocused","useFocusToggle","isBlurred","focusViewer","viewbox","blurViewer","guideVisible","useSimpleGuide","dragToRotate","clickToZoom","tapToInteract","doubleTapToZoom","noMessage","messageShown","toggleMessage","messageLabel","xmlns","closeMessage","messageBody","messageButton","tST","tET","cX","cY","tE","eCX","changedTouches","eCY","touches","overlayImage","tabindex","keydown","_k","showAllVariants","currentVariantListItems","variantLists","variantCategoryChangeHandler","activeVariantCategoryIndex","selectedVariantName","listKey","currentVariantList","mouseover","variantHoverHandler","mouseout","variantUnhoverHandler","isEditable","deleteItemHandler","showAllAttributes","attributeList","nameShort","selectedAttributeName","currentOptionList","overlayItems","optionListChangeHandler","activeOptionListIndex","currentOptionListItems","isDeleting","currentDeleteItem","systemText","variantDeleteHeadline","deleteConfirmHandler","variantDeleteConfirm","deleteCancelHandler","variantDeleteCancel","overlayData","properties","variantLoading","stepData","stepLoading","showModelSelector","headlineIsSticky","showMaterialSelector","isSearchView","isFiltersView","searchClickHandler","filtersClickHandler","exitClickHandler","searchString","placeholder","searchFocusHandler","composing","subcategoryChangeHandler","activeSubCategoryIndex","subCategoryTabsList","extractedColorList","activeColorFilter","colorFilterChosen","colorMap","searchStringMinLength","activeSubCategoryType","activeItems","noResultsText","activeCategoryType","rowSize","hasInfo","infoClickHandler","updateKey","loopableItems","isItemActive","selectSwatch","lazyLoading","expandClickHandler","remainingItemsCount","selectModel","colliText","maxlength","AccordionFlow","AddonsBlock","Cart","CartImportLink","CategoryTileRaw","Checkout","CheckoutOriginal","ClaimFlow","Configurator","CountrySelector","UserTypeSelector","Dashboard","FeedbackButtonExampleWrapper","GuidedTourController","Gateway","HeaderLogo","MainMenu","MainFooter","NewsletterNonSleek","NotificationPanelWrapper","NotificationPanelExamplesWrapper","MiniCart","OrderOverview","OverlayBackdrop","PageHeader","Pdp","ProductListFilter","Receipt","isProductsExpanded","isSummaryExpanded","toggleSummary","toggleProducts","Recommendation","SearchOverlay","SliderV2","MosaicSliderOverlay","StoreLocator","VideoPlayerVimeo","FilterTabs","RoomExplorer","RoomExplorerOverlay","RoomExplorerProduct","Onlineshops","StickyGallery","StickyScroll","VideoPlayerGlobal","ProductLineExamples","StoresNavigation","ToolboxHero","ExperienceScroll","HeroFragmented","HorizontalCollapsible","ImageProductsOverlay","Reconfigurator","QuantityMobile","PresentationTile","VariantOptions","AttributeOptions","OptionsOverlay","ZoomOverlay","MaterialGroupInfoOverlay","CylindoViewer","ConfigurePanels","menuColor","productNameHeadline","productNameSubheadline","productType","plannerHref","presentationTiles","variantListsInitIndex","variantFallbackName","attributeLists","hasAddons","hasVariants","hasAttributes","presentationRowsDesktopLimit","tryAR","cylindoCrops","posX","posY","zoomLrg","additionalLinks","useMobileControlsSnap","mobileControlsInFocus","windowScrollAllowed","windowScrollTop","presentationScrollTop","presentationCH","presentationSH","presentationActiveSlideIndex","presentationScrollPct","presentationScrollPctAdjusted","presentationTilesConstrained","presentationTilesCount","presentationGalleryTileCount","presentationGalleryTileShownCount","controlsScrollPct","controlsSH","presentationCalculatedHeight","controlsCalculatedHeight","controlsCalculatedHeightSaved","presentationTileARUrl","currentQuantity","showQuantityTimeout","showAddedTextTimeout","showingAddedText","mobileQuantityActive","userIsTouching","isReloading","cylindoFeatureString","viewMode","getActiveVariantName","foundVariant","fV","variant","showCTAs","mobileHasLeftCTA","isMobileFocusedMode","presentationTileWithAnchor","presentationTileWithCylindoViewer","onlyOneVariant","setSectionHeights","toggleMobileListeners","handler","createFeatureString","deep","controlsOptions","controlsHeader","getAttributeName","attributeIndex","getActiveAttributeName","foundAttr","force","touchListenerStart","touchListenerEnd","touchListenerCancel","testForWindowScrollPosition","windowScrollListener","presentationScrollHandler","closeToolTip","cOT","controls","thr","focusMobileControls","defocusMobileControls","ctaClickHandler","startConfigureClickHandler","registerViewAddon","configuratorModeShiftHandler","configuratorHasARHandler","q","parsePresentationTiles","tilesConstrained","tileShownCount","tileImageGalleryCount","tileImageGalleryShownCount","tile","cancelConfigureClickHandler","beforeUnloadHandler","reloadText","finishConfigureHandler","currentSaved","expires","entry","encodeURI","Tooltip","clickListener","UspSpotBanner","spotEls","spotCount","spotsScrollWidth","spotsScrollPos","activeSpotIndex","spotsScrollHandler","spots","pct","floor","prevClickHandler","nextClickHandler","HeroMinimal","pair","urlFacet","existingSelectedFacet","onpopstate","PushEvent","Gta","ChangePriceView","Ph","mixin","PortalVue","Vuelidate","VueLazyload","VueVimeoPlayer","vSelect","OpenIndicator","vueApp","delimiters","beforeMount","vendor","opera","onresize","nojsElem","inputs","secondaryInit","objectFitImages","dsApps"],"mappings":"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DouC,SAAU,CAAEx8E,MAAOotD,EAAIlgC,eACvBmmB,GAAI,CACFzb,MAAO,SAAU2kC,GACXA,EAAOpkC,OAAOmwD,YAGlBl7B,EAAIlgC,cAAgBqvC,EAAOpkC,OAAOn4B,oBAUlD,GAAO+tD,eAAgB,EC3FvB,ICHiN,GDGjN,CACA,uBACA,OACA,aACA,YACA,WAEA,cACA,aACA,YAEA,WACA,YACA,cAEA,UACA,YACA,WAEA,sBACA,YACA,YAGA,KAxBA,WAyBA,OACA,aACA,gMACA,YACA,kDACA,+FAGA,OACA,cADA,WAEA,qGAGA,sCAEA,wCAGA,SAVA,WAWA,mCAGA,QA/CA,WAgDA,oGAEA,0BACA,2BAEA,kBAEA,SAEA,oBAFA,WAEA,WAEA,2DACA,qCACA,iBAGA,sBAMA,8DACA,qCACA,iBACA,sCACA,uBACA,wBAEA,qBAGA,OAEA,YA3BA,SA2BA,KACA,WACA,yDAEA,wDACA,uBACA,uCAGA,0EACA,8CAEA,0BACA,4BAEA,mBA1CA,WA2CA,wCACA,wCACA,oDAEA,mEAIA,mBAnDA,SAmDA,GACA,2FACA,0BACA,mBAEA,+DAEA,yBACA,0GACA,2BAEA,wDACA,cACA,iCAEA,0BAIA,gGAEA,WAxEA,SAwEA,GACA,OACA,YACA,aACA,OACA,QACA,UEjII,GAAY,aACd,GACA,GHoFoB,IGlFpB,EACA,KACA,KACA,M,ktDAuBF,GAAUroD,QAAQuoD,OAAS,6EChCZ,ICsHA,IACd34B,aACAyQ,kBACAikD,iBACAlqC,eACAmqC,eACAh6B,iBACAt+B,cACAu4D,QACAC,kBACAve,gBACAwe,mBACAC,YACAC,oBACAlpD,iBACAmpD,aACAC,gBACAC,mBACAC,oBACAj+B,kBACA7sB,oBACA+qD,aACA9qC,mBACAlE,kBACA+Y,cACA/xB,kBACAioD,gCACAtiD,cACAE,uBACAH,mBACA4Y,gBACA2C,cACAinC,wBACAC,WACAC,cACArf,QACAvc,mBACA67B,YACAC,cACAphC,cACAqhC,sBACAC,4BACAC,oCACAC,YACA9iD,SACA+iD,iBACAjqD,gBACA6C,wBACAqnD,mBACAC,c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","file":"js/app.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([637,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import camelCase from \"lodash/camelCase\";\r\n/**\r\n *\r\n * @param {String} type - type of async mutation\r\n * SUCCESS - mutation key\r\n * FAILOR - mutation key\r\n * PENDING - mutation key\r\n * action - action key\r\n * loadingKey - key in the store object for pending state\r\n * stateKey - key in the store object for returned data\r\n */\r\nconst createAsyncMutation = (type) => ({\r\n\tSUCCESS: `${type}_SUCCESS`,\r\n\tFAILURE: `${type}_FAILURE`,\r\n\tPENDING: `${type}_PENDING`,\r\n\taction: `${type}_ACTION`,\r\n\tloadingKey: camelCase(`${type}_PENDING`),\r\n\tstateKey: camelCase(`${type}_DATA`),\r\n});\r\n\r\nconst createMutation = (type) => ({\r\n\taction: camelCase(`${type}_ACTION`),\r\n\tmutation: camelCase(`${type}_MUTATION`),\r\n\tstateKey: camelCase(type),\r\n});\r\n\r\n// General\r\nexport const GET_RECOMMENDATION = createAsyncMutation(\"RECOMMENDATION\");\r\n\r\n\r\n// PLP\r\n// filter\r\nexport const GET_PRODUCTS = createAsyncMutation(\"PRODUCTS\");\r\nexport const SET_FILTER_COLOR = createMutation(\"FILTER_CHECKBOX_COLOR\");\r\n\r\n// PDP\r\nexport const GET_OPTION_GROUP_ASYNC = createAsyncMutation(\"PDP_OPTION_GROUP\");\r\nexport const CART_ITEM_ADD_ENDPOINT_ASYNC = createAsyncMutation(\r\n\t\"PDP_CART_ITEM_ADD_ENDPOINT\"\r\n);\r\n\r\n// Used to open / close the cylyndo overlay on PDP\r\nexport const CYLINDO_OVERLAY = createMutation(\"CYLINDO_OVERLAY\");\r\n\r\n// CONFIGURATOR\r\nexport const CONFIGURATOR_OPTIONS_ASYNC = createAsyncMutation(\r\n\t\"CONFIGURATOR_OPTIONS\"\r\n);\r\nexport const CONFIGURATOR_INITIAL_OPTIONS_ASYNC = createAsyncMutation(\r\n\t\"CONFIGURATOR_INITIAL_OPTIONS\"\r\n);\r\nexport const CONFIGURATOR_CYLINDO_SKU_ASYNC = createAsyncMutation(\r\n\t\"CONFIGURATOR_CYLINDO_SKU\"\r\n);\r\nexport const CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC = createAsyncMutation(\r\n\t\"CONFIGURATOR_REQUEST_CONFIGURATION\"\r\n);\r\n\r\n// Order overview\r\nexport const EDIT_ORDER_ASYNC = createAsyncMutation(\"ORDER_EDIT_ORDER\");\r\n\r\n// Checkout\r\nexport const POST_CAMPAIGN_CODE_ASYNC = createAsyncMutation(\"CAMPAIGN_CODE\");\r\n\r\n// CART\r\nexport const GET_CART_ITEMS = createAsyncMutation(\"CART_ITEMS\");\r\nexport const UPDATE_QUANTITY_ASYNC = createAsyncMutation(\r\n\t\"CART_UPDATE_QUANTITY\"\r\n);\r\nexport const REQUEST_QUOTE_ASYNC = createAsyncMutation(\"CART_REQUEST_QUOTE\");\r\nexport const EMPTY_CART_ASYNC = createAsyncMutation(\"EMPTY_CART_ASYNC\");\r\nexport const IMPORT_CART_ASYNC = createAsyncMutation(\"IMPORT_CART_ASYNC\");\r\nexport const GET_CART_QUANTITY = createAsyncMutation(\"CART_QUANTITY\");\r\nexport const SHARE_SAVED_LIST_ASYNC = createAsyncMutation(\r\n\t\"SHARE_SAVED_LIST_ASYNC\"\r\n);\r\nexport const IMPORT_SAVED_LIST_ASYNC = createAsyncMutation(\r\n\t\"IMPORT_SAVED_LIST_ASYNC\"\r\n);\r\n\r\n// Store Locator\r\nexport const FETCH_STORES = createAsyncMutation(\"FETCH_STORES\");\r\n\r\n\r\n// Country + user type\r\nexport const SELECT_COUNTRY = createAsyncMutation(\"SELECT_COUNTRY\");\r\nexport const SELECT_USER_TYPE = createAsyncMutation(\"SELECT_USER_TYPE\");\r\n\r\n// Shop image\r\nexport const REQUEST_OVERLAY_PRODUCTS = createAsyncMutation(\"REQUEST_OVERLAY_PRODUCTS\");\r\n\r\n// BOOL enums\r\nexport const OPEN_MODAL = \"OPEN_MODAL\";\r\nexport const CLOSE_MODAL = \"CLOSE_MODAL\";\r\nexport const SHOWN = \"SHOWN\";\r\nexport const HIDDEN = \"HIDDEN\";\r\n\r\n// status\r\nexport const STAUS_IDE = \"STAUS_IDLE\";\r\nexport const STAUS_PENDING = \"STAUS_PENDING\";\r\nexport const STAUS_SUCCESS = \"STAUS_SUCESS\";\r\nexport const STAUS_ERROR = \"STAUS_ERROR\";\r\n\r\n// keys\r\nexport const ENTER = \"Enter\";\r\n\r\n\r\n\r\n// CONFIGURATOR V2\r\n\r\n\r\nexport const RECONFIGURATOR_GETSTEP_ASYNC = createAsyncMutation(\r\n\t\"RECONFIGURATOR_GETSTEP_ASYNC\"\r\n);\r\n\r\nexport const RECONFIGURATOR_GETVARIANT_ASYNC = createAsyncMutation(\r\n\t\"RECONFIGURATOR_GETVARIANT_ASYNC\"\r\n);","const loadingDelay = (ms) => (x) => new Promise(resolve => setTimeout(() => resolve(x), ms));\r\n\r\n/**\r\n *\r\n * @param { VUEXStore*} store\r\n * @param {Object} option.url - Required\r\n * @param {Object} option.mutationTypes - Required\r\n * @param {Number} option.delay - loading delay default:0\r\n *\r\n */\r\n\r\nexport const getRequest = (store, { url, mutationTypes, delay = 0 }) => {\r\n store.commit(mutationTypes.PENDING, true);\r\n return fetch(url, {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then(loadingDelay(delay))\r\n .then(response => {\r\n // 404 doesn't resolve info a rejection\r\n if (response.ok) {\r\n store.commit(mutationTypes.PENDING, false);\r\n return response;\r\n }\r\n store.dispatch('handleError', 'Network error: ' + response.status);\r\n throw new Error('Network error: ' + response.status);\r\n })\r\n .then(res => res.json())\r\n .catch(err => {\r\n store.dispatch('handleError', err)\r\n store.commit(mutationTypes.PENDING, false);\r\n return {error: err};\r\n })\r\n}\r\n\r\n/**\r\n *\r\n * @param { VUEXStore*} store\r\n * @param {Object} option.url - Required\r\n * @param {Object} option.method - PUT, PATCH, DELETE or POST default: POST\r\n * @param {Object} option.mutationTypes - Required\r\n * @param {Object} option.body - body to be stringifyed and dispatched to the server\r\n * @param {Number} option.delay - loading delay default:0\r\n *\r\n */\r\n\r\nexport const postRequest = (store, { url, mutationTypes, body, callback, delay = 0, method = 'POST' }) => {\r\n console.log(\"POST\",url,body);\r\n\r\n store.commit(mutationTypes.PENDING, true);\r\n const postObj = {\r\n method,\r\n body: JSON.stringify(body),\r\n mode: 'cors',\r\n headers: { 'Content-Type': 'application/json' } \r\n };\r\n\r\n console.log(postObj)\r\n\r\n return fetch(url, postObj)\r\n .then(loadingDelay(delay))\r\n .then(response => {\r\n // 4** doesn't resolve info a rejection\r\n console.log(\"response\",response)\r\n \r\n if (response.ok) {\r\n store.commit(mutationTypes.PENDING, false);\r\n return response;\r\n }\r\n store.dispatch('handleError', 'Network error: ' + response.status)\r\n throw new Error('Network error: ' + response.status);\r\n })\r\n .then(res => { \r\n if ( res.status === 204 ) {\r\n return; //no content\r\n }\r\n else if ( typeof callback === 'function' ) {\r\n callback();\r\n } \r\n else return res.json();\r\n })\r\n .catch(err => {\r\n // 5** catched\r\n store.dispatch('generalError', err);\r\n store.commit(mutationTypes.PENDING, false);\r\n return {error: err};\r\n })\r\n}\r\n\r\n/**\r\n *\r\n * @param { VUEXStore*} store\r\n * @param {Object} option.url - Required\r\n * @param {Object} option.method - PUT, PATCH, DELETE or POST default: POST\r\n * @param {Object} option.mutationTypes - Required\r\n * @param {Object} option.body - body to be stringifyed and dispatched to the server\r\n * @param {Number} option.delay - loading delay default:0\r\n *\r\n */\r\n\r\nexport const postRequestWithFileUpload = (store, { url, mutationTypes, body, delay = 0, method = 'POST' }) => {\r\n store.commit(mutationTypes.PENDING, true);\r\n let formData = new FormData();\r\n formData.append('file', body);\r\n const options = {\r\n method: method,\r\n body: formData,\r\n headers: { 'Content-Type': 'multipart/form-data' },\r\n credentials: 'include',\r\n mode: 'cors'\r\n }\r\n delete options.headers[\"Content-Type\"];\r\n return fetch(url, options)\r\n .then(loadingDelay(delay))\r\n .then(response => {\r\n // 4** doesn't resolve info a rejection\r\n if (response.ok) {\r\n store.commit(mutationTypes.PENDING, false);\r\n return response;\r\n }\r\n store.dispatch('handleError', 'Network error: ' + response.status);\r\n throw new Error('Network error: ' + response.status);\r\n })\r\n .then(res => res.json())\r\n .catch(err => {\r\n // 5** catched\r\n store.dispatch('generalError', err)\r\n })\r\n}\r\n\r\n","const mapProducts = function(products){\r\n\r\n return products.map(product => {\r\n return {\r\n\t\t\t\"link\": product.url,\r\n\t\t\t\"name\": product.primaryName,\r\n\t\t\t\"typeTitle\": product.secondaryName,\r\n \"sku\": product.buySection.sku,\r\n\t\t\t\"price\": product.formattedPrice,\r\n \"imageUrl\": product.image ? product.image.url : null,\r\n\r\n altText: product.image ? product.image.alt : null,\r\n variantName: product.buySection.variantName,\r\n dispatchInfo: product.buySection.dispatchInfo,\r\n\r\n\t\t\t\"quantity\": product.buySection.quantity ? product.buySection.quantity : 1,\r\n\t\t\t\"colliProduct\": product.buySection.colli && product.buySection.colli > 1 ? true : false,\r\n \"colliAmount\": product.buySection.colli ? product.buySection.colli : 1,\r\n \"unitPrice\": product.formattedPrice,\r\n \"minimumOrderQuantity\": product.buySection.minimumOrderQuantity\r\n\t\t}\r\n })\r\n\r\n}\r\n\r\nexport default mapProducts","import * as types from \"./static\";\r\nimport {\r\n\tgetRequest,\r\n\tpostRequest,\r\n\tpostRequestWithFileUpload,\r\n} from \"./integrations\";\r\nimport mapProducts from \"./methods/mapResultData/methods/mapProducts\";\r\n\r\nexport default {\r\n\tsetIsMobile({ commit }, isMobile) {\r\n\t\tcommit(\"setIsMobile\", isMobile);\r\n\t},\r\n\r\n\r\n\tsetIsIOS({ commit }, isIOS) {\r\n\t\tcommit(\"setIsIOS\", isIOS);\r\n\t},\r\n\r\n\r\n\tsetWindowH({ commit }, wH) {\r\n\t\tcommit(\"setWindowH\", wH);\r\n\t},\r\n\r\n\tsetWindowW({ commit }, wW) {\r\n\t\tcommit(\"setWindowW\", wW);\r\n\t},\r\n\r\n\tsetWindowY({ commit }, wY) {\r\n\t\tcommit(\"setWindowY\", wY);\r\n\t},\r\n\r\n\tsetBodyFixed({ commit, dispatch }, payload) {\r\n\t\tcommit(\"setBodyFixed\", payload);\r\n\t},\r\n\r\n\tasync getInitialOptionGroups(store, url) {\r\n\t\tconst optionGroups = await getRequest(store, {\r\n\t\t\turl,\r\n\t\t\tmutationTypes: types.GET_OPTION_GROUP_ASYNC,\r\n\t\t});\r\n\t\tstore.commit(types.GET_OPTION_GROUP_ASYNC.SUCCESS, optionGroups);\r\n\t},\r\n\r\n\t// Main search actions\r\n\topenMainSearch({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAddonsOverlay\");\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMiniCart\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\t// dispatch('setBodyFixed', { transitionDelay: 550, setClass: true, onlyMobile: true }); // ori\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 250,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openMainSearch\");\r\n\t},\r\n\r\n\tcloseMainSearch({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeMainSearch\");\r\n\t},\r\n\r\n\t// Add-ons overlay actions (PDP)\r\n\topenAddonsOverlay({ commit, dispatch }) {\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openAddonsOverlay\");\r\n\t},\r\n\t// (PDP)\r\n\tcloseAddonsOverlay({ commit }) {\r\n\t\tcommit(\"closeAddonsOverlay\");\r\n\t\tcommit(types.CYLINDO_OVERLAY.mutation, types.HIDDEN);\r\n\t},\r\n\r\n\t// Main menu actions\r\n\topenMainMenu({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAddonsOverlay\");\r\n\t\tdispatch(\"closeMiniCart\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\t// dispatch('closeMainServiceNav');\r\n\r\n\t\tcommit(\"openMainMenu\");\r\n\t},\r\n\r\n\tcloseMainMenu({ commit }) {\r\n\t\tcommit(\"closeMainMenu\");\r\n\t},\r\n\r\n\topenMainServiceNav({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAddonsOverlay\");\r\n\t\t// dispatch('closeMainMenu');\r\n\t\tdispatch(\"closeMiniCart\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\t// dispatch('setBodyFixed', { transitionDelay: 550, setClass: true, onlyMobile: true }); // ori\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openMainServiceNav\");\r\n\t},\r\n\r\n\tcloseMainServiceNav({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeMainServiceNav\");\r\n\t},\r\n\r\n\topenAccountMenu({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAddonsOverlay\");\r\n\t\tdispatch(\"closeMiniCart\");\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tcommit(\"openAccountMenu\");\r\n\t},\r\n\r\n\tcloseAccountMenu({ commit }) {\r\n\t\tcommit(\"closeAccountMenu\");\r\n\t},\r\n\r\n\topenDashboard({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAllOverlays\");\r\n\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: true });\r\n\r\n\t\tcommit(\"openDashboard\");\r\n\t},\r\n\r\n\tcloseDashboard({ commit, dispatch }) {\r\n\t\tcommit(\"closeDashboard\");\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t},\r\n\r\n\topenCountrySelector({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAllOverlays\");\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: true });\r\n\t\tcommit(\"openCountrySelector\");\r\n\t},\r\n\r\n\tcloseCountrySelector({ commit, dispatch }) {\r\n\t\tcommit(\"closeCountrySelector\");\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t},\r\n\r\n\topenMosaicSliderOverlay({ commit, dispatch }, activeIndex) {\r\n\t\tdispatch(\"closeAllOverlays\");\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: true });\r\n\t\tcommit(\"openMosaicSliderOverlay\", activeIndex);\r\n\t},\r\n\r\n\tcloseMosaicSliderOverlay({ commit, dispatch }) {\r\n\t\tcommit(\"closeMosaicSliderOverlay\");\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t},\r\n\r\n\tshowOverlayBackdrop({ commit, dispatch }, context) {\r\n\t\tcommit(\"showOverlayBackdrop\", context);\r\n\t},\r\n\r\n\thideOverlayBackdrop({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAllOverlays\");\r\n\t\tcommit(\"hideOverlayBackdrop\");\r\n\t},\r\n\r\n\tcloseAllOverlays({ commit, dispatch }) {\r\n\t\tdispatch(\"closeAddonsOverlay\");\r\n\t\tdispatch(\"closeConfigurator\");\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainServiceNav\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeMiniCart\");\r\n\t\tdispatch(\"closeModal\");\r\n\t\tdispatch(\"closeDashboard\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\tdispatch(\"closeCountrySelector\");\r\n\t\tdispatch(\"closeMaterialOverlay\");\r\n\t\tdispatch(\"closeShortcutsOverlay\");\r\n\t\tdispatch(\"closeExplanationOverlay\");\r\n\t\tdispatch(\"closeMosaicSliderOverlay\");\r\n\t\tdispatch(\"closeImageProductsOverlay\");\r\n\t\tdispatch(\"setActiveVideo\", null);\r\n\r\n\r\n\t\tcommit(\"updateGuidedTour\", \"closed\");\r\n\t\tcommit(\"roomExplorerSingleProductChosen\", null);\r\n\t\tcommit(\"roomExplorerOverlayProductsChosen\", null);\r\n\r\n\t\tcommit(\"closeZoomOverlay\", null);\r\n\t\tcommit(\"closeOptionsOverlay\", null);\r\n\t\tcommit(\"closeMaterialGroupInfoOverlay\", null);\r\n\t\tcommit(\"closeReConfigurator\", null);\r\n\t\tcommit(\"closeToolTip\", null);\r\n\r\n\t},\r\n\r\n\t// CART\r\n\tasync [types.GET_CART_ITEMS.action](store) {\r\n\t\tconst results = await getRequest(store, {\r\n\t\t\turl: process.env.CART_ITEMS_ENDPOINT,\r\n\t\t\tmutationTypes: types.GET_CART_ITEMS,\r\n\t\t});\r\n\t\tstore.commit(types.GET_CART_ITEMS.SUCCESS, results);\r\n\t},\r\n\r\n\tremoveCartItem({ commit, dispatch }, cartItem) {\r\n\t\tcommit(\"removeCartItem\", cartItem);\r\n\t\tdispatch(types.GET_CART_ITEMS.action);\r\n\t\tdispatch(types.GET_CART_QUANTITY.action);\r\n\t},\r\n\r\n\tshowNotificationPanel({ commit }, panel) {\r\n\t\t// panel \"payload\" example can be found in NotificationPanel.js\r\n\t\tcommit(\"showNotificationPanel\", panel);\r\n\t},\r\n\r\n\tremoveNotificationPanel({ commit }, panelId) {\r\n\t\tcommit(\"removeNotificationPanel\", panelId);\r\n\t},\r\n\r\n\tsetTriggerExperienceResize({ commit }, newVal) {\r\n\t\tcommit(\"setTriggerExperienceResize\", newVal);\r\n\t},\r\n\r\n\troomExplorerSingleProductChosen({ commit, dispatch }, json) {\r\n\t\tif (json) {\r\n\t\t\tdispatch(\"closeMainMenu\");\r\n\t\t\tdispatch(\"closeMainSearch\");\r\n\t\t\tdispatch(\"closeAccountMenu\");\r\n\r\n\t\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\t\ttransitionDelay: 550,\r\n\t\t\t\tsetClass: true,\r\n\t\t\t\tonlyMobile: false,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t\t}\r\n\t\tcommit(\"roomExplorerSingleProductChosen\", json);\r\n\t},\r\n\r\n\troomExplorerOverlayProductsChosen({ commit, dispatch }, json) {\r\n\t\tif (json) {\r\n\t\t\tdispatch(\"closeMainMenu\");\r\n\t\t\tdispatch(\"closeMainSearch\");\r\n\t\t\tdispatch(\"closeAccountMenu\");\r\n\r\n\t\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\t\ttransitionDelay: 550,\r\n\t\t\t\tsetClass: true,\r\n\t\t\t\tonlyMobile: false,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t\t}\r\n\t\tcommit(\"roomExplorerOverlayProductsChosen\", json);\r\n\t},\r\n\r\n\t// Mini-cart overlay actions\r\n\topenMiniCart({ commit, dispatch }) {\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeAddonsOverlay\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tdispatch(types.GET_CART_ITEMS.action);\r\n\t\tcommit(\"openMiniCart\");\r\n\t},\r\n\r\n\tcloseMiniCart({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeMiniCart\");\r\n\t},\r\n\r\n\tuserEscKeypress({ dispatch }) {\r\n\t\tdispatch(\"hideOverlayBackdrop\");\r\n\t},\r\n\topenModal({ commit, dispatch }, name) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"updateModalState\", {\r\n\t\t\tstatus: types.OPEN_MODAL,\r\n\t\t\tname,\r\n\t\t});\r\n\t},\r\n\r\n\tcloseModal({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t\tcommit(\"updateModalState\", {\r\n\t\t\tstatus: types.CLOSE_MODAL,\r\n\t\t\tname: null,\r\n\t\t});\r\n\t},\r\n\r\n\tgetAddonsForBlock({ commit }, product) {\r\n\t\tconst productId = product.productId;\r\n\t\tconst variantId = product.variantId;\r\n\t\tconst endpointUrl = process.env.PRODUCT_ADDONS_ENDPOINT.replace(\"{productId}\", productId).replace(\"{variantId}\", variantId);\r\n\t\tfetch(endpointUrl)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\treturn response.json();\r\n\t\t\t})\r\n\t\t\t.then(function (dataJson) {\r\n\t\t\t\tif (!endpointUrl.endsWith(\".json\")) {\r\n\t\t\t\t\tdataJson = mapProducts(dataJson);\r\n\t\t\t\t}\r\n\t\t\t\tcommit(\"getAddonsForBlock\", dataJson);\r\n\t\t\t})\r\n\t\t\t.catch(function (err) {\r\n\t\t\t\tconsole.error(\"Cart items fetch failed: \", err);\r\n\t\t\t});\r\n\t},\r\n\r\n\tgetAddonsForOverlay({ commit }, product) {\r\n\t\tconst productId = product.productId;\r\n\t\tconst variantId = product.variantId;\r\n\t\tconst endpointUrl = process.env.PRODUCT_ADDONS_ENDPOINT.replace(\"{productId}\", productId).replace(\"{variantId}\", variantId);\r\n\r\n\t\tfetch(endpointUrl)\r\n\t\t\t.then(function (response) {\r\n\t\t\t\treturn response.json();\r\n\t\t\t})\r\n\t\t\t.then(function (dataJson) {\r\n\t\t\t\tif (!endpointUrl.endsWith(\".json\")) {\r\n\t\t\t\t\tdataJson = mapProducts(dataJson);\r\n\t\t\t\t}\r\n\t\t\t\tcommit(\"getAddonsForOverlay\", dataJson);\r\n\t\t\t})\r\n\t\t\t.catch(function (err) {\r\n\t\t\t\tconsole.error(\"Cart items fetch failed: \", err);\r\n\t\t\t});\r\n\t},\r\n\r\n\tguidedTourAcceptInvitation({ commit }) {\r\n\t\tcommit(\"updateGuidedTour\", \"accepted\");\r\n\t},\r\n\r\n\r\n\r\n\topenMaterialOverlay({ commit, dispatch }, data) {\r\n\r\n\t\tcommit(\"openMaterialOverlay\", data);\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t},\r\n\tsetActiveMaterialCategory({commit}, index) {\r\n\t\tcommit(\"setActiveMaterialCategory\", index);\r\n\t},\r\n\tcloseMaterialOverlay({ commit }) {\r\n\t\tcommit(\"closeMaterialOverlay\");\r\n\t},\r\n\r\n\r\n\topenShortcutsOverlay({ commit, dispatch }, data) {\r\n\r\n\t\tcommit(\"openShortcutsOverlay\", data);\r\n\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t},\r\n\tcloseShortcutsOverlay({ commit }) {\r\n\t\tcommit(\"closeShortcutsOverlay\");\r\n\t},\r\n\r\n\r\n\topenExplanationOverlay({ commit, dispatch }, data) {\r\n\r\n\t\tcommit(\"openExplanationOverlay\", data);\r\n\r\n\t\tdispatch(\"closeMainMenu\");\r\n\t\tdispatch(\"closeMainSearch\");\r\n\t\tdispatch(\"closeAccountMenu\");\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t},\r\n\tcloseExplanationOverlay({ commit }) {\r\n\t\tcommit(\"closeExplanationOverlay\");\r\n\t},\r\n\r\n\topenProductFilters({ commit }) {\r\n\t\tcommit(\"openProductFilters\");\r\n\t},\r\n\r\n\tcloseProductFilters({ commit }) {\r\n\t\tcommit(\"closeProductFilters\");\r\n\t},\r\n\r\n\r\n\topenToolTip({ commit }, data) {\r\n\t\tcommit(\"openToolTip\", data);\r\n\t},\r\n\r\n\tcloseToolTip({ commit }) {\r\n\t\tcommit(\"closeToolTip\");\r\n\t},\r\n\r\n\r\n\r\n\thandleError({ commit, dispatch }, err) {\r\n\t\tconsole.warn(\"handle error\", err);\r\n\t\tconst panel = {\r\n\t\t\ttype: \"error\",\r\n\t\t\tmessage: err,\r\n\t\t\tshowClose: true,\r\n\t\t\tautoRemove: true,\r\n\t\t\tmaxWidth: true, // COMMENT: Setting the message max-width to 350px by css\r\n\t\t};\r\n\t\tdispatch(\"showNotificationPanel\", panel);\r\n\t},\r\n\r\n\tgeneralError({ commit, dispatch }, err) {\r\n\t\tconsole.warn(\"general error\", err);\r\n\t\tconst panel = {\r\n\t\t\ttype: \"error\",\r\n\t\t\tmessage: err,\r\n\t\t\tshowClose: true,\r\n\t\t\tautoRemove: true,\r\n\t\t\tmaxWidth: true, // COMMENT: Setting the message max-width to 350px by css\r\n\t\t};\r\n\t\tdispatch(\"showNotificationPanel\", panel);\r\n\t},\r\n\r\n\tstickyError({ commit, dispatch }, err) {\r\n\t\tconsole.warn(\"sticky error\", err);\r\n\t\tconst panel = {\r\n\t\t\ttype: \"error\",\r\n\t\t\tmessage: err,\r\n\t\t\tshowClose: true,\r\n\t\t\tautoRemove: false,\r\n\t\t\tmaxWidth: true, // COMMENT: Setting the message max-width to 350px by css\r\n\t\t};\r\n\t\tdispatch(\"showNotificationPanel\", panel);\r\n\t},\r\n\r\n\t[types.SET_FILTER_COLOR.action]({ commit }, color) {\r\n\t\tcommit(types.SET_FILTER_COLOR.mutation, { color });\r\n\t},\r\n\r\n\tasync [types.CART_ITEM_ADD_ENDPOINT_ASYNC.action](store, payload) {\r\n\t\tconst result = await postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.CART_ITEM_ADD_ENDPOINT,\r\n\t\t\tmutationTypes: types.CART_ITEM_ADD_ENDPOINT_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t});\r\n\t\tconsole.log(\"loadingKey??\")\r\n\t\tif ( result ) {\r\n\t\t\tthis.commit(types.CART_ITEM_ADD_ENDPOINT_ASYNC.SUCCESS, result);\r\n\r\n\t\t\tstore.dispatch(types.GET_CART_QUANTITY.action);\r\n\r\n\t\t\tif (payload && payload.body && payload.body.shouldRefreshCartItems)\r\n\t\t\t\tstore.dispatch(types.GET_CART_ITEMS.action);\r\n\t\t} else {\r\n\t\t\tthis.commit(types.CART_ITEM_ADD_ENDPOINT_ASYNC.FAILURE, null);\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tasync [types.UPDATE_QUANTITY_ASYNC.action](store, payload) {\r\n\t\tconst result = await postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.CART_ITEM_UPDATE_QUANTITY_ENDPOINT,\r\n\t\t\tmethod: \"PUT\",\r\n\t\t\tbody: payload.body,\r\n\t\t\tmutationTypes: types.UPDATE_QUANTITY_ASYNC,\r\n\t\t});\r\n\t\tthis.commit(types.UPDATE_QUANTITY_ASYNC.SUCCESS, result);\r\n\t\tstore.dispatch(types.GET_CART_ITEMS.action);\r\n\t\tstore.dispatch(types.GET_CART_QUANTITY.action);\r\n\t},\r\n\r\n\tasync [types.REQUEST_QUOTE_ASYNC.action](store, payload) {\r\n\t\tawait postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.CART_REQUEST_QUOTE_ENDPOINT,\r\n\t\t\tmutationTypes: types.REQUEST_QUOTE_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t});\r\n\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t\tthis.commit(types.REQUEST_QUOTE_ASYNC.SUCCESS);\r\n\t},\r\n\r\n\tasync [types.EMPTY_CART_ASYNC.action](store, payload) {\r\n\t\tawait postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.CART_EMPTY_ENDPOINT,\r\n\t\t\tmutationTypes: types.EMPTY_CART_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t\tmethod: \"DELETE\",\r\n\t\t});\r\n\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t\tstore.dispatch(types.GET_CART_ITEMS.action);\r\n\t},\r\n\r\n\tasync [types.IMPORT_CART_ASYNC.action](store, payload) {\r\n\t\tvar response = await postRequestWithFileUpload(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.IMPORT_CART_ENDPOINT,\r\n\t\t\tmutationTypes: types.IMPORT_CART_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t\tmethod: \"POST\",\r\n\t\t});\r\n\t\tif(response.hasOwnProperty('url')){\r\n\t\t\twindow.location.href = response.url;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (response && response.added && response.notAdded) {\r\n\t\t\tif (response.added.length > 0 && response.notAdded.length < 1) {\r\n\t\t\t\t//Everything added with success\r\n\t\t\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t\t\t} else {\r\n\t\t\t\t//Something failed in the add\r\n\t\t\t\tstore.dispatch(\r\n\t\t\t\t\t\"showNotificationPanel\",\r\n\t\t\t\t\tpayload.notificationOnError\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t//Something failed in the add\r\n\t\t\tstore.dispatch(\r\n\t\t\t\t\"showNotificationPanel\",\r\n\t\t\t\tpayload.notificationOnError\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tstore.dispatch(types.GET_CART_ITEMS.action);\r\n\t\tstore.dispatch(types.GET_CART_QUANTITY.action);\r\n\t},\r\n\r\n\tasync [types.SHARE_SAVED_LIST_ASYNC.action](store, payload) {\r\n\t\tstore.dispatch(\"setCartShareCartIsActive\", true);\r\n\r\n\t\tawait postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.CART_SHARE_ENDPOINT,\r\n\t\t\tmutationTypes: types.SHARE_SAVED_LIST_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t});\r\n\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t\tstore.dispatch(types.GET_CART_ITEMS.action);\r\n\r\n\t\tstore.dispatch(\"setCartShareCartIsActive\", false);\r\n\t},\r\n\r\n\tasync setCartShareCartIsActive(store, payload) {\r\n\t\tstore.commit(\"setCartShareCartIsActive\", payload);\r\n\t},\r\n\r\n\tasync [types.IMPORT_SAVED_LIST_ASYNC.action](store, payload) {\r\n\t\tawait postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.CART_IMPORT_ENDPOINT,\r\n\t\t\tmutationTypes: types.IMPORT_SAVED_LIST_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t});\r\n\t\tif (payload.notification)\r\n\t\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t},\r\n\r\n\tasync [types.EDIT_ORDER_ASYNC.action](store, payload) {\r\n\t\t//JPL: url was referenced freely here, not sure why but it triggered an error\r\n\t\tconst postUrl = payload.url.replace(\r\n\t\t\t\"{orderNumber}\",\r\n\t\t\tpayload.body.orderNumber\r\n\t\t);\r\n\t\tawait postRequest(store, {\r\n\t\t\turl: postUrl,\r\n\t\t\tmutationTypes: types.EDIT_ORDER_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t});\r\n\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t\tthis.commit(types.EDIT_ORDER_ASYNC.SUCCESS);\r\n\t},\r\n\r\n\tasync [types.SELECT_COUNTRY.action](store, payload) {\r\n\t\tawait postRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tpayload && payload.url\r\n\t\t\t\t\t? payload.url\r\n\t\t\t\t\t: process.env.SELECT_COUNTRY,\r\n\t\t\tmutationTypes: types.SELECT_COUNTRY,\r\n\t\t\tbody: { countryCode: payload.value },\r\n\t\t\tcallback: () => window.location.reload(true),\r\n\t\t});\r\n\t},\r\n\r\n\tasync [types.SELECT_USER_TYPE.action](store, payload) {\r\n\t\tconsole.log(\"call user type endpoint\", process.env.SELECT_USER_TYPE, payload)\r\n\t\tconst endpointUrl = process.env.SELECT_USER_TYPE.replace(\"{currentPageId}\", payload.epiParrentPageId).replace(\"{blockId}\", payload.blockId).replace(\"{index}\", payload.userTypeId).replace(\"{path}\", payload.path);\r\n\t\tconsole.log(\"call user type endpoint\", endpointUrl)\r\n\t\tfetch(endpointUrl)\r\n\t\t.then(response => response.json())\r\n\t\t.then(data =>\r\n\t\t\t{\r\n\t\t\t\tif ( data.reloadUrl && data.reloadUrl.length > 0 ) {\r\n\t\t\t\t\twindow.location = data.reloadUrl;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\twindow.location.reload();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch(function (err) {\r\n\t\t\t\tconsole.error(\"User types fetch failed: \", err);\r\n\t\t\t});\r\n\t},\r\n};\r\n","// unique id\r\nexport const uid = () => Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\r\n\r\n// throttled rAF\r\nexport const rInterval = (callback, delay) => {\r\n\tlet dateNow = Date.now,\r\n\t\trequestAnimation = window.requestAnimationFrame,\r\n\t\tstart = dateNow(),\r\n\t\tstop,\r\n\t\tintervalFunc = function () {\r\n\t\t\tdateNow() - start < delay || ((start += delay), callback());\r\n\t\t\tstop || requestAnimation(intervalFunc);\r\n\t\t};\r\n\trequestAnimation(intervalFunc);\r\n\treturn {\r\n\t\tclear: function () {\r\n\t\t\tstop = 1;\r\n\t\t},\r\n\t};\r\n};\r\n\r\n\r\nexport const minmax = (val, span, lo, hi) => {\r\n\tif ( val - span < lo + span ) return lo + span;\r\n\telse if ( val + span > hi - span ) return hi - span;\r\n\telse return val;\r\n};\r\n\r\n\r\nexport const swipeDetect = (el, callback) => {\r\n\tif (!el || !callback) return false;\r\n\tlet tST, tET, cX, cY;\r\n\r\n\tconst tS = (e)=>{\r\n\t\t// e.preventDefault();\r\n\t\ttST = Date.now();\r\n\t\tcY = e.touches[0].clientY;\r\n\t\tcX = e.touches[0].clientX;\t\t\r\n\t\tel.addEventListener(\"touchend\", tE);\t\r\n\t}\r\n\tconst tE = (e) => {\r\n\t\ttET = Date.now();\r\n\t\tlet eCX = e.changedTouches[0].clientX;\r\n\t\tlet eCY = e.changedTouches[0].clientY;\r\n\r\n\t\tif (tET - tST <= 500) {\r\n\t\t\t// The distance the finger moved in 500 ms is 100px\r\n\t\t\tif (cY - eCY >= 100) {\r\n\t\t\t\tcallback('up');\r\n\t\t\t} else if (cY - eCY <= -100) {\r\n\t\t\t\tcallback('down');\r\n\t\t\t} else if (cX - eCX <= -100) {\r\n\t\t\t\tcallback('right');\r\n\t\t\t} else {\t\t\t\t\r\n\t\t\t\tcallback('left');\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tel.removeEventListener(\"touchend\", tE);\t\r\n\t} \r\n\r\n\tel.addEventListener(\"touchstart\", tS);\r\n\t\r\n\t\r\n}","import Vue from 'vue/dist/vue.esm';\r\n\r\nimport * as types from './static';\r\nimport {minmax} from '../utils';\r\n\r\nexport default {\r\n\tappLoaded(state, loaded){\r\n\t\tstate.appLoaded = loaded;\r\n\t},\r\n\r\n\tsetIsMobile(state, isMobile){\r\n\t\tstate.isMobile = isMobile;\r\n\t},\r\n\r\n\r\n\tsetIsIOS(state, isIOS){\r\n\t\tstate.isIOS = isIOS;\r\n\t},\r\n\r\n\tsetWindowH(state, wH){\r\n\t\tstate.windowH = wH;\r\n\t},\r\n\tsetWindowW(state, wW){\r\n\t\tstate.windowW = wW;\r\n\t},\r\n\tsetWindowY(state, wY){\r\n\t\tstate.windowY = wY;\r\n\t},\r\n\r\n\r\n\tsetBodyFixed(state, payload){\r\n\t\t// COMMENT: payload - { transitionDelay[Number], setClass[Boolean], onlyMobile[Boolean] }\r\n\t\t// \t\t- transitionDelay: to wait until animation is done (only when applying)\r\n\t\t// \t\t- setClass: to know if it should be set or not (ex. open or closed configurator)\r\n\t\t// \t\t- onlyMobile: determines if it only should affect mobile. Mobile size-test is set in app.js\r\n\r\n\t\tconst htmlTag = document.getElementsByTagName('html')[0];\r\n\r\n\t\tstate.bodyFixed = payload.setClass;\r\n\t\tconst logo = document.querySelector('.main-menu__logo');\r\n\r\n\t\tif(payload.setClass){\r\n\t\t\tif(!payload.onlyMobile || payload.onlyMobile && state.isMobile){\r\n\t\t\t\t// COMMENT: Set fixed if \"onlyMobile = false\" or onlyMobile and mobile is true\r\n\t\t\t\tconst sniffedScrollPos = (window.pageYOffset || document.documentElement.scrollTop) - (document.documentElement.clientTop || 0);\r\n\t\t\t\tstate.sniffedScrollPos = sniffedScrollPos;\r\n\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tif ( state.isIOS ) {\r\n\t\t\t\t\t\t//only do margin offset on ios\r\n\t\t\t\t\t\tdocument.body.style.marginTop = '-' + sniffedScrollPos + 'px';\r\n\t\t\t\t\t\tif (logo) {\r\n\t\t\t\t\t\t\tlogo.style.marginTop = '-' + (sniffedScrollPos-17) + 'px';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// COMMENT: Set \"is-fixed\" class on html-tag to prevent further scroll on body (.is-fixed can be found in _general.scss)\r\n\r\n\t\t\t\t\tif(!htmlTag.classList.contains('is-fixed')){\r\n\t\t\t\t\t\thtmlTag.classList.add('is-fixed');\r\n\t\t\t\t\t\tstate.isFixed = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}, payload.transitionDelay);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// COMMENT: Always remove, whether or not its onlyMobile (viewport size could have changed inbetween)\r\n\t\t\thtmlTag.classList.remove('is-fixed');\r\n\t\t\tstate.isFixed = false;\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tdocument.body.style.removeProperty('margin-top'); // reset applied margin-top\r\n\t\t\t\tdocument.body.scrollTop = document.documentElement.scrollTop = state.sniffedScrollPos;\r\n\t\t\t\tif (logo) {\r\n\t\t\t\t\tlogo.style.removeProperty('margin-top');\r\n\t\t\t\t}\r\n\t\t\t}, 50);\r\n\t\t}\r\n\t},\r\n\tshowNotificationPanel(state, panel){\r\n\t\t// panel \"payload\" example can be found in NotificationPanel.js\r\n\t\tpanel.id = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\r\n\t\tstate.notificationPanels.push(panel);\r\n\t},\r\n\tremoveNotificationPanel(state, panelId){\r\n\t\tstate.notificationPanels = state.notificationPanels.filter((panel) => { return panel.id != panelId; });\r\n\t},\r\n\r\n\t[types.GET_OPTION_GROUP_ASYNC.PENDING] (state, status) { // campaignCode\r\n\t\tVue.set(state, types.GET_OPTION_GROUP_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.GET_OPTION_GROUP_ASYNC.SUCCESS] (state, data) { // campaignCode\r\n\t\tVue.set(state, types.GET_OPTION_GROUP_ASYNC.stateKey, data);\r\n\t},\r\n\r\n\topenMainSearch(state){\r\n\t\tstate.searchOverlayOpen = true;\r\n\t},\r\n\tcloseMainSearch(state){\r\n\t\tstate.searchOverlayOpen = false;\r\n\t},\r\n\topenMainServiceNav(state){\r\n\t\tstate.mainServiceNavOpen = true;\r\n\t},\r\n\tcloseMainServiceNav(state){\r\n\t\tstate.mainServiceNavOpen = false;\r\n\t},\r\n\topenAddonsOverlay(state){\r\n\t\tstate.addonsOverlayOpen = true;\r\n\t},\r\n\tcloseAddonsOverlay(state){\r\n\t\tstate.addonsOverlayOpen = false;\r\n\t},\r\n\topenMiniCart(state){\r\n\t\tstate.miniCartActive = true;\r\n\t},\r\n\tcloseMiniCart(state){\r\n\t\tstate.miniCartActive = false;\r\n\t},\r\n\topenMainMenu(state){\r\n\t\tstate.mainMenuOpen = true;\r\n\t},\r\n\tcloseMainMenu(state){\r\n\t\tstate.mainMenuOpen = false;\r\n\t},\r\n\topenAccountMenu(state){\r\n\t\tstate.accountMenuOpen = true;\r\n\t},\r\n\tcloseAccountMenu(state){\r\n\t\tstate.accountMenuOpen = false;\r\n\t},\r\n\topenDashboard(state){\r\n\t\tstate.dashboardOpen = true;\r\n\t},\r\n\tcloseDashboard(state){\r\n\t\tstate.dashboardOpen = false;\r\n\t},\r\n\topenCountrySelector(state){\r\n\t\tstate.countrySelectorOpen = true;\r\n\t},\r\n\tcloseCountrySelector(state){\r\n\t\tstate.countrySelectorOpen = false;\r\n\t},\r\n\topenMosaicSliderOverlay(state, activeIndex){\r\n\t\tstate.mosaicSliderOverlayOpen = true;\r\n\t\tstate.mosaicSliderOverlayActiveIndex = activeIndex;\r\n\t},\r\n\tcloseMosaicSliderOverlay(state){\r\n\t\tstate.mosaicSliderOverlayActiveIndex = -1;\r\n\t\tstate.mosaicSliderOverlayOpen = false;\r\n\t},\r\n\troomExplorerSingleProductChosen(state, data){\r\n\t\tstate.roomExplorerSingleProduct = data;\r\n\t},\r\n\troomExplorerOverlayProductsChosen(state, data){\r\n\t\tstate.roomExplorerOverlayProducts = data;\r\n\t},\r\n\tshowOverlayBackdrop(state, context){\r\n\t\tstate.overlayBackdropContext = context;\r\n\t\tstate.overlayBackdropActive = true;\r\n\t},\r\n\thideOverlayBackdrop(state){\r\n\t\tstate.overlayBackdropContext = '';\r\n\t\tstate.overlayBackdropActive = false;\r\n\t},\r\n\topenShortcutsOverlay(state, data){\r\n\t\tstate.shortcutsOverlayOpen = true;\r\n\t\tstate.shortcutsData = data;\r\n\t},\r\n\tcloseShortcutsOverlay(state){\r\n\t\tstate.shortcutsOverlayOpen = false;\r\n\t\tstate.shortcutsData = null;\r\n\t},\r\n\topenExplanationOverlay(state, data){\r\n\t\tstate.explanationOverlayOpen = true;\r\n\t\tstate.explanationData = data;\r\n\t},\r\n\tcloseExplanationOverlay(state){\r\n\t\tstate.explanationOverlayOpen = false;\r\n\t\tstate.explanationData = null;\r\n\t},\r\n\tsetTriggerExperienceResize(state, newVal){\r\n\t\tstate.triggerExperienceResize = newVal;\r\n\t},\r\n\r\n\t// Cart related mutations/tasks\r\n\t[types.GET_CART_ITEMS.SUCCESS](state, items){\r\n\t\tif (!items) return;\r\n\r\n\t\tVue.set(state, 'cartItems', items);\r\n\r\n\t\tstate.cartItemsCount = items.length;\r\n\t\tstate.cartLoaded = true;\r\n\r\n\t\tlet subTotal = 0;\r\n\t\tstate.cartItems.forEach(item => {\r\n\t\t\tsubTotal = item.subTotal;\r\n\t\t});\r\n\t\tstate.cartSubTotal = subTotal;\r\n\t},\r\n\t[types.GET_CART_ITEMS.PENDING] (state, status) { // cart\r\n\t\tVue.set(state, types.GET_CART_ITEMS.loadingKey, status);\r\n\t},\r\n\tremoveCartItem(state, item){\r\n\t\tconst skuToFind = item.sku;\r\n\t\tconst found = state.cartItems.filter(el => {\r\n\t\t\treturn el.sku !== skuToFind;\r\n\t\t});\r\n\t\tstate.cartItems = found;\r\n\t\tstate.cartItemsCount = state.cartItems.length;\r\n\t},\r\n\tcartItemUpdate(state, item){\r\n\t\t// Should be done by api, which respond with all cart items..\r\n\t\tif(item.sku !== null){\r\n\t\t\tconst skuToFind = item.sku;\r\n\t\t\tconst found = state.cartItems.filter(item => item.sku === skuToFind);\r\n\t\t\tif(found.length > 0){\r\n\t\t\t\t// COMMENT: Update existing item\r\n\t\t\t\tfound[0].quantity = item.quantity;\r\n\t\t\t\tfound[0].price = (parseInt(found[0].unitPrice) * found[0].quantity).toFixed(2);\r\n\t\t\t} else {\r\n\t\t\t\t// COMMENT: Add item to cart\r\n\t\t\t\tstate.cartItems.push({sku: item.sku, quantity: item.quantity, price: item.unitPrice * item.quantity, lineItemId: item.lineItemId});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconsole.error('No SKU-number provided for cart..');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// CHECKOUT related mutations\r\n\tcheckoutAddCampaignCode(state, dataJson){\r\n\t\tstate.checkout.campaignCode = dataJson;\r\n\t},\r\n\tcheckoutRemoveCampaignCode(state){\r\n\t\t// TMP - reset campaign code\r\n\t\tVue.set(state, types.POST_CAMPAIGN_CODE_ASYNC.stateKey, {\r\n\t\t\tcode: '',\r\n\t\t\tdiscountAmount: 0,\r\n\t\t});\r\n\t},\r\n\tupdateModalState(state, payload) {\r\n\t\tstate.modalStatus = {\r\n\t\t\t...state.modals,\r\n\t\t\tstatus: payload.status,\r\n\t\t\tname: payload.name\r\n\t\t};\r\n\r\n\t},\r\n\r\n\t// PDP ADDONS OVERLAY ASYNC PRODUCT\r\n\tgetAddonsForOverlay(state, dataJson){\r\n\t\tstate.pdpAddonsProducts = dataJson;\r\n\t},\r\n\r\n\tgetAddonsForBlock(state, dataJson){\r\n\t\tstate.relevantAddonsProducts = dataJson;\r\n\t},\r\n\r\n\tupdateGuidedTour(state, newStatus) {\r\n\t\tstate.guidedTourStatus = newStatus;\r\n\t},\r\n\r\n\r\n\topenMaterialOverlay(state, payload){\r\n\t\tstate.materialOverlayOpen = true;\r\n\r\n\t\tstate.materialsData = payload.data;\r\n\t\tstate.activeMaterialIndex = payload.activeIndex;\r\n\t},\r\n\r\n\tsetActiveMaterialCategory(state, index) {\r\n\t\tstate.activeMaterialIndex = index;\r\n\t},\r\n\tcloseMaterialOverlay(state){\r\n\t\tstate.materialOverlayOpen = false;\r\n\t\tstate.materialsData = null;\r\n\t\tstate.activeMaterialIndex = -1;\r\n\t},\r\n\r\n\topenProductFilters(state){\r\n\t\tstate.productFiltersOpen = true;\r\n\t},\r\n\tcloseProductFilters(state){\r\n\t\tstate.productFiltersOpen = false;\r\n\t},\r\n\r\n\topenToolTip(state, data){\r\n\t\tstate.tooltipText = data.txt;\r\n\t\tlet newX = minmax(data.event.clientX, 100, 10, window.innerWidth-10);\r\n\t\tstate.tooltipPosX = newX;\r\n\t\tlet newY = minmax(data.event.clientY, 50, 10, window.innerHeight-10);\r\n\r\n\t\tif (window.innerHeight > 768) {\r\n\t\t\tnewY -= 50;\r\n\t\t}\r\n\t\tstate.tooltipPosY = newY;\r\n\r\n\t},\r\n\tcloseToolTip(state){\r\n\t\tstate.tooltipText = null;\r\n\t\tstate.tooltipPosX = -1;\r\n\t\tstate.tooltipPosY = -1;\r\n\t},\r\n\r\n\t[types.SET_FILTER_COLOR.mutation] (state, payload){\r\n\t\tVue.set(state, types.SET_FILTER_COLOR.stateKey, payload.color);\r\n\t},\r\n\t[types.CART_ITEM_ADD_ENDPOINT_ASYNC.SUCCESS] (state) { // add to cart\r\n\t\tVue.set(state, types.CART_ITEM_ADD_ENDPOINT_ASYNC.stateKey, true);\r\n\t},\r\n\t[types.CART_ITEM_ADD_ENDPOINT_ASYNC.PENDING] (state, status) { // add to cart\r\n\t\tVue.set(state, types.CART_ITEM_ADD_ENDPOINT_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.CART_ITEM_ADD_ENDPOINT_ASYNC.FAILURE] (state) { // add to cart fail\r\n\t\tVue.set(state, types.CART_ITEM_ADD_ENDPOINT_ASYNC.loadingKey, false);\r\n\t},\r\n\t[types.UPDATE_QUANTITY_ASYNC.SUCCESS] (state) { // update quantity\r\n\t\tVue.set(state, types.UPDATE_QUANTITY_ASYNC.stateKey, true);\r\n\t},\r\n\t[types.UPDATE_QUANTITY_ASYNC.PENDING] (state, status) { // update quantiry\r\n\t\tVue.set(state, types.UPDATE_QUANTITY_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.REQUEST_QUOTE_ASYNC.SUCCESS] (state) { // cart - request quote\r\n\t\tVue.set(state, types.REQUEST_QUOTE_ASYNC.stateKey, true);\r\n\t},\r\n\t[types.REQUEST_QUOTE_ASYNC.PENDING] (state, status) { // cart - request quote\r\n\t\tVue.set(state, types.REQUEST_QUOTE_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.EMPTY_CART_ASYNC.PENDING] (state, status) { // empty cart\r\n\t\tVue.set(state, types.EMPTY_CART_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.IMPORT_CART_ASYNC.PENDING] (state, status) { // import cart\r\n\t\tVue.set(state, types.IMPORT_CART_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.GET_RECOMMENDATION.PENDING] (state, status) { // empty cart\r\n\t\tVue.set(state, types.GET_RECOMMENDATION.loadingKey, status);\r\n\t},\r\n\t[types.SHARE_SAVED_LIST_ASYNC.PENDING] (state, status) { // share cart\r\n\t\tVue.set(state, types.SHARE_SAVED_LIST_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.IMPORT_SAVED_LIST_ASYNC.PENDING] (state, status) { // share cart import\r\n\t\tVue.set(state, types.IMPORT_SAVED_LIST_ASYNC.loadingKey, status);\r\n\t},\r\n\tsetCartShareCartIsActive(state, status) {\r\n\t\tVue.set(state, 'cartShareCartIsActive', status);\r\n\t},\r\n\t[types.EDIT_ORDER_ASYNC.SUCCESS] (state) { // order overview - edit order\r\n\t\tVue.set(state, types.EDIT_ORDER_ASYNC.stateKey, true);\r\n\t},\r\n\t[types.EDIT_ORDER_ASYNC.PENDING] (state, status) { // order overview - edit order\r\n\t\tVue.set(state, types.EDIT_ORDER_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.SELECT_COUNTRY.SUCCESS] (state, status) { // country selector\r\n\t\tVue.set(state, types.SELECT_COUNTRY.stateKey, status);\r\n\t},\r\n\t[types.SELECT_COUNTRY.PENDING] (state, status) { // country selector\r\n\t\tVue.set(state, types.SELECT_COUNTRY.loadingKey, status);\r\n\t},\r\n\t[types.SELECT_USER_TYPE.SUCCESS] (state, status) { // user type selector\r\n\t\tVue.set(state, types.SELECT_USER_TYPE.stateKey, status);\r\n\t},\r\n\t[types.SELECT_USER_TYPE.PENDING] (state, status) { // user type selector\r\n\t\tVue.set(state, types.SELECT_USER_TYPE.loadingKey, status);\r\n\t}\r\n};\r\n","import Vue from 'vue/dist/vue.esm';\r\nimport * as types from '../static';\r\n\r\nconst state = {\r\n\t[types.CYLINDO_OVERLAY.stateKey]: \"hidden\",\r\n}\r\n\r\nconst mutations = {\r\n\t[types.CYLINDO_OVERLAY.mutation](state, payload){\r\n\t\tVue.set(state, [types.CYLINDO_OVERLAY.stateKey], payload);\r\n\t},\r\n}\r\n\r\nconst actions = {\r\n\t[types.CYLINDO_OVERLAY.action]({commit}, payload){\r\n\t\tcommit([types.CYLINDO_OVERLAY.mutation], payload)\r\n\t},\r\n}\r\n\r\nexport default { state, actions, mutations }","import Vue from \"vue/dist/vue.esm\";\r\nimport * as types from \"../static\";\r\nimport { getRequest, postRequest } from \"../integrations\";\r\n\r\nconst state = {\r\n\tconfiguratorOpen: false,\r\n\tconfiguratorActiveSku: \"\",\r\n\tshowPDPSpinner: false,\r\n\t[types.CONFIGURATOR_OPTIONS_ASYNC.stateKey]: null,\r\n\t[types.CONFIGURATOR_OPTIONS_ASYNC.loadingKey]: null,\r\n\t[types.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.stateKey]: null,\r\n\t[types.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.loadingKey]: null,\r\n\t[types.CONFIGURATOR_CYLINDO_SKU_ASYNC.stateKey]: null,\r\n\t[types.CONFIGURATOR_CYLINDO_SKU_ASYNC.loadingKey]: null,\r\n\t[types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.stateKey]: null,\r\n\t[types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.loadingKey]: null,\r\n};\r\n\r\nfunction removeFromQuery(key, queryString){\r\n\tif (queryString !== \"\") {\r\n var params_arr = queryString.split(\"&\");\r\n for (var i = params_arr.length - 1; i >= 0; i -= 1) {\r\n var param = params_arr[i].split(\"=\")[0];\r\n if (param === key) {\r\n params_arr.splice(i, 1);\r\n }\r\n\t\t}\r\n\t\treturn params_arr;\r\n\t}\r\n\treturn [];\r\n}\r\n\r\nfunction removeParam(key, sourceURL) {\r\n var rtn = sourceURL.split(\"?\")[0], \r\n\t\tqueryString = (sourceURL.indexOf(\"?\") !== -1) ? sourceURL.split(\"?\")[1] : \"\";\r\n\t\t\r\n\tvar params_arr = removeFromQuery(key, queryString);\r\n\trtn = params_arr.length>0 ? rtn + \"?\" + params_arr.join(\"&\") : rtn;\r\n\treturn rtn;\r\n}\r\nfunction addParam(key, value, sourceURL) {\r\n\tvar rtn = sourceURL.split(\"?\")[0], \r\n queryString = (sourceURL.indexOf(\"?\") !== -1) ? sourceURL.split(\"?\")[1] : \"\";\r\n\tvar params_arr = removeFromQuery(key, queryString);\r\n\tparams_arr.push(key + \"=\" + value);\r\n\trtn = params_arr.length>0 ? rtn + \"?\" + params_arr.join(\"&\") : rtn;\r\n return rtn;\r\n}\r\n\r\nconst mutations = {\r\n\topenConfigurator(state, sku) {\r\n\t\t// COMMENT: sku = String\r\n\t\tstate.configuratorActiveSku = sku;\r\n\t\tstate.configuratorOpen = true;\r\n\t\tstate.showPDPSpinner = true;\r\n\t\tvar newurl = addParam(\"configure\", \"true\", window.location.href);\r\n\t\twindow.history.pushState({ path: newurl }, \"\", newurl);\r\n\t},\r\n\tcloseConfigurator(state) {\r\n\t\tstate.configuratorOpen = false;\t\r\n\t\tvar newurl = removeParam(\"configure\", window.location.href);\r\n\t\twindow.history.replaceState({ path: newurl }, \"\", newurl);\r\n\t},\r\n\r\n\tsetShowPDPSpinner(state, newVal){\r\n\t\tstate.showPDPSpinner = newVal;\r\n\t},\r\n\r\n\t[types.CONFIGURATOR_OPTIONS_ASYNC.PENDING](state, status) {\r\n\t\tVue.set(state, types.CONFIGURATOR_OPTIONS_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.CONFIGURATOR_OPTIONS_ASYNC.SUCCESS](state, data) {\r\n\t\t// COMMENT: This is where the configurator response from the server is added to the state\r\n\t\tVue.set(state, types.CONFIGURATOR_OPTIONS_ASYNC.stateKey, data);\r\n\t},\r\n\t[types.CONFIGURATOR_CYLINDO_SKU_ASYNC.PENDING](state, status) {\r\n\t\tVue.set(state, types.CONFIGURATOR_CYLINDO_SKU_ASYNC.loadingKey, status);\r\n\t},\r\n\t[types.CONFIGURATOR_CYLINDO_SKU_ASYNC.SUCCESS](state, data) {\r\n\t\t// COMMENT: This is where the configurator response from the server is added to the state\r\n\t\tVue.set(state, types.CONFIGURATOR_CYLINDO_SKU_ASYNC.stateKey, data);\r\n\t},\r\n\t[types.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.PENDING](state, status) {\r\n\t\tVue.set(\r\n\t\t\tstate,\r\n\t\t\ttypes.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.loadingKey,\r\n\t\t\tstatus\r\n\t\t);\r\n\t},\r\n\t[types.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.SUCCESS](state, data) {\r\n\t\t// COMMENT: This is where the configurator response from the server is added to the state\r\n\t\tVue.set(state, types.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.stateKey, data);\r\n\t},\r\n\t[types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.PENDING](state, status) {\r\n\t\tVue.set(\r\n\t\t\tstate,\r\n\t\t\ttypes.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.loadingKey,\r\n\t\t\tstatus\r\n\t\t);\r\n\t},\r\n\t[types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.SUCCESS](state, data) {\r\n\t\t// COMMENT: This is where the configurator response from the server is added to the state\r\n\t\tVue.set(\r\n\t\t\tstate,\r\n\t\t\ttypes.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.stateKey,\r\n\t\t\tdata\r\n\t\t);\r\n\t},\r\n};\r\n\r\nconst actions = {\r\n\tasync [types.CONFIGURATOR_OPTIONS_ASYNC.action](store, payload) {\r\n\t\tconst result = await getRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tprocess.env.CONFIGURATOR_OPTIONS +\r\n\t\t\t\t\"?productCode=\" +\r\n\t\t\t\tpayload.body.productCode +\r\n\t\t\t\t\"&filters=\" +\r\n\t\t\t\tpayload.body.selectedOptions,\r\n\t\t\tmutationTypes: types.CONFIGURATOR_OPTIONS_ASYNC,\r\n\t\t});\r\n\r\n\t\tstore.commit(types.CONFIGURATOR_OPTIONS_ASYNC.SUCCESS, result);\r\n\t},\r\n\r\n\tasync [types.CONFIGURATOR_INITIAL_OPTIONS_ASYNC.action](store, payload) {\r\n\t\tconst result = await getRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tprocess.env.CONFIGURATOR_INITIAL_OPTIONS +\r\n\t\t\t\t\"?productCode=\" +\r\n\t\t\t\tpayload.body.productCode +\r\n\t\t\t\t\"&variantCode=\" +\r\n\t\t\t\tpayload.body.sku,\r\n\t\t\tmutationTypes: types.CONFIGURATOR_OPTIONS_ASYNC,\r\n\t\t});\r\n\r\n\t\tstore.commit(types.CONFIGURATOR_OPTIONS_ASYNC.SUCCESS, result);\r\n\t},\r\n\r\n\tasync [types.CONFIGURATOR_CYLINDO_SKU_ASYNC.action](store, payload) {\r\n\t\tconst result = await getRequest(store, {\r\n\t\t\turl:\r\n\t\t\t\tprocess.env.CONFIGURATOR_CYLINDO_SKU +\r\n\t\t\t\t\"?productCode=\" +\r\n\t\t\t\tpayload.body.productCode +\r\n\t\t\t\t\"&filters=\" +\r\n\t\t\t\tpayload.body.selectedOptions,\r\n\t\t\tmutationTypes: types.CONFIGURATOR_CYLINDO_SKU_ASYNC,\r\n\t\t});\r\n\r\n\t\tstore.commit(types.CONFIGURATOR_CYLINDO_SKU_ASYNC.SUCCESS, result);\r\n\t},\r\n\tasync [types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.action](\r\n\t\tstore,\r\n\t\tpayload\r\n\t) {\r\n\t\tawait postRequest(store, {\r\n\t\t\turl: process.env.CONFIGURATOR_REQUEST_CONFIGURATION,\r\n\t\t\tmutationTypes: types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC,\r\n\t\t\tbody: payload.body,\r\n\t\t});\r\n\t\tstore.dispatch(\"showNotificationPanel\", payload.notification);\r\n\t\tthis.commit(types.CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.SUCCESS);\r\n\t},\r\n\r\n\topenConfigurator({ commit, dispatch }, sku) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openConfigurator\", sku);\r\n\t},\r\n\tcloseConfigurator({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeConfigurator\");\r\n\t},\r\n\r\n\r\n\tsetShowPDPSpinner({ commit }, newVal) {\r\n\t\tcommit(\"setShowPDPSpinner\", newVal);\r\n\t},\r\n};\r\n\r\nexport default { state, actions, mutations };\r\n","/**\r\n * Cart module\r\n * all cart related actions go here\r\n */\r\n\r\nimport Vue from 'vue/dist/vue.esm';\r\nimport * as types from '../static';\r\nimport { getRequest } from '../integrations';\r\n\r\nconst updateCartData = function(context,json){\r\n const dispatchDate = json.dispatchDate\r\n context.commit('updateCalculatedCart',json)\r\n context.commit('updateDispatchDate', dispatchDate)\r\n context.commit('updateCartLineItems',json.lineItems)\r\n\r\n if(json.isSuccess){\r\n context.commit('clearErrorMessage')\r\n } else {\r\n context.commit('updateErrorMessage',json.errorMessage)\r\n context.dispatch('stickyError',json.errorMessage)\r\n }\r\n\r\n}\r\n\r\nconst state = {\r\n [types.GET_CART_QUANTITY.stateKey]: 0,\r\n couponCode: '',\r\n calculatedCart: {},\r\n cartLineItems: [],\r\n orderDispatchDate: \"\",\r\n errorMessage: null,\r\n showOrderSummarySpinner: false\r\n}\r\n\r\nconst mutations = {\r\n updateShowOrderSummarySpinner(state){\r\n state.showOrderSummarySpinner = !state.showOrderSummarySpinner\r\n },\r\n updateCalculatedCart(state,cartModel){\r\n state.calculatedCart = {\r\n subTotal: cartModel.subTotal,\r\n subTotalExDiscount: cartModel.subTotalExDiscount,\r\n discount: cartModel.discount,\r\n total: cartModel.total,\r\n shippingFee: cartModel.shippingFee,\r\n handlingFee: cartModel.handlingFee,\r\n minimumOrderFee: cartModel.minimumOrderFee,\r\n minimumOrderValue: cartModel.minimumOrderValue,\r\n campaign: cartModel.campaign,\r\n vat: cartModel.vat,\r\n isSuccess: cartModel.isSuccess,\r\n }\r\n },\r\n updateCartLineItems(state,items){\r\n state.cartLineItems = items\r\n },\r\n updateDispatchDate(state,date){\r\n state.orderDispatchDate = date\r\n },\r\n updateCouponCode(state,code){\r\n state.couponCode = code\r\n },\r\n updateErrorMessage(state,errorMessage){\r\n state.errorMessage = errorMessage\r\n },\r\n clearErrorMessage(state){\r\n state.errorMessage = null\r\n },\r\n [types.GET_CART_QUANTITY.SUCCESS](state, payload) {\r\n // Get cart items\r\n Vue.set(state, types.GET_CART_QUANTITY.stateKey, payload ? payload.quantity : 0);\r\n },\r\n [types.GET_CART_QUANTITY.PENDING](state, status){\r\n Vue.set(state, types.GET_CART_QUANTITY.loadingKey, status);\r\n }\r\n}\r\n\r\nconst actions = {\r\n async [types.GET_CART_QUANTITY.action] (store) {\r\n // Get cart items\r\n const result = await getRequest(store, {\r\n url: process.env.CART_ITEMS_QUANTITY,\r\n mutationTypes: types.GET_CART_QUANTITY,\r\n })\r\n store.commit(types.GET_CART_QUANTITY.SUCCESS, result);\r\n },\r\n\r\n getCalculatedCart(context){\r\n\r\n context.commit('updateShowOrderSummarySpinner')\r\n\r\n fetch(process.env.CALCULATED_CART_ITEMS_ENDPOINT,{\r\n method: 'post',\r\n credentials: 'include'\r\n })\r\n .then(res => {\r\n if(res.ok){\r\n return res.json()\r\n } else {\r\n throw new Error(\"Failed on endpoint\");\r\n }\r\n })\r\n .then(json => {\r\n updateCartData(context,json)\r\n context.commit('updateShowOrderSummarySpinner')\r\n })\r\n .catch(err => {\r\n context.dispatch('stickyError',err.toString())\r\n context.commit('updateShowOrderSummarySpinner')\r\n });\r\n },\r\n\r\n submitCouponCode(context,code){\r\n\r\n context.commit('updateShowOrderSummarySpinner')\r\n\r\n fetch(process.env.COUPON_CODE,{\r\n method: 'post',\r\n headers: {'Content-Type': 'application/json'},\r\n credentials: 'include',\r\n body: `{\"couponCode\":\"${code}\"}`\r\n })\r\n .then(res => {\r\n if(res.ok){\r\n return res.json()\r\n } else {\r\n throw new Error(\"Failed on endpoint\");\r\n }\r\n })\r\n .then(json => {\r\n updateCartData(context,json)\r\n context.commit('updateShowOrderSummarySpinner')\r\n })\r\n .catch(err => {\r\n console.error(\"Submitting coupon code failed - \",err);\r\n context.dispatch('stickyError',err)\r\n context.commit('updateShowOrderSummarySpinner')\r\n });\r\n },\r\n\r\n addReferenceId(context,data){\r\n\r\n const refid = typeof data === 'string' ? data : data.refid\r\n\r\n fetch(process.env.CART_ADD_REFFERENCEID_ENDPOINT,{\r\n method: 'put',\r\n credentials: 'include',\r\n headers: {'Content-Type': 'application/json'},\r\n body : JSON.stringify({'ownReference': refid || null})\r\n })\r\n .then(res => {\r\n if(!res.ok){\r\n throw new Error(\"Failed on endpoint\");\r\n }\r\n })\r\n .catch(err => {\r\n console.error(\"Adding reference id failed - \",err);\r\n context.dispatch('stickyError',err)\r\n });\r\n },\r\n\r\n addItemReferenceId(context,data){\r\n\r\n const url = process.env.CART_ADD_ITEMREFFERENCEID_ENDPOINT.replace('{code}',data.code)\r\n\r\n fetch(url,{\r\n method: 'put',\r\n credentials: 'include',\r\n headers: {'Content-Type': 'application/json'},\r\n body : JSON.stringify({'code': data.code, 'ownReference':data.refid || null})\r\n })\r\n .then(res => {\r\n if(!res.ok){\r\n throw new Error(\"Failed on endpoint\");\r\n }\r\n })\r\n .catch(err => {\r\n console.error(\"Adding reference id failed - \",err);\r\n context.dispatch('stickyError',err)\r\n });\r\n },\r\n\r\n placeOrder(context,stringifiedFormData) {\r\n fetch(process.env.PLACE_ORDER_ENDPOINT,{\r\n method: 'post',\r\n credentials: 'include',\r\n headers: {'Content-Type': 'application/json'},\r\n body : stringifiedFormData\r\n })\r\n .then(res => {\r\n if(res.ok){\r\n return res.json()\r\n } else {\r\n throw new Error(\"Failed on endpoint\");\r\n }\r\n })\r\n .then(json => {\r\n if(json.isSuccess && json.redirUrl){\r\n document.location.href = json.redirUrl\r\n } else {\r\n context.commit('updateErrorMessage',json.errorMessage)\r\n context.dispatch('stickyError',json.errorMessage)\r\n }\r\n })\r\n .catch(err => {\r\n console.error(\"Getting cart data failed - \",err);\r\n context.dispatch('stickyError',err)\r\n });\r\n }\r\n}\r\n\r\nexport default { state, actions, mutations }\r\n","const getSuggestion = function(suggestions,searchTerm){\r\n\r\n let returnSuggestion = ''\r\n \r\n if(Array.isArray(suggestions) && suggestions.length){\r\n returnSuggestion = suggestions[0].suggestion.substring(searchTerm.length)\r\n }\r\n\r\n return returnSuggestion\r\n}\r\n\r\nexport default getSuggestion","const mapSuggestions = function(suggestions, searchResultPageUrl){\r\n\r\n return suggestions.map(suggestion => {\r\n return {\r\n tag: suggestion.suggestion,\r\n count: suggestion.hits,\r\n tagLink: `${searchResultPageUrl}?q=${encodeURIComponent(suggestion.suggestion)}`\r\n }\r\n })\r\n\r\n}\r\n\r\nexport default mapSuggestions","const sortSuggestions = function(suggestions) {\r\n\r\n return suggestions.sort((a,b) => {\r\n if(a.hits < b.hits){\r\n return 1\r\n } else if(a.hits > b.hits) {\r\n return -1\r\n } else {\r\n return 0\r\n }\r\n });\r\n\r\n}\r\n\r\nexport default sortSuggestions","import getSuggestion from './methods/getSuggestion'\r\nimport mapProducts from './methods/mapProducts'\r\nimport mapSuggestions from './methods/mapSuggestions'\r\nimport sortSuggestions from './methods/sortSuggestions'\r\n\r\nconst mapResultData = function(data,searchTerm){\r\n \r\n const searchAsYouType = data.searchAsYouType;\r\n const autoCompleteSuggestions = sortSuggestions(data.autoComplete)\r\n const searchResultPageUrl = data.searchResultPageUrl || \"/search/\"\r\n\r\n const mappedData = {\r\n autoCompleteSuggestion: getSuggestion(autoCompleteSuggestions,searchTerm),\r\n productsTotalCount: searchAsYouType.totalHits,\r\n productsTotalLink: searchResultPageUrl + `?q=${searchTerm}`,\r\n products: mapProducts(searchAsYouType.queryResult),\r\n tags: mapSuggestions(autoCompleteSuggestions, searchResultPageUrl)\r\n }\r\n\r\n return mappedData\r\n\r\n }\r\n\r\n export default mapResultData","export default function({endpoint,facets,skip,take,searchQuery,excludeEditorPicks}) {\r\n\r\n endpoint = endpoint ? endpoint : ''\r\n\r\n const queryPrefix = function(totalString){\r\n return totalString.indexOf('?') > -1 ? '&' : '?'\r\n }\r\n\r\n const endpointWithQueryString = facets.reduce((totalString,facet) => {\r\n return facet.facetValues.reduce((facetString,filter) => {\r\n return facet.id ? facetString+queryPrefix(facetString)+`${facet.id}=${filter.value ? filter.value+'-' : ''}${encodeURIComponent(filter.id)}` : ''\r\n },totalString)\r\n }, endpoint)\r\n\r\n const skipAndTake = (skip !== undefined && take) ? queryPrefix(endpointWithQueryString) + `skip=${skip}&take=${take}` : ''\r\n\r\n const queryString = (searchQuery !== undefined && searchQuery) ? queryPrefix(endpointWithQueryString+skipAndTake) + `q=${searchQuery}` : ''\r\n\r\n const excludeEditorpicksString = (excludeEditorPicks !== undefined && excludeEditorPicks) ? queryPrefix(endpointWithQueryString+skipAndTake+queryString) + `excludeEditorPicks=true` : ''\r\n\r\n return endpointWithQueryString+skipAndTake+queryString+excludeEditorpicksString\r\n\r\n}\r\n","//\r\n// https://developers.google.com/tag-manager/enhanced-ecommerce\r\n//\r\n// Note: purchase registration is handled by server side generated code, that is placed on confirmation page.\r\n// See method: GtmAddPurchase\r\n\r\nfunction _registerGtmDataLayer(obj, dontClear) {\r\n if (!obj) {\r\n console.error(\"Object is missing\");\r\n return;\r\n }\r\n\r\n window.dataLayer = ( typeof window.dataLayer != \"undefined\" && window.dataLayer instanceof Array ) ? window.dataLayer : [];\r\n if (!dontClear) {\r\n window.dataLayer.push({ ecommerce: null });\r\n }\r\n window.dataLayer.push(obj);\r\n}\r\n\r\nfunction _parseCurrencyString(price){\r\n // input samples:\r\n // DKK 4.595,00\r\n // GBP 555,00\r\n // USD 1,234.00\r\n // NOK 4 195,00\r\n\r\n if (!price || price.length < 8) { // smallest price \"DKK 0,00\"\r\n // console.error(\"Price is empty\");\r\n return {\r\n \"currencyCode\": \"???\",\r\n \"price\": 0.00\r\n }\r\n }\r\n\r\n const currencyCode = price.substring(0,3);\r\n let priceParsed = (parseFloat(price.replaceAll(/[A-z ,\\.]/g,\"\"))/100).toFixed(2);\r\n\r\n return {\r\n \"currencyCode\": currencyCode,\r\n \"price\": priceParsed\r\n }\r\n}\r\n\r\nfunction _getProductFullName(primaryProductName, secondaryProductName) {\r\n if (secondaryProductName){\r\n return `${primaryProductName} ${secondaryProductName}`;\r\n }\r\n return primaryProductName;\r\n}\r\n\r\nfunction registerAddToCart(productName, variantName, id, price, quantity){\r\n var p = _parseCurrencyString(price);\r\n\r\n const obj = {\r\n \"event\": \"addToCart\",\r\n \"ecommerce\": {\r\n \"currencyCode\": p.currencyCode,\r\n \"add\": {\r\n \"products\": [{\r\n \"name\": productName,\r\n \"id\": id,\r\n \"price\": p.price,\r\n \"brand\": \"\",\r\n \"category\": \"\",\r\n \"variant\": variantName,\r\n \"quantity\": quantity\r\n }]\r\n }\r\n }\r\n };\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\nfunction registerRemoveFromCart(productName, variantName, id, price, quantity){\r\n var p = _parseCurrencyString(price);\r\n\r\n const obj = {\r\n \"event\": \"removeFromCart\",\r\n \"ecommerce\": {\r\n \"currencyCode\": p.currencyCode,\r\n \"remove\": {\r\n \"products\": [{\r\n \"name\": productName,\r\n \"id\": id,\r\n \"price\": p.price,\r\n \"brand\": \"\",\r\n \"category\": \"\",\r\n \"variant\": variantName,\r\n \"quantity\": quantity\r\n }]\r\n }\r\n }\r\n };\r\n\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\nfunction registerProductDetails(productName, variantName, id, price){\r\n var p = _parseCurrencyString(price);\r\n\r\n const obj = {\r\n \"ecommerce\": {\r\n \"currencyCode\": p.currencyCode,\r\n \"detail\": {\r\n \"actionField\": {}, // \"detail\" actions have an optional list property.\r\n \"products\": [{\r\n \"name\": productName, // Name or ID is required.\r\n \"id\": id,\r\n \"price\": p.price,\r\n \"brand\": \"\",\r\n \"category\": \"\",\r\n \"variant\": variantName\r\n }]\r\n }\r\n }\r\n };\r\n\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\nfunction registerViewAddon(productName){\r\n\r\n const obj = {\r\n \"event\": \"trackPDP\",\r\n \"eventData\": {\r\n \"category\": \"Product detail page\",\r\n \"action\": \"View addons\",\r\n \"label\": productName\r\n }\r\n };\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\nfunction registerCustomizer(productName){\r\n\r\n const obj = {\r\n \"event\": \"trackPDP\",\r\n \"eventData\": {\r\n \"category\": \"Product detail page\",\r\n \"action\": \"Customizer\",\r\n \"label\": productName\r\n }\r\n };\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\nfunction registerPictureClick(productName){\r\n\r\n const obj = {\r\n \"event\": \"trackPDP\",\r\n \"eventData\": {\r\n \"category\": \"Product detail page\",\r\n \"action\": \"picture click\",\r\n \"label\": productName\r\n }\r\n };\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\n\r\n\r\nfunction _getProductsFromString(productsAsString, listTypeName) {\r\n let products = [];\r\n try {\r\n products = JSON.parse(productsAsString);\r\n\r\n } catch(e) {\r\n console.error(e)\r\n return null;\r\n }\r\n\r\n if (!products || products.length < 1) return;\r\n\r\n let impressions = []\r\n let currencyCode = \"\"\r\n\r\n for (let i = 0; i < products.length; i++) {\r\n if (products[i].type !== \"variant\") continue\r\n\r\n let currentPrice = _parseCurrencyString(products[i].formattedPrice)\r\n currencyCode = currentPrice.currencyCode;\r\n let productName = _getProductFullName(products[i].productPrimaryName, products[i].productSecondaryName)\r\n let variantName = `${products[i].variantName}`\r\n let impression = {\r\n \"name\": productName,\r\n \"id\": products[i].code,\r\n \"price\": currentPrice.price,\r\n \"brand\": null,\r\n \"category\": null,\r\n \"variant\": variantName,\r\n \"list\": listTypeName,\r\n \"position\": i + 1\r\n }\r\n impressions.push(impression)\r\n }\r\n\r\n return (!impressions || impressions.length < 1) ? null : { impressions, \"currencyCode\": currencyCode };\r\n}\r\n\r\nfunction _getProductsFromQuickSearch(products, listTypeName) {\r\n let impressions = []\r\n let currencyCode = \"\"\r\n\r\n for (let i = 0; i < products.length; i++) {\r\n if (!products[i].sku) continue\r\n\r\n let currentPrice = _parseCurrencyString(products[i].unitPrice)\r\n currencyCode = currentPrice.currencyCode;\r\n let impression = {\r\n \"name\": products[i].name,\r\n \"id\": products[i].sku,\r\n \"price\": currentPrice.price,\r\n \"brand\": null,\r\n \"category\": null,\r\n \"variant\": products[i].variantName,\r\n \"list\": listTypeName,\r\n \"position\": i + 1\r\n }\r\n impressions.push(impression)\r\n }\r\n\r\n return (!impressions || impressions.length < 1) ? null : { impressions, \"currencyCode\": currencyCode };\r\n}\r\n\r\nfunction _getProductsFromSearchTileData(products, listTypeName) {\r\n let impressions = []\r\n let currencyCode = \"\"\r\n\r\n for (let i = 0; i < products.length; i++) {\r\n if (!products[i].code) continue\r\n\r\n let currentPrice = _parseCurrencyString(products[i].formattedPrice)\r\n let productName = _getProductFullName(products[i].productPrimaryName, products[i].productSecondaryName)\r\n currencyCode = currentPrice.currencyCode;\r\n let impression = {\r\n \"name\": productName,\r\n \"id\": products[i].code,\r\n \"price\": currentPrice.price,\r\n \"brand\": null,\r\n \"category\": null,\r\n \"variant\": products[i].variantName,\r\n \"list\": listTypeName,\r\n \"position\": i + 1\r\n }\r\n impressions.push(impression)\r\n }\r\n\r\n return (!impressions || impressions.length < 1) ? null : { impressions, \"currencyCode\": currencyCode };\r\n}\r\n\r\nfunction _getProductsFromCartItems(products) {\r\n if (!products || products.length < 1) return;\r\n\r\n let results = []\r\n let currencyCode = \"\"\r\n\r\n for (let i = 0; i < products.length; i++) {\r\n if (!products[i].sku) continue\r\n\r\n let currentPrice = _parseCurrencyString(products[i].unitPrice)\r\n currencyCode = currentPrice.currencyCode;\r\n let productName = _getProductFullName(products[i].primaryProductName, products[i].secondaryProductName);\r\n let variantName = products[i].variantName\r\n let result = {\r\n \"name\": productName,\r\n \"id\": products[i].sku,\r\n \"price\": currentPrice.price,\r\n \"brand\": null,\r\n \"category\": null,\r\n \"variant\": variantName,\r\n \"quantity\": products[i].quantity\r\n }\r\n results.push(result)\r\n }\r\n\r\n return (!results || results.length < 1) ? null : { \"products\": results, \"currencyCode\": currencyCode };\r\n}\r\n\r\n// productsInput: can be various depending on who sends the data [striing, array]\r\n// listTypeName:\r\n// - recommendation-block\r\n// - search-overlay\r\n// - search-result\r\nfunction registerImpression(productsInput, listTypeName){\r\n\r\n let result = []\r\n\r\n switch (listTypeName) {\r\n case \"recommendation-block\":\r\n result = _getProductsFromString(productsInput, listTypeName);\r\n break;\r\n case \"search-overlay\":\r\n result = _getProductsFromQuickSearch(productsInput, listTypeName);\r\n break;\r\n case \"product-search-tile\":\r\n result = _getProductsFromSearchTileData(productsInput, listTypeName);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (!result || !result.impressions || result.impressions.length < 1) return;\r\n\r\n let obj = {\r\n \"ecommerce\": {\r\n \"currencyCode\": result.currencyCode,\r\n \"impressions\": result.impressions\r\n }\r\n };\r\n\r\n _registerGtmDataLayer(obj);\r\n}\r\n\r\nfunction registerCheckOut(productsInput, redirectUrl){\r\n try {\r\n var { products, currencyCode } = _getProductsFromCartItems(productsInput);\r\n\r\n let obj = {\r\n \"event\": \"checkout\",\r\n \"ecommerce\": {\r\n \"currencyCode\": currencyCode,\r\n \"checkout\": {\r\n \"actionField\": {\"step\": 1, \"option\": null},\r\n \"products\": products\r\n }\r\n },\r\n \"eventCallback\": () => {\r\n document.location = redirectUrl;\r\n }\r\n }\r\n\r\n _registerGtmDataLayer(obj);\r\n } catch(e) {\r\n console.error(e);\r\n document.location = redirectUrl;\r\n }\r\n}\r\n\r\nexport { registerAddToCart\r\n , registerRemoveFromCart\r\n , registerProductDetails\r\n , registerImpression\r\n , registerCheckOut\r\n , registerPictureClick\r\n , registerCustomizer\r\n , registerViewAddon\r\n};\r\n","import mapResultData from '../methods/mapResultData/mapResultData'\r\nimport urlComposer from '../../methods/urlComposer/urlComposer'\r\nimport { registerImpression } from \"../../methods/gtmlDataLayer/registerGtmDataLayer\"\r\n\r\nconst state = {\r\n results: {},\r\n searchTerm: \"\",\r\n autoCompleteSuggestion: \"\",\r\n searchLoading: false,\r\n filteringInProgress: false,\r\n facets: [],\r\n selectedFacets: [],\r\n productResults: [],\r\n productsTotalLink: \"\",\r\n productsTotalCount: 0,\r\n tagResults: [],\r\n urlString: \"\",\r\n tileListData: [],\r\n availableTotalResults: 0,\r\n filterSkip: 0,\r\n filterTake: 0,\r\n visibleResults: 0,\r\n pageId: \"\",\r\n filterEndpoint: \"\",\r\n searchQuery: \"\",\r\n excludeEditorPicks: false\r\n}\r\n\r\nconst mutations = {\r\n updateFilteringInprogress(state,status){\r\n state.filteringInProgress = status\r\n },\r\n updatePageId(state,pageId){\r\n state.pageId = pageId\r\n },\r\n updateFilterEndpoint(state,filterEndpoint){\r\n state.filterEndpoint = filterEndpoint\r\n },\r\n updateFilterTake(state,take){\r\n state.filterTake = take\r\n },\r\n updateFilterSkip(state,skipCount){\r\n state.filterSkip = skipCount\r\n },\r\n updateExcludeEditorPicks(state,exclude){\r\n state.excludeEditorPicks = exclude\r\n },\r\n updateVisibleResults(state,count){\r\n state.visibleResults = count\r\n },\r\n updateResults(state,results){\r\n state.results = results;\r\n state.productResults = results.products\r\n state.autoCompleteSuggestion = results.autoCompleteSuggestion\r\n state.tagResults = results.tags\r\n state.productsTotalLink = results.productsTotalLink\r\n state.productsTotalCount = results.productsTotalCount\r\n\r\n },\r\n updateTileListData(state,results){\r\n state.tileListData = state.filterSkip\r\n ? state.tileListData.concat(results)\r\n : results\r\n },\r\n updateAvailableTotalResults(state,count){\r\n\r\n state.availableTotalResults = count\r\n },\r\n clearResults(state){\r\n state.results = {};\r\n state.productResults = []\r\n state.autoCompleteSuggestion = \"\"\r\n state.tagResults = []\r\n state.productsTotalLink = \"\"\r\n state.productsTotalCount = 0\r\n\r\n },\r\n updateSearchTerm(state,searchTerm){\r\n state.searchTerm = searchTerm;\r\n },\r\n updateSearchLoading(state,status){\r\n state.searchLoading = status\r\n },\r\n updateAutoCompleteSuggestion(state,suggestion){\r\n state.autoCompleteSuggestion = suggestion\r\n },\r\n updateUrlString(state,string){\r\n state.urlString = string\r\n },\r\n updateFacets(state,facets){\r\n state.facets = facets\r\n },\r\n mapFacets(state,jsonFacets){\r\n\r\n\t\tconst parseFilters = (facetValues) => {\r\n\t\t\treturn facetValues.map(value => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: value.name,\r\n\t\t\t\t\tid: value.id,\r\n\t\t\t\t\ttooltip: value.tooltip,\r\n\t\t\t\t\tseparated: !!value.separated,\r\n\t\t\t\t\tactive: value.active ? value.active : true //to ensure default value is true\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n if(state.facets.length){\r\n console.log(\"facets already there, compare with new facets from service and deactivate the ones not present there\")\r\n } else {\r\n state.facets = jsonFacets.map(facet => {\r\n\t\t\t\tlet categories = [];\r\n\t\t\t\tif ( !facet.categories ) {\r\n\t\t\t\t\tcategories.push({id: null, name: null, filters: parseFilters(facet.facetValues)});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcategories = facet.categories.map(category => {\r\n\t\t\t\t\t\tconst categoryValue = {\r\n\t\t\t\t\t\t\tid: category.id,\r\n\t\t\t\t\t\t\tname: category.name,\r\n\t\t\t\t\t\t\ttooltip: category.tooltip,\r\n\t\t\t\t\t\t\tfilters: parseFilters(facet.facetValues.filter(facetValue => facetValue.category === category.id))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( facet.showAllValue ) {\r\n\t\t\t\t\t\t\tcategoryValue.filters.unshift({id: \"all-value\", name: facet.allValue});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn categoryValue;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n return {\r\n id: facet.id,\r\n title: facet.name,\r\n active: facet.active,\r\n\t\t\t\t\thasSearch: !!facet.hasSearch,\r\n\t\t\t\t\tcontrolType: facet.controlType || \"checkbox\",\r\n\t\t\t\t\tshowAll: facet.showAllValue ? facet.allValue : null,\r\n categories: categories\r\n }\r\n })\r\n }\r\n },\r\n updateSelectedFacets(state,updatedFacets){\r\n state.selectedFacets = updatedFacets\r\n },\r\n updateSearchQuery(state,updatedSearchQuery){\r\n state.searchQuery = updatedSearchQuery\r\n },\r\n hydrateSelectedFacets(state){\r\n\r\n // apply label to selected facets\r\n // if selectedFacets are generated from url, the labels will be missing\r\n // run this mutation to apply labels from facet store\r\n\r\n\t\tconsole.log(\"hydrating selected facets\");\r\n\r\n const facets = state.facets\r\n const selectedFacets = state.selectedFacets\r\n\r\n const hydratedSelectedFacets = selectedFacets.map(selectedFacet => {\r\n\r\n\t\t\t//use find to find exact match\r\n\r\n const matchingFacet = facets.find(facet => facet.id === selectedFacet.id)\r\n\r\n if(matchingFacet){\r\n\t\t\t\tselectedFacet.facetValues.map(value => {\r\n\t\t\t\t\t//extract facetValue name from inside facets.categories.filters using find to find exact match\r\n\t\t\t\t\tconst matchingFilter = matchingFacet.categories.map(category => {\r\n\t\t\t\t\t\treturn category.filters.find(filter => filter.id === value.id)\r\n\t\t\t\t\t}).find(filter => filter)\r\n\r\n\t\t\t\t\tif(matchingFilter){\r\n\t\t\t\t\t\tvalue.name = matchingFilter.name\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvalue.name = \"VALUE NOT FOUND\"\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn value;\r\n })\r\n }\r\n\r\n return selectedFacet\r\n })\r\n\r\n state.selectedFacets = hydratedSelectedFacets\r\n\r\n }\r\n\r\n}\r\n\r\nconst actions = {\r\n filterInitialLoad(context,{initialFacets,initialResults,initialAvailableTotalResults,initialSelectedFacets,initialSearchQuery,initialPageSize,excludeEditorPicks,initialTake, pageId, filterEndpoint,}){\r\n if(pageId){\r\n context.commit('updatePageId',pageId)\r\n }\r\n if(filterEndpoint){\r\n context.commit('updateFilterEndpoint', filterEndpoint)\r\n }\r\n if(initialFacets){\r\n context.commit('mapFacets',initialFacets)\r\n }\r\n if(initialSelectedFacets){\r\n context.commit('updateSelectedFacets',initialSelectedFacets)\r\n }\r\n if(initialResults){\r\n context.commit('updateTileListData',initialResults)\r\n }\r\n if(initialAvailableTotalResults){\r\n context.commit('updateAvailableTotalResults',initialAvailableTotalResults)\r\n }\r\n if(initialPageSize) {\r\n context.commit('updateVisibleResults',initialPageSize)\r\n }\r\n if(initialTake){\r\n context.commit('updateFilterTake',initialTake)\r\n }\r\n if(initialSearchQuery){\r\n context.commit('updateSearchQuery',initialSearchQuery)\r\n }\r\n context.commit('updateExcludeEditorPicks',excludeEditorPicks)\r\n // add skip and take values\r\n },\r\n performSearch(context){\r\n\r\n context.commit('updateSearchLoading',!context.state.searchLoading)\r\n\r\n const composedUrl = `${process.env.SEARCH_ENDPOINT}${context.state.urlString}`\r\n\r\n fetch(composedUrl,{\r\n method: 'GET',\r\n headers: {'Content-Type': 'application/json'},\r\n credentials: 'include'\r\n })\r\n .then(res => {\r\n if(res.ok){\r\n return res\r\n } else {\r\n throw new Error(\"Search failed on endpoint\");\r\n }\r\n })\r\n .then(res => res.json() )\r\n .then(json => {\r\n context.commit('updateResults',mapResultData(json,context.state.searchTerm));\r\n context.commit('updateSearchLoading',!context.state.searchLoading);\r\n }).catch(err => {\r\n context.commit('updateSearchLoading',!context.state.searchLoading);\r\n context.dispatch('stickyError',err)\r\n });\r\n\r\n },\r\n performProductFiltering(context){\r\n const endpointUrl = context.state.filterEndpoint ? context.state.filterEndpoint : process.env.LIST_ENDPOINT\r\n const endpoint = endpointUrl + \"?pageId=\" + context.state.pageId;\r\n const url = urlComposer({\r\n endpoint,\r\n facets:context.state.selectedFacets,\r\n skip: context.state.filterSkip,\r\n take: context.state.filterTake,\r\n searchQuery: context.state.searchQuery,\r\n excludeEditorPicks: context.state.excludeEditorPicks\r\n })\r\n\r\n context.commit('updateFilteringInprogress',true)\r\n\r\n fetch(url,{\r\n method: 'GET',\r\n headers: {'Content-Type': 'application/json'},\r\n credentials: 'include'\r\n })\r\n .then(res => {\r\n if(res.ok){\r\n return res\r\n } else {\r\n throw new Error(\"Filtering failed on endpoint\");\r\n }\r\n })\r\n .then(res => res.json() )\r\n .then(json => {\r\n context.commit('mapFacets',json.facets)\r\n context.commit('hydrateSelectedFacets')\r\n context.commit('updateTileListData',json.results)\r\n context.commit('updateAvailableTotalResults',json.totalHits)\r\n context.commit('updateVisibleResults',context.state.visibleResults+json.hits)\r\n context.commit('updateFilteringInprogress',false)\r\n context.dispatch('registerItemsForDataLayer', json.results)\r\n })\r\n .catch(err => {\r\n context.commit('updateFilteringInprogress',false)\r\n context.dispatch('stickyError',err)\r\n });\r\n\r\n },\r\n registerItemsForDataLayer(context, listOfProducts){\r\n registerImpression(listOfProducts, \"product-search-tile\")\r\n }\r\n}\r\n\r\n\r\nexport default { state, actions, mutations }\r\n","import Vue from 'vue/dist/vue.esm';\r\nimport { getRequest } from '../integrations'; \r\nimport { GET_PRODUCTS } from '../static';\r\n\r\n\r\nconst state = {\r\n\t[GET_PRODUCTS.stateKey]: []\r\n}\r\n\r\nconst mutations = {\r\n\t[GET_PRODUCTS.SUCCESS](state, payload){ // getting products\r\n\t\tconst result = [].concat(payload);\r\n\t\tVue.set(state, [GET_PRODUCTS.stateKey], result);\r\n },\r\n [GET_PRODUCTS.PENDING](state, status){ // getting products\r\n\t\tVue.set(state, [GET_PRODUCTS.loadingKey], status);\r\n\t}\r\n}\r\n\r\nconst actions = {\r\n\tasync [GET_PRODUCTS.action](store, payload={}){\r\n\t\tconst result = await getRequest(store, {\r\n\t\t\turl: payload.id ? `${process.env.LIST_PRODUCTS}/${payload.id}` : process.env.LIST_PRODUCTS,\r\n mutationTypes: GET_PRODUCTS,\r\n delay: 1000\r\n\t\t})\r\n\t\tstore.commit(GET_PRODUCTS.SUCCESS, result);\r\n\t}\r\n}\r\n\r\nexport default { state, actions, mutations }","/**\r\n * Store Locator module\r\n */\r\n\r\n// import Vue from 'vue/dist/vue.esm';\r\nimport { getRequest } from \"../integrations\";\r\nimport { FETCH_STORES } from \"../static\";\r\nimport debounce from \"lodash/debounce\";\r\n\r\nconst filterByLatLng = (lat, lng, params) => {\r\n\treturn (\r\n\t\tlat > params.mapBounds.south &&\r\n\t\tlat < params.mapBounds.north &&\r\n\t\tlng > params.mapBounds.west &&\r\n\t\tlng < params.mapBounds.east\r\n\t);\r\n};\r\nconst state = {\r\n\tstoreLocatorId: null,\r\n\tmapReady: false,\r\n\tstoreLocatorReady: false,\r\n\r\n\tmapOptions: {\r\n\t\tmapTypeId: \"client_style\",\r\n\t\tmapTypeControl: false,\r\n\t\tzoom: 8,\r\n\t\tcenter: {\r\n\t\t\tlat: 58.26,\r\n\t\t\tlng: 12,\r\n\t\t},\r\n\t},\r\n\r\n\tmapIdle: true,\r\n\tmapDrag: false,\r\n\tmapZoom: false,\r\n\tmapPlaceSearch: false,\r\n\r\n\tzoomLevel: 8,\r\n\r\n\tbypassFetch: false,\r\n\tuseCachedStores: true,\r\n\temptySearch: false,\r\n\r\n\t[FETCH_STORES.stateKey]: [],\r\n\tcachedStores: [],\r\n\r\n\tsortedStores: [],\r\n\tfilteredStores: [],\r\n\r\n\tnearestStores: [],\r\n\tstoresInBound: [],\r\n\r\n\tselectedStore: {\r\n\t\tdata: null,\r\n\t\tselected: false,\r\n\t},\r\n\r\n\thoveredStore: {\r\n\t\tdata: null,\r\n\t\thover: false,\r\n\t},\r\n\r\n\tchosenPlace: null,\r\n\tgeoLocationCoords: null,\r\n\r\n\tchosenAssortmentKey: \"all\",\r\n\tonlyFlagShips: false,\r\n\r\n\tnumberOfStores: 0,\r\n\tnoStoresFound: false,\r\n\tlastInteraction: null,\r\n\tfetching: false,\r\n\tfetchedInitialStores: false,\r\n\tuserGeoLocation: {\r\n\t\tuserLocation: null,\r\n\t\tgranted: false,\r\n\t\tasking: false,\r\n\t},\r\n\tshowZoomNotice: false,\r\n\tshowGlobalProgress: true,\r\n\r\n\tdialog: {\r\n\t\tshow: false,\r\n\t\tcontent: null,\r\n\t\taccept: {\r\n\t\t\taction: null,\r\n\t\t\tlabel: null,\r\n\t\t},\r\n\t\tcancel: {\r\n\t\t\taction: null,\r\n\t\t\tlabel: null,\r\n\t\t},\r\n\t},\r\n\tsearchTerm: \"\",\r\n\r\n\tanimationDuration: 200,\r\n\tfakeLoadingDelay: 5000,\r\n\tmessageDelay: 1500,\r\n\tbounceTimeout: 2000,\r\n\r\n\tzoomLevelFilterStoresInBound: 7,\r\n\ttransitionIn: \"on\",\r\n\ttransitionOut: \"off\",\r\n\tinitialFitBounds: true,\r\n\tcenterOffsetOnSelection: false,\r\n\tstoreIdKey: \"sId\",\r\n\tfallbackStoreAttribute: \"S2\",\r\n\tmarkerDropIn: false,\r\n\r\n\tgoogle: {\r\n\t\t// apiKey: 'AIzaSyDUefidILao9rf4_EMau8qe6KAaQZvCWbE',\r\n\t\tapiKey: \"AIzaSyCaLJv6scz60_1Xcr6A8vpgQ9oHHraErls\",\r\n\t\turi: \"//maps.googleapis.com/maps/api/js\",\r\n\t\tlibraries: [\"places\", \"geometry\"],\r\n\t\tzoomLevelOnListClick: 12,\r\n\t\tcountryFilterOnInitialize: null,\r\n\t\tcountryFilterOnInitializeKey: null,\r\n\t\tmarkerClusterer: true,\r\n\t\tmarkerClustererStart: 8,\r\n\t\tmaxZoomLevelClusterer: 8,\r\n\t\tonSetSelectionZoom: 10,\r\n\t\taskForGeoLocation: null,\r\n\t\tonGetGeolocationZoom: 12,\r\n\t\tonGoToStoreZoom: 10,\r\n\t\tapiDataKey: null,\r\n\t},\r\n\r\n\tcopy: {\r\n\t\tgpsFailMessage:\r\n\t\t\t\"In order to determine your location, we need your permission to do so. The information will only be used for this purpose.\",\r\n\t\tgpsFailAcceptLabel: \"OK\",\r\n\t\tdirections: \"Get directions\",\r\n\t\tstoresFound: \"Store found\",\r\n\t\tstoresFoundPlenum: \"Stores founddd\",\r\n\t\tnoStoresHead: \"No stores found\",\r\n\t\tnoStoresMessage:\r\n\t\t\t\"There are no stores in the current map view. You can try expanding the search.\",\r\n\t\tnoStoresButtonLabel: \"Expand search\",\r\n\t\tgoToStore: \"Go to website\",\r\n\t\tyouAreHere: \"You are here\",\r\n\t\tfilterValues: \"all|furniture|accessories|lighting\",\r\n\t},\r\n};\r\n\r\nconst mutations = {\r\n\tsetStorelocatorId(state, id) {\r\n\t\tstate.storeLocatorId = id;\r\n\t},\r\n\tsetDefaults(state, defaults) {\r\n\t\tif (defaults.zoom) {\r\n\t\t\tstate.mapOptions.zoom = defaults.zoom;\r\n\t\t}\r\n\t\tif (defaults.center) {\r\n\t\t\tstate.mapOptions.center = defaults.center;\r\n\t\t}\r\n\t\tstate.copy = Object.assign(state.copy, defaults.copy);\r\n\t},\r\n\tmapReady(state) {\r\n\t\tstate.mapReady = true;\r\n\t},\r\n\tmapZoomChange(state, zoomLevel, mapCenter) {\r\n\t\tstate.zoomLevel = zoomLevel;\r\n\t\tstate.mapCenter = mapCenter;\r\n\r\n\t\tstate.mapZoom = true;\r\n\t\tstate.mapIdle = false;\r\n\t},\r\n\tmapDragChange(state, mapCenter) {\r\n\t\tstate.mapCenter = mapCenter;\r\n\r\n\t\tstate.mapDrag = true;\r\n\t\tstate.mapIdle = false;\r\n\t},\r\n\tmapIdleChange(state, mapIdle) {\r\n\t\tstate.mapIdle = mapIdle;\r\n\r\n\t\tif (state.mapIdle) {\r\n\t\t\tstate.mapZoom = false;\r\n\t\t\tstate.mapDrag = false;\r\n\t\t\tstate.mapPlaceSearch = false;\r\n\t\t}\r\n\t},\r\n\tsetBounds(state, bounds) {\r\n\t\tstate.bounds = bounds;\r\n\t},\r\n\tsetBypassFetch(state, value) {\r\n\t\t//console.log(\"STORELOCATOR | state.bypassFetch=\"+value);\r\n\t\tstate.bypassFetch = value;\r\n\t},\r\n\thoverStore(state, params) {\r\n\t\tstate.hoveredStore = params;\r\n\t},\r\n\tselectStore(state, params) {\r\n\t\tstate.selectedStore = params;\r\n\t},\r\n\tplaceChosen(state, place) {\r\n\t\tstate.chosenPlace = place;\r\n\t\tstate.mapPlaceSearch = true;\r\n\t},\r\n\tgeoLocationChange(state, coords) {\r\n\t\tstate.geoLocationCoords = coords;\r\n\t},\r\n\tassortmentFilterChange(state, value) {\r\n\t\tstate.chosenAssortmentKey = value;\r\n\t},\r\n\tflagShipFilterChange(state, value) {\r\n\t\tstate.onlyFlagShips = value;\r\n\t},\r\n\tsetSearchTerm(state, value) {\r\n\t\tstate.searchTerm = value;\r\n\t},\r\n\r\n\t[FETCH_STORES.PENDING](state, status) {\r\n\t\tstate[FETCH_STORES.loadingKey] = status;\r\n\t},\r\n\r\n\t[FETCH_STORES.SUCCESS](state, payload) {\r\n\t\t// getting products\r\n\t\tconst result = [].concat(payload);\r\n\t\tif (state.useCachedStores && !state.fetchedInitialStores) {\r\n\t\t\tstate.cachedStores = result;\r\n\t\t\tstate[FETCH_STORES.stateKey] = result.filter((store) =>\r\n\t\t\t\tfilterByLatLng(\r\n\t\t\t\t\tparseFloat(store.latitude),\r\n\t\t\t\t\tparseFloat(store.longitude),\r\n\t\t\t\t\tstate.bounds\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tstate[FETCH_STORES.stateKey] = result;\r\n\t\t}\r\n\t\tstate.fetchedInitialStores = true;\r\n\t\tstate.storeLocatorReady = true;\r\n\t},\r\n\tcachedStoresSucces(state, stores, params) {\r\n\t\tconst cachedStores = stores.filter((store) =>\r\n\t\t\tfilterByLatLng(\r\n\t\t\t\tparseFloat(store.latitude),\r\n\t\t\t\tparseFloat(store.longitude),\r\n\t\t\t\tparams\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\tstate[FETCH_STORES.stateKey] = cachedStores;\r\n\t},\r\n\r\n\tstoresSorted(state, stores) {\r\n\t\tstate.sortedStores = stores;\r\n\t},\r\n\tstoresFiltered(state, stores) {\r\n\t\tstate.filteredStores = stores;\r\n\t},\r\n\temptySearch(state, emptySearch) {\r\n\t\tstate.emptySearch = emptySearch;\r\n\t},\r\n};\r\n\r\nconst actions = {\r\n\tmapReady(context) {\r\n\t\tcontext.commit(\"mapReady\");\r\n\t},\r\n\tmapZoomChange(context, zoomLevel, mapCenter) {\r\n\t\tcontext.commit(\"mapZoomChange\", zoomLevel, mapCenter);\r\n\t},\r\n\tmapDragChange(context, mapCenter) {\r\n\t\tcontext.commit(\"mapDragChange\", mapCenter);\r\n\t},\r\n\tmapIdleChange(context, mapIdle) {\r\n\t\tcontext.commit(\"mapIdleChange\", mapIdle);\r\n\t},\r\n\tselectStore(context, params) {\r\n\t\tcontext.commit(\"selectStore\", params);\r\n\t},\r\n\thoverStore(context, params) {\r\n\t\tcontext.commit(\"hoverStore\", params);\r\n\t},\r\n\tsetBypassFetch(context, value) {\r\n\t\tcontext.commit(\"setBypassFetch\", value);\r\n\t},\r\n\tplaceChosen(context, place) {\r\n\t\tcontext.commit(\"placeChosen\", place);\r\n\t},\r\n\tgeoLocationChange(context, coords) {\r\n\t\tcontext.commit(\"geoLocationChange\", coords);\r\n\t},\r\n\tassortmentFilterChange(context, value) {\r\n\t\tcontext.commit(\"assortmentFilterChange\", value);\r\n\t},\r\n\tflagShipFilterChange(context, value) {\r\n\t\tcontext.commit(\"flagShipFilterChange\", value);\r\n\t},\r\n\tplaceSearch(context, value) {\r\n\t\tcontext.commit(\"setSearchTerm\", value);\r\n\t},\r\n\r\n\tstatusCheck(context, bounds) {\r\n\t\t//console.log(\"STORELOCATOR | statusCheck\",\"state.mapDrag:\"+state.mapDrag,\"state.mapZoom:\"+state.mapZoom);\r\n\r\n\t\tif ((state.mapDrag || state.mapZoom) && state.fetchedInitialStores) {\r\n\t\t\t// context.dispatch('getUpdatedStores');\r\n\t\t}\r\n\r\n\t\tcontext.commit(\"setBounds\", bounds);\r\n\t\tcontext.dispatch(\"mapIdleChange\", true, bounds);\r\n\t},\r\n\r\n\tstoresSortedByDistance(context, stores) {\r\n\t\tcontext.commit(\"storesSorted\", stores);\r\n\t},\r\n\tstoresSortedByFilters(context, stores) {\r\n\t\tcontext.commit(\"storesFiltered\", stores);\r\n\t},\r\n\r\n\tgetInitialStores(context) {\r\n\t\tcontext;\r\n\t\tif (state[FETCH_STORES.loadingKey]) {\r\n\t\t\tconsole.warn(\"STORE LOCATOR | Fetch ongoing, can't fetch\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst options = {\r\n\t\t\tendPoint: process.env.STORE_LIST,\r\n\t\t\tstoreLocatorId: context.state.storeLocatorId,\r\n\t\t};\r\n\t\tcontext.dispatch(FETCH_STORES.action, options);\r\n\t},\r\n\r\n\t// getUpdatedStores(context) {\r\n\t// \t//console.log(\"STORELOCATOR | getUpdatedStores\");\r\n\r\n\t// \tcontext;\r\n\t// \tif (state[FETCH_STORES.loadingKey]) {\r\n\t// \t\tconsole.warn(\"STORE LOCATOR | Fetch ongoing, can't fetch\");\r\n\t// \t\treturn false;\r\n\t// \t}\r\n\r\n\t// \tconst options = {\r\n\t// \t\tendPoint: process.env.STORE_LIST,\r\n\t// \t\tstoreLocatorId: context.state.storeLocatorId\r\n\t// \t};\r\n\t// \tdebounce((options) => {context.dispatch(FETCH_STORES.action, options)},300)(options);\r\n\t// },\r\n\r\n\tgetStoresFromBound(context, params) {\r\n\t\t//console.log(\"STORELOCATOR | getStoresFromBound\");\r\n\r\n\t\tconst { state } = context;\r\n\r\n\t\tif (state[FETCH_STORES.loadingKey]) {\r\n\t\t\tconsole.warn(\"STORE LOCATOR | Fetch ongoing, can't fetch\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (state.useCachedStores) {\r\n\t\t\tconst cachedStores = state.cachedStores.filter((store) =>\r\n\t\t\t\tfilterByLatLng(\r\n\t\t\t\t\tparseFloat(store.latitude),\r\n\t\t\t\t\tparseFloat(store.longitude),\r\n\t\t\t\t\tparams\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\t\tcontext.commit(\"emptySearch\", cachedStores.length === 0);\r\n\r\n\t\t\tcontext.commit(FETCH_STORES.SUCCESS, cachedStores, params);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst options = {\r\n\t\t\tendPoint: process.env.STORE_LIST,\r\n\t\t\tstoreLocatorId: context.state.storeLocatorId,\r\n\t\t\tparams: {\r\n\t\t\t\ttopLeftLat: params.mapBounds.north,\r\n\t\t\t\ttopLeftLong: params.mapBounds.west,\r\n\t\t\t\tbottomRightLat: params.mapBounds.south,\r\n\t\t\t\tbottomRightLong: params.mapBounds.east,\r\n\t\t\t\tcenterLat: params.mapCenter.lat,\r\n\t\t\t\tcenterLon: params.mapCenter.lng,\r\n\t\t\t},\r\n\t\t};\r\n\t\tif (state)\r\n\t\t\tdebounce((options) => {\r\n\t\t\t\tcontext.dispatch(FETCH_STORES.action, options);\r\n\t\t\t}, 300)(options);\r\n\t},\r\n\r\n\tasync [FETCH_STORES.action](store, options = {}) {\r\n\t\tlet searchParams = new URLSearchParams();\r\n\t\tif (options.params) {\r\n\t\t\tfor (const key in options.params) {\r\n\t\t\t\tif (options.params.hasOwnProperty(key)) {\r\n\t\t\t\t\tsearchParams.set(key, options.params[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet url = options.endPoint;\r\n\t\turl +=\r\n\t\t\t\"?\" +\r\n\t\t\tsearchParams.toString() +\r\n\t\t\t\"CategoryId=\" +\r\n\t\t\toptions.storeLocatorId;\r\n\r\n\t\tconst result = await getRequest(store, {\r\n\t\t\turl: url,\r\n\t\t\tmutationTypes: FETCH_STORES,\r\n\t\t\tdelay: 0,\r\n\t\t});\r\n\t\tstore.commit(FETCH_STORES.SUCCESS, result);\r\n\t},\r\n};\r\n\r\nexport default { state, actions, mutations };\r\n","import Vue from 'vue/dist/vue.esm';\r\nimport { getRequest } from '../integrations';\r\n\r\nimport { GET_RECOMMENDATION } from '../static';\r\n\r\nconst state = {\r\n [GET_RECOMMENDATION.loadingKey]: false,\r\n}\r\n\r\nconst mutations = {\r\n\t[GET_RECOMMENDATION.PENDING](state, status){\r\n\t\tVue.set(state, [GET_RECOMMENDATION.loadingKey], status);\r\n\t}\r\n}\r\n\r\nconst actions = {\r\n\tasync [GET_RECOMMENDATION.action](store, payload={}){\r\n const result = await getRequest(store, {\r\n\t\t\turl: `${process.env.RECOMMENDATIONS}?_id=${payload.id}`,\r\n mutationTypes: GET_RECOMMENDATION,\r\n delay: 1000\r\n\t\t})\r\n return result\r\n\t}\r\n}\r\n\r\nexport default { state, actions, mutations }\r\n","const state = {\r\n\tactiveVimeoVideoId: null,\r\n\tactiveVideoSrc: null,\r\n};\r\n\r\nconst mutations = {\r\n\tsetActiveVimeoVideoId(state, id) {\r\n\t\tstate.activeVimeoVideoId = id;\r\n\t},\r\n\tsetActiveVideoSrc(state, src) {\r\n\t\tstate.activeVideoSrc = src;\r\n\t},\r\n};\r\n\r\nconst actions = {\r\n\tsetActiveVideo({ commit }, params) {\r\n\t\tif (!params) {\r\n\t\t\tcommit(\"setActiveVimeoVideoId\", null);\r\n\t\t\tcommit(\"setActiveVideoSrc\", null);\r\n\t\t} else if (params.type == \"vimeo\") {\r\n\t\t\tcommit(\"setActiveVimeoVideoId\", params.value);\r\n\t\t} else if (params.type == \"html\") {\r\n\t\t\tcommit(\"setActiveVideoSrc\", params.value);\r\n\t\t} else {\r\n\t\t\tcommit(\"setActiveVimeoVideoId\", null);\r\n\t\t\tcommit(\"setActiveVideoSrc\", null);\r\n\t\t}\r\n\t},\r\n};\r\n\r\nexport default { state, actions, mutations };\r\n","import Vue from 'vue/dist/vue.esm';\r\nimport { getRequest } from '../integrations'; \r\nimport { REQUEST_OVERLAY_PRODUCTS } from '../static';\r\n\r\n\r\nconst state = {\r\n\tcontentData: null,\r\n\tproductsData: null,\r\n overlayOpen: false,\r\n}\r\n\r\n\r\nconst actions = {\r\n \r\n openImageProductsOverlay(context, skuList) {\r\n\t\tcontext.dispatch(\"closeMainMenu\", {root: true});\r\n\t\tcontext.dispatch(\"closeMainSearch\", {root: true});\r\n\t\tcontext.dispatch(\"closeAccountMenu\", {root: true});\r\n\t\tcontext.dispatch(\"setBodyFixed\", {\r\n transitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t}, {root: true});\r\n context.dispatch(REQUEST_OVERLAY_PRODUCTS.action, {skuList: skuList});\r\n\t},\r\n async [REQUEST_OVERLAY_PRODUCTS.action](store, payload) {\r\n\t\tconsole.log(\"payload\",payload)\r\n\t\tconst response = await getRequest(store, {\r\n\t\t\turl: process.env.REQUEST_OVERLAY_PRODUCTS + '?skuList=' + payload.skuList,\r\n\t\t\tmutationTypes: REQUEST_OVERLAY_PRODUCTS\r\n\t\t});\r\n\t\tstore.commit(REQUEST_OVERLAY_PRODUCTS.SUCCESS, response.results);\t\t\r\n\t},\t\r\n\tcloseImageProductsOverlay(context) {\r\n\t\tcontext.commit(\"closeImageProductsOverlay\");\r\n\t},\r\n\tsetImageProductsOverlayData(context, data) {\r\n\t\tcontext.commit(\"setImageProductsOverlayData\", data);\r\n\t},\r\n}\r\n\r\nconst mutations = {\t\r\n [REQUEST_OVERLAY_PRODUCTS.PENDING] (state, status) { // request products (for overlay)\r\n\t\tVue.set(state, REQUEST_OVERLAY_PRODUCTS.loadingKey, status);\r\n\t},\r\n\t[REQUEST_OVERLAY_PRODUCTS.SUCCESS] (state, result) { // request products (for overlay)\r\n\t\tstate.productsData = result;\r\n state.overlayOpen = true;\r\n\t},\r\n setImageProductsOverlayData(state, data){\r\n\t\tstate.contentData = data; \r\n },\r\n openImageProductsOverlay(state){\r\n\t\tstate.overlayOpen = true; \r\n },\r\n closeImageProductsOverlay(state){\r\n\t\tstate.overlayOpen = false;\r\n\t\tstate.productsData = null;\r\n\t\tstate.contentData = null;\r\n },\r\n \r\n}\r\nexport default { state, actions, mutations }","export const CylindoViewMode = {\r\n DESKTOP: \"DESKTOP\",\r\n MOBILE_BLUR: \"MOBILE_BLUR\",\r\n MOBILE_FOCUS: \"MOBILE_FOCUS\",\r\n}\r\n\r\nexport const ProductType = {\r\n BASIC: \"BASIC\",\r\n CONFIGURABLE: \"CONFIGURABLE\",\r\n PLANNABLE: \"PLANNABLE\",\r\n\tCOMPOUND: \"COMPOUND\"\r\n}\r\n\r\n//MUST be lowercase\r\nexport const OptionsType = {\r\n DEFAULT: \"default\",\r\n SPECIAL: \"special\",\r\n}\r\n\r\nexport const ControlsMode = {\r\n DEFAULT: \"DEFAULT\",\r\n SEARCH: \"SEARCH\",\r\n FILTERS: \"FILTERS\",\r\n}\r\n\r\nexport const CylindoFeature = {\r\n LEATHER: \"LEATHER\",\r\n TEXTILE: \"TEXTILE\",\r\n SEAT: \"SEAT\",\r\n}\r\n\r\nexport const CookiePrefix = 'muuto-custom-config_';\r\n","import Vue from \"vue/dist/vue.esm\";\r\nimport { RECONFIGURATOR_GETSTEP_ASYNC, RECONFIGURATOR_GETVARIANT_ASYNC } from \"../static\";\r\nimport { getRequest, postRequest } from \"../integrations\";\r\n\r\nimport { CylindoFeature, CylindoViewMode } from \"../../../../components/reconfigurator/partials/constants\";\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n///// S T A T E ////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nconst state = {\r\n\t[RECONFIGURATOR_GETSTEP_ASYNC.loadingKey]: null,\r\n\t[RECONFIGURATOR_GETSTEP_ASYNC.stateKey]: null,\r\n\r\n\t[RECONFIGURATOR_GETVARIANT_ASYNC.loadingKey]: null,\r\n\r\n\treconfiguratorOpen: false,\r\n\treconfiguratorActiveSku: \"\",\r\n\r\n\toptionsOverlayOpen: false,\r\n\toptionsOverlayItems: null,\r\n\toptionsOverlayActiveListIndex: -1,\r\n\r\n\tzoomOverlayOpen: false,\r\n\tzoomOverlayImage: null,\r\n\r\n\tmaterialGroupInfoOverlayOpen: false,\r\n\tmaterialGroupInfoOverlayData: null,\r\n\r\n\tcurrentStep: -1,\r\n\ttotalSteps: -1,\r\n\r\n\tcurrentCylindoFeatures: null,\r\n\tcurrentVariantFeatures: null,\r\n\r\n\tcurrentCylindoSku: null,\r\n\tcurrentProductId: null,\r\n\tcurrentVariantCode: null,\r\n\tcurrentProductUrl: null,\r\n\r\n\tcylindoViewMode: CylindoViewMode.DESKTOP,\r\n\r\n\tnoVisualUpdate: false,\r\n\r\n\tfinalProductId: null,\r\n\tfinalVariantCode: null,\r\n};\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n///// A C T I O N S ////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nconst actions = {\r\n\topenReConfigurator({ commit, dispatch }, sku) {\r\n\t\tconsole.log(\"openReConfigurator\");\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: true,\r\n\t\t});\r\n\t\tcommit(\"openReConfigurator\", sku);\r\n\t},\r\n\tcloseReConfigurator({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: true,\r\n\t\t});\r\n\t\tcommit(\"closeReConfigurator\");\r\n\t},\r\n\r\n\topenOptionsOverlay({ commit, dispatch }, data) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openOptionsOverlay\", data);\r\n\t},\r\n\r\n\tcloseOptionsOverlay({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeOptionsOverlay\");\r\n\t},\r\n\r\n\topenZoomOverlay({ commit, dispatch }, image) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openZoomOverlay\", image);\r\n\t},\r\n\r\n\tcloseZoomOverlay({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeZoomOverlay\");\r\n\t},\r\n\r\n\topenMaterialGroupInfoOverlay({ commit, dispatch }, data) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: true,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"openMaterialGroupInfoOverlay\", data);\r\n\t},\r\n\r\n\tcloseMaterialGroupInfoOverlay({ commit, dispatch }) {\r\n\t\tdispatch(\"setBodyFixed\", {\r\n\t\t\ttransitionDelay: 550,\r\n\t\t\tsetClass: false,\r\n\t\t\tonlyMobile: false,\r\n\t\t});\r\n\t\tcommit(\"closeMaterialGroupInfoOverlay\");\r\n\t},\r\n\r\n\tsetCylindoViewMode({ commit }, mode) {\r\n\t\tcommit(\"setCylindoViewMode\", mode);\r\n\t},\r\n\r\n\tsetCurrentCylindoSku({ commit }, sku) {\r\n\t\tcommit(\"setCurrentCylindoSku\", sku);\r\n\t},\r\n\tsetCurrentProductId({ commit }, id) {\r\n\t\tcommit(\"setCurrentProductId\", id);\r\n\t},\r\n\tsetCurrentVariantCode({ commit }, id) {\r\n\t\tcommit(\"setCurrentVariantCode\", id);\r\n\t},\r\n\tsetStepValues({ commit }, stepValues) {\r\n\t\tcommit(\"setStepValues\", stepValues);\r\n\t},\r\n\r\n\tgetNextStepData({ dispatch, state }) {\r\n\t\tconst postData = {\r\n\t\t\tproductId: state.currentProductId,\r\n\t\t\tvariantCode: state.currentVariantCode,\r\n\t\t\tstep: state.currentStep + 1,\r\n\t\t};\r\n\r\n\t\tif (state.currentVariantFeatures) {\r\n\t\t\tlet allFilters = Object.entries(state.currentVariantFeatures).map((feature) => {\r\n\t\t\t\treturn { id: feature[0], value: feature[1] };\r\n\t\t\t});\r\n\r\n\t\t\t//remove all filters after current step\r\n\t\t\t// postData.filters = allFilters.slice(0, state.currentStep + 1);\r\n\r\n\t\t\tpostData.filters = allFilters;\r\n\t\t}\r\n\t\tdispatch(RECONFIGURATOR_GETSTEP_ASYNC.action, postData);\r\n\t},\r\n\tgetPreviousStepData({ dispatch, state }) {\r\n\t\t// state.noVisualUpdate = true;\r\n\r\n\t\tconst postData = {\r\n\t\t\tproductId: state.currentProductId,\r\n\t\t\tvariantCode: state.currentVariantCode,\r\n\t\t\tstep: state.currentStep - 1,\r\n\t\t};\r\n\r\n\t\tif (state.currentVariantFeatures) {\r\n\t\t\tlet allFilters = Object.entries(state.currentVariantFeatures).map((feature) => {\r\n\t\t\t\treturn { id: feature[0], value: feature[1] };\r\n\t\t\t});\r\n\r\n\t\t\t//remove all filters after current step\r\n\t\t\t// postData.filters = allFilters.slice(0, state.currentStep);\r\n\r\n\t\t\tpostData.filters = allFilters;\r\n\t\t}\r\n\t\tdispatch(RECONFIGURATOR_GETSTEP_ASYNC.action, postData);\r\n\t},\r\n\tgetStepData({ dispatch, state }, step) {\r\n\t\tconst postData = {\r\n\t\t\tproductId: state.currentProductId,\r\n\t\t\tvariantCode: state.currentVariantCode,\r\n\t\t\tstep: step,\r\n\t\t};\r\n\r\n\t\tif (state.currentVariantFeatures) {\r\n\t\t\tlet allFilters = Object.entries(state.currentVariantFeatures).map((feature) => {\r\n\t\t\t\treturn { id: feature[0], value: feature[1] };\r\n\t\t\t});\r\n\r\n\t\t\t//remove all filters after current step\r\n\t\t\t// postData.filters = allFilters.slice(0,step);\r\n\r\n\t\t\tpostData.filters = allFilters;\r\n\t\t}\r\n\t\tdispatch(RECONFIGURATOR_GETSTEP_ASYNC.action, postData);\r\n\t},\r\n\r\n\tupdateProductFeature({ dispatch, state }, newFeature) {\r\n\t\tconst postData = {\r\n\t\t\tproductId: state.currentProductId,\r\n\t\t\tvariantCode: state.currentVariantCode,\r\n\t\t\tstep: state.currentStep + 1, //get next step\r\n\t\t};\r\n\r\n\t\tlet allFilters = Object.entries(state.currentVariantFeatures).map((feature) => {\r\n\t\t\treturn { id: feature[0], value: feature[1] };\r\n\t\t});\r\n\r\n\t\t//remove all filters after current step\r\n\t\t// postData.filters = allFilters.slice(0,state.currentStep);\r\n\r\n\t\tpostData.filters = allFilters;\r\n\r\n\t\tlet newFeatureId = newFeature.id;\r\n\t\tlet newFeatureValue = newFeature.item.id;\r\n\r\n\t\t//update the current step filter with new feature\r\n\t\tpostData.filters[state.currentStep] = { id: newFeatureId, value: newFeatureValue };\r\n\r\n\t\tdispatch(RECONFIGURATOR_GETVARIANT_ASYNC.action, postData);\r\n\t},\r\n\r\n\tasync [RECONFIGURATOR_GETSTEP_ASYNC.action](store, payload) {\r\n\t\tlet result;\r\n\t\tif (payload.method === \"GET\") {\r\n\t\t\tresult = await getRequest(store, {\r\n\t\t\t\turl: process.env.RECONFIGURATOR_GETSTEP_ENDPOINT,\r\n\t\t\t\tmutationTypes: RECONFIGURATOR_GETSTEP_ASYNC,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tresult = await postRequest(store, {\r\n\t\t\t\turl: process.env.RECONFIGURATOR_GETSTEP_ENDPOINT,\r\n\t\t\t\tbody: payload,\r\n\t\t\t\tmutationTypes: RECONFIGURATOR_GETSTEP_ASYNC,\r\n\t\t\t});\r\n\t\t}\r\n\t\tstore.commit(RECONFIGURATOR_GETSTEP_ASYNC.SUCCESS, result);\r\n\t},\r\n\r\n\tasync [RECONFIGURATOR_GETVARIANT_ASYNC.action](store, payload) {\r\n\t\tlet result;\r\n\t\tif (payload.method === \"GET\") {\r\n\t\t\tresult = await getRequest(store, {\r\n\t\t\t\turl: process.env.RECONFIGURATOR_GETVARIANT_ENDPOINT,\r\n\t\t\t\tmutationTypes: RECONFIGURATOR_GETVARIANT_ASYNC,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tresult = await postRequest(store, {\r\n\t\t\t\turl: process.env.RECONFIGURATOR_GETVARIANT_ENDPOINT,\r\n\t\t\t\tbody: payload,\r\n\t\t\t\tmutationTypes: RECONFIGURATOR_GETVARIANT_ASYNC,\r\n\t\t\t});\r\n\t\t}\r\n\t\tstore.commit(RECONFIGURATOR_GETVARIANT_ASYNC.SUCCESS, result);\r\n\t},\r\n};\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n///// M U T A T I O N S ////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nconst mutations = {\r\n\t// open close configure\r\n\topenReConfigurator(state, sku) {\r\n\t\tstate.reconfiguratorOpen = true;\r\n\t\tstate.reconfiguratorActiveSku = sku;\r\n\r\n\t\tvar newurl = addParam(\"configure\", \"true\", window.location.href);\r\n\t\twindow.history.pushState({ path: newurl }, \"\", newurl);\r\n\t},\r\n\tcloseReConfigurator(state) {\r\n\t\tstate.reconfiguratorOpen = false;\r\n\t\tstate.reconfiguratorActiveSku = null;\r\n\t\tstate.currentCylindoFeatures = null;\r\n\t\tstate.currentVariantFeatures = null;\r\n\t\tstate.currentStep = -1;\r\n\t\tstate.totalSteps = -1;\r\n\r\n\t\tvar newurl = removeParam(\"configure\", window.location.href);\r\n\t\twindow.history.replaceState({ path: newurl }, \"\", newurl);\r\n\t},\r\n\r\n\t// overlays\r\n\topenOptionsOverlay(state, data) {\r\n\t\tstate.optionsOverlayOpen = true;\r\n\t\tstate.optionsOverlayItems = data.items;\r\n\t\tstate.optionsOverlayActiveListIndex = data.activeListIndex > -1 ? data.activeListIndex : -1;\r\n\t},\r\n\tcloseOptionsOverlay(state) {\r\n\t\tstate.optionsOverlayOpen = false;\r\n\t\tstate.optionsOverlayItems = null;\r\n\t\tstate.optionsOverlayActiveListIndex = -1;\r\n\t},\r\n\topenZoomOverlay(state, image) {\r\n\t\tstate.zoomOverlayImage = image;\r\n\t\tstate.zoomOverlayOpen = true;\r\n\t},\r\n\tcloseZoomOverlay(state) {\r\n\t\tstate.zoomOverlayOpen = false;\r\n\t\tstate.zoomOverlayImage = null;\r\n\t},\r\n\topenMaterialGroupInfoOverlay(state, data) {\r\n\t\tstate.materialGroupInfoOverlayData = data;\r\n\t\tstate.materialGroupInfoOverlayOpen = true;\r\n\t},\r\n\tcloseMaterialGroupInfoOverlay(state) {\r\n\t\tstate.materialGroupInfoOverlayOpen = false;\r\n\t\tstate.materialGroupInfoOverlayData = null;\r\n\t},\r\n\r\n\t// replace data\r\n\tsetStepValues(state, data) {\r\n\t\tstate.currentStep = data.current;\r\n\t\tstate.totalSteps = data.total;\r\n\t},\r\n\tsetCurrentCylindoSku(state, sku) {\r\n\t\tstate.currentCylindoSku = sku;\r\n\t},\r\n\tsetCurrentProductId(state, id) {\r\n\t\tstate.currentProductId = id;\r\n\t},\r\n\tsetCurrentVariantCode(state, id) {\r\n\t\tstate.currentVariantCode = id;\r\n\t},\r\n\tsetCylindoViewMode(state, mode) {\r\n\t\tstate.cylindoViewMode = mode;\r\n\t},\r\n\r\n\t// parse response\r\n\tupdateProductFeature(state, newFeature) {\r\n\t\tlet newFeatureId = newFeature.id;\r\n\t\tlet newFeatureValue = newFeature.item.id;\r\n\t\tlet newFeatureItem = newFeature.item;\r\n\r\n\t\tlet newFeatureCylindoKey = newFeature.item.cylindoFeatureKey;\r\n\t\tlet newFeatureCylindoValue = newFeature.item.cylindoFeatureValue;\r\n\r\n\t\tif (!newFeatureId || !newFeatureItem) return false;\r\n\r\n\t\t// find item with id matching selector's featureId\r\n\t\tlet newVData = state.currentVariantFeatures;\r\n\t\tnewVData[newFeatureId] = newFeatureValue;\r\n\t\tstate.currentVariantFeatures = newVData;\r\n\r\n\t\t// find item with is matching cylindoFeatureKey value for cylindo\r\n\t\tlet newCData = state.currentCylindoFeatures;\r\n\t\tnewCData[newFeatureCylindoKey] = newFeatureCylindoValue;\r\n\r\n\t\tdelete newCData[\"\"];\r\n\r\n\t\tif (newFeatureId === \"seat-finish-id\" && newFeatureValue === \"No Upholstery\") {\r\n\t\t\tdelete newCData[CylindoFeature.TEXTILE];\r\n\t\t\tdelete newCData[CylindoFeature.LEATHER];\r\n\t\t}\r\n\t\tif (newFeatureId === \"seat-finish-id\" && newFeatureValue === \"Full Upholstery\") {\r\n\t\t\tdelete newCData[CylindoFeature.SEAT];\r\n\t\t}\r\n\r\n\t\t// decommisioned\r\n\t\t// if (newFeatureItem.cylindoFeatureKey === CylindoFeature.LEATHER) {\r\n\t\t// \tnewCData[CylindoFeature.TEXTILE] = \"\";\r\n\t\t// } else if (newFeatureItem.cylindoFeatureKey === CylindoFeature.TEXTILE) {\r\n\t\t// \tnewCData[CylindoFeature.LEATHER] = \"\";\r\n\t\t// }\r\n\r\n\t\tstate.currentCylindoFeatures = newCData;\r\n\t},\r\n\r\n\t[RECONFIGURATOR_GETVARIANT_ASYNC.PENDING](state, status) {\r\n\t\tVue.set(state, RECONFIGURATOR_GETVARIANT_ASYNC.loadingKey, status);\r\n\t},\r\n\r\n\t[RECONFIGURATOR_GETVARIANT_ASYNC.SUCCESS](state, data) {\r\n\t\tif (data.numberOfSteps && data.numberOfSteps !== state.totalSteps) {\r\n\t\t\tstate.totalSteps = data.numberOfSteps;\r\n\t\t}\r\n\r\n\t\tlet vI = data.variantInfo;\r\n\t\tif (vI.formattedPrice && vI.formattedPrice !== state[RECONFIGURATOR_GETSTEP_ASYNC.stateKey].formattedPrice) {\r\n\t\t\tstate[RECONFIGURATOR_GETSTEP_ASYNC.stateKey].variantInfo.formattedPrice = vI.formattedPrice;\r\n\t\t}\r\n\t\tif (vI.cylindoSku && vI.cylindoSku !== state[RECONFIGURATOR_GETSTEP_ASYNC.stateKey].variantInfo.cylindoSku) {\r\n\t\t\tstate.currentCylindoSku = vI.cylindoSku;\r\n\t\t}\r\n\r\n\t\tlet newVData = {};\r\n\t\tlet newCData = {};\r\n\r\n\t\tif (data && vI.options) {\r\n\t\t\tvI.options.forEach((option) => {\r\n\t\t\t\tnewVData[option.optionId] = option.optionValue;\r\n\t\t\t\tnewCData[option.cylindoFeatureKey] = option.cylindoFeatureValue;\r\n\t\t\t});\r\n\r\n\t\t\t//remove empty features\r\n\t\t\tdelete newCData[\"\"];\r\n\t\t\tdelete newCData[null];\r\n\r\n\t\t\t//make sure features exist in feature set, so Vue watchers work!\r\n\t\t\tif (!newCData[CylindoFeature.TEXTILE]) newCData[CylindoFeature.TEXTILE] = \"\";\r\n\t\t\tif (!newCData[CylindoFeature.LEATHER]) newCData[CylindoFeature.LEATHER] = \"\";\r\n\r\n\t\t\tstate.currentCylindoSku = vI.cylindoSku;\r\n\t\t\tstate.currentProductUrl = vI.variantUrl;\r\n\r\n\t\t\tstate.finalVariantCode = vI.code;\r\n\t\t\tstate.finalProductId = vI.productCode || state.productId;\r\n\r\n\t\t\tstate.currentVariantFeatures = newVData;\r\n\t\t\tstate.currentCylindoFeatures = newCData;\r\n\t\t}\r\n\t},\r\n\r\n\t[RECONFIGURATOR_GETSTEP_ASYNC.PENDING](state, status) {\r\n\t\tVue.set(state, RECONFIGURATOR_GETSTEP_ASYNC.loadingKey, status);\r\n\t},\r\n\t[RECONFIGURATOR_GETSTEP_ASYNC.SUCCESS](state, data) {\r\n\t\tVue.set(state, RECONFIGURATOR_GETSTEP_ASYNC.stateKey, data);\r\n\r\n\t\tstate.currentStep = data.currentStep;\r\n\t\tstate.totalSteps = data.numberOfSteps;\r\n\r\n\t\tlet newVData = {};\r\n\t\tlet newCData = {};\r\n\r\n\t\tif (data && data.variantInfo && data.variantInfo.options) {\r\n\t\t\tif (state.noVisualUpdate) {\r\n\t\t\t\tstate.noVisualUpdate = false;\r\n\t\t\t} else {\r\n\t\t\t\tdata.variantInfo.options.forEach((option) => {\r\n\t\t\t\t\tnewVData[option.optionId] = option.optionValue;\r\n\t\t\t\t\tnewCData[option.cylindoFeatureKey] = option.cylindoFeatureValue;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tstate.currentVariantFeatures = newVData;\r\n\r\n\t\t\t\t//remove empty features\r\n\t\t\t\tdelete newCData[\"\"];\r\n\t\t\t\tdelete newCData[null];\r\n\r\n\t\t\t\t//make sure features exist in feature set, so watchers work!\r\n\t\t\t\tif (!newCData[CylindoFeature.TEXTILE]) newCData[CylindoFeature.TEXTILE] = \"\";\r\n\t\t\t\tif (!newCData[CylindoFeature.LEATHER]) newCData[CylindoFeature.LEATHER] = \"\";\r\n\r\n\t\t\t\tstate.currentCylindoSku = data.variantInfo.cylindoSku;\r\n\t\t\t\tstate.currentProductUrl = data.variantInfo.variantUrl;\r\n\r\n\t\t\t\tstate.finalVariantCode = data.variantInfo.code;\r\n\t\t\t\tstate.finalProductId = data.variantInfo.productCode || state.productId;\r\n\r\n\t\t\t\tstate.currentCylindoFeatures = newCData;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n\r\nfunction removeFromQuery(key, queryString) {\r\n\tif (queryString !== \"\") {\r\n\t\tvar params_arr = queryString.split(\"&\");\r\n\t\tfor (var i = params_arr.length - 1; i >= 0; i -= 1) {\r\n\t\t\tvar param = params_arr[i].split(\"=\")[0];\r\n\t\t\tif (param === key) {\r\n\t\t\t\tparams_arr.splice(i, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn params_arr;\r\n\t}\r\n\treturn [];\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nfunction removeParam(key, sourceURL) {\r\n\tvar rtn = sourceURL.split(\"?\")[0],\r\n\t\tqueryString = sourceURL.indexOf(\"?\") !== -1 ? sourceURL.split(\"?\")[1] : \"\";\r\n\r\n\tvar params_arr = removeFromQuery(key, queryString);\r\n\trtn = params_arr.length > 0 ? rtn + \"?\" + params_arr.join(\"&\") : rtn;\r\n\treturn rtn;\r\n}\r\n// eslint-disable-next-line no-unused-vars\r\nfunction addParam(key, value, sourceURL) {\r\n\tvar rtn = sourceURL.split(\"?\")[0],\r\n\t\tqueryString = sourceURL.indexOf(\"?\") !== -1 ? sourceURL.split(\"?\")[1] : \"\";\r\n\tvar params_arr = removeFromQuery(key, queryString);\r\n\tparams_arr.push(key + \"=\" + value);\r\n\trtn = params_arr.length > 0 ? rtn + \"?\" + params_arr.join(\"&\") : rtn;\r\n\treturn rtn;\r\n}\r\n\r\nexport default { state, actions, mutations };\r\n","import Vue from \"vue/dist/vue.esm.js\";\r\nimport Vuex from \"vuex\";\r\n\r\nimport actions from \"./actions\";\r\nimport mutations from \"./mutations\";\r\nimport * as types from \"./static\";\r\n\r\n// Vuex Modules\r\nimport pdp from \"./modules/pdp\";\r\nimport configurator from \"./modules/configurator-module\";\r\nimport cart from \"./modules/cart\";\r\nimport search from \"./modules/search\";\r\nimport plp from \"./modules/plp-module\";\r\nimport storeLocator from \"./modules/store-locator\";\r\nimport recommendation from \"./modules/recommendation-module\";\r\nimport globalVideo from \"./modules/global-video\";\r\nimport imageProductsOverlay from \"./modules/image-products-overlay\";\r\n\r\nimport reconfigurator from \"./modules/reconfigurator\";\r\n\r\nVue.use(Vuex);\r\n\r\nexport default new Vuex.Store({\r\n\tstate: {\r\n\t\tenv: {\r\n\t\t\tdev: window.location.host === \"localhost:3000\" || window.location.host === \"muuto.sorthvid.design\",\r\n\t\t\tbasePath: \"\",\r\n\t\t\tmockData: \"https://sorthvid-json-server.herokuapp.com\",\r\n\t\t},\r\n\t\tappLoaded: false,\r\n\r\n\t\tisMobile: false,\r\n\t\tisIOS: false,\r\n\r\n\t\twindowH: 0,\r\n\t\twindowW: 0,\r\n\t\twindowY: 0,\r\n\r\n\t\tcountry: \"dk\",\r\n\t\tlanguage: \"da\",\r\n\r\n\t\tshowModal: false,\r\n\t\tsniffedScrollPos: 0, // COMMENT: Used in mutations.js when applying \"is-fixed\"\r\n\t\tisFixed: false,\r\n\t\tcylindoAccountId: 4928,\r\n\r\n\t\troomExplorerSingleProduct: null,\r\n\t\troomExplorerOverlayProducts: null,\r\n\r\n\t\tpdpAddonsProducts: null,\r\n\t\trelevantAddonsProducts: null,\r\n\r\n\t\tnotificationPanels: [],\r\n\t\tshownAtcFeedbackProductName: \"\",\r\n\t\tshownAtcFeedbackTypeTitle: \"\",\r\n\r\n\t\tbodyFixed: false,\r\n\r\n\t\tdashboardOpen: false,\r\n\t\tsearchOverlayOpen: false,\r\n\t\taddonsOverlayOpen: false,\r\n\t\tcountrySelectorOpen: false,\r\n\t\tmosaicSliderOverlayOpen: false,\r\n\t\tmosaicSliderOverlayActiveIndex: -1,\r\n\r\n\t\tmainMenuOpen: false,\r\n\t\tmainServiceNavOpen: false,\r\n\t\taccountMenuOpen: false,\r\n\t\toverlayBackdropActive: false,\r\n\t\toverlayBackdropContext: \"\", // if context is behindHeader z-index should be lower! ARGHH\"#!€!\r\n\r\n\t\tminiCartActive: false,\r\n\t\tcartSubTotal: 0, // COMMENT: Subtotal price shown on cart page, before fee's and delivery cost\r\n\t\tcartItems: [],\r\n\t\tcartItemsCount: 0,\r\n\t\tcartLoaded: false,\r\n\t\tcartShareCartIsActive: false,\r\n\r\n\t\tmaterialsData: null,\r\n\t\tactiveMaterialIndex: -1,\r\n\t\tmaterialOverlayOpen: false,\r\n\r\n\t\ttriggerExperienceResize: false,\r\n\r\n\t\tcampaignCodePending: false,\r\n\t\tcampaignCodeData: {\r\n\t\t\tcode: \"\",\r\n\t\t\tdiscountAmount: 0,\r\n\t\t},\r\n\t\tmodalStatus: {\r\n\t\t\tstatus: \"closed\",\r\n\t\t\tname: null,\r\n\t\t},\r\n\r\n\t\tguidedTourStatus: \"waiting\", // invitation | accepted |\r\n\r\n\t\tshortcutsData: null,\r\n\t\tshortcutsOverlayOpen: false,\r\n\r\n\t\texplanationData: null,\r\n\t\texplanationOverlayOpen: false,\r\n\r\n\t\tproductFiltersOpen: false,\r\n\r\n\t\ttooltipText: null,\r\n\t\ttooltipPosX: -1,\r\n\t\ttooltipPosY: -1,\r\n\r\n\t\t[types.SET_FILTER_COLOR.stateKey]: \"\",\r\n\t},\r\n\tmutations,\r\n\tactions,\r\n\tmodules: {\r\n\t\tpdp,\r\n\t\tconfigurator,\r\n\t\tcart,\r\n\t\tplp,\r\n\t\trecommendation,\r\n\t\tsearch,\r\n\t\tstoreLocator,\r\n\t\tglobalVideo,\r\n\t\timageProductsOverlay,\r\n\t\treconfigurator,\r\n\t},\r\n});\r\n","import Quantity from '../../components/quantity/quantity';\r\nimport { CART_ITEM_ADD_ENDPOINT_ASYNC } from '../../basics/js/store/static';\r\nimport { mapActions, mapState } from 'vuex';\r\nimport { registerAddToCart } from '../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer'\r\n\r\nexport default {\r\n\tcomponents: {\r\n\t\tQuantity,\r\n\t},\r\n\tprops: {\r\n\t\tloggedIn: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tnavLinkUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tnavLinkText: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tunitPrice: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t\tdefault: '0'\r\n\t\t},\r\n\t\tproductName: { // COMMENT: name is used for added-to-cart feedback in the top banner\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tproductTypeTitle: { // COMMENT: name is used for added-to-cart feedback in the top banner\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tsku: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tvatLabel: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tvatLabelAdditional: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tdeliveryLabel: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tdispatchInfo: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tisColliRestricted: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tcolli: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 1\r\n\t\t},\r\n\t\tcolliDescription: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tswitchModeNotice: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tshouldRefreshCartItems: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tinitialQuantity: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tminimumOrderQuantity: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 1\r\n\t\t},\r\n\t\taddedToCartText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'Added to cart'\r\n\t\t},\r\n\t\taddToCartText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'Add to cart'\r\n\t\t},\r\n\t\tquantityInButton: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisLoaded: false,\r\n\t\t\tisDisabled: false,\r\n\t\t\tisAddedToCart: false,\r\n\t\t\tprice: this.unitPrice, // COMMENT: Sub-total (sub-total multiplied by quantity)\r\n\t\t\tquantity: this.isColliRestricted\r\n\t\t\t\t? this.colli < this.minimumOrderQuantity\r\n\t\t\t\t\t? this.minimumOrderQuantity\r\n\t\t\t\t\t: this.colli\r\n\t\t\t\t: this.minimumOrderQuantity || this.initialQuantity || 1,\r\n\t\t\taddedToCartStillDuration: 3000, // 4000ms if only text - if bg green = less time is neccessary\r\n\t\t\tvisualButtonRevertTimeout: null,\r\n\t\t\tquantityInvalidBool: false, // disabled state controlled by quantity\r\n\t\t\tparentDisableButton: false, // disable state controlled by buy-section parent\r\n\t\t\tvatLabelShown: true,\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([\r\n\t\t\tCART_ITEM_ADD_ENDPOINT_ASYNC.stateKey,\r\n\t\t\tCART_ITEM_ADD_ENDPOINT_ASYNC.loadingKey\r\n\t\t]),\r\n\t\tdoingBasketUpdate() {\r\n\t\t\t// COMMENT: Loading state\r\n\t\t\treturn this.$store.state[CART_ITEM_ADD_ENDPOINT_ASYNC.loadingKey];\r\n\t\t}\r\n\t},\r\n\tbeforeMounted(){},\r\n\tmounted(){\r\n\t\tthis.isLoaded = true;\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'showNotificationPanel',\r\n\t\t\t'openToolTip',\r\n\t\t\tCART_ITEM_ADD_ENDPOINT_ASYNC.action\r\n\t\t]),\r\n\t\taddToCart(){\r\n\t\t\t// prevent doubleclick and stuff\r\n\t\t\tif(this.doingBasketUpdate) return;\r\n\r\n\t\t\t// clear potential hanging timeout\r\n\t\t\tclearTimeout(this.visualButtonRevertTimeout);\r\n\r\n\t\t\tconst body = {\r\n\t\t\t\tsku: this.sku,\r\n\t\t\t\tquantity: this.quantity,\r\n\t\t\t\tshouldRefreshCartItems: this.shouldRefreshCartItems\r\n\t\t\t};\r\n\t\t\tthis[CART_ITEM_ADD_ENDPOINT_ASYNC.action]({ body });\r\n\r\n\r\n\r\n\t\t\tthis.visualRevertAddToCart();\r\n\r\n\t\t\tthis.showNotificationPanel( { type: 'atc', atcText: 'Added to cart', showClose: false, title: this.productName, message: this.productTypeTitle } ); // COMMENT: Action\r\n\r\n\t\t\tregisterAddToCart(this.productName, this.productTypeTitle, this.sku, this.price, this.quantity);\r\n\t\t},\r\n\t\tgetGtmContext() {\r\n\t\t\treturn this.$attrs && this.$attrs.context\r\n\t\t\t? this.$attrs.context\r\n\t\t\t: this.context\r\n\t\t\t? this.context\r\n\t\t\t: \"buy-section-core\";\r\n\t\t},\r\n\t\tvisualRevertAddToCart(){\r\n\t\t\tthis.isAddedToCart = true;\r\n\r\n\t\t\tthis.visualButtonRevertTimeout = setTimeout(()=>{ // COMMENT: Timeout for letting \"added to cart\" stand for a while\r\n\t\t\t\tconsole.log(\"visualButtonRevertTimeout DONE\")\r\n\t\t\t\tthis.isAddedToCart = false;\r\n\t\t\t}, this.addedToCartStillDuration);\r\n\t\t},\r\n\t\tcheckDisabledState(){\r\n\t\t\tlet shouldDisable = false;\r\n\t\t\tif(this.quantityInvalidBool){\r\n\t\t\t\tshouldDisable = true;\r\n\t\t\t}\r\n\t\t\tif(this.parentDisableButton){\r\n\t\t\t\tshouldDisable = true;\r\n\t\t\t}\r\n\t\t\treturn shouldDisable;\r\n\t\t},\r\n\t},\r\n};\r\n","// import TweenLite from 'gsap/umd/TweenLite';\r\nimport debounce from 'lodash/debounce';\r\n\r\nexport default {\r\n\tname: 'quantity',\r\n\tprops: {\r\n\t\tcolliAmount: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 0,\r\n\t\t},\r\n\t\tcolliProduct: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tquantity: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 1\r\n\t\t},\r\n\t\tminimumOrderQuantity: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 1\r\n\t\t}\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tcolliTotal: 1,\r\n\t\t\tquantityValue: this.quantity > 1 \r\n\t\t\t\t? this.quantity\r\n\t\t\t\t: this.colliProduct \r\n\t\t\t\t\t? this.colliAmount < +this.minimumOrderQuantity \r\n\t\t\t\t\t\t? this.minimumOrderQuantity\r\n\t\t\t\t\t\t: this.colliAmount\r\n\t\t\t\t\t: this.minimumOrderQuantity || this.quantity || 1,\r\n\t\t\tisLoaded: false,\r\n\t\t\tquantityStep: this.colliProduct ? this.colliAmount : 1,\r\n\t\t\tquantityValueBeforeChange: this.quantity > 1 ? this.quantity : this.colliProduct ? this.colliAmount : 1\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tquantityValue(){\r\n\t\t\tif(this.quantityValue && this.quantityValue.toString().length > 0 && +this.quantityValue % this.quantityStep !== 0){\r\n\t\t\t\t// COMMENT: When deleting charaters in the input\r\n\t\t\t\t// Emit event to parent to disabled button or stuff\r\n\t\t\t\tthis.$emit('emit-quantity-update', true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.$emit('emit-quantity-invalid', false);\r\n\t\t\t}\r\n\t\t},\r\n\t\tquantity() {\r\n\t\t\tthis.quantityValue = this.quantity;\r\n\t\t}\r\n\t},\r\n\tmounted(){\t\t\r\n\t\tthis.quantityInput = this.$refs.quantityInput[0] ? this.$refs.quantityInput[0] : this.$refs.quantityInput;\r\n\r\n\t\tthis.setColliItemsCount();\r\n\t\tthis.setupInputKeyEvents();\r\n\r\n\t\tthis.isLoaded = true;\r\n\t},\r\n\tmethods: {\r\n\r\n\t\tsetupInputKeyEvents(){\r\n\t\t\t// COMMENT: Keydown prevents the unwanted charecters from showing in the input\r\n\t\t\tthis.quantityInput.addEventListener('keydown', e => {\r\n\t\t\t\tconst characterCode = e.which || e.charCode || e.keyCode;\r\n\t\t\t\tif (this.isValidKey(characterCode)){\r\n\t\t\t\t\t// COMMENT: Passthrough to keyup-event, which sets the value\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// COMMENT: Keyup sets the global \"quantity\" of which the minus/plus can calculate upon\r\n\t\t\tthis.quantityInput.addEventListener('keyup', debounce(e => {\r\n\t\t\t\tconst characterCode = e.which || e.charCode || e.keyCode;\r\n\t\t\t\tif (this.isValidKey(characterCode)){\t\t\t\t\t\r\n\t\t\t\t\tthis.quantityValue = this.quantityInput.value;\r\n\t\t\t\t\tthis.setColliItemsCount();\r\n\t\t\t\t\tthis.emitQuantityUpdate();\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}, 1000));\r\n\t\t},\r\n\t\thandleClick(e, clickType){\r\n\t\t\tif(clickType === 'plus'){\r\n\t\t\t\tthis.quantityValue = this.quantityValue + this.quantityStep;\r\n\t\t\t} else {\r\n\t\t\t\tthis.quantityValue = this.quantityValue - this.quantityStep;\r\n\t\t\t\tif(this.quantityValue < 1){\r\n\t\t\t\t\tthis.quantityValue = this.quantityStep;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.minimumOrderQuantity && this.quantityValue < this.minimumOrderQuantity){\r\n\t\t\t\tthis.quantityValue = this.minimumOrderQuantity\r\n\t\t\t}\t\t\t\r\n\t\t\tthis.setColliItemsCount();\r\n\t\t\tthis.emitQuantityUpdate(clickType);\r\n\t\t},\r\n\t\tsetColliItemsCount(){\r\n\t\t\tif(this.colliAmount > 0 && this.colliProduct){\r\n\t\t\t\tif(this.quantityValue % this.quantityStep === 0) {\r\n\t\t\t\t\tthis.colliTotal = this.quantityValue / this.colliAmount;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.colliTotal = (this.quantityValue / this.colliAmount).toFixed(1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\temitQuantityUpdate(clickType){\r\n\t\t\tthis.quantityValue = this.minimumOrderQuantity && this.minimumOrderQuantity > this.quantityValue \r\n\t\t\t\t? this.minimumOrderQuantity\r\n\t\t\t\t: this.quantityValue\r\n\r\n\t\t\tconst quantity = this.quantityValue ? + this.quantityValue : this.quantityStep;\r\n\r\n\t\t\tif(quantity % this.quantityStep !== 0) {\r\n\t\t\t\tthis.quantityValue = quantity < this.quantityStep ? this.quantityStep : Math.ceil(quantity/this.quantityStep) * this.quantityStep\r\n\t\t\t\tthis.setColliItemsCount();\r\n\t\t\t}\r\n\t\t\tconst quantityChange = this.quantityValue-this.quantityValueBeforeChange\r\n\t\t\tconst quantityChangeAbsolute = Math.abs(quantityChange)\r\n\t\t\tthis.quantityValueBeforeChange = quantity;\r\n\r\n\t\t\tclickType = clickType || (quantityChange > 0 ? 'plus' : 'minus')\r\n\t\t\tif (quantityChange)\r\n\t\t\t\tthis.$emit('emit-quantity-update', { \"quantity\": this.quantityValue, \"quantityChange\": quantityChangeAbsolute ,\"actionType\": clickType });\r\n\t\t},\r\n\t\tisValidKey(characterCode){\r\n\t\t\tif (\r\n\t\t\t\tcharacterCode > 46 && characterCode < 58 || // top keyboard 0-9 and forward backspace(46)\r\n\t\t\t\tcharacterCode > 95 && characterCode < 107 || // numpad 0-9\r\n\t\t\t\tcharacterCode === 8 || // backspace\r\n\t\t\t\tcharacterCode === 13 || // enter\r\n\t\t\t\tcharacterCode === 27 // esc\r\n\t\t\t\t){\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};","import BuySectionCore from '../../components/buy-section/buy-section-core';\r\nimport debounce from 'lodash/debounce';\r\n\r\nexport default {\r\n\tname: 'buy-section', //// COMMENT::::: THIS BUY-SECTION IS FOR PDP, CONFIGURATOR AND TILES\r\n\textends: BuySectionCore,\r\n\tprops: {\r\n\t\tcontext: { // COMMENT: Set by template\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tdispatchInfo: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '',\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tprice: this.unitPrice, // COMMENT: Sub-total (sub-total multiplied by quantity)\r\n\t\t\tquantityStep: this.isColliRestricted ? this.colli : 1\r\n\t\t}\r\n\t},\r\n\tbeforeMounted() {\r\n\t\tthis.price = this.unitPrice;\r\n\t},\r\n\tmounted() {\r\n\t\tthis.quantityInput = this.$refs.quantityInput && this.$refs.quantityInput[0] ? this.$refs.quantityInput[0] : this.$refs.quantityInput;\r\n\t\tthis.isLoaded = true;\r\n\t\tif (this.context === 'configurator') { // COMMENT: Context is set in template..\r\n\t\t\t// COMMENT: For any parent component who needs to be able to set the disabled state of the add-to-cart button\r\n\t\t\tthis.$parent.$on('update-buy-button-disabled', this.onBuyButtonDisabled); // COMMENT: Trigged in Configurator's \"updateBuySection\" method\r\n\t\t}\r\n\t\tthis.setupInputKeyEvents();\r\n\t},\r\n\tmethods: {\r\n\t\tdecrement() {\r\n\t\t\tconst newQuantity = +this.quantity - this.quantityStep\r\n\t\t\tthis.quantity = newQuantity ? newQuantity : this.quantityStep\r\n\t\t\tif (this.minimumOrderQuantity && this.quantity < this.minimumOrderQuantity){\r\n\t\t\t\tthis.quantity = this.minimumOrderQuantity\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tincrement() {\r\n\t\t\tthis.quantity = +this.quantity + this.quantityStep\r\n\t\t},\r\n\r\n\t\tvalidateQuantityInput(e) {\r\n\t\t\tconst validKeys = [\r\n\t\t\t\t48, 49, 50, 51, 52, 53, 54, 55, 56, 57, // top keyboard 0-9\r\n\t\t\t\t96, 97, 98, 99, 100, 101, 102, 103, 104, 105, // numpad 0-9\r\n\t\t\t\t8, // backspace\r\n\t\t\t\t13, // enter\r\n\t\t\t\t27 // esc\r\n\t\t\t]\r\n\r\n\t\t\tif (validKeys.indexOf(e.keyCode) === -1) {\r\n\t\t\t\te.preventDefault()\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tonBuyButtonDisabled(isDisabled) { // COMMENT: Gets trigged by configurator's emitted custom-event\r\n\t\t\tthis.parentDisableButton = isDisabled;\r\n\t\t\tthis.isDisabled = this.checkDisabledState();\r\n\t\t},\r\n\t\temitQuantityUpdate() {\r\n\t\t\tconst quantity = this.quantity ? + this.quantity : this.quantityStep;\r\n\t\t\tif (quantity % this.quantityStep !== 0) {\r\n\t\t\t\tthis.quantity = quantity < this.quantityStep ? this.quantityStep : Math.ceil(quantity / this.quantityStep) * this.quantityStep\r\n\t\t\t}\r\n\t\t\tif (this.minimumOrderQuantity && this.quantity < this.minimumOrderQuantity){\r\n\t\t\t\tthis.quantity = this.minimumOrderQuantity\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetupInputKeyEvents() {\r\n\t\t\tif (this.quantityInput) {\r\n\t\t\t\tthis.quantityInput.addEventListener('keyup', debounce(e => {\r\n\t\t\t\t\tif (this.validateQuantityInput(e)) {\r\n\t\t\t\t\t\tthis.emitQuantityUpdate();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 5000));\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n","import BuySection from '../../components/buy-section/buy-section';\r\nimport { mapState, mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'product-tile-prod',\r\n\tcomponents: {\r\n\t\tBuySection,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisLoaded: false,\r\n\t\t};\r\n\t},\r\n\tprops: {\r\n\t\tdata: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tsku: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tnoBuySection: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tthis.isLoaded = true;\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState(['isMobile']),\r\n\t\ttype(){\r\n\t\t\treturn this.data ? this.data.type.toLowerCase() : '';\r\n\t\t},\r\n\t\ttiletypeClass(){\r\n\t\t\tconst typeAndVariant = this.data && this.data.hoverImageUrl && this.data.type.toLowerCase() === 'product'\r\n\t\t\t\t\t\t\t\t\t? 'product-tile--master-product muu-product'\r\n\t\t\t\t\t\t\t\t\t: this.data.type.toLowerCase() === 'variant'\r\n\t\t\t\t\t\t\t\t\t\t? 'muu-variant'\r\n\t\t\t\t\t\t\t\t\t\t: 'product-tile--master-noimage muu-simple'\r\n\r\n\t\t\tconst ready = this.isLoaded ? 'is-ready' : ''\r\n\t\t\treturn `${typeAndVariant} ${ready} ${this.noBuySection ? 'no-buy-section' : ''}`\r\n\t\t},\r\n\t\tsrcSetString(){\r\n\t\t\treturn `${this.data.imageUrl} 230w, ${this.data.imageUrl} 350w`\r\n\t\t},\r\n\t\tproductUrl() {\r\n\t\t\treturn this.data.url;\r\n\t\t},\r\n\t\tproductImageAltText(){\r\n\t\t\treturn `${this.data.productPrimaryName}, ${this.data.productSecondaryName}`\r\n\t\t},\r\n\t\tuseHoverImage(){\r\n\t\t\treturn this.data && this.data.hoverImageUrl && this.data.type.toLowerCase() === 'product' ? true : false\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'roomExplorerProductChosen'\r\n\t\t]),\r\n\t\tupdateReceiverMethodProductTile(variationItem){\r\n\t\t\tconsole.log('updating product tile with: ', variationItem);\r\n\t\t},\r\n\t\tsetMasterHoverImage(){\r\n\t\t\t// COMMENT: Deferred load of the master image used in hover\r\n\r\n\t\t\tif(!this.isMobile && this.type === 'product' && this.$refs.masterImageHover){\r\n\t\t\t\t\tconst ref = Array.isArray(this.$refs.masterImageHover)\r\n\t\t\t\t\t\t? this.$refs.masterImageHover[0]\r\n\t\t\t\t\t\t: this.$refs.masterImageHover\r\n\r\n\t\t\t\t\tref.setAttribute('src', ref.getAttribute('data-src'));\r\n\t\t\t}\r\n\t\t},\r\n\t\tcloseHandler() {\r\n\t\t\tthis.roomExplorerProductChosen(null);\r\n\t\t}\r\n\t},\r\n};\r\n","import {TweenLite} from 'gsap';\r\nimport ProductTile from '../../components/product-tile/product-tile';\r\n\r\nexport default {\r\n\tname: 'preview-tiles',\r\n\tcomponents: {\r\n\t\tProductTile,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisOpen: false\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\ttoggle () {\r\n\t\t\tconst toggleContent = this.$el.getElementsByClassName('accordion__content')[0];\r\n\t\t\tconst trigger = this.$el.getElementsByClassName('js--accordion-trigger')[0];\r\n\r\n\t\t\tif (!this.isOpen) { // Open accordion item\r\n\t\t\t\t// Set aria attributes\r\n\t\t\t\ttoggleContent.setAttribute('aria-hidden', 'false');\r\n\t\t\t\ttrigger.setAttribute('aria-expanded', 'true');\r\n\r\n\t\t\t\t// Animate\r\n\t\t\t\tTweenLite.set(toggleContent, { height: 'auto' });\r\n\t\t\t\tTweenLite.from(toggleContent, 0.2, { height: 0 });\r\n\r\n\t\t\t\t// Toggle active class\r\n\t\t\t\ttrigger.getElementsByClassName('icon')[0].classList.add('is-active');\r\n\t\t\t} else { // Close accordion item\r\n\t\t\t\t// Animate\r\n\t\t\t\tTweenLite.to(toggleContent, 0.2, { height: 0, onComplete: ()=>{\r\n\t\t\t\t\t// Set aria attributes\r\n\t\t\t\t\ttrigger.setAttribute('aria-expanded', 'false');\r\n\t\t\t\t\ttoggleContent.setAttribute('aria-hidden', 'true');\r\n\t\t\t\t}});\r\n\r\n\t\t\t\ttrigger.getElementsByClassName('icon')[0].classList.remove('is-active');\r\n\t\t\t\t// Toggle active class\r\n\t\t\t}\r\n\r\n\t\t\t// Toggle state\r\n\t\t\tthis.isOpen = !this.isOpen;\r\n\t\t}\r\n\t},\r\n};","\r\nexport default {\r\n\tname: 'input-with-label',\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisActive: false,\r\n\t\t\thasValue: false,\r\n\t\t\tinputValue: '',\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tthis.$nextTick(this.checkInitialState);\r\n\t},\r\n\tmethods: { \r\n\t\tcheckInitialState(){\r\n\t\t\tthis.checkHasValue();\r\n\t\t},\r\n\t\thandleClickOnInput(){ // date-picker capabilities\r\n\t\t\tthis.$emit('emit-input-clicked');\r\n\t\t},\r\n\t\thandleInput(value){\r\n\t\t\tthis.inputValue = value;\r\n\t\t\tthis.checkHasValue();\r\n\t\t},\r\n\t\tcheckHasValue(){\r\n\t\t\tthis.hasValue = this.inputValue != '' ? true : false;\r\n\t\t},\r\n\t\taddCampaignCode(){ // Checkout campaign code\r\n\t\t\tthis.$emit('emit-add-campaign-code', this.inputValue);\r\n\t\t},\r\n\t\tcampaignInput(){}\r\n\t},\r\n}","import { TweenLite } from \"gsap\";\r\nimport { uid } from \"../../basics/js/utils\";\r\nimport PreviewTiles from \"../../components/preview-tiles/preview-tiles\";\r\nimport ProductTile from \"../../components/product-tile/product-tile\";\r\nimport InputWithLabel from \"../../components/form-elements/templates/input-with-label\";\r\n\r\nexport default {\r\n\tname: \"accordion\",\r\n\tcomponents: {\r\n\t\tPreviewTiles,\r\n\t\tInputWithLabel,\r\n\t\tProductTile,\r\n\t},\r\n\tprops: {\r\n\t\titem: Object,\r\n\t\tisActive: Boolean,\r\n\t\tgroupActiveAccordionId: String,\r\n\t\t$v: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\talignToSelf: Boolean,\r\n\t\tskipScrollToTop: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisOpen: false,\r\n\t\t\tisMounted: false,\r\n\t\t\tuid: \"\",\r\n\t\t};\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\t\tthis.uid = uid();\r\n\t\tif (\r\n\t\t\tthis.$refs.inputfield &&\r\n\t\t\tthis.$refs.inputfield.getAttribute(\"checked\") === \"checked\"\r\n\t\t) {\r\n\t\t\t// console.log('input', this.$refs.inputfield.checked)\r\n\t\t\tthis.isOpen =\r\n\t\t\t\tthis.$refs.inputfield.getAttribute(\"checked\") === \"checked\";\r\n\t\t\tthis.$refs.inputfield.checked = this.isOpen;\r\n\t\t\tthis.$emit(\"accordion-toggle\", this.uid);\r\n\t\t}\r\n\t\tif(this.isActive) {\r\n\t\t\tthis.open();\r\n\t\t}\r\n\t},\r\n\twatch: {\r\n\t\tisActive() {\r\n\t\t\tif (this.isActive) {\r\n\t\t\t\t// Open accordion item\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\t\t},\r\n\t\tgroupActiveAccordionId() {\r\n\t\t\tthis.isOpen = this.groupActiveAccordionId === this.uid;\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\ttoggle() {\r\n\t\t\tthis.$parent.$emit(\"toggleAccordion\", this.isOpen);\r\n\t\t\tif (!this.isOpen) {\r\n\t\t\t\t// Open accordion item\r\n\t\t\t\tthis.open();\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\r\n\t\t\tthis.$emit(\"accordion-toggle\", this.uid);\r\n\t\t},\r\n\t\topen() {\r\n\t\t\tconst toggleContent = this.$refs.content;\r\n\r\n\t\t\tthis.isOpen = true;\r\n\r\n\t\t\tTweenLite.set(toggleContent, { height: \"auto\" });\r\n\t\t\tTweenLite.from(toggleContent, 0.2, {\r\n\t\t\t\theight: 0,\r\n\t\t\t\tonComplete: () => {\r\n\t\t\t\t\tlet offset = -78;\r\n\t\t\t\t\tlet targetY =\r\n\t\t\t\t\t\t(this.alignToSelf\r\n\t\t\t\t\t\t\t? this.$el.getBoundingClientRect().top\r\n\t\t\t\t\t\t\t: this.$parent.$el.getBoundingClientRect().top) +\r\n\t\t\t\t\t\twindow.pageYOffset +\r\n\t\t\t\t\t\toffset;\r\n\r\n\t\t\t\t\tif ( !this.skipScrollToTop ) window.scrollTo({ top: targetY, behavior: \"smooth\" });\r\n\t\t\t\t\t// this.$parent.$el.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t},\r\n\t\tclose() {\r\n\t\t\tconst toggleContent = this.$refs.content;\r\n\t\t\tif ( !toggleContent ) return;\r\n\r\n\t\t\tTweenLite.to(toggleContent, 0.2, {\r\n\t\t\t\theight: 0,\r\n\t\t\t\tonComplete: () => {\r\n\t\t\t\t\tthis.isOpen = false;\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t},\r\n\t},\r\n};\r\n","import Accordion from './accordion'\r\n\r\nexport default {\r\n\tname: 'accordion-group',\r\n\tcomponents: {\r\n\t\tAccordion\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tgroupActiveAccordionId:''\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\t},\r\n\tmethods: {\r\n\t\ttoggleAccordionItem: function(uid) {\r\n\t\t\tthis.groupActiveAccordionId = uid;\r\n\t\t}\r\n\t}\r\n};\r\n","// import TweenLite from 'gsap/umd/TweenLite';\r\nimport AccordionFlowItem from './accordion-flow-item';\r\n\r\nexport default {\r\n\tname: 'accordion-flow',\r\n\tcomponents: {\r\n\t\tAccordionFlowItem,\r\n\t},\r\n\tmethods: {\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisMounted: false,\r\n\r\n\t\t\tindex: 0,\r\n\r\n\t\t\taccordions: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 1001,\r\n\t\t\t\t\ttitle: \"Step 1\",\r\n\t\t\t\t\tcontent: \"Lorem ipsum dolor sit amet, consectetur adipisicing elit.\",\r\n\t\t\t\t\tstepIsValid: false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 1002,\r\n\t\t\t\t\ttitle: \"Step 2\",\r\n\t\t\t\t\tcontent: \"Perspiciatis ipsa officia, fugiat modi necessitatibus adipisci sed, veniam accusantium nemo deleniti corporis!\",\r\n\t\t\t\t\tstepIsValid: false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 1003,\r\n\t\t\t\t\ttitle: \"Step 3\",\r\n\t\t\t\t\tcontent: \"Debitis quia animi, ea fugiat delectus porro sunt omnis!\",\r\n\t\t\t\t\tstepIsValid: false\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 1004,\r\n\t\t\t\t\ttitle: \"Step 4\",\r\n\t\t\t\t\tcontent: \"Modi necessitatibus adipisci sed, veniam accusantium nemo deleniti.\",\r\n\t\t\t\t\tstepIsValid: false\r\n\t\t\t\t}\r\n\t\t\t],\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tindex: function () {\r\n\t\t\tthis.$refs.accordion[this.index].toggle();\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\r\n\t\t// Toggle selected one\r\n\t\tthis.$refs.accordion[this.index].toggle();\r\n\r\n\t\t// Click from accordion-flow-item\r\n\t\tthis.$on('nextAccordion', () => {\r\n\t\t\t// If not last step is requested\r\n\t\t\tif ((this.index + 1) != this.accordions.length) {\r\n\t\t\t\t// Temp: validate step here\r\n\t\t\t\tconsole.log('accordion-flow.js - set step to validated');\r\n\t\t\t\tthis.accordions[this.index].stepIsValid = true;\r\n\r\n\t\t\t\tif (this.accordions[this.index].stepIsValid === true) {\r\n\t\t\t\t\tthis.index++;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log('accordion-flow.js - This is the last step');\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Click from accordion-flow-item\r\n\t\tthis.$on('goToStep', (id) => {\r\n\t\t\tlet goToAccordion = this.accordions.map(function(e) { return e.id; }).indexOf(id);\r\n\r\n\t\t\tif (this.accordions[goToAccordion].stepIsValid === true) {\r\n\t\t\t\tthis.index = goToAccordion;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Close already open accordions when a new one is being toggled from accordion.js\r\n\t\tthis.$on('toggleAccordion', () => {\r\n\t\t\tthis.$refs['accordion'].forEach(function (accordion) {\r\n\t\t\t\tif (accordion.isOpen) {\r\n\t\t\t\t\taccordion.close();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n};\r\n","import Accordion from '../../components/accordion/accordion';\r\n\r\nexport default {\r\n name: 'accordion-flow-item',\r\n extends: Accordion,\r\n\tcomponents: {\r\n },\r\n props: {\r\n // selectedFilters: Array\r\n },\r\n\tmethods: {\r\n\t\tnext: function () {\r\n\t\t\tthis.$parent.$emit('nextAccordion');\r\n\t\t},\r\n\t\tgoToStep: function () {\r\n\t\t\tthis.$parent.$emit('goToStep', this.item.id);\r\n\t\t},\r\n },\r\n\r\n\tdata() {\r\n\t\treturn {\r\n };\r\n }\r\n};\r\n","import { TweenLite, Power4 } from 'gsap';\r\nimport { mapActions, mapState } from 'vuex';\r\nimport { uid } from '../../basics/js/utils';\r\n\r\nconst AccountSubmenu = {\r\n\tname: 'account-submenu',\r\n\tprops: {\r\n\t\tinitialOpenState: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tactiveMenuId: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: null\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisOpen: this.initialOpenState,\r\n\t\t\tuid: ''\r\n\t\t}\r\n\t},\r\n\r\n\twatch: {\r\n\t\tactiveMenuId() {\r\n\t\t\tthis.isOpen = this.activeMenuId === this.uid;\r\n\t\t},\r\n\t\tisOpen(val) {\r\n\t\t\tif(val) {\r\n\t\t\t\tthis.open();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t},\r\n\r\n\tmounted() {\r\n\t\tthis.menu = this.$refs.menu;\r\n\t\tthis.uid = uid();\r\n\t},\r\n\tmethods: {\r\n\t\ttoggle() {\r\n\t\t\tthis.isOpen = !this.isOpen;\r\n\t\t\tthis.$emit('togglemenu', !this.isOpen ? '' : this.uid);\r\n\t\t},\r\n\t\topen(){\r\n\t\t\tTweenLite.set(this.menu, { height: 'auto' });\r\n\t\t\tTweenLite.from(this.menu, 0.25, { height: 0 });\r\n\t\t\tthis.$store.commit('openAccountMenu');\r\n\t\t},\r\n\t\tclose() {\r\n\t\t\tTweenLite.to(this.menu, .5, { height: 0, ease: Power4.easeInOut});\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport default {\r\n\tname: 'account-menu',\r\n\tcomponents: {\r\n\t\tAccountSubmenu\r\n\t},\r\n\r\n\tmounted() {\r\n\r\n\t},\r\n\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\t// isOpen: false,\r\n\t\t\tactiveMenuId: ''\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tmainMenuOpen(val) {\r\n\t\t\tif(val) this.activeMenuId = '';\r\n\t\t},\r\n\t\taccountMenuOpen(state) { // accountMenuOpen: true\r\n\t\t\tif(!state) {\r\n\t\t\t\tthis.activeMenuId = '';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.showOverlayBackdrop('behindHeader');\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([\r\n\t\t\t'mainMenuOpen',\r\n\t\t\t'accountMenuOpen'\r\n\t\t])\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'closeAccountMenu',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t]),\r\n\t\ttoggleMenu(id) {\r\n\t\t\tif(id == ''){\r\n\t\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\t}\r\n\t\t\tthis.activeMenuId = id;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\r\n};\r\n","import BuySectionCore from '../../components/buy-section/buy-section-core';\r\nimport { mapActions } from 'vuex';\r\nimport { UPDATE_QUANTITY_ASYNC } from '../../basics/js/store/static';\r\nimport { registerAddToCart, registerRemoveFromCart } from '../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer'\r\n\r\nexport default {\r\n\tname: 'buy-section-product-line',\r\n\textends: BuySectionCore,\r\n\tprops: {\r\n\t\tproduct: {\r\n\t\t\ttype: Object,\r\n\t\t\tdefault: null,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tcartUrl: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"\"\r\n\t\t},\r\n\t\tshouldQuantityTriggerUpdate: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tprice: '0',\r\n\t\t}\r\n\t},\r\n\twatch: {\r\n\t\tproduct(){\r\n\t\t\tthis.onProductChange();\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tthis.isLoaded = true;\t\r\n\t\tthis.price = this.product.price;\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'showNotificationPanel',\r\n\t\t\tUPDATE_QUANTITY_ASYNC.action\r\n\t\t]),\r\n\t\tonQuantityInvalid(quantityInvalidBool){ // COMMENT: Gets trigged by quantity-component's emitted custom-event\r\n\t\t\tthis.quantityInvalidBool = quantityInvalidBool;\r\n\t\t\tthis.isDisabled = this.checkDisabledState();\r\n\t\t},\r\n\t\tonQuantityUpdate({quantity, quantityChange, actionType}){ // COMMENT: Gets trigged by quantity-component's emitted custom-event\r\n\t\t\t\r\n\t\t\tif(this.shouldQuantityTriggerUpdate && quantity && quantity > -1) {\r\n\t\t\t\tconst url = this.cartUrl;\r\n\t\t\t\tconst body = {\r\n\t\t\t\t\tcode: this.product.sku,\r\n\t\t\t\t\tquantity: quantity\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\tthis.$store.dispatch(UPDATE_QUANTITY_ASYNC.action, {\r\n\t\t\t\t\turl,\r\n\t\t\t\t\tbody\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.quantity = quantity;\r\n\t\t\t\r\n\t\t\tif(this.shouldQuantityTriggerUpdate && quantity && quantity > -1) {\r\n\t\t\t\tthis.registerInDataLayer(actionType, quantityChange);\r\n\t\t\t}\r\n\t\t},\r\n\t\tregisterInDataLayer(clickType, quantityChange){\r\n\t\t\tconst product = this.product;\r\n\t\t\t\r\n\t\t\tif (clickType === 'plus') {\r\n\t\t\t\tregisterAddToCart(product.name, product.variantName, product.sku, product.unitPrice, quantityChange);\r\n\t\t\t} else {\r\n\t\t\t\tregisterRemoveFromCart(product.name, product.variantName, product.sku, product.unitPrice, quantityChange);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonProductChange() {\r\n\t\t\tthis.price = this.product.price;\r\n\t\t\tthis.quantity = this.product.quantity;\r\n\t\t},\r\n\t},\r\n};","\r\nexport default {\r\n\tmethods: {\r\n\t\tcopyText(e, attrToCopy){\r\n\t\t\t// const text = e.currentTarget.getAttribute('data-sku');\r\n\t\t\tconst text = e.currentTarget.getAttribute(attrToCopy);\r\n\r\n\t\t\tif(text){\r\n\t\t\t\te.currentTarget.classList.add('is-copied');\r\n\t\t\t\tconsole.log('text to copy: ', text);\r\n\t\t\t\tthis.copyToClipboard(e.currentTarget, text);\r\n\t\t\t} else {\r\n\t\t\t\tconsole.warn('No text to copy..');\r\n\t\t\t}\r\n\t\t},\r\n\t\tcopyToClipboard(element, str){\r\n\t\t\tconst el = document.createElement('textarea');\r\n\t\t\tel.classList.add('visually-hidden');\r\n\t\t\tel.value = str;\r\n\t\t\tdocument.body.appendChild(el);\r\n\t\t\tel.select();\r\n\t\t\tdocument.execCommand('copy');\r\n\t\t\tdocument.body.removeChild(el);\r\n\t\t\tconsole.log('copy done!');\r\n\t\t\telement.classList.remove('is-copied');\r\n\t\t},\r\n\t},\r\n};","\r\nexport default {\r\n\tname: 'text-to-input',\r\n\tprops: {\r\n\t\tinitText: { \r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\tactionType: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tcode: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t}\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tinputValue: this.initText,\r\n\t\t\tinputMode: false,\r\n\t\t\tinput: null,\r\n\t\t\toldValue: this.initText\r\n\r\n\t\t};\r\n\t},\r\n\tmounted(){\r\n\t\t// console.log('cart top ref input: ', this.$refs.input);\r\n\t\tthis.input = this.$refs.input[0] ? this.$refs.input[0] : this.$refs.input;\r\n\t\tthis.inputMode = this.initText !== '';\r\n\t},\r\n\tmethods: {\r\n\t\ttoggleInputMode() {\r\n\t\t\tif(this.inputValue.length) return;\r\n\t\t\tthis.inputMode = !this.inputMode;\r\n\t\t\tif(this.inputMode){ // when showing\r\n\t\t\t\tthis.input.focus();\r\n\t\t\t} else {\r\n\t\t\t\tthis.inputValue = '';\r\n\t\t\t}\r\n\t\t},\r\n\t\tvalidate() {\r\n\r\n\t\t\tconst valueChanged = this.inputValue !== this.oldValue\r\n\r\n\t\t\tthis.oldValue = valueChanged ? this.inputValue : this.oldValue\r\n\t\t\tthis.inputMode = !this.inputValue.length ? !this.inputMode : this.inputMode\r\n\r\n\t\t\tif(valueChanged) this.$store.dispatch(this.actionType,{'refid':this.inputValue,'code':this.code})\r\n\t\t\t\r\n\t\t},\r\n\t\tclear() {\r\n\t\t\tthis.inputValue = '';\r\n\t\t\tthis.inputMode = false;\r\n\r\n\t\t\tthis.$store.dispatch(this.actionType,{'refid':this.inputValue,'code':this.code})\r\n\t\t},\r\n\t\tonEnter(event) {\r\n\t\t\tif(event.key === 'Enter' || event.key === 'Escape') {\r\n\t\t\t\tevent.target.blur();\r\n\t\t\t\tthis.validate();\r\n\t\t\t}\r\n\t\t\tif(event.key === 'tab') {\r\n\t\t\t\tthis.validate();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\r\n\t},\r\n};","import BuySectionProductLine from '../../components/buy-section/buy-section-product-line';\r\nimport copyTextMixin from '../../components/vue-mixins/copyText';\r\nimport TextToInput from '../../components/text-to-input/text-to-input';\r\n\r\nexport default {\r\n\tcomponents: {\r\n\t\tBuySectionProductLine,\r\n\t\tTextToInput,\r\n\t},\r\n\tmixins: [\r\n\t\tcopyTextMixin,\r\n\t],\r\n\tprops: {\r\n\t\tproduct: {\r\n\t\t\ttype: Object,\r\n\t\t\tdefault: null,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tcontext: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '',\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisLoaded: false,\r\n\t\t\tquantity: 1, // COMMENT: Gets populated from prop \"product\"\r\n\t\t\tsku: null, // COMMENT: Gets populated from prop \"product\"\r\n\t\t\tprice: 0, // COMMENT: Gets populated from prop \"product\"\r\n\t\t};\r\n\t},\r\n\tmounted(){\r\n\t\tthis.sku = this.$props.product.sku;\r\n\t\tthis.name = this.$props.product.name;\r\n\t\tthis.quantity = this.$props.product.quantity;\r\n\t\t\r\n\t\tthis.isLoaded = true;\r\n\t\t\r\n\t}\r\n};","\r\nimport ProductLineCore from '../../components/product-line/product-line-core';\r\n\r\nexport default {\r\n\tname: 'product-line-addons',\r\n\textends: ProductLineCore\r\n};\r\n","import ProductLineAddons from '../../components/product-line/product-line-addons';\r\n\r\n// import { mapState } from 'vuex';\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'addons-block',\r\n\tcomponents: {\r\n\t\tProductLineAddons,\r\n\t},\r\n\tprops: {\r\n\t\tproductId: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tvariantId: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t}\r\n\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\t// isActive: false,\r\n\t\t\tisLoading: false,\r\n\t\t\tisLoaded: false,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tproductResults(){\r\n\t\t\tthis.isLoading = false;\r\n\t\t\tthis.isLoaded = true;\r\n\t\t\tconsole.log(\"this.$store\",this.$store.state.pdpAddonsProducts)\r\n\t\t\treturn this.$store.state.relevantAddonsProducts;\r\n\t\t}\r\n\t},\r\n\t// beforeMounted(){},\r\n\tmounted(){\r\n\t\tthis.isLoading = true;\r\n\t\tthis.getAddonsForBlock({ productId: this.productId, variantId: this.variantId}); // action\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'getAddonsForBlock'\r\n\t\t])\r\n\t},\r\n};\r\n","import ProductLineAddons from '../../components/product-line/product-line-addons';\r\n\r\n// import { mapState } from 'vuex';\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'addons-overlay',\r\n\tcomponents: {\r\n\t\tProductLineAddons,\r\n\t},\r\n\tprops: {\r\n\t\tproductId: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tvariantId: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\t// isActive: false,\r\n\t\t\tisLoading: false,\r\n\t\t\tisLoaded: false,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tisActive: function(){\r\n\t\t\tif(this.$store.state.addonsOverlayOpen === true){ // COMMENT: When opening\r\n\t\t\t\tthis.isLoading = true;\r\n\t\t\t\tthis.$el.focus(); // COMMENT: In order to make esc keypress work\r\n\t\t\t\tthis.showOverlayBackdrop(); // action\t\t\t\t\r\n\t\t\t\tthis.getAddonsForOverlay({ productId: this.productId, variantId: this.variantId}); // action\r\n\t\t\t}\r\n\t\t\treturn this.$store.state.addonsOverlayOpen;\r\n\t\t},\r\n\t\tproductResults(){\r\n\t\t\tthis.isLoading = false;\r\n\t\t\tthis.isLoaded = true;\r\n\t\t\treturn this.$store.state.pdpAddonsProducts;\r\n\t\t}\r\n\t},\r\n\t// beforeMounted(){},\r\n\tmounted(){\r\n\t\t// console.log(\"this.$store\",this.$store.state.pdpAddonsProducts)\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'closeAddonsOverlay',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t\t'getAddonsForOverlay',\r\n\t\t]),\r\n\t\tclose(){\r\n\t\t\t//\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\tthis.closeAddonsOverlay(); // action\r\n\t\t},\r\n\t},\r\n};\r\n","\r\nimport { TimelineMax, Power1 } from 'gsap';\r\nimport { registerRemoveFromCart } from '../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer'\r\nimport ProductLineCore from '../../components/product-line/product-line-core';\r\n\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'product-line-cart',\r\n\textends: ProductLineCore,\r\n\tprops: {\t\t\r\n\t\tcartUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t};\r\n\t},\r\n\tmounted(){\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'removeCartItem',\r\n\t\t]),\r\n\t\tremoveProduct(product){\r\n\t\t\tconsole.log('removing product: ', product);\r\n\t\t\tvar query = this.cartUrl.indexOf('?') != -1 ? '&' : '?';\r\n\t\t\tvar endpointUrl = this.cartUrl + query + 'code=' + product.sku;\t\r\n\t\t\tconsole.log('url: ', endpointUrl);\r\n\r\n\t\t\tfetch(endpointUrl, {method: 'DELETE' })\r\n\t\t\t\t.then(() => { \r\n\t\t\t\t\tvar productName = `${product.primaryProductName} ${product.secondaryProductName ? product.secondaryProductName : \"\"}`\r\n\t\t\t\t\tvar variantName = product.variantName\r\n\t\t\t\t\tregisterRemoveFromCart(productName, variantName, product.sku, product.unitPrice, product.quantity)\r\n\t\t\t\t})\r\n\t\t\t\t.catch(error => console.error('Error:', error));\r\n\r\n\t\t\tconst tl = new TimelineMax();\r\n\r\n\t\t\ttl.add('start');\r\n\t\t\ttl.to(this.$el, .25, {\r\n\t\t\t\t\theight: 0,\r\n\t\t\t\t\tease: Power1.easeOut,\r\n\t\t\t\t\tclearProps: 'all',\r\n\t\t\t\t\t\r\n\t\t\t\t},\r\n\t\t\t\t'start+=0'\r\n\t\t\t)\r\n\t\t\t.to(this.$el, .15, {\r\n\t\t\t\t\tdelay: .1,\r\n\t\t\t\t\tborderColor: 'rgba(217, 217, 217, 0)',\r\n\t\t\t\t\tease: Power1.easeOut,\r\n\t\t\t\t\tclearProps: 'all',\r\n\t\t\t\t\tonComplete: ()=>{\r\n\t\t\t\t\t\ttl.kill();\r\n\t\t\t\t\t\tthis.removeCartItem(product);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t'start+=0'\r\n\t\t\t);\r\n\t\t},\r\n\t},\r\n};","\r\nimport { TimelineMax, Power1 } from 'gsap';\r\nimport ProductLineCart from '../../components/product-line/product-line-cart';\r\nimport TextToInput from '../../components/text-to-input/text-to-input';\r\n\r\nexport default {\r\n\tname: 'cart-core',\r\n\tcomponents: {\r\n\t\tProductLineCart,\r\n\t\tTextToInput,\r\n\t},\r\n\tcomputed: {\r\n\t\tisLoaded: function(){\r\n\t\t\tthis.isLoading = !this.$store.state.cartLoaded;\r\n\t\t\treturn this.$store.state.cartLoaded;\r\n\t\t},\r\n\t\tsubTotal: function(){\r\n\t\t\treturn this.$store.state.cartSubTotal;\r\n\t\t},\r\n\t\tcartItems: function(){\r\n\t\t\treturn this.$store.state.cartItems;\r\n\t\t},\r\n\t\tcartItemsCount: function(){\r\n\t\t\treturn this.$store.state.cartItemsCount;\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t// COMMENT: Animation properties below - when cartItems are loaded\r\n\t\t\r\n\t\ttransitionEnter: function(el, done){\r\n\t\t\tlet delay = el.dataset.index * 250; // 150 ms delay\r\n\t\t\tdelay = delay / 1000;\r\n\t\t\tconst tl = new TimelineMax();\r\n\r\n\t\t\ttl.set(el, { height: 'auto', autoAlpha: 1 });\r\n\r\n\t\t\t// tl.from(el, 0.45, { delay: delay, height: 0, autoAlpha: 0, ease: Power1.easeOut, clearProps: 'all',\r\n\t\t\ttl.from(\r\n\t\t\t\tel, 0.35, { height: 0, autoAlpha: 0, ease: Power1.easeOut, clearProps: 'all',\r\n\t\t\t\tonComplete: ()=>{\r\n\t\t\t\t\ttl.kill();\r\n\t\t\t\t\tdone();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t},\r\n};","import { email, required, maxLength } from 'vuelidate/lib/validators';\r\n\r\n// mapping to backend-generated names for modal share saved list\r\nconst userInput = {\r\n email: \"UserInput_ShareSavedList_Email\",\r\n comment: \"UserInput_ShareSavedList_Comment\",\r\n };\r\n \r\nObject.freeze(userInput);\r\n\r\nexport default {\r\n form: {\r\n\t\t[userInput.email]: {\r\n required,\r\n email\r\n },\r\n [userInput.comment]: {\r\n maxLength: maxLength(400)\r\n },\r\n },\r\n validationFields: userInput\r\n};","\r\nimport ProductLineCart from '../../components/product-line/product-line-cart';\r\nimport CartCore from './cart-core';\r\nimport TextToInput from '../../components/text-to-input/text-to-input';\r\nimport { REQUEST_QUOTE_ASYNC, EMPTY_CART_ASYNC, GET_CART_ITEMS, IMPORT_CART_ASYNC } from '../../basics/js/store/static';\r\nimport { mapActions } from 'vuex';\r\nimport CartShare from './cart-share';\r\n\r\nexport default {\r\n\tname: 'cart',\r\n\textends: CartCore,\r\n\tcomponents: {\r\n\t\tProductLineCart,\r\n\t\tTextToInput,\r\n\t\tCartShare,\r\n\t},\r\n\tprops: {\r\n\t\trequestQuoteUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\trequestQuoteNotifyTitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\trequestQuoteNotifyMessage: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\timportCartUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\timportCartNotifyTitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"The file has been imported into the cart\"\r\n\t\t},\r\n\t\timportCartNotifyMessage: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\timportCartFailedNotifyTitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"One or more items could not be imported to the cart - \"\r\n\t\t},\r\n\t\timportCartFailedtNotifyMessage: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"This might be caused in formatting errors in the file or products that are not available\"\r\n\t\t},\r\n\t\temptyCartUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\temptyCartNotifyTitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\temptyCartNotifyMessage: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisLoading: true,\r\n\r\n\t\t\taddCommentMode: false,\r\n\r\n\t\t\tnumberOfItemsToShow: 3,\r\n\r\n\t\t\tisRequestingQuote: false,\r\n\t\t\tisImportingCart: false,\r\n\t\t\tisEmptyingCart: false,\r\n\t\t\tisSharingSavedList: false,\r\n\t\t};\t\r\n\t},\t\r\n\tmounted(){\r\n\t\tthis[GET_CART_ITEMS.action]();\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tREQUEST_QUOTE_ASYNC.action,\r\n\t\t\tEMPTY_CART_ASYNC.action,\r\n\t\t\tGET_CART_ITEMS.action,\r\n\t\t\tIMPORT_CART_ASYNC.action,\r\n\t\t]),\t\t\r\n\t\trequestQuote(){\r\n\t\t\tif (this.isRequestingQuote) return;\r\n\r\n\t\t\tthis.isRequestingQuote = true;\r\n\t\t\tthis.$refs.requestQuoteModal.close();\r\n\r\n\t\t\tconst url = this.requestQuoteUrl;\r\n\t\t\tconst body = {\r\n\t\t\t\t\"comment\": this.$refs.requestQuoteComment.value,\r\n\t\t\t};\r\n\t\t\tthis[REQUEST_QUOTE_ASYNC.action]({\r\n\t\t\t\turl,\r\n\t\t\t\tbody,\r\n\t\t\t\tnotification: {\r\n\t\t\t\t\ttype: 'info',\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\ttitle: this.requestQuoteNotifyTitle,\r\n\t\t\t\t\tmessage: this.requestQuoteNotifyMessage\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.isRequestingQuote = false;\r\n\t\t},\r\n\t\timportCart(){\r\n\t\t\tif (this.isImportingCart) return;\r\n\r\n\t\t\tthis.isImportingCart = true;\r\n\t\t\tthis.$refs.importCartModal.close();\r\n\r\n\t\t\tconst url = this.importCartUrl;\r\n\t\t\tconst importFile = this.$refs.importCartModalFile.files[0];\r\n\t\t\tconst body = importFile;\r\n\t\t\tthis[IMPORT_CART_ASYNC.action]({\r\n\t\t\t\turl,\r\n\t\t\t\tbody,\r\n\t\t\t\tnotification: {\r\n\t\t\t\t\ttype: 'info',\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\ttitle: this.importCartNotifyTitle,\r\n\t\t\t\t\tmessage: this.importCartNotifyMessage\r\n\t\t\t\t},\r\n\t\t\t\tnotificationOnError: {\r\n\t\t\t\t\ttype: 'info',\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\ttitle: this.importCartFailedNotifyTitle,\r\n\t\t\t\t\tmessage: this.importCartFailedtNotifyMessage\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.isImportingCart = false;\r\n\t\t},\r\n\t\tcommentAfterEnter () {\r\n\t\t\tthis.$nextTick(() => this.$refs.commentInput.focus());\r\n\t\t},\r\n\t\ttoggleCommentMode(){\r\n\t\t\tthis.addCommentMode = !this.addCommentMode;\r\n\t\t},\r\n\t\temptyCart(){\r\n\t\t\tif (this.isEmptyingCart) return;\r\n\t\t\t\r\n\t\t\tthis.isEmptyingCart = true;\r\n\r\n\t\t\tconst url = this.emptyCartUrl;\r\n\t\t\tconst body = {};\r\n\t\t\t\r\n\t\t\tthis[EMPTY_CART_ASYNC.action]({\r\n\t\t\t\turl,\r\n\t\t\t\tbody,\r\n\t\t\t\tnotification: {\r\n\t\t\t\t\ttype: 'info',\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\ttitle: this.emptyCartNotifyTitle,\r\n\t\t\t\t\tmessage: this.emptyCartNotifyMessage\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.isEmptyingCart = false;\r\n\t\t},\r\n\t},\r\n};","\r\nimport { SHARE_SAVED_LIST_ASYNC } from '../../basics/js/store/static';\r\nimport { mapActions } from 'vuex';\r\nimport validations from './cart-share-validation';\r\n\r\nexport default {\r\n\tname: 'cart-share',\r\n\tprops: {\r\n\t\tshareSavedListUrl: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tshareSavedListTitle: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tshareSavedListMessage: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisSharingSavedList: false,\r\n\r\n\t\t\tform: {\r\n\t\t\t\t[validations.validationFields.email]: this.email,\r\n\t\t\t\t[validations.validationFields.comment]: this.comment,\r\n\t\t\t},\r\n\t\t};\t\r\n\t},\r\n\tcomputed: {\r\n\t\tgetCartShareCartIsActive: function() {\r\n\t\t\tif (this.$store.state.cartShareCartIsActive) {\r\n\t\t\t\treturn this.$store.state.cartShareCartIsActive\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t},\r\n\tvalidations,\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tSHARE_SAVED_LIST_ASYNC.action,\r\n\t\t]),\t\t\r\n\t\tshareSavedList() {\r\n\t\t\tif (this.isSharingSavedList) return;\r\n\t\t\tif (!this.isValid()) return;\r\n\t\t\r\n\t\t\tthis.isSharingSavedList = true;\r\n\t\t\tvar form = this.$v.form;\r\n\t\t\tconst url = this.shareSavedListUrl;\r\n\t\t\tconst body = {\r\n\t\t\t\t\t\"email\": form.UserInput_ShareSavedList_Email.$model,\r\n\t\t\t\t\t\"comment\": form.UserInput_ShareSavedList_Comment.$model\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tthis[SHARE_SAVED_LIST_ASYNC.action]({ url, body, notification: { \r\n\t\t\t\ttype: 'info',\r\n\t\t\t\tshowClose: false, \r\n\t\t\t\ttitle: this.shareSavedListTitle, \r\n\t\t\t\tmessage: this.shareSavedListMessage } });\r\n\t\t\t\r\n\t\t\tthis.closeModal();\r\n\t\t\tthis.isSharingSavedList = false;\r\n\t\t},\r\n\t\tcloseModal() {\r\n\t\t\tthis.$refs.shareSavedListModal.close();\r\n\t\t},\r\n\t\tisValid() {\r\n\t\t\tthis.$v.form.$touch()\r\n\t\t\tif (this.$v.form.$error) {\r\n\t\t\t\tconsole.warn('form error', this.$v);\r\n\t\t\t}\r\n\t\t\treturn !this.$v.form.$error;\r\n\t\t},\r\n\t},\r\n};\r\n","\r\nimport { GET_CART_QUANTITY, IMPORT_SAVED_LIST_ASYNC } from '../../basics/js/store/static';\r\nimport { mapActions, mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'cart-import-link',\r\n\tprops: {\r\n\t\tcartUrl: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tcartImportUrl: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tcartImportId: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tcartImportTitle: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tcartImportMessage: {\r\n\t\t\ttype: String,\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisImporting: false,\r\n\t\t};\t\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\t'hasCartItems': state => state.cart[GET_CART_QUANTITY.stateKey] > 0\r\n\t\t})\r\n\t},\r\n\tmounted(){\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tIMPORT_SAVED_LIST_ASYNC.action,\r\n\t\t]),\r\n\t\timportCart() {\r\n\t\t\tif (this.hasCartItems) {\r\n\t\t\t\tthis.showModal();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.importJob();\r\n\t\t},\t\r\n\t\timportJob() {\r\n\t\t\tif (this.isImporting) return;\r\n\t\t\r\n\t\t\tthis.isImporting = true;\r\n\t\t\tconst body = {\r\n\t\t\t\t\"cartId\": this.cartImportId\r\n\t\t\t};\r\n\t\t\tvar url = this.cartImportUrl;\r\n\r\n\t\t\tthis[IMPORT_SAVED_LIST_ASYNC.action]({ url, body, notification: { \r\n\t\t\t\ttype: 'info',\r\n\t\t\t\tautoRemove: false, \r\n\t\t\t\ttitle: this.cartImportTitle, \r\n\t\t\t\tmessage: this.cartImportMessage } });\r\n\t\t\t\r\n\t\t\tthis.isImporting = false;\r\n\t\t},\r\n\t\timportCartAndCloseModal() {\r\n\t\t\tthis.importJob();\r\n\t\t\tthis.closeModal();\r\n\t\t},\r\n\t\tshowModal() {\r\n\t\t\tthis.openModal('importCartModal');\r\n\t\t},\r\n\t\tcloseModal() {\r\n\t\t\tthis.$refs.importCartModal.close();\r\n\t\t},\r\n\t},\t\r\n};\r\n","import Swiper from \"swiper\";\r\nimport { mapState } from \"vuex\";\r\n\r\nexport default {\r\n\tname: \"category-tile\",\r\n\tprops: {\r\n\t\tinputCategories: {\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\ttype: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"links\",\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\titemIndex: 0,\r\n\t\t\tdefaultColor: '',\r\n\t\t\tslider: null,\r\n sliderSettings: {\r\n\t\t\t\tslidesPerView: 1.25,\r\n spaceBetween: 10,\r\n\t\t\t\tbreakpoints: {\r\n\t\t\t\t\t390: {\r\n\t\t\t\t\t\tslidesPerView: 1.25,\r\n\t\t\t\t\t\tspaceBetween: 10,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t450: {\r\n\t\t\t\t\t\tslidesPerView: 1.5,\r\n\t\t\t\t\t\tspaceBetween: 15,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t768: {\r\n\t\t\t\t\t\tslidesPerView: 1.75,\r\n\t\t\t\t\t\tspaceBetween: 20,\r\n\t\t\t\t\t},\r\n\t\t\t\t}\r\n }\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n isMobile: state => state.isMobile,\r\n\t\t}),\r\n\t\tparsedCategories: function () {\r\n\t\t\t// console.log(typeof this.inputCategories);\r\n\t\t\tif (typeof this.inputCategories === \"string\") {\r\n\t\t\t\treturn JSON.parse(this.inputCategories);\r\n\t\t\t} else if (this.inputCategories && this.inputCategories[0]) {\r\n\t\t\t\treturn this.inputCategories;\r\n\t\t\t}\r\n\t\t},\r\n\t\tactiveCategory: function () {\r\n\t\t\tif (this.parsedCategories && this.parsedCategories[0]) {\r\n\t\t\t\treturn this.parsedCategories[this.itemIndex];\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.defaultColor = window.getComputedStyle(this.$refs.inner).backgroundColor;\r\n\r\n\t\tif ( this.$refs.slider ) {\r\n\r\n\t\t\tthis.sliderSettings.pagination = {\r\n\t\t\t\tel: this.$refs.pagination,\r\n\t\t\t\tclickable: true,\r\n\t\t\t};\r\n\t\t\tsetTimeout(function() {\r\n\t\t\t\tthis.slider = new Swiper(this.$refs.slider, this.sliderSettings);\r\n\t\t\t}.bind(this),100);\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\thoverCategory(event = null, item, index) {\r\n\t\t\tthis.itemIndex = index;\r\n\t\t\tif (item.color) this.$refs.inner.style.setProperty(\"--category-tile-bg-color\", item.color);\r\n\t\t},\r\n\t\tresetCategory() {\r\n\t\t\tthis.itemIndex = 0;\r\n\t\t\tthis.$refs.inner.style.setProperty(\"--category-tile-bg-color\", this.defaultColor);\r\n\t\t},\r\n\t},\r\n};\r\n","import Swiper from \"swiper\";\r\nimport { mapState } from \"vuex\";\r\n\r\nexport default {\r\n\tname: 'category-tile-raw',\r\n\tprops: {\r\n\t\tcategories: {\r\n\t\t\ttype: Array,\r\n\t\t\trequired: true,\r\n\t\t\tdefault: []\r\n\t\t},\r\n\t\ttype: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault:'links'\r\n\t\t},\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tactiveCategory: null,\r\n\t\t\tdefaultColor: '',\r\n\t\t\tslider: null,\r\n sliderSettings: {\r\n\t\t\t\tslidesPerView: 1.25,\r\n spaceBetween: 10,\r\n\t\t\t\tbreakpoints: {\r\n\t\t\t\t\t390: {\r\n\t\t\t\t\t\tslidesPerView: 1.25,\r\n\t\t\t\t\t\tspaceBetween: 10,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t450: {\r\n\t\t\t\t\t\tslidesPerView: 1.5,\r\n\t\t\t\t\t\tspaceBetween: 15,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t768: {\r\n\t\t\t\t\t\tslidesPerView: 1.75,\r\n\t\t\t\t\t\tspaceBetween: 20,\r\n\t\t\t\t\t},\r\n\t\t\t\t}\r\n }\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n isMobile: state => state.isMobile,\r\n\t\t}),\r\n\t},\r\n\tmounted(){\r\n\t\tthis.activeCategory = this.categories[0];\r\n\r\n\t\tthis.defaultColor = window.getComputedStyle(this.$refs.inner).backgroundColor;\r\n\r\n\r\n\t\tif ( this.$refs.slider ) {\r\n\t\t\tthis.sliderSettings.pagination = {\r\n\t\t\t\tel: this.$refs.pagination,\r\n\t\t\t\tclickable: true,\r\n\t\t\t};\r\n\t\t\tsetTimeout(function() {\r\n\t\t\t\tthis.slider = new Swiper(this.$refs.slider, this.sliderSettings);\r\n\t\t\t}.bind(this),100);\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\thoverCategory(event=null,item) {\r\n\t\t\tthis.activeCategory = item;\r\n\t\t\tif ( item.color ) this.$refs.inner.style.setProperty('--category-tile-bg-color', item.color);\r\n\t\t},\r\n\t\tresetCategory() {\r\n\t\t\tthis.activeCategory = this.categories[0];\r\n\t\t\tthis.$refs.inner.style.setProperty('--category-tile-bg-color', this.defaultColor);\r\n\t\t}\r\n\t}\r\n};\r\n","// https://github.com/charliekassel/vuejs-datepicker#readme\r\nimport Datepicker from \"vuejs-datepicker\";\r\nimport * as lang from \"vuejs-datepicker/dist/locale/\";\r\n\r\nexport default {\r\n\tname: 'custom-datepicker',\r\n\tcomponents: {\r\n\t\tDatepicker,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\t// DATEPICKER - third party options\r\n\t\t\tformat: \"d MMMM yyyy\",\r\n\t\t\teventMsg: null,\r\n\t\t\tlanguage: \"en\",\r\n\t\t\tlanguages: lang,\r\n\t\t\t// ----------------\r\n\r\n\t\t\thasValue: false,\r\n\t\t\tdate: new Date(),\r\n\t\t\tdisabledDates: {\r\n\t\t\t\tto: new Date()\r\n\t\t\t}\r\n\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tlocalDate(){\r\n\t\t\treturn this.date.toString();\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tthis.calendar = this.$refs.datepickerelement;\r\n\t},\r\n\tmethods: {\r\n\t\thandleClickOnInput(){\r\n\t\t\tthis.openPicker();\r\n\t\t},\r\n\t\topenPicker() {\r\n\t\t\tthis.calendar.showCalendar();\r\n\t\t},\r\n\t}\r\n};","import Accordion from '../../components/accordion/accordion'\r\nimport InputWithLabel from '../../components/form-elements/templates/input-with-label';\r\nimport CustomDatepicker from '../../components/date-picker/date-picker';\r\n\r\nexport default {\r\n\tname: 'checkout-block',\r\n\tprops: {\r\n\t\t$v: {\r\n\t\t\ttype: Object,\r\n\t\t\tdefault: null,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tform: {\r\n\t\t\ttype: Object\r\n\t\t},\r\n\t\taddressIsUnknown: Boolean\r\n\t},\r\n\tcomponents: {\r\n\t\tAccordion,\r\n\t\tInputWithLabel,\r\n\t\tCustomDatepicker,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisActive: true,\r\n\t\t\treferenceId: \"\",\r\n\t\t\tuseKnownAddress: true\r\n\t\t};\r\n\t},\r\n\tcomputed:{\r\n\t\tdispatchDate(){\r\n\t\t\treturn this.$store.state.cart.orderDispatchDate\r\n\t\t},\r\n\t\tshowSpinner(){\r\n\t\t\treturn this.$store.state.cart.showOrderSummarySpinner\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\t\tthis.useKnownAddress = this.addressIsUnknown ? false : true\r\n\t},\r\n\tmethods: {\r\n\t\tchangeAddressInput(knownModel) {\r\n\t\t\tthis.useKnownAddress = !this.useKnownAddress\r\n\t\t\tknownModel.model = \"\"\r\n\t\t},\r\n\t\tforceKnownAddress(knownModel){\r\n\t\t\tthis.useKnownAddress = true\r\n\t\t\tknownModel.invalid = false\r\n\r\n\t\t},\r\n\t\tactivateForm() {\r\n\t\t\tthis.isActive = true;\r\n\t\t},\r\n\t\taccordionToggle() {\r\n\t\t\tthis.isActive = !this.isActive;\r\n\t\t},\r\n\t\tonChange(name) {\r\n\t\t\tconsole.log('change', name)\r\n\t\t},\r\n\t\taddReferenceId(){\r\n\t\t\tconst input = this.form['inputData.OwnReference'].model\r\n\t\t\tthis.$store.dispatch(\"addReferenceId\",input)\r\n\t\t}\r\n\t}\r\n};\r\n","\r\nexport default {\r\n\tname: 'order-summary',\r\n\r\n\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tcampaignCode: '',\r\n\t\t\tbuttonStatus: 'idle',\r\n\t\t\tcampaignCodeDisabled: false\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\tcartLineItems: function(){\r\n\t\t\treturn this.$store.state.cart.cartLineItems;\r\n\t\t},\r\n\t\tcouponCodeAccepted(){\r\n\t\t\treturn !!this.cartData.campaign\r\n\t\t},\r\n\t\tcartData(){\r\n\t\t\treturn this.$store.state.cart.calculatedCart\r\n\t\t},\r\n\t\tshowSpinner(){\r\n\t\t\treturn this.$store.state.cart.showOrderSummarySpinner\r\n\t\t},\r\n\t\tcampaignIdentification() {\r\n\t\t\tif(this.cartData.campaign.name) {\r\n\t\t\t\treturn this.cartData.campaign.code + \", \" + this.cartData.campaign.name + \"\"\r\n\t\t\t}\r\n\t\t\treturn this.cartData.campaign.code\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tsubmitCouponCode(){\r\n\t\t\tthis.$store.dispatch('submitCouponCode',this.campaignCode)\r\n\t\t},\r\n\t\tremoveCampaignCode(){\r\n\t\t\tthis.campaignCode = \"\"\r\n\t\t\tthis.$store.dispatch('submitCouponCode',this.campaignCode)\r\n\t\t}\r\n\r\n\t},\r\n\tmounted(){\r\n\t\tthis.$store.dispatch('getCalculatedCart')\r\n\t}\r\n};\r\n","import CheckoutBlock from '../checkout-block/checkout-block';\r\nimport OrderSummary from '../order-summary/order-summary';\r\n\r\nconst formData = function(){\r\n\tif ( !document.querySelector('form[ref=checkoutForm]') ) return;\r\n\r\n\tconst form = document.querySelector('form[ref=checkoutForm]').elements\r\n\tconst formData = {}\r\n\r\n\tfor(let e=0; e<form.length; e++){\r\n\r\n\t\tconst field = form[e]\r\n\r\n\t\tif(field.nodeName !== 'BUTTON' && field.name){\r\n\t\t\tformData[field.name] = {\r\n\t\t\t\tmodel:field.value ? field.value : '',\r\n\t\t\t\talternate: field.dataset.alternate || null,\r\n\t\t\t\trequired: field.dataset.required,\r\n\t\t\t\tinvalid:null}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn formData\r\n}\r\n\r\nconst stringifyFormData = function(form){\r\n\r\n\tlet flatObject = {}\r\n\r\n\tconst expand = function(str, value,target)\r\n\t{\r\n\t\tvar items = str.split(\".\") // split on dot notation\r\n\t\tvar output = target // prepare an empty object, to fill later\r\n\t\tvar ref = output // keep a reference of the new object\r\n\r\n\t\t// loop through all nodes, except the last one\r\n\t\tfor(var i = 0; i < items.length-1; i ++)\r\n\t\t{\r\n\t\t\tref[items[i]] = ref[items[i]] ? ref[items[i]] : {} // reuse existing or create a new element inside the reference\r\n\t\t\tref = ref[items[i]] // shift the reference to the newly created object\r\n\t\t}\r\n\r\n\t\tref[items[items.length - 1]] = value // apply the final value\r\n\r\n\t\treturn output // return the full object\r\n\t}\r\n\r\n\tfor(let input in form){\r\n\t\tflatObject[input] = form[input].model\r\n\t}\r\n\r\n\tlet expandedObject = {}\r\n\tfor(let line in flatObject){\r\n\t\texpandedObject = expand(line,flatObject[line],expandedObject)\r\n\t}\r\n\r\n\treturn JSON.stringify(expandedObject)\r\n}\r\n\r\nexport default {\r\n\tname: 'checkout',\r\n\tcomponents: {\r\n\t\tCheckoutBlock,\r\n\t\tOrderSummary,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tform:formData()\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tplaceOrder(e){\r\n\t\t\tlet validates = true\r\n\t\t\tlet groupValidates = false\r\n\r\n\t\t\tconst groups = {}\r\n\t\t\tlet form = this.form\r\n\r\n\t\t\tif (e.submitter.nodeName !== 'BUTTON'){\r\n\t\t\t\tconsole.error(\"Unexpected nodeName\");\r\n\t\t\t\treturn false;\r\n\t\t\t} \r\n\r\n\t\t\t// Set order type: order, quote\r\n\t\t\tform[\"inputData.OrderType\"] = {} // undefined error handling\r\n\t\t\tform[\"inputData.OrderType\"].model = e.submitter.value ;\r\n\r\n\t\t\t// individual field validations deciding if a message should be displayed\r\n\r\n\t\t\tfor(let input in form){\r\n\t\t\t\tif(form[input].required)[\r\n\t\t\t\t\tform[input].invalid = !form[input].model\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t\t// the user must select EITHER an option in a selector OR fill out a number of required fields that only are required if the dropdown is not selected.\r\n\r\n\t\t\tfor(let input in form){\r\n\t\t\t\tconst field = form[input]\r\n\r\n\t\t\t\tif(field.alternate){\r\n\t\t\t\t\tgroups[field.alternate] = groups[field.alternate] || groups[field.alternate] === undefined\r\n\t\t\t\t\t\t? !!field.model\r\n\t\t\t\t\t\t: groups[field.alternate]\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor(let group in groups){\r\n\t\t\t\tif(groups[group]){\r\n\t\t\t\t\tgroupValidates = true\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(validates && groupValidates){\r\n\t\t\t\tthis.$store.dispatch(\"placeOrder\",stringifyFormData(this.form))\r\n\t\t\t}\r\n\t\t},\r\n\t\tonChange() {\r\n\t\t\t// onchange\r\n\t\t},\r\n\t\tsetAction(actionName) {\r\n\t\t\tthis.form.action = actionName;\r\n\t\t},\r\n\t\tscrollToTopClick() {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n};\r\n","\r\nexport default {\r\n\tname: 'feedback-button',\r\n\r\n\tprops: {\r\n\t\tstatus: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'idle',\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tbuttonStyle: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'primary',\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tidleText: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tdoneText: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tdoneRevertDelay: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 3.5,\r\n\t\t\trequired: false,\r\n\t\t}\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tisDone: false,\r\n\t\t\tisLoading: false,\r\n\t\t\tisDisabled: this.status === 'error' || this.status === 'disabled' ? true : false, // COMMENT: In case the initial status is error or disabled..\r\n\t\t\tvisualButtonRevertTimeout: null, // COMMENT: Placeholder for timeout\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tstatus(newValue){\r\n\t\t\tclearTimeout(this.visualButtonRevertTimeout);\r\n\r\n\t\t\tswitch(newValue){\r\n\t\t\t\tcase 'idle':\r\n\t\t\t\t\tthis.isDone = false;\r\n\t\t\t\t\tthis.isLoading = false;\r\n\t\t\t\t\tthis.isDisabled = false;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'error':\r\n\t\t\t\tcase 'disabled':\r\n\t\t\t\t\tthis.isDone = false;\r\n\t\t\t\t\tthis.isLoading = false;\r\n\t\t\t\t\tthis.isDisabled = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'loading':\r\n\t\t\t\t\tthis.isDone = false;\r\n\t\t\t\t\tthis.isLoading = true;\r\n\t\t\t\t\tthis.isDisabled = true;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'done':\r\n\t\t\t\t\tthis.isDone = true;\r\n\t\t\t\t\tthis.isLoading = false;\r\n\t\t\t\t\tthis.isDisabled = false;\r\n\t\t\t\t\tthis.visualRevertButtonFeedback();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\tvisualRevertButtonFeedback(){\r\n\t\t\tthis.visualButtonRevertTimeout = setTimeout(()=>{\r\n\t\t\t\tthis.$emit('done-delay');\r\n\t\t\t}, this.doneRevertDelay * 1000);\r\n\t\t},\r\n\t},\r\n};\r\n","import FeedbackButton from '../../components/feedback-button/feedback-button';\r\nimport { mapActions } from 'vuex';\r\nimport * as types from '../../basics/js/store/static';\r\n\r\nexport default {\r\n\tname: 'order-summary-original',\r\n\tcomponents: {\r\n\t\tFeedbackButton,\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tbuttonStatus: 'idle',\r\n\t\t\tcampaignCodeDisabled: false,\r\n\t\t\tcampaignCodeModel: '',\r\n\t\t\tcampaignCodeIsAdded: false, // add-button state\r\n\r\n\t\t\tcurrency: this.$store.state.currency,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tisLoaded: function(){\r\n\t\t},\r\n\t\ttotal: function(){\r\n\t\t},\r\n\t\tcartItems: function(){\r\n\t\t\treturn this.$store.state.cartItems;\r\n\t\t},\r\n\t\tcampaignCodeIsLoading() {\r\n\t\t\tthis.$store.state[types.POST_CAMPAIGN_CODE_ASYNC.loadingKey];\r\n\t\t\tthis.buttonStatus = 'loading';\r\n\t\t},\r\n\t\tcampaignCode(){\r\n\t\t\tconst isAdded = !!this.$store.state[types.POST_CAMPAIGN_CODE_ASYNC.stateKey].code;\r\n\t\t\tthis.campaignCodeDisabled = isAdded;\r\n\t\t\tthis.campaignCodeIsAdded = isAdded;\r\n\t\t\tthis.buttonStatus = isAdded ? 'disabled' : 'idle';\r\n\r\n\t\t\t// console.log('getting in here for campaign code changes?');\r\n\t\t\treturn this.$store.state[types.POST_CAMPAIGN_CODE_ASYNC.stateKey];\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'checkoutRemoveCampaignCode',\r\n\t\t\t'getCouponCode'\r\n\t\t]),\r\n\t\tbuttonTextReverted(){\r\n\t\t\tconsole.log('caught emit event from feedback-button');\r\n\t\t\tthis.addCampaignIsDone = false;\r\n\t\t\tthis.buttonStatus = 'idle';\r\n\t\t},\r\n\t\taddCampaignCode(){\r\n\t\t\tif(this.campaignCodeModel !== ''){\r\n\t\t\t\tthis.getCouponCode({ code: this.campaignCodeModel });\r\n\t\t\t} else {\r\n\t\t\t\t// TODO: Handle input validation\r\n\t\t\t\tconsole.warn('no campaign code supplied');\r\n\t\t\t}\r\n\t\t},\r\n\t\tremoveCampaignCode(){\r\n\t\t\tthis.campaignCodeDisabled = false;\r\n\t\t\tthis.checkoutRemoveCampaignCode();\r\n\t\t},\r\n\t\tplaceOrder(){\r\n\t\t\tconsole.log('placeOrder called');\r\n\t\t\tthis.$emit('form-action-checkout', 'ActionPlaceOrder')\r\n\t\t},\r\n\r\n\t},\r\n};\r\n","/** \r\n * this file contains reusable validation rules\r\n * https://vuelidate.netlify.com/\r\n */\r\n\r\nimport { email, minLength, maxLength, requiredIf } from 'vuelidate/lib/validators';\r\n\r\n// mapping to backend-generated names\r\nconst userInput = {\r\n ownReference: \"DataModel_UserInput_OwnReference\",\r\n comment: \"DataModel_UserInput_Comment\",\r\n action: \"action\",\r\n campaignCode: \"campaign-code\",\r\n referencePerson: {\r\n externalId: \"DataModel_UserInput_ReferencePerson_ExternalId\",\r\n isNewPerson: \"DataModel_UserInput_ReferencePerson_IsNewPerson\",\r\n name: \"DataModel_UserInput_ReferencePerson_Name\",\r\n email: \"DataModel_UserInput_ReferencePerson_Email\"\r\n },\r\n address: {\r\n externalId: \"DataModel_UserInput_Address_ExternalId\",\r\n isNewAddress: \"DataModel_UserInput_Address_IsNewAddress\",\r\n addressLine: \"DataModel_UserInput_Address_AddressLine\",\r\n zipcode: \"DataModel_UserInput_Address_Zipcode\",\r\n country: \"DataModel_UserInput_Address_Country\",\r\n attention: \"DataModel_UserInput_Address_Attention\"\r\n }\r\n };\r\n \r\nObject.freeze(userInput);\r\n\r\nexport default {\r\n form: {\r\n\r\n [userInput.action]: {},\r\n [userInput.ownReference]: {},\r\n [userInput.campaignCode]: {},\r\n // Referenced person\r\n [userInput.referencePerson.externalId]: {\r\n required: requiredIf(function() {\r\n return !this.form.DataModel_UserInput_ReferencePerson_IsNewPerson;\r\n })\r\n },\r\n [userInput.referencePerson.isNewPerson]: {},\r\n [userInput.referencePerson.name]: {\r\n required: requiredIf(function(){\r\n return this.form.DataModel_UserInput_ReferencePerson_IsNewPerson;\r\n })\r\n },\r\n [userInput.referencePerson.email]: {\r\n required: requiredIf(function(){\r\n return this.form.DataModel_UserInput_ReferencePerson_IsNewPerson;\r\n }),\r\n email\r\n },\r\n // Address\r\n [userInput.address.isNewAddress]: {},\r\n [userInput.address.externalId]: {\r\n required: requiredIf(function(){\r\n return !this.form.DataModel_UserInput_Address_IsNewAddress;\r\n })\r\n },\r\n [userInput.address.addressLine]: {\r\n required: requiredIf(function(){\r\n return this.form.DataModel_UserInput_Address_IsNewAddress;\r\n }),\r\n minLength: minLength(4),\r\n maxLength: maxLength(120)\r\n },\r\n [userInput.address.zipcode]: {\r\n required: requiredIf(function(){\r\n return this.form.DataModel_UserInput_Address_IsNewAddress;\r\n }),\r\n minLength: minLength(4),\r\n maxLength: maxLength(50)\r\n },\r\n [userInput.address.country]: {\r\n required: requiredIf(function(){\r\n return this.form.DataModel_UserInput_Address_IsNewAddress;\r\n }),\r\n minLength: minLength(2),\r\n maxLength: maxLength(50)\r\n },\r\n [userInput.address.attention]: {\r\n required: requiredIf(function(){\r\n return this.form.DataModel_UserInput_Address_IsNewAddress;\r\n }),\r\n minLength: minLength(2),\r\n maxLength: maxLength(50)\r\n },\r\n // Comment\r\n [userInput.comment]: {\r\n maxLength: maxLength(400)\r\n },\r\n\r\n },\r\n validationFields: userInput\r\n};","import CheckoutBlock from '../checkout-block/checkout-block';\r\nimport OrderSummaryOriginal from '../order-summary/order-summary-original';\r\nimport validations from '../../basics/js/validations';\r\n\r\nimport { GET_CART_ITEMS } from '../../basics/js/store/static';\r\n\r\nexport default {\r\n\tname: 'checkout-original',\r\n\tcomponents: {\r\n\t\tCheckoutBlock,\r\n\t\tOrderSummaryOriginal,\r\n\t},\r\n\tprops: {\r\n\t\t\"own-reference\": String,\r\n\t\t\"comment\": String,\r\n\t\t\"campaign-code\": String,\r\n\r\n\t\t\"reference-person-external-id\": String,\r\n\t\t\"reference-person-is-new-person\": Boolean,\r\n\t\t\"reference-person-name\": String,\r\n\t\t\"reference-person-email\": String,\r\n\r\n\t\t\"address-external-id\": String,\r\n\t\t\"address-is-new-address\": Boolean,\r\n\t\t\"address-address-line\": String,\r\n\t\t\"address-zipcode\": String,\r\n\t\t\"address-country\": String,\r\n\t\t\"address-attention\": String,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tform: {\r\n\t\t\t\taction: \"no-action\",\r\n\r\n\t\t\t\t[validations.validationFields.ownReference]: this.ownReference,\r\n\t\t\t\t[validations.validationFields.comment]: this.comment,\r\n\t\t\t\t[validations.validationFields.campaignCode]: this.campaignCode,\r\n\r\n\t\t\t\t[validations.validationFields.referencePerson.externalId]: this.referencePersonExternalId,\r\n\t\t\t\t[validations.validationFields.referencePerson.isNewPerson]: this.referencePersonIsNewPerson,\r\n\t\t\t\t[validations.validationFields.referencePerson.name]: this.referencePersonName,\r\n\t\t\t\t[validations.validationFields.referencePerson.email]: this.referencePersonEmail,\r\n\r\n\t\t\t\t[validations.validationFields.address.externalId]: this.addressExternalId,\r\n\t\t\t\t[validations.validationFields.address.isNewAddress]: this.addressIsNewAddress,\r\n\t\t\t\t[validations.validationFields.address.addressLine]: this.addressAddressLine,\r\n\t\t\t\t[validations.validationFields.address.zipcode]: this.addressZipcode,\r\n\t\t\t\t[validations.validationFields.address.country]: this.addressCountry,\r\n\t\t\t\t[validations.validationFields.address.attention]: this.addressAttention\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.$store.dispatch(GET_CART_ITEMS.action);\r\n\t},\r\n\tvalidations,\r\n\tmethods: {\r\n\t\tvalidateForm() {\r\n\t\t\tconsole.log(\"validate\")\r\n\t\t\tthis.$v.form.$touch()\r\n\t\t\tif (this.$v.form.$error) {\r\n\t\t\t\tconsole.warn('form error', this.$v);\r\n\t\t\t\tif (this.form.action != 'ActionAddCampaign')\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.$refs.form.submit();\r\n\t\t},\r\n\t\tonChange() {\r\n\t\t\t// onchange\r\n\t\t},\r\n\t\tsetAction(actionName) {\r\n\t\t\tconsole.log(`set action: ${actionName}`);\r\n\t\t\tthis.form.action = actionName;\r\n\t\t},\r\n\t\tscrollToTopClick() {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n};\r\n","export default {\r\n\tname: 'file-upload',\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tfileList: [],\r\n\t\t\tfileCount: 0,\r\n\t\t\tisOver: false\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\tchangeHandler: function(event) {\r\n\t\t\tthis.isOver = false;\r\n\t\t\tthis.updateFileList([...event.target.files]);\r\n\t\t},\r\n\t\tdragEnterHandler: function() {\r\n\t\t\tthis.isOver = true;\r\n\t\t},\r\n\t\tdragExitHandler: function() {\r\n\t\t\tthis.isOver = false;\r\n\t\t},\r\n\t\tdropHandler: function(event) {\r\n\t\t\tthis.isOver = false;\r\n\t\t\tthis.updateFileList([...event.dataTransfer.files]);\r\n\t\t},\r\n\t\tfileItemDeleteHandler: function(event,index) {\r\n\t\t\tthis.fileList.splice(index,1);\r\n\t\t\tthis.fileCount--;\r\n\t\t},\r\n\t\tupdateFileList: function(newFiles) {\r\n\t\t\tlet newFilesLength = newFiles.length;\r\n\t\t\tfor(let i = 0; i < newFilesLength; i++){\r\n\t\t\t\tthis.fileList.push( {file:newFiles[i], index:this.fileCount} );\r\n\t\t\t\tthis.fileCount++;\r\n\t\t\t}\r\n\t\t},\r\n\t\tlogFileList: function(){\r\n\t\t\tconsole.log(\"FILE LIST:\",this.fileList);\r\n\t\t},\r\n\t\tgetFileList: function(){\r\n\t\t\treturn this.fileList;\r\n\t\t}\r\n\t},\r\n}\r\n","// inspiration\r\n// https://jsfiddle.net/adamwathan/xcoefffj/\r\n//\r\n//\r\nimport AccordionGroup from '../../components/accordion/accordion-group';\r\nconst hexToRgb = hex =>\r\n hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\r\n ,(m, r, g, b) => '#' + r + r + g + g + b + b)\r\n .substring(1).match(/.{2}/g)\r\n .map(x => parseInt(x, 16))\r\n\r\nexport default {\r\n\tname: 'modal',\r\n\ttemplate: '#modal-template',\r\n\tcomponents: {\r\n\t\tAccordionGroup\r\n\t},\r\n\tprops: {\r\n\t\tname: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\ttitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tbody: {\r\n\t\t\ttype: String,\r\n\t\t\trequred: false\r\n\t\t},\r\n\t\tfooter: {\r\n\t\t\ttype: String,\r\n\t\t\trequred: false,\r\n\t\t\tdefault: null\r\n\t\t},\r\n\t\ttype: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 'modal'\r\n\t\t},\r\n\t\tsize: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 'normal'\r\n\t\t},\r\n\t\tacceptButton: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: null\r\n\t\t},\r\n\t\tcancelButton: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: null\r\n\t\t},\r\n\t\tcssClass: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\tbackdropColor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"#000000\"\r\n\t\t},\r\n\t\tbodyColor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"#ffffff\"\r\n\t\t}\r\n\t\t\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\t\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\tcss() {\r\n\t\t\treturn {\r\n\t\t\t\t[this.cssClass]: true,\r\n\t\t\t\t'modal--dialog': this.modalType === 'dialog',\r\n\t\t\t\t'modal--body-bottom-space': !this.hasFooter\r\n\r\n\t\t\t}\r\n\t\t},\r\n\t\tcolors() {\r\n\t\t\treturn `--modal-backdrop-color: rgba(${hexToRgb(this.backdropColor)}, 0.8); --modal-body-color: ${this.bodyColor};`;\r\n\t\t},\r\n\t\tstatus() {\r\n\t\t\treturn this.$store.state.modalStatus.status;\r\n\t\t},\r\n\t\tactiveName() {\r\n\t\t\treturn this.$store.state.modalStatus.name;\r\n\t\t},\r\n\t\tshowModal() {\r\n\t\t\tconst open = this.$store.state.modalStatus.name === this.name;\r\n\t\t\t// if a callback is binded we call it on open\r\n\t\t\tif(open) this.open();\r\n\t\t\treturn open;\r\n\t\t},\r\n\t\tmodalType() {\r\n\t\t\treturn this.acceptButton ? 'dialog' : 'modal';\r\n\t\t},\r\n\t\thasFooter() {\r\n\t\t\treturn this.$slots['footer'] || this.acceptButton || this.cancelButton;\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\topen() {\r\n\t\t\tthis.$emit('before-open');\r\n\t\t},\r\n\t\tclose() {\r\n\t\t\tthis.$emit('before-close'); \r\n\t\t\tthis.$store.dispatch('closeModal');\r\n\t\t},\r\n\t\tonAccept() {\r\n\t\t\tthis.close();\r\n\t\t\tthis.$emit('on-accept');\r\n\t\t},\r\n\t\tonCancel() {\r\n\t\t\tthis.close();\r\n\t\t\tthis.$emit('on-cancel');\r\n\t\t},\r\n\t\tafterEnter() {\r\n\t\t\tthis.$refs.closeButton.focus();\r\n\t\t},\r\n\t\tdialogAccept() {\r\n\t\t\tthis.$emit('before-close'); \r\n\t\t\tthis.$emit('dialog-accept'); \r\n\t\t\tthis.$store.dispatch('closeModal');\r\n\t\t}\r\n\t},\r\n};\r\n","export default {\r\n name: 'file-upload-field',\r\n data(){\r\n return {\r\n upload: \"\",\r\n }\r\n },\r\n computed: {\r\n fieldValue(){\r\n if (this.upload == \"\") {\r\n return this.uploadDefaultLabel\r\n } else {\r\n return this.upload.split(/[\\\\\\/]/).pop() //regex that finds and removes \"/\" and \"\\\" from string \r\n }\r\n },\r\n },\r\n methods:{\r\n addFile(e){\r\n this.upload = e.target.value\r\n this.$attrs.incrementfilecount()\r\n },\r\n removeFile(){\r\n this.$attrs.decrementfilecount(this.upload)\r\n this.upload = \"\"\r\n }\r\n }\r\n}\r\n\r\n","import FileUploadField from './file-upload-field'\r\n\r\nexport default {\r\n name: 'file-upload-container',\r\n data(){\r\n return {\r\n counter: 1,\r\n filesAdded: 0,\r\n maxCount: 10\r\n }\r\n },\r\n computed: {\r\n showAddMore(){\r\n return this.counter < this.maxCount ? true : false\r\n }\r\n },\r\n methods:{\r\n incrementCounter() {\r\n if (this.counter < this.maxCount) {\r\n this.counter++\r\n }\r\n },\r\n addFile(){\r\n const newFileCount = this.filesAdded+1\r\n this.filesAdded = newFileCount > this.maxCount ? this.maxCount : newFileCount\r\n },\r\n removeFile(value){\r\n const newCount = this.counter-1\r\n this.counter = newCount > 0 ? newCount : 0\r\n\r\n if(value){\r\n const newFileCount = this.filesAdded-1\r\n this.filesAdded = newFileCount < 0 ? 0 : newFileCount\r\n }\r\n }\r\n },\r\n components: {\r\n FileUploadField\r\n },\r\n}","import { TimelineMax } from \"gsap\";\r\nimport { mapActions } from \"vuex\";\r\nimport InputWithLabel from \"../../components/form-elements/templates/input-with-label\";\r\nimport FileUpload from \"../../components/file-upload/file-upload\";\r\nimport Modal from \"../../components/modal/modal\";\r\nimport AccordionGroup from \"../../components/accordion/accordion-group\";\r\nimport FileUploadContainer from \"../../components/file-upload-field/file-upload-container\";\r\n\r\nexport default {\r\n\tname: \"claim-flow\",\r\n\tcomponents: {\r\n\t\tInputWithLabel,\r\n\t\tFileUpload,\r\n\t\tModal,\r\n\t\tAccordionGroup,\r\n\t\tFileUploadContainer,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tclaimflowSubmitReady: false,\r\n\t\t\ttl: null, // COMMENT: GSAP TimelineMax instance\r\n\t\t\topenCloseTiming: 0.35,\r\n\r\n\t\t\tstepIndexActive: 0,\r\n\t\t\tstepIndexPrev: null, // COMMENT: Previous active index\r\n\t\t\tsteps: [\r\n\t\t\t\t// COMMENT: Predetermined static steps\r\n\t\t\t\t{\r\n\t\t\t\t\tindex: 0,\r\n\t\t\t\t\tisActive: true,\r\n\t\t\t\t\tref: \"step1\",\r\n\t\t\t\t\tcontentRef: \"step1-content\",\r\n\t\t\t\t\tisValidated: false,\r\n\t\t\t\t\thasError: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tindex: 1,\r\n\t\t\t\t\tisActive: false,\r\n\t\t\t\t\tref: \"step2\",\r\n\t\t\t\t\tcontentRef: \"step2-content\",\r\n\t\t\t\t\tisValidated: false,\r\n\t\t\t\t\thasError: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tindex: 2,\r\n\t\t\t\t\tisActive: false,\r\n\t\t\t\t\tref: \"step3\",\r\n\t\t\t\t\tcontentRef: \"step3-content\",\r\n\t\t\t\t\tisValidated: false,\r\n\t\t\t\t\thasError: false,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tindex: 3,\r\n\t\t\t\t\tisActive: false,\r\n\t\t\t\t\tref: \"step4\",\r\n\t\t\t\t\tcontentRef: \"step4-content\",\r\n\t\t\t\t\tisValidated: false,\r\n\t\t\t\t\thasError: false,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\r\n\t\t\t// COMMENT: Input vue-models below\r\n\t\t\tissueTypeRadioModel: \"\",\r\n\t\t\tproductList: [\r\n\t\t\t\t// COMMENT: Contains extra product item ID's (when more than one)\r\n\t\t\t\t{\r\n\t\t\t\t\tindex: 0,\r\n\t\t\t\t\tisInvalid: false,\r\n\t\t\t\t\tisRemovable: false,\r\n\t\t\t\t\tmodel: {\r\n\t\t\t\t\t\tid: \"\",\r\n\t\t\t\t\t\tname: \"\",\r\n\t\t\t\t\t\tquantity: \"\",\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\tproductListIndex: 0,\r\n\t\t\torderInput: {\r\n\t\t\t\tvalue: \"\",\r\n\t\t\t\tisInvalid: false,\r\n\t\t\t},\r\n\r\n\t\t\t// issueDescriptionInput // the issue description textarea\r\n\t\t\tclaimsReferenceInput: {\r\n\t\t\t\tvalue: \"\",\r\n\t\t\t\tisInvalid: false,\r\n\t\t\t},\r\n\r\n\t\t\t// issueDescriptionInput // the issue description textarea\r\n\t\t\tissueDescriptionValue: \"\",\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tissueDescriptionValue(newValue) {\r\n\t\t\t// COMMENT: Here we validate the issue description, and enabling the submit button when not empty\r\n\t\t\tthis.claimflowSubmitReady = newValue.length > 0;\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"openModal\", \"closeModal\"]),\r\n\t\tvalidateStep() {\r\n\t\t\tvar errors = 0;\r\n\r\n\t\t\tif (this.stepIndexActive === 0) {\r\n\t\t\t\t// COMMENT: Validate first step - radios\r\n\t\t\t\tconsole.log(\"validating step 0 - radios\");\r\n\r\n\t\t\t\tif (this.issueTypeRadioModel === \"\") {\r\n\t\t\t\t\terrors++;\r\n\t\t\t\t}\r\n\t\t\t} else if (this.stepIndexActive === 1) {\r\n\t\t\t\t// validate second step\r\n\t\t\t\t// COMMENT: Validate order ID and Product inputs\r\n\t\t\t\tif (this.orderInput.value) {\r\n\t\t\t\t\tthis.orderInput.isInvalid = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.orderInput.isInvalid = true;\r\n\t\t\t\t\terrors++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconsole.log(\"this.productList: \", this.productList[0]);\r\n\t\t\t\tconsole.log(\"this.productList: \", typeof this.productList[0]);\r\n\r\n\t\t\t\t// COMMENT/TODO: Find a way to validate the dynamically added products, from their v-models\r\n\t\t\t\tthis.productList.forEach((product) => {\r\n\t\t\t\t\tconsole.log(\"product: \", product);\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tproduct.model.id &&\r\n\t\t\t\t\t\tproduct.model.name &&\r\n\t\t\t\t\t\tproduct.model.quantity\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tif (!product.isInvalid) {\r\n\t\t\t\t\t\t\tproduct.isInvalid = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tproduct.isInvalid = true;\r\n\t\t\t\t\t\terrors++;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else if (this.stepIndexActive === 2) {\r\n\t\t\t\t// COMMENT: Validate added files, maybe just if any is attached\r\n\t\t\t\tconsole.log(\"validating step 2 - attached files\");\r\n\r\n\t\t\t\tconsole.log(\r\n\t\t\t\t\t\"this.$refs.fileUpload.fileList: \",\r\n\t\t\t\t\tthis.$refs.fileUpload.filesAdded\r\n\t\t\t\t);\r\n\r\n\t\t\t\t// COMMENT: TIGHT COUPLED with fileUpload component\r\n\t\t\t\tif (this.$refs.fileUpload.filesAdded === 0) {\r\n\t\t\t\t\terrors++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.steps[this.stepIndexActive].isValidated =\r\n\t\t\t\terrors > 0 ? false : true; // tmp\r\n\t\t\tthis.steps[this.stepIndexActive].hasError =\r\n\t\t\t\terrors > 0 ? true : false;\r\n\r\n\t\t\tconsole.log(\r\n\t\t\t\t\"this.steps[this.stepIndexActive].isValidated: \",\r\n\t\t\t\tthis.steps[this.stepIndexActive].isValidated\r\n\t\t\t);\r\n\r\n\t\t\tconsole.log(\"errors in validation count: \", errors);\r\n\r\n\t\t\treturn errors;\r\n\t\t},\r\n\r\n\t\tproductListAdd() {\r\n\t\t\tthis.productListIndex++; // Comment: Start by counting up, as the first is already printet\r\n\t\t\tthis.productList.push({\r\n\t\t\t\tindex: this.productListIndex,\r\n\t\t\t\tisInvalid: false,\r\n\t\t\t\tisRemovable: true,\r\n\t\t\t\tmodel: {\r\n\t\t\t\t\tid: \"\", // mapped to id-input\r\n\t\t\t\t\tname: \"\", // mapped to name-input\r\n\t\t\t\t\tquantity: \"\",\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t},\r\n\t\tproductListRemove(itemIndex) {\r\n\t\t\t// COMMENT: Importance here is, that the :key-index is the products own index, not the for-loop-index\r\n\t\t\tthis.productList.splice(itemIndex, 1);\r\n\t\t},\r\n\r\n\t\theadlineClick(e, headlineIndex) {\r\n\t\t\tif (\r\n\t\t\t\tthis.steps[headlineIndex].isValidated &&\r\n\t\t\t\tthis.stepIndexActive != headlineIndex\r\n\t\t\t) {\r\n\t\t\t\tthis.animateContent(this.stepIndexActive, headlineIndex);\r\n\t\t\t}\r\n\t\t},\r\n\t\tnextClick(e, nextIndex) {\r\n\t\t\tthis.validateStep();\r\n\r\n\t\t\tif (this.steps[this.stepIndexActive].isValidated) {\r\n\t\t\t\tthis.animateContent(this.stepIndexActive, nextIndex);\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimateContent(oldIndex, newIndex) {\r\n\t\t\tthis.tl = new TimelineMax();\r\n\r\n\t\t\tvar activeRef = this.$refs[this.steps[oldIndex].ref];\r\n\t\t\tvar activeContentRef = this.$refs[this.steps[oldIndex].contentRef];\r\n\r\n\t\t\tvar nextRef = this.$refs[this.steps[newIndex].ref];\r\n\t\t\tvar nextContentRef = this.$refs[this.steps[newIndex].contentRef];\r\n\r\n\t\t\tthis.tl.addLabel(\"start\");\r\n\r\n\t\t\t// COMMENT: Hide old active\r\n\t\t\tthis.tl.to(activeContentRef, this.openCloseTiming, {\r\n\t\t\t\theight: 0,\r\n\t\t\t\tclearProps: \"all\",\r\n\t\t\t\tonComplete: () => {\r\n\t\t\t\t\tif (activeRef.classList.contains(\"is-active\")) {\r\n\t\t\t\t\t\tactiveRef.classList.remove(\"is-active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\t// COMMENT: New step show\r\n\t\t\tif (!nextRef.classList.contains(\"is-active\")) {\r\n\t\t\t\tnextRef.classList.add(\"is-active\");\r\n\t\t\t}\r\n\t\t\tthis.tl.set(nextContentRef, { height: \"auto\" });\r\n\t\t\tthis.tl.from(\r\n\t\t\t\tnextContentRef,\r\n\t\t\t\tthis.openCloseTiming,\r\n\t\t\t\t{\r\n\t\t\t\t\theight: 0,\r\n\t\t\t\t\tclearProps: \"all\",\r\n\t\t\t\t\tonComplete: () => {\r\n\t\t\t\t\t\tif (activeRef.classList.contains(\"is-active\")) {\r\n\t\t\t\t\t\t\tactiveRef.classList.remove(\"is-active\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.tl.kill(); // garbage collection\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\t\"start\"\r\n\t\t\t);\r\n\r\n\t\t\t// this.tl.play('start');\r\n\r\n\t\t\tthis.stepIndexPrev = oldIndex;\r\n\t\t\tthis.stepIndexActive = newIndex;\r\n\t\t},\r\n\t\tsubmitClaimflow() {\r\n\t\t\tif (this.claimflowSubmitReady) {\r\n\t\t\t\t// TODO: Submit the form!!\r\n\t\t\t\tthis.claimflowSubmitReady = false;\r\n\t\t\t\tconsole.log(\"Submitting stuff here, or redirect...\");\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n","import { CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC } from '../../basics/js/store/static';\r\n\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'request-configuration',\r\n\tprops: {\r\n\t\tsubmitRequestUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tproductName: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t}\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tyourEnquiry: null,\r\n\t\t\tname: null,\r\n\t\t\temail: null,\r\n\t\t\tsubmissionComplete: false,\r\n\t\t\tselectedOptions: null,\r\n\t\t\tisSubmittingForm: false,\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tthis.$parent.$on('update-selected-options', this.handleSelectedOptions);\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tCONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.action,\r\n\t\t]),\t\r\n\t\tsuccessHandler() {\r\n\t\t\tthis.submissionComplete = true;\r\n\r\n\t\t\tif (this.isSubmittingForm) return;\r\n\r\n\t\t\tthis.isSubmittingForm = true;\r\n\r\n\t\t\tconst url = this.submitRequestUrl;\r\n\r\n\t\t\tconst body = {\r\n\t\t\t\t\"productName\": this.productName,\r\n\t\t\t\t\"name\": this.name,\r\n\t\t\t\t\"email\": this.email,\r\n\t\t\t\t\"text\": this.yourEnquiry,\r\n\t\t\t\t\"selectedOptions\": this.selectedOptions\r\n\t\t\t};\r\n\r\n\t\t\tthis[CONFIGURATOR_REQUEST_CONFIGURATION_ASYNC.action]({\r\n\t\t\t\turl,\r\n\t\t\t\tbody\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.isSubmittingForm = false;\r\n\t\t},\r\n\t\tresetForm() {\r\n\t\t\tthis.submissionComplete = false;\r\n\t\t},\r\n\t\thandleSelectedOptions(selectedOptions) {\r\n\t\t\tthis.selectedOptions = selectedOptions;\r\n\t\t}\r\n\t}\r\n};\r\n","import BuySection from \"../../components/buy-section/buy-section\";\r\nimport InputWithLabel from \"../../components/form-elements/templates/input-with-label\";\r\nimport copyTextMixin from \"../../components/vue-mixins/copyText\";\r\nimport RequestConfiguration from \"../../components/configurator/request-configuration\";\r\n\r\nimport { CONFIGURATOR_OPTIONS_ASYNC } from \"../../basics/js/store/static\";\r\nimport { CONFIGURATOR_INITIAL_OPTIONS_ASYNC } from \"../../basics/js/store/static\";\r\nimport { CONFIGURATOR_CYLINDO_SKU_ASYNC } from \"../../basics/js/store/static\";\r\n\r\n// import { mapState } from 'vuex';\r\nimport { mapActions, mapState } from \"vuex\";\r\n\r\nexport default {\r\n\tname: \"configurator\",\r\n\tcomponents: {\r\n\t\tBuySection,\r\n\t\tInputWithLabel,\r\n\t\tRequestConfiguration,\r\n\t},\r\n\tprops: {\r\n\t\tproductCode: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tvariantCode: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tbaseUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tformattedPrice: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tstartFrame: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 4,\r\n\t\t},\r\n\t},\r\n\tmixins: [copyTextMixin],\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\t// ...mapState([\r\n\t\t\t// \ttypes.GET_OPTION_GROUP_ASYNC.stateKey\r\n\t\t\t// ]),\r\n\t\t\tisLoaded: false,\r\n\t\t\tquantity: 1,\r\n\t\t\tsku: this.variantCode, // COMMENT: Gets populated click-handler, through actions and mutations..\r\n\t\t\tcylindoSku: null, // COMMENT: Gets populated click-handler, through actions and mutations..\r\n\t\t\toptionGroups: null,\r\n\t\t\tactiveLevel: \"level1\", // COMMENT: Either 'level1' or 'level2'\r\n\t\t\tactiveSlide: null,\r\n\t\t\tactiveSlideId: null,\r\n\t\t\tactiveGroupType: null,\r\n\t\t\tinitialOptionGroupItem: null,\r\n\t\t\toptionGroupIsSaving: false,\r\n\t\t\tselectedOptions: [],\r\n\t\t\tselectedOption: null,\r\n\t\t\tselectedOptionGroupId: null,\r\n\t\t\toptionGroupConflictActive: false,\r\n\t\t\tgeneralConflict: false,\r\n\t\t\t// COMMENT: Cylindo options\r\n\t\t\tcylindoAccountId: this.$store.state.cylindoAccountId,\r\n\t\t\tcylindoSettings: {},\r\n\t\t\tcylindoInstance: null,\r\n\t\t\tcylindoIsLoading: true,\r\n\t\t\tcylindoInitDone: false,\r\n\t\t\tcylindoSkuChanged: false,\r\n\t\t\tcylindoGuideActive: true,\r\n\t\t\tcylindoErrorHandlerAdded: false,\r\n\r\n\t\t\tcylindoZoomMode: false,\r\n\t\t\tcylindoPanMode: false,\r\n\r\n\t\t\tproductInfo: {}, // COMMENT: Gets populated from json..\r\n\t\t\tcountry: this.$store.state.country,\r\n\t\t\tlanguage: this.$store.state.language,\r\n\r\n\t\t\t// COMMENT: Upholstery settings\r\n\t\t\tupholsteryPreviewStyle: {},\r\n\t\t\tupholsteryPreviewActive: false,\r\n\t\t\tupholsteryPreviewForceInactive: false,\r\n\t\t\tupholsteryPreviewActiveIndex: -1,\r\n\t\t\tupholsteryPreviewTimeout: null,\r\n\t\t\tupholsterySelection: null,\r\n\t\t\tupholsterySelectionInfo: {},\r\n\t\t\tupholsterySearchModel: {\r\n\t\t\t\tsearch: \"\",\r\n\t\t\t\ttype: \"\", // COMMENT: Now supplied by the server response\r\n\t\t\t\tcolor: \"\", // COMMENT: Now supplied by the server response\r\n\t\t\t\tname: \"\", // COMMENT: Now supplied by the server response\r\n\t\t\t\ttypeId: \"-1\",\r\n\t\t\t\tcolorId: \"-1\",\r\n\t\t\t\tnameId: \"-1\",\r\n\t\t\t},\r\n\t\t\theaderProductPreviewActive: false, // COMMENT: Where the product preview is shown in the slideGroup header\r\n\t\t\theaderProductPreviewUrl: \"\",\r\n\r\n\t\t\tupholsteryDropDownValues: null,\r\n\t\t\tnameSelected: \"-1\",\r\n\t\t\tupholsteryNameFilter: null,\r\n\t\t\tupholsteryOptions: null,\r\n\t\t\tshowMobileOptions: false, // COMMENT: Force open options on mobile\r\n\t\t\tmobileShowProductAfterSave: false,\r\n\t\t\tprice: this.formattedPrice.toString(),\r\n\t\t\tvariantUrl: \"javascript:;\",\r\n\t\t\tdispatchInfo: \"\",\r\n\t\t\tcolorMessageShown: false,\r\n\t\t\tcolorMessageTimeout: 0,\r\n\t\t\tupholsteryInfoExpanded: false,\r\n\t\t\tupholsteryStickyHeight: 41,\r\n\t\t\tupholsteryStickyControlsHeight: 41,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisActive: (state) => state.configurator.configuratorOpen,\r\n\t\t}),\r\n\t\tconfiguratorData() {\r\n\t\t\treturn this.$store.state.configurator[CONFIGURATOR_OPTIONS_ASYNC.stateKey];\r\n\t\t},\r\n\t\tvariantCylindoSku() {\r\n\t\t\treturn this.$store.state.configurator[CONFIGURATOR_CYLINDO_SKU_ASYNC.stateKey];\r\n\t\t},\r\n\t\tfilteredUpholsteryNames() {\r\n\t\t\treturn this.upholsteryDropDownValues.name.options.map((x) => ({\r\n\t\t\t\titem: x,\r\n\t\t\t\tdisabled:\r\n\t\t\t\t\t!this.upholsteryNameFilter || this.upholsteryNameFilter === \"-1\"\r\n\t\t\t\t\t\t? false\r\n\t\t\t\t\t\t: x.group !== this.upholsteryNameFilter,\r\n\t\t\t}));\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tisActive() {\r\n\t\t\tif (this.$store.state.configurator.configuratorOpen && !this.isLoaded) {\r\n\t\t\t\tthis.loadInitialOptions();\r\n\t\t\t\t// this.colorMessageTimeout = setTimeout(\r\n\t\t\t\t// \tfunction () {\r\n\t\t\t\t// \t\tthis.openColorMessage();\r\n\t\t\t\t// \t}.bind(this),\r\n\t\t\t\t// \t3000\r\n\t\t\t\t// );\r\n\t\t\t\tthis.$el.focus(); // In order to make \"esc\" keydown work\r\n\t\t\t}\r\n\t\t\tif (!this.$store.state.configurator.configuratorOpen) {\r\n\t\t\t\t// COMMENT: When the configurator is closing\r\n\r\n\t\t\t\tif (this.activeLevel === \"level2\") {\r\n\t\t\t\t\t// COMMENT: If level2 is open, force it closed, to be ready for next \"visit\"\r\n\t\t\t\t\t// (deprecated comment, for new spec: same logic as when cancelling option-group with option-header back-button)\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.hideAnySlide();\r\n\t\t\t\t\t}, 550); // COMMENT: timing of the open/close animation css-prop\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tupholsteryPreviewUrl() {\r\n\t\t\t// COMMENT: Observer trigger\r\n\t\t},\r\n\t\toptionGroups() {\r\n\t\t\t// COMMENT: Observer trigger\r\n\t\t},\r\n\t\tproductInfo() {\r\n\t\t\tif (!this.productInfo || !this.productInfo.cylindoSku) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.cylindoInitDone && !this.cylindoSkuChanged) {\r\n\t\t\t\tthis.updateCylindo();\r\n\t\t\t} else {\r\n\t\t\t\tthis.initCylindo();\r\n\t\t\t}\r\n\t\t},\r\n\t\tconfiguratorData() {\r\n\t\t\tthis.optionGroups = this.configuratorData.optionGroups;\r\n\t\t\tthis.upholsteryOption = this.configuratorData.optionGroups;\r\n\t\t\tthis.productInfo = this.configuratorData.productInfo;\r\n\t\t\tthis.sku = this.configuratorData.productInfo.sku;\r\n\t\t\tif (this.sku) {\r\n\t\t\t\tthis.cylindoFeatures = this.configuratorData.productInfo.features;\r\n\t\t\t\tif (this.configuratorData.productInfo.cylindoSku) {\r\n\t\t\t\t\tif (this.cylindoSku != this.configuratorData.productInfo.cylindoSku) {\r\n\t\t\t\t\t\tthis.cylindoSkuChanged = true;\r\n\t\t\t\t\t\tthis.cylindoSku = this.configuratorData.productInfo.cylindoSku;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.price = this.configuratorData.productInfo.formattedPrice;\r\n\t\t\tthis.isLoaded = true;\r\n\t\t\tthis.variantUrl = this.configuratorData.productInfo.variantUrl;\r\n\t\t\tthis.upholsteryDropDownValues = this.getUpholsteryOptions(\"dropdownContents\");\r\n\t\t\tthis.upholsteryOptions = this.getUpholsteryOptions(\"options\");\r\n\r\n\t\t\tthis.setInitiallySelectedOptions();\r\n\t\t\tthis.apiResponseSuccess();\r\n\t\t\tthis.dispatchInfo = this.configuratorData.productInfo.dispatchInfo;\r\n\r\n\t\t\tconst selectedOptionValues = this.optionGroups\r\n\t\t\t\t.filter(function (optionGroup) {\r\n\t\t\t\t\treturn optionGroup.initialSelectedOption ? true : false;\r\n\t\t\t\t})\r\n\t\t\t\t.map((item) => {\r\n\t\t\t\t\tconst container = {};\r\n\r\n\t\t\t\t\tcontainer.label = item.label;\r\n\t\t\t\t\tcontainer.value = item.initialSelectedOption.name;\r\n\r\n\t\t\t\t\treturn container;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\tthis.$emit(\"update-selected-options\", selectedOptionValues);\r\n\t\t},\r\n\t\tvariantCylindoSku() {\r\n\t\t\tif (\r\n\t\t\t\ttypeof this.variantCylindoSku != \"undefined\" &&\r\n\t\t\t\tthis.variantCylindoSku.cylindoSku &&\r\n\t\t\t\tthis.cylindoSku != this.variantCylindoSku.cylindoSku\r\n\t\t\t) {\r\n\t\t\t\tthis.cylindoSku = this.variantCylindoSku.cylindoSku;\r\n\t\t\t\tthis.cylindoSkuChanged = true;\r\n\t\t\t\tthis.initCylindo();\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\tif (urlParams.get('showproduct')) this.showMobileOptions = urlParams.get('showproduct') === 'true' ? false : true;\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openConfigurator\",\r\n\t\t\t\"closeConfigurator\",\r\n\t\t\tCONFIGURATOR_OPTIONS_ASYNC.action,\r\n\t\t\tCONFIGURATOR_INITIAL_OPTIONS_ASYNC.action,\r\n\t\t\tCONFIGURATOR_CYLINDO_SKU_ASYNC.action,\r\n\t\t]),\r\n\t\tloadOptions() {\r\n\t\t\tthis[CONFIGURATOR_OPTIONS_ASYNC.action]({\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tsku: this.sku,\r\n\t\t\t\t\tproductCode: this.productCode,\r\n\t\t\t\t\tselectedOptions:\r\n\t\t\t\t\t\tthis.selectedOptions != null\r\n\t\t\t\t\t\t\t? this.selectedOptions\r\n\t\t\t\t\t\t\t\t\t.map(function (item) {\r\n\t\t\t\t\t\t\t\t\t\treturn [item.groupId, item.id].join(\"¤\");\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t.join(\";\")\r\n\t\t\t\t\t\t\t: \"\",\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t},\r\n\t\tloadInitialOptions() {\r\n\t\t\tthis[CONFIGURATOR_INITIAL_OPTIONS_ASYNC.action]({\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tsku: this.sku,\r\n\t\t\t\t\tproductCode: this.productCode,\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t},\r\n\t\tloadCylindoSku(selectedOptionGroupId, selectedOptionId) {\r\n\t\t\tthis[CONFIGURATOR_CYLINDO_SKU_ASYNC.action]({\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tsku: this.sku,\r\n\t\t\t\t\tproductCode: this.productCode,\r\n\t\t\t\t\tselectedOptions:\r\n\t\t\t\t\t\tthis.selectedOptions != null\r\n\t\t\t\t\t\t\t? this.selectedOptions\r\n\t\t\t\t\t\t\t\t\t.map(function (item) {\r\n\t\t\t\t\t\t\t\t\t\tif (selectedOptionGroupId && selectedOptionId && item.groupId === selectedOptionGroupId) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn [selectedOptionGroupId, selectedOptionId].join(\"¤\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\treturn [item.groupId, item.id].join(\"¤\");\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t.join(\";\")\r\n\t\t\t\t\t\t\t: \"\",\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t},\r\n\t\tsetInitiallySelectedOptions() {\r\n\t\t\tconst initialSelectedOptions = [];\r\n\t\t\tthis.optionGroups.forEach((group) => {\r\n\t\t\t\tif (group.initialSelectedOption) {\r\n\t\t\t\t\tinitialSelectedOptions.push({\r\n\t\t\t\t\t\tgroupId: group.id,\r\n\t\t\t\t\t\tid: group.initialSelectedOption.id,\r\n\t\t\t\t\t\tvalue: group.initialSelectedOption.id,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.selectedOptions = initialSelectedOptions;\r\n\t\t},\r\n\t\tupdateSelectedOptions(newSelectedOption) {\r\n\t\t\t// FILTERING FIX: \"quick fix\" for Fiber family products\r\n\t\t\tvar combiIds = newSelectedOption.id.split(\"-\");\r\n\t\t\tvar doFilter = combiIds.length > 1;\r\n\r\n\t\t\tthis.selectedOptions.forEach((group) => {\r\n\t\t\t\tif (group.groupId === newSelectedOption.groupId) {\r\n\t\t\t\t\tgroup.value = newSelectedOption.value;\r\n\t\t\t\t\tgroup.id = newSelectedOption.id;\r\n\r\n\t\t\t\t\tif (doFilter && group.groupId == \"seat-color-material-id\"){\r\n\t\t\t\t\t\tgroup.id = combiIds[0];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (doFilter){\r\n\t\t\t\tthis.selectedOptions.forEach((group) =>{\r\n\t\t\t\t\tif (group.groupId == \"base-color-material-id\"){\r\n\t\t\t\t\t\tgroup.id = combiIds[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.optionGroups.forEach((group) => {\r\n\t\t\t\tif (group.id === newSelectedOption.groupId) {\r\n\t\t\t\t\tgroup.initialSelectedOption.id = newSelectedOption.id;\r\n\t\t\t\t\tgroup.initialSelectedOption.value = newSelectedOption.value;\r\n\t\t\t\t\tgroup.initialSelectedOption.name = newSelectedOption.name;\r\n\r\n\t\t\t\t\tif (doFilter && group.id == \"seat-color-material-id\"){\r\n\t\t\t\t\t\tgroup.initialSelectedOption.id = combiIds[0];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (doFilter){\r\n\t\t\t\tthis.optionGroups.forEach((group) =>{\r\n\t\t\t\t\tif (group.id == \"base-color-material-id\"){\r\n\t\t\t\t\t\tgroup.initialSelectedOption.id = combiIds[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tmakeFeaturesTuples(featureData) {\r\n\t\t\tconst featureKeys = Object.keys(featureData);\r\n\t\t\tconst featuresTuples = [];\r\n\r\n\t\t\tfeatureKeys.forEach((key) => {\r\n\t\t\t\tconst value = featureData[key];\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tfeaturesTuples.push(key);\r\n\t\t\t\t\tfeaturesTuples.push(value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn featuresTuples;\r\n\t\t},\r\n\t\tgetUpholsteryOptions(key) {\r\n\t\t\tconst optionGroup = this.optionGroups.find(({ id }) => id === \"upholsteryId\");\r\n\r\n\t\t\treturn optionGroup ? optionGroup[key] : [];\r\n\t\t},\r\n\t\toptionClick(e, optionGroupType, optionGroupId, option = null) {\r\n\t\t\tthis.setUpholsteryStickyHeight();\t\t\t\r\n\t\t\t// COMMENT: Present on all radios inputs\r\n\t\t\tif (optionGroupType === \"upholstery\") {\r\n\t\t\t\tconst optionItemId = option.id;\r\n\t\t\t\tthis.setActiveUpholsteryItem(optionItemId, optionGroupId);\r\n\t\t\t}\r\n\r\n\t\t\tif (optionGroupId === \"seat-finish-id\" && option != null && option.value === \"No Upholstery\") {\r\n\t\t\t\tthis.cylindoFeatures[\"TEXTILE\"] = \"\";\r\n\t\t\t\tthis.cylindoFeatures[\"LEATHER\"] = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif(optionGroupId === \"seat-finish-id\" && option != null && option.value === \"Full Upholstery\"){\t\t\t\t\r\n\t\t\t\tthis.cylindoFeatures[\"SEAT\"] = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.selectedOption = option;\r\n\t\t\tthis.selectedOptionGroupId = optionGroupId;\r\n\t\t\tconst boolConflict = this.selectedOption.conflicting;\r\n\t\t\tconst isConflicting = boolConflict === \"true\" ? true : false;\r\n\r\n\t\t\tif (isConflicting) {\r\n\t\t\t\tthis.optionGroupConflictActive = true;\r\n\t\t\t\tthis.SetGeneralConflict(true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.optionGroupConflictActive = false;\r\n\t\t\t\tthis.SetGeneralConflict(false);\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\toption !== null &&\r\n\t\t\t\toption.cylindoProductData !== null &&\r\n\t\t\t\ttypeof option.cylindoProductData != \"undefined\" &&\r\n\t\t\t\toption.cylindoProductData.feature &&\r\n\t\t\t\toption.cylindoProductData.value\r\n\t\t\t) {\r\n\t\t\t\t// FILTERING FIX: Set feature of both seat and base option for Fiber family\r\n\t\t\t\tvar combiIds = option.id.split(\"-\");\r\n\t\t\t\tvar doFilter = combiIds.length > 1;\r\n\t\t\t\tif (doFilter){\r\n\t\t\t\t\tvar features = option.cylindoProductData.feature.split(\"<-/-/->\");\r\n\t\t\t\t\tvar values = option.cylindoProductData.value.split(\"<-/-/->\");\r\n\t\t\t\t\tthis.cylindoFeatures[features[0]] = values[0];\r\n\t\t\t\t\tthis.cylindoFeatures[features[1]] = values[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// COMMENT: Set feature of the option\r\n\t\t\t\t\tthis.cylindoFeatures[option.cylindoProductData.feature] = option.cylindoProductData.value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Ensure that leather and textile are not send at the same time to cylindo\r\n\t\t\t\tif (option.cylindoProductData.feature == \"LEATHER\") {\r\n\t\t\t\t\tthis.cylindoFeatures[\"TEXTILE\"] = \"\";\r\n\t\t\t\t} else if (option.cylindoProductData.feature == \"TEXTILE\") {\r\n\t\t\t\t\tthis.cylindoFeatures[\"LEATHER\"] = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// COMMENT: If the cylindo SKU is changes as a result of an option, the cylindo control needs to be reinitialized\r\n\t\t\t\tif (option.cylindoProductData.cylindoSku && this.cylindoSku != option.cylindoProductData.cylindoSku) {\r\n\t\t\t\t\tthis.cylindoSku = option.cylindoProductData.cylindoSku;\r\n\t\t\t\t\tthis.initCylindo();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.updateCylindo();\r\n\t\t\t\t\tif (!this.productInfo.isModularVariant) {\r\n\t\t\t\t\t\tthis.loadCylindoSku(optionGroupId, option.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.upholsteryPreviewActive = false;\r\n\t\t\t\tthis.upholsteryPreviewForceInactive = true;\r\n\t\t\t} else if (!this.productInfo.isModularVariant) {\r\n\t\t\t\tthis.loadCylindoSku(optionGroupId, option.id);\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetActiveUpholsteryItem(optionItemId, optionGroupId) {\r\n\t\t\t// COMMENT: Find group and the the item\r\n\t\t\tconst optionGroup = this.optionGroups.filter((group) => group.id === optionGroupId)[0];\r\n\r\n\t\t\tconst item = optionGroup.options.filter((item) => item.id === optionItemId)[0];\r\n\r\n\t\t\t// COMMENT: Set groups initial selected option to found item\r\n\t\t\tthis.upholsterySelectionInfo = item;\r\n\t\t\tthis.upholsterySelection = true;\r\n\r\n\t\t\tthis.setUpholsteryStickyHeight();\r\n\t\t},\r\n\t\toptionGroupSave() {\r\n\t\t\tthis.optionGroupIsSaving = true; // COMMENT: Sent to toggleSlide/hideSlide\r\n\r\n\t\t\tif (this.selectedOption == undefined || this.selectedOption == this.initialOptionGroupItem) {\r\n\t\t\t\tthis.hideSlide();\r\n\t\t\t} else {\r\n\t\t\t\tconst selectedItemInfo = {\r\n\t\t\t\t\tvalue: this.selectedOption.value,\r\n\t\t\t\t\tid: this.selectedOption.id,\r\n\t\t\t\t\tgroupId: this.selectedOptionGroupId,\r\n\t\t\t\t\tname: this.selectedOption.name,\r\n\t\t\t\t};\r\n\t\t\t\tthis.updateSelectedOptions(selectedItemInfo);\r\n\t\t\t\tif (this.productInfo.isModularVariant) {\r\n\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\tproductInfo: {\r\n\t\t\t\t\t\t\tisModularVariant: this.productInfo.isModularVariant,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\toptionGroups: this.configuratorData.optionGroups,\r\n\t\t\t\t\t};\r\n\t\t\t\t\tthis.$store.state.configurator[CONFIGURATOR_OPTIONS_ASYNC.stateKey] = data;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.loadOptions();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tapiResponseSuccess() {\r\n\t\t\t// COMMENT: Below are functions to be called after server roundtrip\r\n\t\t\tthis.updateBuySectionAfterFetch();\r\n\t\t\t\r\n\t\r\n\t\t\tif (this.isMobile && this.mobileShowProductAfterSave) {\r\n\t\t\t\t// COMMENT: Close options and change text\r\n\t\t\t\t// If mobile options should hide and main product image should be shown after save, set showMobileOptions to false\r\n\t\t\t\tthis.showMobileOptions = false;\r\n\t\t\t\tthis.mobileShowProductAfterSave = false;\r\n\t\t\t}\r\n\t\t\tthis.hideAnySlide();\r\n\t\t},\r\n\t\tupdateUpholsteryOptions(searchModel) {\r\n\t\t\tvar upholsteryOptions = this.getUpholsteryOptions(\"options\");\r\n\r\n\t\t\tif (searchModel.search !== \"\") {\r\n\t\t\t\tupholsteryOptions = upholsteryOptions.filter(\r\n\t\t\t\t\t(x) => x.name.toLowerCase().indexOf(searchModel.search.toLowerCase()) !== -1\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (searchModel.colorId !== \"-1\") {\r\n\t\t\t\tupholsteryOptions = upholsteryOptions.filter((x) => x.colorId === searchModel.colorId);\r\n\t\t\t}\r\n\t\t\tif (searchModel.typeId !== \"-1\") {\r\n\t\t\t\tupholsteryOptions = upholsteryOptions.filter((x) => x.typeId === searchModel.typeId);\r\n\t\t\t}\r\n\t\t\tif (searchModel.nameId !== \"-1\") {\r\n\t\t\t\tupholsteryOptions = upholsteryOptions.filter((x) => x.nameId === searchModel.nameId);\r\n\t\t\t}\r\n\t\t\tthis.upholsteryOptions = upholsteryOptions;\r\n\t\t},\r\n\t\tupholsteryTypeFiltering(e) {\r\n\t\t\tthis.upholsterySearchModel.typeId = e.target.value;\r\n\r\n\t\t\tthis.upholsteryNameFilter = e.target.value;\r\n\r\n\t\t\tthis.nameSelected = \"-1\";\r\n\t\t\tthis.upholsterySearchModel.nameId = \"-1\";\r\n\r\n\t\t\tthis.updateUpholsteryOptions(this.upholsterySearchModel);\r\n\t\t},\r\n\t\tupholsteryNameFiltering(e) {\r\n\t\t\tthis.upholsterySearchModel.nameId = e.target.value;\r\n\t\t\tthis.updateUpholsteryOptions(this.upholsterySearchModel);\r\n\t\t},\r\n\t\tupholsteryColorFiltering(e) {\r\n\t\t\tthis.upholsterySearchModel.colorId = e.target.value;\r\n\t\t\tthis.updateUpholsteryOptions(this.upholsterySearchModel);\r\n\t\t},\r\n\t\tupholsterySearch(e) {\r\n\t\t\tthis.updateUpholsteryOptions(this.upholsterySearchModel);\r\n\t\t\te.preventDefault();\r\n\t\t},\r\n\t\tupdateBuySectionAfterFetch() {\r\n\t\t\t// If one or more of the currently selected options has resulted in a conflict, the buy button is disabled\r\n\t\t\tvar conflict = false;\r\n\t\t\tthis.optionGroups.forEach((group) => {\r\n\t\t\t\tif (group.hasConflict) {\r\n\t\t\t\t\tconflict = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.SetGeneralConflict(conflict);\r\n\t\t},\r\n\t\tSetGeneralConflict(conflict) {\r\n\t\t\t// TODO - Show a contact form for the user instead of a conflict text\r\n\t\t\tthis.generalConflict = conflict;\r\n\r\n\t\t\tif (this.sku) {\r\n\t\t\t\tthis.$emit(\"update-buy-button-disabled\", false);\r\n\t\t\t} else {\r\n\t\t\t\tthis.$emit(\"update-buy-button-disabled\", true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tmobileSaveAndShowProduct() {\r\n\t\t\tthis.mobileShowProductAfterSave = true; // COMMENT: Force show product after save on mobile\r\n\t\t\tthis.optionGroupSave();\r\n\t\t},\r\n\t\tupdateCylindo() {\r\n\t\t\tconst featuresTuples = this.makeFeaturesTuples(this.cylindoFeatures);\r\n\t\t\tif (this.cylindoInstance) {\r\n\t\t\t\tthis.cylindoInstance.setFeatures(featuresTuples);\r\n\t\t\t}\r\n\t\t\tthis.fetchHeaderProductPreview();\r\n\t\t},\r\n\t\tfetchHeaderProductPreview() {\r\n\t\t\t// COMMENT: Only shown on mobile.. Styles only apply to mobile, there's no desktop styling..\r\n\t\t\tif (this.isMobile && this.cylindoInstance) {\r\n\t\t\t\t// COMMENT: Preview url can only be set after the cylindo instance is updated!!\r\n\t\t\t\tconst isHttps = window.location.protocol.indexOf(\"https\") > -1 ? true : false;\r\n\t\t\t\tthis.cylindoInstance.getCurrentFrameUrl(\r\n\t\t\t\t\t80,\r\n\t\t\t\t\t(url) => {\r\n\t\t\t\t\t\t// COMMENT: Along side url, and error message can be returned from the Cylindo service \"(url, errorMsg)\"\r\n\t\t\t\t\t\tthis.setHeaderProductPreview(url);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tisHttps\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetHeaderProductPreview(url) {\r\n\t\t\t// COMMENT: Callback function for fetchHeaderProductPreview > getCurrentFrameUrl(cylindo-callback)\r\n\t\t\tif (url !== \"\") {\r\n\t\t\t\tthis.headerProductPreviewActive = true;\r\n\t\t\t\tthis.headerProductPreviewUrl = url;\r\n\t\t\t} else {\r\n\t\t\t\t// COMMENT: In case of an error hide the image.. Could maybe be doing something else..\r\n\t\t\t\tthis.headerProductPreviewActive = false;\r\n\t\t\t\tthis.headerProductPreviewUrl = \"\";\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitCylindo() {\r\n\t\t\tconst featuresTuples = this.makeFeaturesTuples(this.cylindoFeatures);\r\n\r\n\t\t\t// COMMENT: The opts object should hold the start properties of the 360 HD Viewer\r\n\t\t\tvar opts = {\r\n\t\t\t\tdebug: false,\r\n\t\t\t\tcontainerID: \"cylindo-container\",\r\n\t\t\t\taccountID: this.cylindoAccountId,\r\n\t\t\t\tSKU: this.cylindoSku,\r\n\t\t\t\tfeatures: featuresTuples,\r\n\t\t\t\tformat: \"jpg\",\r\n\t\t\t\tcountry: this.country,\r\n\t\t\t\tlanguage: this.language,\r\n\t\t\t\tthumbs: false,\r\n\t\t\t\tfullscreen: false,\r\n\t\t\t\tstartFrame: this.startFrame,\r\n\t\t\t\tbackgroundColor: \"ffffff\", // COMMENT: CANNOT BE DEFINED WITH A \"#\"\r\n\t\t\t\tsize: 1024, // Not working\r\n\t\t\t\tprogressBar: false,\r\n\t\t\t\tzoom: true,\r\n\t\t\t\ttitle: \"\",\r\n\t\t\t\tcustomZoomContainer: \"cylindo-zoom\",\r\n\t\t\t\tARDesktop: true,\r\n\t\t\t\tARQuickLook: true,\r\n\t\t\t\tQRCodeTitleTxt: \"View in AR\",\r\n\t\t\t\tQRCodeTxt: \"Scan the QR code with your mobile device to view the product in your room.\",\r\n\t\t\t\tARLoadingTxt: \"Loading\",\r\n\t\t\t\tARNotAvailableTxt: \"Not available\",\r\n\t\t\t\tARBackToViewTxt: \"\",\r\n\t\t\t\tARBtnTxt: \"View in AR\"\r\n\t\t\t};\r\n\r\n\t\t\t// COMMENT: Make sure the cylindo framework has been \"installed\"\r\n\t\t\tif (window.cylindo) {\r\n\t\t\t\t// do not instantiate the viewer until the framework reports ready.\r\n\t\t\t\twindow.cylindo.on(\"ready\", () => {\t\r\n\t\t\t\t\t// COMMENT: Create the cylindo-instance\r\n\t\t\t\t\tthis.cylindoInstance = window.cylindo.viewer.create(opts);\r\n\t\t\t\t\tthis.cylindoIsLoading = false;\r\n\t\t\t\t\tthis.cylindoInitDone = true;\r\n\t\t\t\t\tthis.addCylindoEvents();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.cylindoSkuChanged = false;\r\n\t\t},\r\n\t\taddCylindoEvents() {\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.THREESIXTY_COMPLETE, () => {\r\n\t\t\t\tthis.fetchHeaderProductPreview();\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.SPIN_BEGIN, () => {\r\n\t\t\t\tthis.cylindoGuideActive = false;\r\n\t\t\t\tthis.cylindoPanMode = true;\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.SPIN_END, () => {\r\n\t\t\t\tthis.cylindoGuideActive = true;\r\n\t\t\t\tthis.cylindoPanMode = false;\r\n\t\t\t});\r\n\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.ZOOM_ENTER, () => {\r\n\t\t\t\tthis.cylindoGuideActive = false;\r\n\t\t\t\tthis.cylindoZoomMode = true;\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.ZOOM_EXIT, () => {\r\n\t\t\t\tthis.cylindoGuideActive = true;\r\n\t\t\t\tthis.cylindoZoomMode = false;\r\n\t\t\t});\r\n\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.VIEWER_READY, () => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (!this.cylindoErrorHandlerAdded) {\r\n\t\t\t\t\t\tvar ct = document.querySelector(\".cylindo-tooltip\");\r\n\t\t\t\t\t\tct.addEventListener(\"mousedown\", function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tct.addEventListener(\"touchstart\", function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.cylindoErrorHandlerAdded = true;\r\n\r\n\t\t\t\t\t\t//Auto rotate product on load\r\n\t\t\t\t\t\tthis.cylindoInstance.rotate( 360, 1600 );\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tconsole.warn(\"COULDN'T FIND TOOLTIP, NO LISTENER\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\topenCloseMobileOptions() {\r\n\t\t\tthis.showMobileOptions = !this.showMobileOptions;\r\n\t\t},\r\n\t\tshowAuxilliarySlide(e, toggleId) {\r\n\t\t\t// COMMENT: Used in markup\r\n\t\t\tthis.activeLevel = \"level2\";\r\n\t\t\tthis.activeSlideId = toggleId;\r\n\t\t\tthis.activeSlide = this.$refs[\"slideLevel2-\" + toggleId][0];\r\n\r\n\t\t\tthis.setUpholsteryStickyHeight();\r\n\t\t},\r\n\t\tshowContact(e, toggleId) {\r\n\t\t\t// COMMENT: Used in markup\r\n\t\t\tthis.activeLevel = \"level2\";\r\n\t\t\tthis.activeSlideId = toggleId;\r\n\t\t\tthis.activeSlide = this.$refs[\"slideLevel2-\" + toggleId][0];\r\n\t\t},\r\n\t\thideAuxilliarySlide() {\r\n\t\t\tthis.activeLevel = \"level1\";\r\n\t\t\tthis.activeSlideId = null;\r\n\t\t},\r\n\t\tshowSlide(e, toggleId, groupType) {\r\n\t\t\tthis.setUpholsteryStickyHeight();\r\n\r\n\t\t\t// COMMENT: Used in markup\r\n\t\t\tthis.activeLevel = \"level2\";\r\n\t\t\tthis.activeSlideId = toggleId;\r\n\t\t\tthis.activeSlide = this.$refs[\"slideLevel2-\" + toggleId][0];\r\n\r\n\t\t\t// COMMENT: To be able to reset on \"cancel\"/back-arrow (when selected option is the save as the initalSelected, then do nothing)\r\n\t\t\tthis.initialOptionGroupItem = this.activeSlide.querySelector(\"input:checked\")\r\n\t\t\t\t? this.activeSlide.querySelector(\"input:checked\")\r\n\t\t\t\t: [];\r\n\r\n\t\t\tthis.activeGroupType = groupType;\r\n\t\t},\r\n\t\thideAnySlide() {\r\n\t\t\tif (this.activeSlideId === \"slide-certificates\" || this.activeSlideId === \"slide-contact\") {\r\n\t\t\t\tthis.hideAuxilliarySlide();\r\n\t\t\t} else {\r\n\t\t\t\tthis.hideSlide();\r\n\t\t\t}\r\n\t\t},\r\n\t\thideSlide() {\r\n\t\t\t// COMMENT: \"cancel\"/back-button click (save is done beforehand and triggers this)\r\n\t\t\tthis.activeLevel = \"level1\";\r\n\t\t\tthis.upholsterySelection = false;\r\n\t\t\tif (this.optionGroupConflictActive) {\r\n\t\t\t\t// COMMENT: Set \"conflict\" styling on option > THIS IS DONE BY THE RESPONSE OF THE API(and vue re-renders)\r\n\t\t\t\tthis.optionGroupConflictActive = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.activeGroupType === \"upholstery\") {\r\n\t\t\t\t// TODO: Reset search/filtering parameters to initial values in API response-json..\r\n\t\t\t\tthis.upholsterySearchModel.search = \"\";\r\n\t\t\t\tthis.upholsterySearchModel.color = \"Color\";\r\n\t\t\t\tthis.upholsterySearchModel.name = \"Name\";\r\n\t\t\t\tthis.upholsterySearchModel.type = \"Type\";\r\n\t\t\t}\r\n\t\t\tthis.activeSlideId = null;\r\n\t\t\tthis.optionGroupIsSaving = false;\r\n\t\t},\r\n\t\tshowUpholsteryExample(e, newIndex) {\r\n\t\t\tclearTimeout(this.upholsteryPreviewTimeout);\r\n\r\n\t\t\tif (newIndex != this.upholsteryPreviewActiveIndex) {\r\n\t\t\t\t// COMMENT: Reset \"force inactive\", set in click handler, if active index differ\r\n\t\t\t\tthis.upholsteryPreviewForceInactive = false;\r\n\t\t\t}\r\n\t\t\tthis.upholsteryPreviewActiveIndex = newIndex;\r\n\r\n\t\t\t// COMMENT: For Vue to understand the image-url and insert it correctly, url needs to be quoted!!!! F##%!/!#!\r\n\t\t\tthis.upholsteryPreviewStyle = {\r\n\t\t\t\tbackgroundImage: `url('${e.currentTarget.getAttribute(\"data-large-src\")}')`,\r\n\t\t\t};\r\n\r\n\t\t\tif (!this.upholsteryPreviewForceInactive) {\r\n\t\t\t\tthis.upholsteryPreviewActive = true;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setUpholsteryStickyHeight();\r\n\t\t},\r\n\t\thideUpholsteryExample() {\r\n\t\t\tclearTimeout(this.upholsteryPreviewTimeout);\r\n\t\t\tthis.upholsteryPreviewTimeout = setTimeout(() => {\r\n\t\t\t\tthis.upholsteryPreviewActive = false;\r\n\t\t\t\tthis.upholsteryPreviewActiveIndex = -1;\r\n\t\t\t}, 150); // COMMENT: This tiny Timeout will give a buffer when hovering on the next item\r\n\t\t},\r\n\t\tgetDummyUpholstery() {\r\n\t\t\treturn {\r\n\t\t\t\timageThumb: \"/static/images/textiles/f-1221-c0746_(150)-thumb.jpg\",\r\n\t\t\t\timageLarge: \"/static/images/textiles/f-1221-c0746_(150).jpg\",\r\n\t\t\t\timageAlt: \"Remix, 062\",\r\n\t\t\t\tid: \"remix-062\",\r\n\t\t\t\tvalue: \"remix-062-value\",\r\n\t\t\t\ttext: \"Remix, 062\",\r\n\t\t\t\titemLabel: \"Textile name\",\r\n\t\t\t\tname: \"Remix, 062\",\r\n\t\t\t\tconflicting: false,\r\n\t\t\t\tinfo: {\r\n\t\t\t\t\textra: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: \"Lorem ipsum\",\r\n\t\t\t\t\t\t\ttext: \"Dijkmeier & Ridolfo\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: \"Composition\",\r\n\t\t\t\t\t\t\ttext: \"90% Nylon\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: \"Maintenance & care\",\r\n\t\t\t\t\t\t\timages: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\turl: \"/static/svg/geolocation-point.svg\",\r\n\t\t\t\t\t\t\t\t\talt: \"Hand wash\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\turl: \"/static/svg/geolocation-point.svg\",\r\n\t\t\t\t\t\t\t\t\talt: \"No iron\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: \"Lorem\",\r\n\t\t\t\t\t\t\ttext: \"Ipsum dolor\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t},\r\n\t\tcloseColorMessage() {\r\n\t\t\tthis.colorMessageShown = false;\r\n\t\t\tclearTimeout(this.colorMessageTimeout);\r\n\t\t},\r\n\t\topenColorMessage() {\r\n\t\t\tthis.colorMessageShown = true;\r\n\t\t\tclearTimeout(this.colorMessageTimeout);\r\n\t\t},\r\n\t\ttoggleColorMessage() {\r\n\t\t\tif (this.colorMessageShown) this.closeColorMessage();\r\n\t\t\telse this.openColorMessage();\r\n\t\t},\r\n\t\ttoggleUpholsteryInfo() {\r\n\t\t\tthis.upholsteryInfoExpanded = !this.upholsteryInfoExpanded;\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.setUpholsteryStickyHeight();\r\n\t\t\t}, 300);\r\n\t\t},\r\n\t\tsetUpholsteryStickyHeight() {\r\n\t\t\tlet upholsteryStickyRef = this.$refs[\"upholsterySticky\"];\r\n\t\t\tif (Array.isArray(upholsteryStickyRef) && upholsteryStickyRef.length) {\r\n\t\t\t\tthis.upholsteryStickyHeight = upholsteryStickyRef[0].offsetHeight;\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n","\r\nimport { mapActions } from 'vuex';\r\nimport { TweenLite } from 'gsap';\r\n\r\nexport default {\r\n\tname: 'variation-dropdown',\r\n\tprops: {\r\n\t\tinitialChosenItemCode: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tinitialChosenItemImg: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tinitialChosenItemLabel: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tsku: null,\r\n\t\t\titems: [],\r\n\t\t\tisActive: false,\r\n\r\n\t\t\tchosenItemImg: this.initialChosenItemImg,\r\n\t\t\tchosenItemCode: this.initialChosenItemCode,\r\n\t\t\tchosenItemLabel: this.initialChosenItemLabel,\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'openConfigurator',\r\n\t\t\t'closeConfigurator',\r\n\t\t]),\r\n\t\ttoggleAccordion(e){\r\n\t\t\t// COMMENT: remove old active, and set new(currentTarget)\r\n\t\t\tconst alreadyOpen = this.$el.querySelector('.variation-dropdown__group__heading.is-active');\r\n\r\n\t\t\tif(e.currentTarget === alreadyOpen){\r\n\t\t\t\te.currentTarget.classList.remove('is-active');\r\n\t\t\t} else {\r\n\t\t\t\tif(alreadyOpen){\r\n\t\t\t\t\talreadyOpen.classList.remove('is-active');\r\n\t\t\t\t}\r\n\t\t\t\te.currentTarget.classList.add('is-active');\r\n\t\t\t}\r\n\t\t},\r\n\t\tshowHideDropdown(){ // exposed in template\r\n\t\t\tif(this.isActive){\r\n\t\t\t\tthis.hideDropdown();\r\n\t\t\t} else {\r\n\t\t\t\tthis.showDropdown();\r\n\t\t\t}\r\n\t\t},\r\n\t\tshowDropdown(){\r\n\t\t\tthis.isActive = true;\r\n\t\t\tconst toggleContent = this.$refs.content;\r\n\t\t\tTweenLite.set(toggleContent, { height: 'auto' });\r\n\t\t\tTweenLite.from(toggleContent, 0.25, { height: 0 });\r\n\t\t},\r\n\t\thideDropdown(){\r\n\t\t\tthis.isActive = false;\r\n\t\t\tconst toggleContent = this.$refs.content;\r\n\t\t\tTweenLite.to(toggleContent, 0.25, { height: 0 });\r\n\t\t},\r\n\t\tcloseIfOpen(){\r\n\t\t\tif (this.isActive) {\r\n\t\t\t\tthis.$refs.initiator.blur();\r\n\t\t\t}\r\n\t\t},\r\n\t\tgoToUrl(url){\r\n\t\t\twindow.location = url;\r\n\t\t},\r\n\t\tselectItem( label, img, code) {\r\n\r\n\t\t\tthis.chosenItemImg = img;\r\n\t\t\tthis.chosenItemLabel = label;\r\n\t\t\tthis.chosenItemCode = code;\r\n\r\n\t\t\tthis.hideDropdown();\r\n\t\t\tthis.$refs.initiator.blur();\r\n\r\n\t\t},\r\n\t\tacceptChosenItem() {\r\n\t\t\tthis.$parent.$emit('chosen', {value:this.chosenItemCode});\r\n\t\t},\r\n\t\tupdateReceiverMethodProductTile() {\r\n\t\t\t//JPL: TODO??\r\n\t\t}\r\n\r\n\t}\r\n};\r\n","import { mapActions } from \"vuex\";\r\nimport { SELECT_COUNTRY } from \"../../basics/js/store/static\";\r\n// import countriesData from \"../../../mock/countries\";\r\n\r\nexport default {\r\n\tname: \"country-selector-input\",\r\n\tprops: {\r\n\t\tinitialCountry: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"DK\",\r\n\t\t},\r\n\t\tinitialCountryList: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault: () => [],\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tchosenCountry:\r\n\t\t\t\tthis.initialCountryList.find(\r\n\t\t\t\t\t(c) => c.countryCode === this.initialCountry\r\n\t\t\t\t) || \"\",\r\n\t\t\tchosenCountryNative:\r\n\t\t\t\tthis.initialCountryList.find(\r\n\t\t\t\t\t(c) => c.countryCode === this.initialCountry\r\n\t\t\t\t) || \"\",\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([SELECT_COUNTRY.action]),\r\n\r\n\t\tasync changeCountry(countryCode) {\r\n\t\t\tconst body = {\r\n\t\t\t\tcountryCode: countryCode.value,\r\n\t\t\t};\r\n\r\n\t\t\tconst callback = function () {\r\n\t\t\t\tlocation.reload(true);\r\n\t\t\t};\r\n\t\t\tconst result = await this[SELECT_COUNTRY.action]({\r\n\t\t\t\tbody,\r\n\t\t\t\tcallback,\r\n\t\t\t});\r\n\t\t\tconsole.log(result);\r\n\t\t},\r\n\r\n\t\tacceptChosenItem() {\r\n\t\t\tthis.$parent.$emit(\"chosen\", {\r\n\t\t\t\tvalue: this.chosenCountry.countryCode,\r\n\t\t\t});\r\n\t\t},\r\n\t\tacceptChosenItemNative() {\r\n\t\t\tthis.$parent.$emit(\"chosen\", { value: this.chosenCountryNative });\r\n\t\t},\r\n\r\n\t\tfilter(option, label, search) {\r\n\t\t\treturn (label || \"\").toLowerCase().startsWith(search.toLowerCase());\r\n\t\t},\r\n\t},\r\n};\r\n","import VariationDropdown from \"@components/variation-dropdown/variation-dropdown\";\r\nimport CountrySelectorInput from \"@components/country-selector/country-selector-input\";\r\nimport { mapActions, mapState } from \"vuex\";\r\nimport { SELECT_COUNTRY } from \"../../basics/js/store/static\";\r\n\r\nexport default {\r\n\tname: \"country-selector\",\r\n\tcomponents: {\r\n\t\tVariationDropdown,\r\n\t\tCountrySelectorInput,\r\n\t},\r\n\tprops: {\r\n\t\tinitialIsShown: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisHidden: true,\r\n\t\t\tisAnimated: null,\r\n\r\n\t\t\t// chosenCountry: null,\r\n\t\t\t// chosenCountryNative: null,\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tisShown(newVal) {\r\n\t\t\tthis.isHidden = !newVal;\r\n\t\t\tif (!this.isHidden) {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.isAnimated = true;\r\n\t\t\t\t}, 500);\r\n\t\t\t} else {\r\n\t\t\t\tthis.isAnimated = false;\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisShown: (state) => state.countrySelectorOpen,\r\n\t\t}),\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openCountrySelector\",\r\n\t\t\t\"closeCountrySelector\",\r\n\t\t\tSELECT_COUNTRY.action,\r\n\t\t]),\r\n\t\tclose() {\r\n\t\t\tthis.closeCountrySelector();\r\n\t\t},\r\n\t\tupdateReceiverMethodProductTile() {\r\n\t\t\t//placeholder\r\n\t\t},\r\n\r\n\r\n\t\t// filter(option, label, search) {\r\n\t\t// \treturn (label || \"\").toLowerCase().startsWith(search.toLowerCase());\r\n\t\t// },\r\n\t},\r\n\tmounted() {\r\n\t\tthis.$on(\"chosen\", (value) => {\r\n\t\t\tthis.chosenCountryCode = value;\r\n\t\t\t// this.changeCountry(value);\r\n\t\t\tthis[SELECT_COUNTRY.action](value);\r\n\t\t\t// console.log(value);\r\n\t\t});\r\n\r\n\t\tif (this.initialIsShown) {\r\n\t\t\tthis.openCountrySelector();\r\n\t\t}\r\n\t},\r\n};\r\n","import { mapActions } from \"vuex\";\r\nimport { SELECT_USER_TYPE } from \"../../basics/js/store/static\";\r\n\r\nexport default {\r\n\tname: \"user-type-selector\",\r\n\tprops: {\r\n\t\tepiBlockId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tepiParrentPageId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\theadline: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"new perspectives on scandinavian design\"\r\n\t\t},\r\n\t\tbodyText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"We have tailormade experiences to create the best possible brand experience, a strong professional's toolbox for architechts and designers, as well as a dedicated platform for partners.\"\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tSELECT_USER_TYPE.action,\r\n\t\t]),\r\n\t\tuserTypeChosenHandler( userTypeId ) {\r\n\t\t\tthis[SELECT_USER_TYPE.action]({userTypeId: userTypeId, blockId: this.epiBlockId, path: window.location.pathname, epiParrentPageId: this.epiParrentPageId});\r\n\t\t}\r\n\t}\r\n}\r\n","import { CYLINDO_OVERLAY, SHOWN, HIDDEN } from '@store/static';\r\nimport { mapState } from 'vuex';\r\nexport default {\r\n\tname: 'cylindo-overlay',\r\n\tcomponents: {\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\timageData: null,\r\n\t\t\t//show: false,\r\n\t\t\tmounted: false,\r\n\t\t\tselectedImageUrl: '',\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tshow: state => {\r\n\t\t\t\treturn state.pdp[CYLINDO_OVERLAY.stateKey] === SHOWN;\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\tmounted(){\r\n\t\tif(this.$refs.cylindoData && this.$refs.cylindoData.textContent != ''){\r\n\t\t\tthis.imageData = JSON.parse(this.$refs.cylindoData.textContent);\r\n\t\t\tthis.mounted = true;\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tinitCylindo(){\r\n\t\t\tconst vm = this;\r\n\t\t\tthis.id = this.$refs.container.getAttribute('id');\r\n\r\n\t\t\tif(window.cylindo){\r\n\t\t\t\twindow.cylindo.on('ready', function(){\r\n\t\t\t\t\tthis.cylindoInstance = window.cylindo.viewer.create({\r\n\t\t\t\t\t\t// COMMENT: This 'SKU' is highly necessary, but it could, in this case, be\r\n\t\t\t\t\t\t// anything that is valid in Cylindo-database, as the images is not Cylindo dependant, but comes defined in the template.\r\n\t\t\t\t\t\tSKU: 'CHAISE_LONGUE_FIORD_151',\r\n\t\t\t\t\t\taccountID: this.$store.state.cylindoAccountId,\r\n\t\t\t\t\t\tcontainerID: this.id,\r\n\t\t\t\t\t\tcountry: 'us',\r\n\t\t\t\t\t\tthumbs: true,\r\n\t\t\t\t\t\tpresentation: 'carousel',\r\n\t\t\t\t\t\tcylindoContent: false,\r\n\t\t\t\t\t\tlanguage: 'eng',\r\n\t\t\t\t\t\ttitle: '',\r\n\t\t\t\t\t\talternateContent: this.imageData\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.cylindoInstance.on('instance:carousel:next', function(event, obj){\r\n\t\t\t\t\t\tvm.trackSlideChange(obj.frame);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.cylindoInstance.on('instance:carousel:prev', function(event, obj){\r\n\t\t\t\t\t\tvm.trackSlideChange(obj.frame);\r\n\t\t\t\t\t});\r\n\t\t\t\t}.bind(this));\r\n\r\n\t\t\t}\r\n\t\t},\r\n\t\ttrackSlideChange(frame){\r\n\t\t\t// COMMENT: In Cylindo the active index is called \"frame\"\r\n\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\"event\": \"trackPDP\",\r\n\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\"category\": \"Product detail page\",\r\n\t\t\t\t\t\"action\": \"Picture slider click\",\r\n\t\t\t\t\t\"label\": frame\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tshowOverlay(clickedSrc){\r\n\t\t\t//this.show = true;\r\n\t\t\tthis.$store.dispatch('setBodyFixed', { transitionDelay: 550, setClass: true });\r\n\t\t\tthis.$store.commit(CYLINDO_OVERLAY.mutation, SHOWN);\r\n\t\t\tif(this.show){\r\n\t\t\t\tthis.$nextTick(() => {\r\n\t\t\t\t\t// COMMENT: Set data order before initting cylindo\r\n\t\t\t\t\tthis.setOverlayActiveSource(clickedSrc);\r\n\t\t\t\t\tthis.initCylindo();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetOverlayActiveSource(clickedSrc){\r\n\t\t\t// COMMENT: Set the clicked source to be the starting point of the overlay-slideshow\r\n\t\t\tvar splitIndex = 0;\r\n\t\t\tfor (var i = 0; i < this.imageData.length; i++) {\r\n\t\t\t\tif(this.imageData[i].image === clickedSrc){\r\n\t\t\t\t\tsplitIndex = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar newData = this.imageData;\r\n\t\t\tif(splitIndex > 0){\r\n\t\t\t\tvar brokenBits1 = newData.slice(0, splitIndex);\r\n\t\t\t\tvar brokenBits2 = newData.slice(splitIndex);\r\n\t\t\t\tthis.imageData = brokenBits2.concat(brokenBits1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tcloseOverlay(){\r\n\t\t\t//this.show = false;\r\n\t\t\tthis.$store.dispatch('setBodyFixed', { transitionDelay: 550, setClass: false });\r\n\t\t\tthis.$store.commit(CYLINDO_OVERLAY.mutation, HIDDEN);\r\n\t\t},\r\n\t},\r\n};\r\n","import { TimelineMax } from 'gsap';\r\n\r\nimport { mapActions, mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'dashboard-header',\r\n\tprops: {\r\n\t\tcustomerName: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tstartAnimationsDelay: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 2000,\r\n\t\t},\r\n\t\trepeats: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 2\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisActive: state => state.dashboardOpen\r\n\t\t}),\r\n\t\tcomputedStartAnimationsDelay() {\r\n\t\t\t// COMMENT: Test if seconds or ms are supplied\r\n\t\t\tlet newVal = parseFloat(this.startAnimationsDelay);\r\n\t\t\tif ( newVal < 100 ) newVal*=1000;\r\n\t\t\treturn newVal;\r\n\t\t},\r\n\t\tcomputedRepeats() {\r\n\t\t\t// COMMENT: Test if seconds or ms are supplied\r\n\t\t\tlet newVal = parseInt(this.repeats);\r\n\t\t\tif ( newVal < 1 ) newVal = 1;\r\n\t\t\treturn newVal;\r\n\t\t},\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\ttl: new TimelineMax({ paused: true }),\r\n\r\n\t\t\tcssTiming: 0.3, // seconds\r\n\t\t\tdashboardTitleStillDuration: 2, // seconds // duration of when the \"Go to dashboard\" is visible\r\n\r\n\t\t\trepeatDelay: 10, // seconds // should be more than \"4 x cssTiming + startDelay + dashboardTitleStillDuration\"\r\n\t\t\trepeatCount: 0,\r\n\t\t\trepeatInterval: null, // will be a \"setInterval\"\r\n\t\t\tstartTimeout: null\r\n\t\t};\r\n\t},\r\n\tmounted(){\r\n\t\tthis.setupAnimations();\r\n\r\n\t\tthis.startTimeout = setTimeout(this.startAnimations, this.computedStartAnimationsDelay);\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'openDashboard',\r\n\t\t\t'closeDashboard',\r\n\t\t]),\r\n\t\tstartAnimations(){\r\n\t\t\tthis.repeatCount = 0; // COMMENT: If it should be able to be trigged multiple times\r\n\t\t\tthis.showDashboardText();\r\n\r\n\t\t\tif(this.computedRepeats > 0){\r\n\t\t\t\tthis.repeatInterval = setInterval(()=>{\r\n\t\t\t\t\tthis.repeatCount++;\r\n\t\t\t\t\tthis.showDashboardText();\r\n\r\n\t\t\t\t\tif(this.repeatCount === (this.computedRepeats - 1)){\r\n\t\t\t\t\t\tclearInterval(this.repeatInterval);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this.repeatDelay * 1000);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshowDashboardText(){\r\n\t\t\tthis.tl.seek('start').play();\r\n\t\t\t// this.tl.tweenFromTo('start', 'end'); // COMMENT: Tweening cannot be surpressed by the seek/gotoAndStop, but .play() can\r\n\t\t},\r\n\t\tsetupAnimations(){\r\n\t\t\tthis.tl\r\n\t\t\t\t.addLabel('start')\r\n\t\t\t\t.to(this.$refs.nameTextCover, this.cssTiming, { delay: this.startDelay, className: '+=is-active' })\r\n\t\t\t\t.to(this.$refs.nameText, 0, { className: '-=is-active' })\r\n\t\t\t\t.addLabel('switch-in')\r\n\t\t\t\t.to(this.$refs.dashboardText, 0, { className: '+=is-active' })\r\n\t\t\t\t.to(this.$refs.dashboardTextCover, this.cssTiming, { className: '-=is-active' })\r\n\t\t\t\t.addLabel('middle')\r\n\t\t\t\t// This is where the dashboard-title is shown/\"paused\"\r\n\t\t\t\t.to(this.$refs.dashboardTextCover, this.cssTiming, { delay: this.dashboardTitleStillDuration, className: '+=is-active' })\r\n\t\t\t\t.to(this.$refs.dashboardText, 0, { className: '-=is-active' })\r\n\t\t\t\t.addLabel('switch-out')\r\n\t\t\t\t.to(this.$refs.nameText, 0, { className: '+=is-active' })\r\n\t\t\t\t.to(this.$refs.nameTextCover, this.cssTiming, { className: '-=is-active' })\r\n\t\t\t\t.addLabel('end')\r\n\t\t\t\t;\r\n\t\t},\r\n\t\tstopAnimations() {\r\n\t\t\tclearInterval(this.repeatInterval);\r\n\t\t\tclearTimeout(this.startTimeout); // COMMENT: If clicked to open before timeout is trigged(don't start animations)\r\n\t\t\tthis.tl.gotoAndStop('start');\r\n\t\t},\r\n\t\ttoggle(){\r\n\t\t\tif (!this.isActive) {\r\n\t\t\t\tthis.openDashboard();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.closeDashboard();\r\n\t\t\t}\r\n\t\t\tthis.stopAnimations();\r\n\t\t}\r\n\t},\r\n};\r\n","export default {\r\n\tname: 'data-table-label',\r\n\tprops: {\r\n\t\ttext: {\r\n\t\t\ttype: String\r\n\t\t},\r\n\t\tdefaultState: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'DEFAULT'\r\n\t\t}\r\n\t},\r\n\tdata: function() {\r\n\t\treturn {\r\n\t\t\tstates: {\r\n\t\t\t\tDEFAULT: 'DEFAULT',\r\n\t\t\t\tASCENDING: 'ASCENDING',\r\n\t\t\t\tDESCENDING: 'DESCENDING'\r\n\t\t\t},\r\n\t\t\tstate: this.defaultState\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\ttoggle: function() {\r\n\t\t\tlet newState;\r\n\t\t\tswitch (this.state) {\r\n\t\t\t\tcase this.states.DEFAULT: newState = this.states.ASCENDING; break;\r\n\t\t\t\tcase this.states.ASCENDING: newState = this.states.DESCENDING; break;\r\n\t\t\t\tdefault: newState = this.states.DEFAULT; break;\r\n\t\t\t}\r\n\t\t\tthis.state = newState;\r\n\t\t}\r\n\t}\r\n}\r\n","\r\nexport default{\r\n PushSearchEvent( eventName, query, skip, take){\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: eventName,\r\n searchTerm: query,\r\n skip: skip,\r\n take: take\r\n });\r\n },\r\n PushEvent( eventName, category, action, label){\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: eventName,\r\n eventData: {\r\n category: category,\r\n action: action,\r\n label: label \r\n } \r\n });\r\n }\r\n}","import { mapState, mapActions } from \"vuex\";\r\n\r\nimport cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport Modal from \"../../components/modal/modal\";\r\nimport DataTableLabel from \"../../components/data-table/data-table-label\";\r\nimport Gtm from \"../../basics/js/methods/gtmlDataLayer/GoogleTagManager\"\r\nimport _ from \"lodash\";\r\nimport urlComposer from \"../../basics/js/methods/urlComposer/urlComposer\";\r\n\r\nconst notSortedValue = \"not-sorted-by\";\r\n\r\nconst createHeaderData = function (headerObj, defaultSort) {\r\n\tconst returnArrayData = [];\r\n\r\n\tfor (const header in headerObj) {\r\n\t\treturnArrayData.push({\r\n\t\t\tkey: header,\r\n\t\t\tlabel: headerObj[header].toUpperCase(),\r\n\t\t\tsort: defaultSort.sortBy === header ? defaultSort.sortDirection : notSortedValue,\r\n\t\t});\r\n\t}\r\n\r\n\treturn returnArrayData;\r\n};\r\n\r\nconst highlight = ({ substr, string, color }) => {\r\n\treturn string.replace(new RegExp(substr, \"gi\"), (match) => {\r\n\t\treturn `<span style='background: ${color}'>${match}</span>`;\r\n\t});\r\n};\r\n\r\nexport default {\r\n\tname: \"table-component\",\r\n\tcomponents: {\r\n\t\tModal,\r\n\t\tDataTableLabel,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\theaderData: this.header\r\n\t\t\t\t? createHeaderData(JSON.parse(this.header), { sortBy: this.sortBy, sortDirection: this.sortDirection })\r\n\t\t\t\t: {},\r\n\t\t\tisLoading: this.data ? false : true, // not in use, but nice to have\r\n\t\t\tparsedData: this.data ? JSON.parse(this.data) : this.fetchEndpoint(this.endpoint),\r\n\r\n\t\t\tallowSorting: !!(this.sortBy && this.sortDirection),\r\n\t\t\tcurrentPage: 1,\r\n\t\t\tsortUrlParams: \"\",\r\n\t\t\ttableParameters: {\r\n\t\t\t\tskip: 0,\r\n\t\t\t\ttake: this.pageSize,\r\n\t\t\t\tsortBy: this.sortBy,\r\n\t\t\t\tsortDirection: this.sortDirection,\r\n\t\t\t\tnextPage: this.currentPage,\r\n\t\t\t},\r\n\t\t\tselectedRow: null,\r\n\t\t\tselectedRowPayload: null,\r\n\t\t\tsearchInput: \"\",\r\n\t\t\tdebouncedFetchComposedEndpoint: _.debounce(this.fetchComposedEndpoint, 750),\r\n\t\t};\r\n\t},\r\n\tprops: {\r\n\t\tendpoint: String,\r\n\t\tuseSearchFacets: Boolean,\r\n\t\tdata: {\r\n\t\t\ttype: String,\r\n\t\t\t// required: true,\r\n\t\t},\r\n\t\theader: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tsortBy: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tsortDirection: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\trecordLink: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\thighlightSearchResults: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true,\r\n\t\t},\r\n\t\tsearchHighlightColor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"yellow\",\r\n\t\t},\r\n\t\tsearchableHeaders: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tpageSize: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 10\r\n\t\t},\r\n\t\tparameters:{\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"\",\r\n\t\t},\r\n\t\teventName:{\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"\"\r\n\t\t},\r\n\t\tsearchAboveTable: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tselectedFacets: (state) => state.search.selectedFacets,\r\n\t\t\tsearchQuery: (state) => state.search.searchQuery,\r\n\t\t}),\r\n\t\ttableData() {\r\n\t\t\treturn this.parsedData instanceof Promise ? [] : this.parsedData.data;\r\n\t\t},\r\n\t\ttotalRows() {\r\n\t\t\treturn this.parsedData instanceof Promise ? 0 : this.parsedData.total;\r\n\t\t},\r\n\t\tfilteredDataBasedOnSearchInput() {\r\n\t\t\tif (this.endpoint) {\r\n this.tableParameters.skip = 0;\r\n\r\n\t\t\t\treturn this.tableData; // client side filtering is not in use, so just return tableData\r\n\t\t\t}\r\n\t\t\tif (!this.tableData) {\r\n\t\t\t\tconsole.error(\"No table data recieved, or it has the wrong format. Type recieved: \", this.tableData);\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t\t// return data unaltered when no searchbar/searchinput\r\n\t\t\tif (this.searchInput === \"\") return this.tableData;\r\n\t\t\treturn this.tableData.filter((row) => {\r\n\t\t\t\treturn Object.entries(row).find(([key, value]) => {\r\n\t\t\t\t\t// if searchableHeaders is activated,\r\n\t\t\t\t\t// don't accept any key/header that's not searchable,\r\n\t\t\t\t\tif (this.searchableHeaders && !this.searchableHeaders.includes(key)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// don't search nested values\r\n\t\t\t\t\tif (typeof value !== \"string\") return;\r\n\t\t\t\t\treturn value.toLowerCase().includes(this.searchInput.toLowerCase());\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t},\r\n\t\thighlightedValuesBasedOnSearchInput() {\r\n\t\t\t// return data unaltered if highlighting is disabled\r\n\t\t\tif (!this.highlightSearchResults || this.searchInput === \"\") return this.filteredDataBasedOnSearchInput;\r\n\r\n\t\t\treturn this.filteredDataBasedOnSearchInput.map((rowsWithSearchHit) => {\r\n\t\t\t\t// rowsWithSearchHit:\r\n\t\t\t\t// {\r\n\t\t\t\t// \torderNr: '340598',\r\n\t\t\t\t// \ttotal: '4857,-'\r\n\t\t\t\t// ...\r\n\t\t\t\t// }\r\n\t\t\t\treturn Object.entries(rowsWithSearchHit).reduce((acc, [key, value]) => {\r\n\t\t\t\t\t// don't highlight a non-searchable column, even if it's a hit\r\n\t\t\t\t\tif (this.searchableHeaders && !this.searchableHeaders.includes(key)) {\r\n\t\t\t\t\t\treturn { ...acc, [key]: value };\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// key === orderNr\r\n\t\t\t\t\t// value === '340598',\r\n\t\t\t\t\tconst highlighted =\r\n\t\t\t\t\t\ttypeof value === \"string\"\r\n\t\t\t\t\t\t\t? highlight({\r\n\t\t\t\t\t\t\t\t\tsubstr: this.searchInput,\r\n\t\t\t\t\t\t\t\t\tstring: value,\r\n\t\t\t\t\t\t\t\t\tcolor: this.searchHighlightColor,\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t: value;\r\n\t\t\t\t\t// build the object back up, where any searchhit is wrapped in a <span>\r\n\t\t\t\t\treturn { ...acc, [key]: highlighted };\r\n\t\t\t\t}, {});\r\n\t\t\t});\r\n\t\t},\r\n\t\t// table data may not be in the correct order. Sort order of table data to match header col position.\r\n\t\t// Important: Any cols not present in the header will not be shown\r\n\t\ttabelDataMappedToHeader() {\r\n\t\t\tconst originalData = cloneDeep(this.highlightedValuesBasedOnSearchInput);\r\n\t\t\tconst colSequence = Object.keys(JSON.parse(this.header));\r\n\t\t\tconst mappedToHeaderSequence = originalData.map((originalRow) => {\r\n\t\t\t\tconst mappedRow = {};\r\n\t\t\t\tfor (let col of colSequence) {\r\n\t\t\t\t\tmappedRow[col] = originalRow[col];\r\n\t\t\t\t}\r\n\t\t\t\treturn mappedRow;\r\n\t\t\t});\r\n\t\t\treturn mappedToHeaderSequence;\r\n\t\t},\r\n\t\tuniqueRowLinks() {\r\n\t\t\tconst originalData = cloneDeep(this.highlightedValuesBasedOnSearchInput);\r\n\t\t\tconst rowLinkList = originalData.map((originalRow) => {\r\n\t\t\t\tlet rowLink = \"\";\r\n\t\t\t\tfor (let col in originalRow) {\r\n\t\t\t\t\tif (col === \"rowLink\") {\r\n\t\t\t\t\t\trowLink = originalRow[col];\r\n\t\t\t\t\t\treturn rowLink;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.recordLink !== undefined) {\r\n\t\t\t\t\trowLink = this.recordLink;\r\n\t\t\t\t\tfor (let col in originalRow) {\r\n\t\t\t\t\t\trowLink = rowLink.replace(\"{\" + col + \"}\", originalRow[col]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn rowLink;\r\n\t\t\t});\r\n\t\t\treturn rowLinkList;\r\n\t\t},\r\n\t\ttotalPageCount() {\r\n\t\t\treturn Math.ceil(this.totalRows / this.pageSize);\r\n\t\t},\r\n\t\tshowPager() {\r\n\t\t\treturn this.totalPageCount > 1;\r\n\t\t},\r\n\t\tpagerData() {\r\n\t\t\tconst pagerData = [];\r\n\t\t\tconst maxPageDisplayCount = 3;\r\n\t\t\tlet firstVisiblePageNumber = 1;\r\n\t\t\tlet lastVisiblePageNumber = 4;\r\n\t\t\tlet showDotsBefore = false;\r\n\t\t\tlet showDotsAfter = this.totalPageCount > 4;\r\n\t\t\t// what page numbers are we to show\r\n\t\t\t// should there be dots at the beginning and after\r\n\t\t\tif (this.currentPage > 3) {\r\n\t\t\t\tfirstVisiblePageNumber = this.currentPage - 2;\r\n\t\t\t\tshowDotsBefore = true;\r\n\t\t\t}\r\n\t\t\tif (showDotsAfter && this.currentPage >= this.totalPageCount - 1) {\r\n\t\t\t\tshowDotsAfter = false;\r\n\t\t\t}\r\n\t\t\tlastVisiblePageNumber =\r\n\t\t\t\tthis.totalPageCount < maxPageDisplayCount ? this.totalPageCount : firstVisiblePageNumber + maxPageDisplayCount;\r\n\t\t\tif (lastVisiblePageNumber >= this.totalPageCount) {\r\n\t\t\t\tlastVisiblePageNumber = this.totalPageCount;\r\n\t\t\t\tfirstVisiblePageNumber =\r\n\t\t\t\t\tthis.totalPageCount <= maxPageDisplayCount\r\n\t\t\t\t\t\t? firstVisiblePageNumber\r\n\t\t\t\t\t\t: this.totalPageCount - maxPageDisplayCount;\r\n\t\t\t}\r\n\t\t\t// pager requires a data object to render from\r\n\t\t\tif (showDotsBefore) {\r\n\t\t\t\tpagerData.push({ pagerType: \"dotsBefore\" });\r\n\t\t\t}\r\n\t\t\tfor (let page = firstVisiblePageNumber; page <= lastVisiblePageNumber; page++) {\r\n\t\t\t\tpagerData.push({\r\n\t\t\t\t\tpagerType: \"goToPage\",\r\n\t\t\t\t\ttarget: page,\r\n\t\t\t\t\tdisplayedPage: this.currentPage === page,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (showDotsAfter) {\r\n\t\t\t\tpagerData.push({ pagerType: \"dotsAfter\" });\r\n\t\t\t}\r\n\r\n\t\t\treturn pagerData;\r\n\t\t},\r\n\t\tpagerArrowBefore() {\r\n\t\t\treturn this.currentPage > 1;\r\n\t\t},\r\n\t\tpagerArrowAfter() {\r\n\t\t\treturn this.totalPageCount > this.currentPage;\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"generalError\"]),\r\n\t\tasync fetchEndpoint(endpoint) {\r\n\t\t\tif (!endpoint) {\r\n\t\t\t\tconsole.error(\"Endpoint must be a string. Reciever endpoint:\", endpoint);\r\n\t\t\t\tthis.isLoading = false;\r\n\t\t\t\treturn {};\r\n\t\t\t}\r\n\t\t\tconst data = await fetch(endpoint)\r\n\t\t\t\t.then((res) => res.json())\r\n\t\t\t\t.catch(console.warn);\r\n\t\t\tthis.isLoading = false;\r\n\t\t\tthis.parsedData = data;\r\n\t\t},\r\n\t\tactionCell(config, tableRow) {\r\n\t\t\tswitch (config.type) {\r\n\t\t\t\tcase \"link\":\r\n\t\t\t\t\twindow.location = config.data;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"tab\":\r\n\t\t\t\t\twindow.open(config.data, \"_blank\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"modal\":\r\n\t\t\t\t\tthis.selectedRow = tableRow;\r\n\t\t\t\t\tthis.openModal(config.data);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"modalwithpayload\":\r\n\t\t\t\t\tthis.selectedRow = tableRow;\r\n\t\t\t\t\tthis.selectedRowPayload = config.payload;\r\n\t\t\t\t\tthis.openModal(config.data);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tconsole.error(\"No matching type for actionCell. Type recieved: \", config.type);\r\n\t\t\t}\r\n\t\t},\r\n\t\tsortData(colKey) {\r\n\t\t\t// reset all sort indicators\r\n\t\t\tthis.headerData = this.headerData.map((header) => {\r\n\t\t\t\theader.sort = header.key !== colKey ? notSortedValue : header.sort;\r\n\t\t\t\treturn header;\r\n\t\t\t});\r\n\r\n\t\t\t// locate reference of col we want to sort and set correct order\r\n\t\t\tconst headerCol = this.headerData.find((header) => header.key === colKey);\r\n\t\t\theaderCol.sort = headerCol.sort === \"ascending\" ? \"descending\" : \"ascending\";\r\n\r\n\t\t\tthis.tableParameters = Object.assign({}, this.tableParameters, {\r\n\t\t\t\ttake: this.pageSize,\r\n\t\t\t\tskip: 0,\r\n\t\t\t\tsortBy: colKey,\r\n\t\t\t\tsortDirection: headerCol.sort,\r\n\t\t\t\tnextPage: 1, // forced reset to first page when sorting\r\n\t\t\t});\r\n\t\t},\r\n\t\tgoToPage(requestedPagenumber) {\r\n\t\t\tconst skip = (requestedPagenumber - 1) * this.pageSize;\r\n\t\t\tconst take = this.pageSize;\r\n\r\n\t\t\tthis.tableParameters = Object.assign({}, this.tableParameters, {\r\n\t\t\t\tskip,\r\n\t\t\t\ttake,\r\n\t\t\t\tnextPage: requestedPagenumber,\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tfetchComposedEndpoint() {\r\n\t\t\tlet composedEndpointUrl = `${this.endpoint}?skip=${this.tableParameters.skip}&take=${this.pageSize}&sortBy=${this.tableParameters.sortBy}&sortDirection=${this.tableParameters.sortDirection}&q=${this.searchInput}&${this.parameters}`;\r\n\r\n\t\t\tif ( this.useSearchFacets ) {\r\n\t\t\t\tlet queryString = urlComposer({facets:this.selectedFacets, searchQuery:this.searchQuery})\r\n\t\t\t\tqueryString = queryString.slice(1);\r\n\t\t\t\tcomposedEndpointUrl += queryString;\r\n\t\t\t}\r\n\r\n\t\t\tGtm.PushSearchEvent(this.eventName, this.searchInput, this.tableParameters.skip, this.pageSize);\r\n\t\t\tfetch(composedEndpointUrl, {\r\n\t\t\t\tcredentials: \"include\",\r\n\t\t\t})\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.ok) {\r\n\t\t\t\t\t\treturn res.json();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthrow new Error(\"Table data fetching failed, no data loaded\");\r\n\t\t\t\t})\r\n\t\t\t\t.then((json) => {\r\n\t\t\t\t\tthis.parsedData = json;\r\n\t\t\t\t\tthis.currentPage = this.tableParameters.nextPage;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconsole.error(err);\r\n\t\t\t\t\tthis.generalError();\r\n\t\t\t\t});\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tselectedFacets() {\r\n\t\t\tthis.fetchComposedEndpoint();\r\n\t\t},\r\n\t\ttableParameters() {\r\n\t\t\tthis.fetchComposedEndpoint();\r\n\t\t},\r\n\t\tsearchInput() {\r\n\t\t\tif (this.endpoint) {\r\n\t\t\t\tthis.debouncedFetchComposedEndpoint();\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n","import DashboardHeader from '../../components/dashboard-header/dashboard-header';\r\nimport DataTableLabel from '../../components/data-table/data-table-label';\r\nimport TableComponent from '../../components/table-component/table-component'\r\nimport AccountMenu from '../../components/account-menu/account-menu';\r\n\r\nimport { mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'dashboard',\r\n\tcomponents: {\r\n\t\tDashboardHeader,\r\n\t\tDataTableLabel,\r\n\t\tAccountMenu,\r\n\t\tTableComponent\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisActive: state => state.dashboardOpen\r\n\t\t})\r\n\t}\r\n}\r\n","\r\nimport FeedbackButton from '../feedback-button/feedback-button';\r\n\r\nexport default {\r\n\tname: 'feedback-button-example-wrapper',\r\n\tcomponents: {\r\n\t\tFeedbackButton,\r\n\t},\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\tfirstExampleButtonStatus: 'idle',\r\n\t\t\tsecondExampleButtonStatus: 'idle',\r\n\t\t\tthirdExampleButtonStatus: 'idle',\r\n\t\t\tfourthExampleButtonStatus: 'error',\r\n\r\n\t\t\tthirdButtonExampleTimeout: null,\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\r\n\t\t// First button examples\r\n\t\tfirstExampleButtonRevertCallback(){\r\n\t\t\tthis.firstExampleButtonStatus = 'idle';\r\n\t\t},\r\n\t\tfirstExampleButtonClick(){\r\n\t\t\tconsole.log(\"firstExampleButtonClick\")\r\n\t\t\tthis.firstExampleButtonStatus = 'loading';\r\n\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tthis.firstExampleButtonStatus = 'done';\r\n\t\t\t}, 2500)\r\n\t\t},\r\n\r\n\t\t// Second button examples\r\n\t\tsecondExampleButtonRevertCallback(){\r\n\t\t\tthis.secondExampleButtonStatus = 'idle';\r\n\t\t},\r\n\t\tsecondExampleButtonClick(){\r\n\t\t\tconsole.log(\"secondExampleButtonClick\")\r\n\t\t\tthis.secondExampleButtonStatus = 'loading';\r\n\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tthis.secondExampleButtonStatus = 'done';\r\n\t\t\t}, 4000)\r\n\t\t},\r\n\r\n\t\t// third button examples - which gets an error\r\n\t\tthirdExampleButtonRevertCallback(){\r\n\t\t\tthis.thirdExampleButtonStatus = 'idle';\r\n\t\t},\r\n\t\tthirdExampleButtonClick(){\r\n\t\t\tconsole.log(\"thirdExampleButtonClick\")\r\n\t\t\tthis.thirdExampleButtonStatus = 'loading';\r\n\r\n\t\t\tthis.thirdButtonExampleTimeout = setTimeout(()=>{\r\n\t\t\t\tthis.thirdExampleButtonStatus = 'error';\r\n\t\t\t}, 2500)\r\n\t\t},\r\n\t\tthirdExampleButtonReset(){\r\n\t\t\tclearTimeout(this.thirdButtonExampleTimeout);\r\n\t\t\tthis.thirdExampleButtonStatus = 'idle';\r\n\t\t},\r\n\r\n\t\t// fourth button examples - starts with an error\r\n\t\tfourthExampleButtonRevertCallback(){\r\n\t\t\tthis.fourthExampleButtonStatus = 'idle';\r\n\t\t},\r\n\t\tfourthExampleButtonClick(){\r\n\t\t\tthis.fourthExampleButtonStatus = 'loading';\r\n\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tthis.fourthExampleButtonStatus = 'done';\r\n\t\t\t}, 2500)\r\n\t\t},\r\n\t},\r\n};\r\n","export default {\r\n\tname: \"form-password\",\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tpasswordHidden: true,\r\n\t\t\tpassword: \"\",\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\ttoggleHidden() {\r\n\t\t\tthis.passwordHidden = !this.passwordHidden;\r\n\t\t},\r\n\t},\r\n};\r\n","import InputWithLabel from '../../components/form-elements/templates/input-with-label'\r\nimport FormPassword from '../../components/form-elements/templates/form-password'\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'gateway',\r\n\tcomponents: {\r\n\t\tFormPassword,\r\n\t\tInputWithLabel\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions(['openModal'])\r\n\t}\r\n};","/*\\\r\n|*|\r\n|*|\t:: cookies.js ::\r\n|*|\r\n|*| Modified for this project, but based on:\r\n|*|\thttps://github.com/madmurphy/cookies.js\r\n|*|\r\n|*|\tSyntaxes:\r\n|*|\r\n|*|\t* docCookies.setItem(name, value[, end[, path[, domain[, secure[, same-site]]]]])\r\n|*|\t* docCookies.hasItem(name)\r\n|*|\r\n\\*/\r\n\r\n\tconst makeSetterString = function (sKey, sValue, vEnd, sPath, sDomain, bSecure, vSameSite) {\r\n\r\n\t\tvar sExpires = \"\";\r\n\r\n\t\tif (vEnd) {\r\n\r\n\t\t\tswitch (vEnd.constructor) {\r\n\r\n\t\t\t\tcase Number:\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\tNote: Despite officially defined in RFC 6265, the use of `max-age` is not compatible with any\r\n\t\t\t\t\tversion of Internet Explorer, Edge and some mobile browsers. Therefore passing a number to\r\n\t\t\t\t\tthe end parameter might not work as expected. A possible solution might be to convert the the\r\n\t\t\t\t\trelative time to an absolute time. For instance, replacing the following line with:\r\n\t\t\t\t\t*/\r\n\t\t\t\t\t/*\r\n\t\t\t\t\tsExpires = vEnd === Infinity ? \"; expires=Fri, 31 Dec 9999 23:59:59 GMT\" : \"; expires=\" + (new Date(vEnd * 1e3 + Date.now())).toUTCString();\r\n\t\t\t\t\t*/\r\n\r\n\t\t\t\t\tsExpires = vEnd === Infinity ? \"; expires=Fri, 31 Dec 9999 23:59:59 GMT\" : \"; max-age=\" + vEnd;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase String:\r\n\r\n\t\t\t\t\tsExpires = \"; expires=\" + vEnd;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase Date:\r\n\r\n\t\t\t\t\tsExpires = \"; expires=\" + vEnd.toUTCString();\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn\tencodeURIComponent(sKey) + \"=\" + encodeURIComponent(sValue) + sExpires + (sDomain ? \"; domain=\" + sDomain : \"\") + (sPath ? \"; path=\" + sPath : \"\") + (bSecure ? \"; secure\" : \"\") + (!vSameSite || vSameSite.toString().toLowerCase() === \"no_restriction\" || vSameSite < 0 ? \"\" : vSameSite.toString().toLowerCase() === \"lax\" || Math.ceil(vSameSite) === 1 || vSameSite === true ? \"; samesite=lax\" : \"; samesite=strict\");\r\n\r\n\t}\r\n\r\n\tconst reURIAllowed = /[\\-\\.\\+\\*]/g, reCNameAllowed = /^(?:expires|max\\-age|path|domain|secure|samesite|httponly)$/i;\r\n\r\n\texport default {\r\n\r\n\t\t\"setItem\": function (sKey, sValue, vEnd, sPath, sDomain, bSecure, vSameSite) {\r\n\r\n\t\t\tif (!sKey || reCNameAllowed.test(sKey)) { return false; }\r\n\r\n\t\t\tdocument.cookie = makeSetterString(sKey, sValue, vEnd, sPath, sDomain, bSecure, vSameSite);\r\n\t\t\treturn true;\r\n\r\n\t\t},\r\n\r\n\t\t\"hasItem\": function (sKey) {\r\n\r\n\t\t\tif (!sKey || reCNameAllowed.test(sKey)) { return false; }\r\n\r\n\t\t\treturn (new RegExp(\"(?:^|;\\\\s*)\" + encodeURIComponent(sKey).replace(reURIAllowed, \"\\\\$&\") + \"\\\\s*\\\\=\")).test(document.cookie);\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n","import Swiper from \"swiper/dist/js/swiper.js\";\r\nimport Cookies from \"../../basics/js/methods/cookies/cookies\";\r\n\r\nexport default {\r\n\tname: \"guided-tour\",\r\n\r\n\tcomputed: {\r\n\t\tguidedTourStatus: function () {\r\n\t\t\treturn this.$store.state.guidedTourStatus;\r\n\t\t},\r\n\t\tguidedTourStyle: function () {\r\n\t\t\tlet activeSlideColor = \"#FFFFFF\";\r\n\t\t\tif (this.slider && this.slides) {\r\n\t\t\t\tlet activeSlide = this.slides[this.slider.activeIndex].querySelector(\".guided-tour-slide\");\r\n\t\t\t\tif (activeSlide) {\r\n\t\t\t\t\tactiveSlideColor = getComputedStyle(activeSlide).getPropertyValue(\"--guided-tour-slide-text-color\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn { \"--guided-tour-text-color\": activeSlideColor };\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tslider: null,\r\n\t\t\tslides: null,\r\n\t\t\tisShown: false,\r\n\t\t\tshowClose: false,\r\n\t\t};\r\n\t},\r\n\tprops: {\r\n\t\tpaginationMidfix: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\ttourId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tautoOpen: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tlet pmf = this.paginationMidfix;\r\n\t\tthis.isMounted = true;\r\n\r\n\t\tthis.slides = this.$refs[\"slider\"].querySelectorAll(\".swiper-slide\");\r\n\t\tlet slideCount = this.slides.length;\r\n\r\n\t\tthis.settings = {\r\n\t\t\tslidesPerView: 1,\r\n\t\t\tspeed: 450,\r\n\t\t\tnavigation: {\r\n\t\t\t\tnextEl: \".swiper-button-next\",\r\n\t\t\t\tprevEl: \".swiper-button-prev\",\r\n\t\t\t},\r\n\t\t\tkeyboard: {\r\n\t\t\t\tenabled: true,\r\n\t\t\t},\r\n\t\t\ton: {\r\n\t\t\t\tfromEdge: () => {\r\n\t\t\t\t\tif (this.showClose) this.showClose = false;\r\n\t\t\t\t},\r\n\t\t\t\treachEnd: () => {\r\n\t\t\t\t\tthis.showClose = true;\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tlazy: {\r\n\t\t\t\tloadPrevNext: true,\r\n\t\t\t},\r\n\t\t\twatchOverflow: true,\r\n\t\t};\r\n\r\n\t\tif (slideCount > 1) {\r\n\t\t\tthis.settings.pagination = {\r\n\t\t\t\tel: this.$refs[\"slider-pagination\"],\r\n\t\t\t\ttype: \"custom\",\r\n\t\t\t\trenderCustom: function (swiper, current, total) {\r\n\t\t\t\t\treturn current + \" \" + pmf + \" \" + total;\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tthis.$refs[\"slider-progress\"].classList.add(\"is-disabled\");\r\n\t\t}\r\n\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\r\n\t\tif (this.autoOpen) this.isShown = true;\r\n\t},\r\n\twatch: {\r\n\t\tguidedTourStatus: function () {\r\n\t\t\tif (this.autoOpen) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (history.length > 1) {\r\n\t\t\t\t\t\thistory.back();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twindow.close();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tconsole.log(\"Close error\", err);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst isShown = this.$store.state.guidedTourStatus == \"accepted\";\r\n\t\t\t\tif (isShown) this.$store.dispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: true });\r\n\t\t\t\tthis.isShown = isShown;\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\tclose() {\r\n\t\t\tif (this.autoOpen) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (history.length > 1) {\r\n\t\t\t\t\t\thistory.back();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twindow.close();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tconsole.log(\"Close error\", err);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.$store.dispatch(\"setBodyFixed\", { transitionDelay: 550, setClass: false });\r\n\t\t\t\tthis.$store.commit(\"updateGuidedTour\", \"done\");\r\n\t\t\t\tCookies.setItem(this.tourId, \"done\", Infinity);\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n","import { mapActions } from 'vuex';\r\nimport Cookies from '../../basics/js/methods/cookies/cookies'\r\n\r\nexport default {\r\n\tname: 'invitation-banner',\r\n\tcomponents: {\r\n\t},\r\n\tcomputed: {\r\n\t\tguidedTourStatus: function() {\r\n\t\t\treturn this.$store.state.guidedTourStatus;\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisShown: false\r\n\t\t};\r\n\t},\r\n\tprops: {\r\n\t\ttour: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\t},\r\n\twatch: {\r\n\t\tguidedTourStatus: function() {\r\n\t\t\tthis.isShown = this.$store.state.guidedTourStatus == 'invitation';\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'guidedTourAcceptInvitation'\r\n\t\t]),\r\n\t\tclose(){\r\n\t\t\tthis.$store.commit('updateGuidedTour','done');\r\n\t\t\tCookies.setItem(this.tour,'done', Infinity);\r\n\t\t}\r\n\t}\r\n};\r\n","import GuidedTour from \"./guided-tour\";\r\nimport InvitationBanner from \"../../components/invitation-banner/invitation-banner\";\r\n\r\nimport Cookies from \"../../basics/js/methods/cookies/cookies\";\r\n\r\nexport default {\r\n\tname: \"guided-tour-controller\",\r\n\tcomponents: {\r\n\t\tGuidedTour,\r\n\t\tInvitationBanner,\r\n\t},\r\n\tprops: {\r\n\t\tisActive: Boolean,\r\n\t\tdelay: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"2000\",\r\n\t\t},\r\n\t\ttour: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\ttourId() {\r\n\t\t\treturn \"GuidedTour--\" + this.tour;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\t\tconst showTour = !Cookies.hasItem(this.tourId);\r\n\t\tif (showTour) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.$store.commit(\"updateGuidedTour\", \"invitation\");\r\n\t\t\t}, parseInt(this.delay));\r\n\t\t}\r\n\t},\r\n};\r\n","export default {\r\n\tname: 'header-logo',\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tdir: '',\r\n\t\t\tscrollPos: 0,\r\n\t\t\tdeviceHeight: 0,\r\n\t\t\tdocHeight: 0,\r\n\r\n\t\t\tstickyItems: {\r\n\t\t\t\tlogo: {\r\n\t\t\t\t\theight: 0,\r\n\t\t\t\t\tpos: 0,\r\n\t\t\t\t\tlastDirChangePos: 0,\r\n\t\t\t\t\tel: '.header-logo__container',\r\n\t\t\t\t\tstickyFrom: 'top',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\r\n\tmounted() {\r\n\t\t// Initiate sticky menu\r\n\t\tthis.setupStickyItems();\r\n\r\n\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\tthis.deviceHeight = window.innerHeight;\r\n\t\tthis.docHeight = document.body.scrollHeight;\r\n\t\tthis.lastDirChangePos = 0;\r\n\t\tthis.dir = (this.scrollPos > this.lastScrollTop) ? 'down' : 'up';\r\n\r\n\t\tthis.onScroll();\r\n\r\n\t\twindow.addEventListener('scroll', this.onScroll, false);\r\n\r\n\t\twindow.addEventListener('resize', function(){\r\n\t\t\t// Set new core calculations\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\t\tthis.deviceHeight = window.innerHeight;\r\n\t\t\tthis.docHeight = document.body.scrollHeight;\r\n\r\n\t\t\t// Set new element calculations\r\n\t\t\tthis.setupStickyItems();\r\n\t\t}.bind(this), false);\r\n\t},\r\n\tmethods: {\r\n\t\tonScroll(){\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\t\tthis.deviceHeight = window.screen.height;\r\n\t\t\tthis.docHeight = document.body.scrollHeight;\r\n\t\t\t\r\n\t\t\tthis.dir = (this.scrollPos > this.lastScrollTop) ? 'down' : 'up';\r\n\t\t\tthis.lastScrollTop = this.scrollPos;\r\n\r\n\t\t\tif (!this.pauseSticky) {\r\n\t\t\t\tthis.animateTop(this.stickyItems.logo);\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimateTop(item){\r\n\t\t\tlet currentPos = parseInt(item.el.style.top);\r\n\r\n\t\t\tif (this.scrollPos <= 0) {\r\n\t\t\t\titem.el.style.top = '0px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.scrollPos + this.deviceHeight >= this.docHeight) {\r\n\t\t\t\titem.el.style.top = - item.height + 'px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\titem.pos = item.lastDirChangePos - this.scrollPos;\r\n\r\n\t\t\tif (item.pos > 0) {\r\n\t\t\t\titem.pos = 0;\r\n\t\t\t}\r\n\t\t\tif (item.pos < -item.height) {\r\n\t\t\t\titem.pos = -item.height;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\titem.el.style.top = item.pos + 'px';\r\n\r\n\t\t\tif (this.dir == 'up' && item.pos == -item.height && currentPos == -item.height) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos - item.height;\r\n\t\t\t}\r\n\t\t\tif (this.dir == 'down' && item.pos == 0 && currentPos == 0) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos;\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimateBottom(item){\r\n\t\t\tlet currentPos = parseInt(item.el.style.bottom);\r\n\r\n\t\t\tif (this.scrollPos <= 0) {\r\n\t\t\t\titem.el.style.bottom = '0px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.scrollPos >= this.docHeight) {\r\n\t\t\t\titem.el.style.bottom = - item.height + 'px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\titem.pos = item.lastDirChangePos - this.scrollPos;\r\n\r\n\t\t\tif (item.pos > 0) {\r\n\t\t\t\titem.pos = 0;\r\n\t\t\t}\r\n\t\t\tif (item.pos < -item.height) {\r\n\t\t\t\titem.pos = -item.height;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\titem.el.style.bottom = item.pos + 'px';\r\n\r\n\t\t\tif (this.dir == 'up' && item.pos == -item.height && currentPos == -item.height) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos - item.height;\r\n\t\t\t}\r\n\t\t\tif (this.dir == 'down' && item.pos == 0 && currentPos == 0) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos;\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetupStickyItems(){\r\n\t\t\tObject.keys(this.stickyItems).forEach(key => {\r\n\t\t\t\tconst item = this.stickyItems[key];\r\n\r\n\t\t\t\t// Setup el\r\n\t\t\t\tif (typeof item.el === 'string') {\r\n\t\t\t\t\tif (item.el != '') {\r\n\t\t\t\t\t\tthis.stickyItems[key].el = this.$el.querySelector(item.el);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.stickyItems[key].el = this.$el;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Setup height\r\n\t\t\t\tthis.stickyItems[key].height = this.stickyItems[key].el.offsetHeight;\r\n\t\t\t\tthis.stickyItems[key].height += parseInt(window.getComputedStyle(this.stickyItems[key].el).getPropertyValue('margin-top'));\r\n\t\t\t\tthis.stickyItems[key].height += parseInt(window.getComputedStyle(this.stickyItems[key].el).getPropertyValue('margin-bottom'));\r\n\r\n\t\t\t\t// Setup el pos\r\n\t\t\t\tthis.stickyItems[key].pos = this.stickyItems[key].el.style.top;\r\n\t\t\t});\r\n\t\t},\r\n\t\tanimateBackToSticky () {\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n\t\t\tObject.keys(this.stickyItems).forEach(key => {\r\n\t\t\t\tthis.stickyItems[key].pos = 0;\r\n\t\t\t});\r\n\t\t},\r\n\t},\r\n};","export default {\r\n imageProductsOverlayData: {\r\n headline: \"Shop products\",\r\n items: \"\",\r\n backgroundColor: \"white\",\r\n noBuySection: true\r\n }\r\n}\r\n","// A minimal Intersection Observer\r\n// .not-seen: before element has appeared in view\r\n// .in-view: element is in view\r\n\r\n// { once }: wont remove .in-view after it's been added\r\n\r\nexport const inView = ({ el, once = false, threshold = 0, ratio = null, callback = null }) => {\r\n\tconst intersectionCallback = (entries) => {\r\n\t\tentries.forEach(({ isIntersecting, target, intersectionRatio }) => {\r\n\t\t\ttarget.classList.add(\"not-seen\");\r\n\t\t\tif (isIntersecting) {\r\n\t\t\t\t\r\n\t\t\t\ttarget.classList.add(\"in-view\");\r\n\t\t\t\ttarget.classList.remove(\"not-seen\");\r\n\r\n\t\t\t\tif (ratio && intersectionRatio >= ratio) {\r\n\t\t\t\t\tif ( callback ) callback(true);\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\telse if ( callback ) callback(true);\r\n\t\t\t\t\r\n\t\t\t\tif (once) {\r\n\t\t\t\t\tobserver.unobserve(el);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttarget.classList.remove(\"in-view\");\r\n\t\t\t\tif ( callback ) callback(false);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\tconst observer = new IntersectionObserver(intersectionCallback, {\r\n\t\tthreshold,\r\n\t});\r\n\tobserver.observe(el);\r\n};\r\n","import mockData from \"./image-products-data\";\r\nimport { mapActions } from \"vuex\";\r\n\r\nimport { inView } from '../../basics/js/methods/inView/inView';\r\n\r\nexport default {\r\n name: \"image-products-button\",\r\n props: {\r\n buttonText: {\r\n type: String,\r\n default: \"Shop this image\",\r\n },\r\n skuList: {\r\n type: String,\r\n required: true,\r\n },\r\n backgroundColor: {\r\n type: String,\r\n default: \"#FFFFFF\"\r\n },\r\n imageProductsOverlayData: {\r\n type: Object,\r\n default() {\r\n return mockData.imageProductsOverlayData;\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n isInview: false,\r\n isAnimated: false,\r\n };\r\n },\r\n methods: {\r\n ...mapActions([\r\n 'setImageProductsOverlayData',\r\n 'openImageProductsOverlay',\r\n 'showOverlayBackdrop'\r\n ]),\r\n clickHandler() {\r\n this.setImageProductsOverlayData(this.imageProductsOverlayData);\r\n this.showOverlayBackdrop();\r\n this.openImageProductsOverlay(this.skuList);\r\n },\r\n animateButton() {\r\n if (this.isAnimated) return;\r\n this.isInview = true;\r\n setTimeout(() => {\r\n this.isAnimated = true;\r\n }, 2000);\r\n }\r\n },\r\n mounted() {\r\n inView({\r\n el: this.$el,\r\n once: true,\r\n threshold: 0.2,\r\n callback: this.animateButton.bind(this)\r\n });\r\n },\r\n}","import { mapActions } from \"vuex\";\r\nimport ImageProductsButton from \"../image-products/image-products-button\";\r\n\r\nexport default {\r\n\tname: \"hero\",\r\n\tcomponents: {\r\n\t\tImageProductsButton\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tmuted: true,\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"setActiveVideo\"]),\r\n\t\ttoggleSound() {\r\n\t\t\tlet videoRef = this.$refs[\"hero-video\"];\r\n\r\n\t\t\tlet muted = videoRef.muted;\r\n\t\t\tif (muted) {\r\n\t\t\t\tvideoRef.muted = false;\r\n\t\t\t} else {\r\n\t\t\t\tvideoRef.muted = true;\r\n\t\t\t}\r\n\r\n\t\t\tthis.muted = videoRef.muted;\r\n\t\t},\r\n\t\topenVideo(event) {\r\n\t\t\tlet dataset = event.currentTarget.dataset;\r\n\t\t\tif (dataset) {\r\n\t\t\t\tlet videoType = dataset.videoType;\r\n\t\t\t\tlet videoValue = dataset.videoValue;\r\n\t\t\t\tconsole.log(\"HERO BUTTON CLICK\", videoType, videoValue);\r\n\r\n\t\t\t\tthis.setActiveVideo({ type: videoType, value: videoValue });\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n","export default {\r\n\tname: 'viewing-as'\r\n}\r\n","import { TweenLite, Power4 } from 'gsap';\r\nimport AccountMenu from '../account-menu/account-menu';\r\nimport ViewingAs from '../viewing-as/viewing-as';\r\nimport AccordionGroup from '../accordion/accordion-group';\r\nimport { GET_CART_QUANTITY } from '@store/static';\r\n\r\nimport { mapActions, mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'main-menu',\r\n\tcomponents: {\r\n\t\tAccountMenu,\r\n\t\tViewingAs,\r\n\t\tAccordionGroup\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tstickyScrollTopOffset: 20,\r\n\t\t\tisOpen: false,\r\n\t\t\tactiveItem: '',\r\n\t\t\tactiveSubItem: [],\r\n\t\t\tactiveSubRootItem: [],\r\n\t\t\tdir: '',\r\n\t\t\tscrollPos: 0,\r\n\t\t\tdeviceHeight: 0,\r\n\t\t\tdocHeight: 0,\r\n\t\t\tisScrolledToTop: false,\r\n\t\t\thasAccountMenu: false,\r\n\t\t\tsimulateUser: false,\r\n\r\n\t\t\tpauseSticky: false,\r\n\r\n\t\t\tisMounted: false,\r\n\r\n\t\t\tstickyItems: {\r\n\t\t\t\tlogo: {\r\n\t\t\t\t\theight: 0,\r\n\t\t\t\t\tpos: 0,\r\n\t\t\t\t\tlastDirChangePos: 0,\r\n\t\t\t\t\tel: '.main-menu__logo',\r\n\t\t\t\t\tstickyFrom: 'top',\r\n\t\t\t\t},\r\n\t\t\t\tmobileMenu: {\r\n\t\t\t\t\theight: 0,\r\n\t\t\t\t\tpos: 0,\r\n\t\t\t\t\tlastDirChangePos: 0,\r\n\t\t\t\t\tel: '.main-menu__actions',\r\n\t\t\t\t\tstickyFrom: 'top',\r\n\t\t\t\t},\r\n\t\t\t\tdesktopMenu: {\r\n\t\t\t\t\theight: 0,\r\n\t\t\t\t\tpos: 0,\r\n\t\t\t\t\tlastDirChangePos: 0,\r\n\t\t\t\t\tel: '',\r\n\t\t\t\t\tstickyFrom: 'top',\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tcartItemsCount: state => state.cart[GET_CART_QUANTITY.stateKey],\r\n\t\t\tmainMenuOpen: state => state.mainMenuOpen,\r\n\t\t\tmainServiceNavOpen: state => state.mainServiceNavOpen,\r\n\t\t\tisConfiguring: state => state.reconfigurator.reconfiguratorOpen,\r\n\t\t})\r\n\t},\r\n\r\n\twatch: {\r\n\t\tmainMenuOpen(newValue){ // COMMENT: Called by other actions(and thereby components)\r\n\t\t\tthis.isOpen = newValue;\r\n\r\n\t\t\tif ( !this.isOpen && this.activeItem ) this.activeItem = null;\r\n\r\n\t\t\tif(this.subRootLevelActive){\r\n\t\t\t\tthis.closeSubRootLevels();\r\n\t\t\t}\r\n\r\n\t\t\tthis.setPauseSticky(this.isOpen);\r\n\r\n\t\t},\r\n\t\tmainServiceNavOpen(newValue) {\r\n\t\t\tif(newValue === true){\r\n\t\t\t\tthis.isOpen = false;\r\n\t\t\t\tthis.activeItem = null;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.closeSubRootLevels();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'openMiniCart', // used on mini-cart icon button\r\n\t\t\t'openMainSearch', // used on se arch icon button\r\n\t\t\t'openMainMenu',\r\n\t\t\t'closeMainMenu',\r\n\t\t\t'openMainServiceNav',\r\n\t\t\t'closeMainServiceNav',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop'\r\n\t\t]),\r\n\r\n\t\topen(){\r\n\t\t\tthis.openMainMenu(); // action\r\n\t\t},\r\n\t\tclose(){\r\n\t\t\tthis.closeMainMenu(); // action\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t},\r\n\r\n\r\n\r\n\t\ttoggleTopLevel (subLevel) {\r\n\r\n\t\t\tif (this.isOpen) {\r\n\r\n\t\t\t\tthis.setPauseSticky(false);\r\n\r\n\t\t\t\tif (this.activeItem == subLevel) {\r\n\t\t\t\t\tthis.activeItem = null;\r\n\r\n\t\t\t\t\tthis.closeMainMenu();\r\n\t\t\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif(this.isMobile === false){\r\n\t\t\t\t\t\tlet menuItem = this.getLevelItem( this.activeItem );\r\n\t\t\t\t\t\tTweenLite.to(menuItem, 0.25, { opacity:0.5, onComplete:()=> {\r\n\t\t\t\t\t\t\tthis.activeItem = subLevel;\r\n\t\t\t\t\t\t\tthis.animateTopLevel();\r\n\t\t\t\t\t\t}, ease: Power4.easeIn });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.activeItem = subLevel;\r\n\t\t\t\t\t\tthis.animateTopLevel();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\r\n\t\t\t\tthis.activeItem = subLevel;\r\n\r\n\t\t\t\tthis.showOverlayBackdrop('behindHeader');\r\n\r\n\t\t\t\tthis.setPauseSticky(true);\r\n\r\n\t\t\t\tthis.animateBackToSticky();\r\n\r\n\t\t\t\tTweenLite.to(this.stickyItems.desktopMenu.el, 0.25, { top: 0 });\r\n\r\n\t\t\t\tthis.animateTopLevel();\r\n\t\t\t\tthis.openMainMenu(); // action\r\n\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimateTopLevel() {\r\n\t\t\tlet menuItem = this.getLevelItem( this.activeItem );\r\n\t\t\tif(this.isMobile === false){\r\n\t\t\t\tif ( this.isOpen ) {\r\n\t\t\t\t\tTweenLite.set(menuItem, { opacity:0.5 });\r\n\t\t\t\t\tTweenLite.to(menuItem, 0.5, { opacity:1, ease: Power4.easeOut });\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tTweenLite.set(menuItem, { opacity:1 });\r\n\t\t\t\t\tTweenLite.to(menuItem, 0.5, { opacity:1, ease: Power4.easeInOut });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tisActive (subLevel) {\r\n\t\t\treturn this.activeItem === subLevel;\r\n\t\t},\r\n\t\tisSubLevelActive (subLevel) {\r\n\t\t\treturn this.activeSubItem.indexOf(subLevel) >= 0;\r\n\t\t},\r\n\r\n\t\ttoggleSubRootLevel (subLevel) {\r\n\t\t\tif ( subLevel == null ) return false;\r\n\r\n\t\t\tlet clickedItem = this.getLevelItem( subLevel.toString() );\r\n\t\t\t// COMMENT: Sub Root open, active item clicked, close menu\r\n\t\t\tif (clickedItem === this.subRootLevelItem) {\r\n\t\t\t\t// console.log(\"SUB ROOT OPEN. Active item clicked\")\r\n\t\t\t\tthis.closeSubRootLevels();\r\n\r\n\t\t\t\tif(this.isMobile === false){\r\n\t\t\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// COMMET: Sub Root open, new item clicked\r\n\t\t\telse if ( this.subRootLevelActive === true ) {\r\n\t\t\t\tTweenLite.to(this.subRootLevelItem, 0.1, { height: 0, onComplete: ()=>{\r\n\t\t\t\t\tthis.subRootLevelItem.classList.remove('is-active');\r\n\r\n\t\t\t\t\tthis.subRootLevelItem = clickedItem;\r\n\t\t\t\t\tthis.setSubRootLevelActive(true);\r\n\r\n\t\t\t\t\tTweenLite.set(this.subRootLevelItem, { height: 'auto' });\r\n\t\t\t\t\tTweenLite.from(this.subRootLevelItem, 0.25, { height:0 });\r\n\t\t\t\t}});\r\n\r\n\r\n\r\n\t\t\t}\r\n\t\t\t// COMMENT: Sub Root not open, open menu\r\n\t\t\telse {\r\n\t\t\t\tthis.subRootLevelItem = clickedItem;\r\n\r\n\t\t\t\tif ( this.isMobile === false ) {\r\n\t\t\t\t\tthis.closeMainMenu(); // action - setting main menu open state (so that SubRoot can be controlled by other actions)\r\n\t\t\t\t\tthis.openMainServiceNav();\r\n\t\t\t\t\tthis.showOverlayBackdrop('behindHeader');\r\n\t\t\t\t}\r\n\t\t\t\tTweenLite.set(clickedItem, { height: 'auto' });\r\n\t\t\t\tTweenLite.from(clickedItem, 0.25, { height: 0, onComplete: ()=>{\r\n\r\n\t\t\t\t\tthis.setSubRootLevelActive(true);\r\n\t\t\t\t}});\r\n\r\n\t\t\t\t// COMMENT: Set active states\r\n\t\t\t\tthis.activeSubRootItem.push(subLevel.toString());\r\n\t\t\t\tclickedItem.classList.add('is-active');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcloseSubRootLevels () {\r\n\t\t\tif (this.subRootLevelItem != null) {\r\n\t\t\t\tTweenLite.to(this.subRootLevelItem, 0.25, { height: 0, onComplete: ()=>{\r\n\t\t\t\t\tthis.subRootLevelItem.classList.remove('is-active');\r\n\t\t\t\t\tif ( this.activeItem ) this.activeItem.blur();\r\n\t\t\t\t\tthis.activeItem = null;\r\n\t\t\t\t\tthis.subRootLevelItem = null;\r\n\t\t\t\t\tthis.setSubRootLevelActive(false);\r\n\t\t\t\t}});\r\n\t\t\t}\r\n\r\n\t\t\tthis.setPauseSticky(false);\r\n\t\t},\r\n\r\n\t\tcloseSubLevel () {\r\n\t\t\t// COMMENT: Close open sub levels\r\n\t\t\tif (this.activeItem != '') {\r\n\t\t\t\tlet openSubLevels = this.$refs[this.activeItem].querySelectorAll('.main-menu__sub-root-nav.is-active');\r\n\t\t\t\tlet openSubLevelsIcons = this.$refs[this.activeItem].querySelectorAll('.toggle-icon.is-active');\r\n\t\t\t\tTweenLite.to(openSubLevelsIcons, 0, { className: '-=is-active'});\r\n\t\t\t\tTweenLite.to(openSubLevels, 0.2, { height: 0, className: '-=is-active'});\r\n\t\t\t}\r\n\r\n\t\t\t// COMMENT: Reset active item\r\n\t\t\tthis.animateBackToSticky();\r\n\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\t\tthis.setupStickyItems();\r\n\r\n\t\t\tthis.activeItem = null;\r\n\t\t\tif(!this.isMobile){\r\n\t\t\t\t// COMMENT: If not mobile, set isOpen false. On mobile the overlay does not close when sublevels do..\r\n\t\t\t\tthis.closeMainMenu();\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis.setPauseSticky(false);\r\n\t\t},\r\n\r\n\t\tgetLevelItem(item) {\r\n\t\t\treturn this.$refs[item.toString()];\r\n\t\t},\r\n\r\n\t\t//-------------------------------------------------\r\n\r\n\r\n\t\tanimateBackToSticky () {\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n\t\t\tObject.keys(this.stickyItems).forEach(key => {\r\n\t\t\t\tthis.stickyItems[key].pos = 0;\r\n\t\t\t});\r\n\t\t},\r\n\t\tloadContentBackgrounds(){\r\n\t\t\tif(!this.isMobile){\r\n\t\t\t\t// COMMENT: The twig/template loop index should start at one!\r\n\t\t\t\tfor(var i = 0; i < 10; i++){\r\n\t\t\t\t\tvar ref = this.$refs['contentBackground' + i];\r\n\t\t\t\t\tif(ref != undefined){\r\n\t\t\t\t\t\tref.style = ref.getAttribute('data-style');\r\n\t\t\t\t\t\tref.removeAttribute('data-style');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\thandleSearchClick(){\r\n\t\t\tthis.openMainSearch();\r\n\t\t},\r\n\t\thandleMiniCartClick(e){\r\n\t\t\tif(!this.isMobile && !this.$store.state.miniCartActive && this.cartItemsCount > 0){\r\n\t\t\t\t// COMMENT: only open minicart on desktop and when the minicart is not active, otherwise the initiator should go to cart-page\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.openMiniCart();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonScroll(){\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\t\tthis.deviceHeight = window.screen.height;\r\n\t\t\tthis.docHeight = document.body.scrollHeight;\r\n\r\n\t\t\tthis.dir = (this.scrollPos > this.lastScrollTop) ? 'down' : 'up';\r\n\t\t\tthis.lastScrollTop = this.scrollPos;\r\n\r\n\t\t\tif (!this.pauseSticky) {\r\n\t\t\t\tthis.animateTop(this.stickyItems.logo);\r\n\t\t\t\tthis.animateTop(this.stickyItems.desktopMenu);\r\n\t\t\t\tthis.animateTop(this.stickyItems.mobileMenu);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tanimateTop(item){\r\n\t\t\tlet currentPos = parseInt(item.el.style.top);\r\n\t\t\t// console.log(\"this.scrollPos\",this.scrollPos,\"this.stickyScrollTopOffset\",this.stickyScrollTopOffset)\r\n\r\n\t\t\tif (this.scrollPos <= this.stickyScrollTopOffset) {\r\n\t\t\t\titem.el.style.top = '0px';\r\n\t\t\t\tthis.isScrolledToTop = true;\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tthis.isScrolledToTop = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.scrollPos + this.deviceHeight >= this.docHeight) {\r\n\t\t\t\titem.el.style.top = - (item.height+1) + 'px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\titem.pos = item.lastDirChangePos - this.scrollPos;\r\n\r\n\t\t\tif (item.pos > 0) {\r\n\t\t\t\titem.pos = 0;\r\n\t\t\t}\r\n\t\t\tif (item.pos < -item.height) {\r\n\t\t\t\titem.pos = -item.height;\r\n\t\t\t}\r\n\r\n\t\t\titem.el.style.top = item.pos + 'px';\r\n\r\n\t\t\tif (this.dir == 'up' && item.pos == -item.height && currentPos == -item.height) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos - item.height;\r\n\t\t\t}\r\n\t\t\tif (this.dir == 'down' && item.pos == 0 && currentPos == 0) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos;\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimateBottom(item){\r\n\t\t\tlet currentPos = parseInt(item.el.style.bottom);\r\n\r\n\t\t\tif (this.scrollPos <= 0) {\r\n\t\t\t\titem.el.style.bottom = '0px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.scrollPos >= this.docHeight) {\r\n\t\t\t\titem.el.style.bottom = - item.height + 'px';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\titem.pos = item.lastDirChangePos - this.scrollPos;\r\n\r\n\t\t\tif (item.pos > 0) {\r\n\t\t\t\titem.pos = 0;\r\n\t\t\t}\r\n\t\t\tif (item.pos < -item.height) {\r\n\t\t\t\titem.pos = -item.height;\r\n\t\t\t}\r\n\r\n\t\t\titem.el.style.bottom = item.pos + 'px';\r\n\r\n\t\t\tif (this.dir == 'up' && item.pos == -item.height && currentPos == -item.height) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos - item.height;\r\n\t\t\t}\r\n\t\t\tif (this.dir == 'down' && item.pos == 0 && currentPos == 0) {\r\n\t\t\t\titem.lastDirChangePos = this.scrollPos;\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetupStickyItems(){\r\n\t\t\tObject.keys(this.stickyItems).forEach(key => {\r\n\t\t\t\tconst item = this.stickyItems[key];\r\n\r\n\t\t\t\t// COMMENT: Setup el\r\n\t\t\t\tif (typeof item.el === 'string') {\r\n\t\t\t\t\tif (item.el != '') {\r\n\t\t\t\t\t\tthis.stickyItems[key].el = this.$el.querySelector(item.el);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.stickyItems[key].el = this.$el;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// COMMENT: Setup height\r\n\t\t\t\tthis.stickyItems[key].height = this.stickyItems[key].el.offsetHeight + 3;\r\n\t\t\t\tthis.stickyItems[key].height += parseInt(window.getComputedStyle(this.stickyItems[key].el).getPropertyValue('margin-top'));\r\n\t\t\t\tthis.stickyItems[key].height += parseInt(window.getComputedStyle(this.stickyItems[key].el).getPropertyValue('margin-bottom'));\r\n\r\n\t\t\t\t// COMMENT: Setup el pos\r\n\t\t\t\tthis.stickyItems[key].pos = this.stickyItems[key].el.style.top;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tsetPauseSticky(val) {\r\n\t\t\t// console.log(\"setPauseSticky to \"+val)\r\n\t\t\tthis.pauseSticky = val;\r\n\t\t},\r\n\r\n\t\tsetSubRootLevelActive(val) {\r\n\t\t\t// console.log(\"setSubRootLevelActive to \"+val)\r\n\t\t\tthis.subRootLevelActive = val;\r\n\t\t}\r\n\t},\r\n\r\n\r\n\tmounted() {\r\n\t\tthis.hasAccountMenu = this.$children.findIndex((item)=>{\r\n\t\t\treturn item.$options.name === 'account-menu'\r\n\t\t}) > -1;\r\n\t\tthis.simulateUser = this.$children.findIndex((item)=>{\r\n\t\t\treturn item.$options.name === 'viewing-as'\r\n\t\t}) > -1;\r\n\r\n\t\t// COMMENT: Initiate sticky menu\r\n\t\tthis.setupStickyItems();\r\n\r\n\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\tthis.deviceHeight = window.innerHeight;\r\n\t\tthis.docHeight = document.body.scrollHeight;\r\n\t\tthis.lastDirChangePos = 0;\r\n\t\tthis.dir = (this.scrollPos > this.lastScrollTop) ? 'down' : 'up';\r\n\r\n\t\tthis.onScroll();\r\n\r\n\t\twindow.addEventListener('scroll', this.onScroll, false);\r\n\r\n\t\twindow.addEventListener('resize', function(){\r\n\t\t\t// Set new core calculations\r\n\t\t\tthis.scrollPos = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\t\tthis.deviceHeight = window.innerHeight;\r\n\t\t\tthis.docHeight = document.body.scrollHeight;\r\n\r\n\t\t\t// Set new element calculations\r\n\t\t\tthis.setupStickyItems();\r\n\r\n\t\t}.bind(this), false);\r\n\r\n\t\tthis.isMounted = true;\r\n\r\n\t\ttry {\r\n\t\t\tthis.$nextTick(this.loadContentBackgrounds);\r\n\t\t}\r\n\t\tcatch(er) {\r\n\t\t\t//do nothing?\r\n\t\t}\r\n\t}\r\n\r\n};\r\n","\r\nexport default {\r\n\tname: \"news-letter\",\r\n\tprops: {\r\n\t\ttriggers: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"[]\",\r\n\t\t},\r\n\t\tlabelsProp: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"{}\",\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tselected: \"\",\r\n\t\t\temail: \"\",\r\n\t\t\tshouldShowForm: false,\r\n\t\t\ttriggerValue: \"\",\r\n\t\t\tlabels: {}\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\tcampaignList() {\r\n\t\t\tlet list = this.triggers ? JSON.parse(this.triggers) : []\r\n\t\t\treturn list\r\n\t\t},\r\n\t\tshowForm() {\r\n\t\t\treturn this.shouldShowForm;\r\n\t\t},\r\n\t\tshowNewsletterChoices() {\r\n\t\t\treturn this.campaignList ? this.campaignList.length > 1 : false;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\twindow.setTimeout(function(that) {\r\n\t\t\tif (window.SleekNote === undefined || window.sleeknoteSiteData === undefined) {\r\n\t\t\t\tconsole.log(\"Not displaying newsletter signup - sleeknote has not been loaded\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!that.campaignList || that.campaignList.length == 0) return;\r\n\r\n\t\t\tthat.triggerValue = that.campaignList[0].triggerId;\r\n\r\n\t\t\tthat.shouldShowForm = true;\r\n\t\t}, 1500, this);\r\n\r\n\t\tthis.labels = { ...JSON.parse(this.labelsProp) };\r\n\t\t\r\n\t},\r\n\tmethods: {\r\n\t\thandleSubmit(){\r\n\r\n\t\t\tif (this.email && this.email.length > 0) {\r\n\t\t\t\twindow.sleeknoteSiteData.push({ \"email\": this.email }); \r\n\t\t\t}\r\n\r\n\t\t\twindow.SleekNote.triggerOnclick(this.triggerValue);\r\n\t\t}\r\n\t}\r\n};\r\n","import { mapActions } from 'vuex';\r\n\r\nimport NewsLetter from '../../components/news-letter/news-letter';\r\n\r\nexport default {\r\n\tname: 'main-footer',\r\n\tcomponents: {\r\n\t\tNewsLetter\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'openCountrySelector',\r\n\t\t\t'openMainSearch'\r\n\t\t]),\r\n\t\thandleCountrySelectorClick() {\r\n\t\t\tthis.openCountrySelector();\r\n\t\t},\r\n\t\thandleSearchClick(){\r\n\t\t\tthis.openMainSearch();\r\n\t\t},\r\n\t}\r\n};\r\n","\r\nimport CartCore from './cart-core';\r\nimport { mapActions } from 'vuex';\r\nimport { GET_CART_ITEMS } from '@store/static';\r\n\r\nexport default {\r\n\tname: 'mini-cart',\r\n\textends: CartCore,\r\n\tdata(){\r\n\t\treturn {\r\n\t\t\taddCommentMode: false,\r\n\t\t\tstoredItemHeight: 0,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tisLoaded: function(){\r\n\t\t\treturn this.$store.state.cartLoaded && this.isActive;\r\n\t\t},\r\n\t\tisLoading: function() {\r\n\t\t\tthis.$store.state[GET_CART_ITEMS.loadingKey];\r\n\t\t},\r\n\t\tisActive: function(){\r\n\t\t\tif(this.$store.state.miniCartActive === true){ // when opening\r\n\t\t\t\tthis.$el.focus(); // in order to make esc keypress work\r\n\t\t\t\tthis.showOverlayBackdrop('behindHeader'); // COMMENT: Sets the backdrop at the correct z-index\r\n\t\t\t}\r\n\t\t\treturn this.$store.state.miniCartActive;\r\n\t\t},\r\n\t},\r\n\tmounted(){\r\n\t\t// console.warn('mini cart isActive: ', this.isActive);\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'closeMiniCart',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t]),\r\n\t\tclose(){\r\n\t\t\tthis.hideOverlayBackdrop(); // action\r\n\t\t\tthis.closeMiniCart(); // action\r\n\t\t},\r\n\t},\r\n};\r\n","import CountrySelectorInput from \"@components/country-selector/country-selector-input\";\r\nimport { required, email } from \"vuelidate/lib/validators\";\r\n\r\n\r\nconst checked = (val) => val;\r\nconst anyChecked = (vals) => Object.values(vals).some(val=>val===true);\r\n\r\nexport default {\r\n\tname: \"newsletter-non-sleek\",\r\n\tcomponents: { CountrySelectorInput },\r\n\tprops: {\r\n\t\tnewsletterTypes: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tform: {\r\n\t\t\t\tname: \"\",\r\n\t\t\t\temail: \"\",\r\n\t\t\t\tconsent: false,\r\n\t\t\t\ttype: this.newsletterTypes || {},\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\tvalidations() {\r\n\t\treturn {\r\n\t\t\tform: {\r\n\t\t\t\tname: {\r\n\t\t\t\t\trequired,\r\n\t\t\t\t},\r\n\t\t\t\temail: {\r\n\t\t\t\t\trequired,\r\n\t\t\t\t\temail,\r\n\t\t\t\t},\r\n\t\t\t\ttype: Object.assign({required, anyChecked}, ...Object.keys(this.form.type).map(key=>({[key]: {}}))),\r\n\t\t\t\tconsent: {\r\n\t\t\t\t\trequired,\r\n\t\t\t\t\tchecked,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tsetName(value) {\r\n\t\t\tthis.form.name = value;\r\n\t\t\tthis.$v.form.name.$touch();\r\n\t\t},\r\n\t\tsetEmail(value) {\r\n\t\t\tthis.form.email = value;\r\n\t\t\tthis.$v.form.email.$touch();\r\n\t\t},\r\n\t\tsetType(value, allowMultipleChecked) {\r\n\t\t\tif (!this.form.type) return;\r\n\r\n\t\t\tif (!allowMultipleChecked) {\r\n\t\t\t\tfor (var t in this.form.type) {\r\n\t\t\t\t\tthis.form.type[t] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.form.type[value.id] = value.checked;\r\n\t\t\tthis.$v.form.type.$touch();\r\n\t\t},\r\n\t\tsetConsent(value) {\r\n\t\t\tthis.form.consent = value;\r\n\t\t\tthis.$v.form.consent.$touch();\r\n\t\t},\r\n\t\tsubmit(e) {\r\n\t\t\tthis.$v.$touch();\r\n\r\n\t\t\tif (!this.$v.$invalid) {\r\n\t\t\t\t/**\r\n\t\t\t\t * Form validates, submit it\r\n\t\t\t\t */\r\n\t\t\t\te.currentTarget.submit();\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tmounted() {},\r\n};\r\n","\r\nimport { mapActions } from 'vuex';\r\n\r\n/*\r\n{ COMMENT: \"PANEL\" AVAILABLE OPTIONS\r\n\tid: \t\t\tis automatically generated in mutations\r\n\ttype: \t\t\tatc / info / warning / error\r\n\tatcText: \t\tTranslated text of \"Added to cart\". Only shown when type \"atc\".\r\n\ttitle: \t\t\tOptional. Text is visually bold. Ex, the product name shown in \"atc\".\r\n\tmessage: \t\tRequired. Regular Text.\r\n\tbgColor: \t\tOtional. Overwrite css-class bgColor definitions.\r\n\tstallDuration: \tOptional. Defaults to 3000ms. Time of which the panel is shown, NOT including animation of 400ms(css duration) each way.\r\n\tautoRemove: \tOptional. Default is true.\r\n\tshowClose: \t\tOptional. Default is true. Type \"atc\" should be the only one setting this to false.\r\n\tmaxWidth: \t\tOptional. Default is false. Sets the max-width og message to 350px on mobile and 50% of panel on desktop(in the css).\r\n}\r\n*/\r\n\r\nexport default {\r\n\tname: 'notification-panel',\r\n\tprops: {\r\n\t\tid: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\ttype: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\ttitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: '',\r\n\t\t},\r\n\t\tmessage: {\r\n\t\t\trequired: false,\r\n\t\t\tdefault: null,\r\n\t\t},\r\n\t\tatcText: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 'Added to cart',\r\n\t\t},\r\n\t\tatcLink: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 'Go to cart',\r\n\t\t},\r\n\t\tbgColor: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tstallDuration: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 3000, // COMMENT: For type 'atc' this should be the same duration as Buy-Section stall duration (which is 3000)\r\n\t\t},\r\n\t\tshowClose: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: true,\r\n\t\t},\r\n\t\tshowLink: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tautoRemove: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: true,\r\n\t\t},\r\n\t\tmaxWidth: {\r\n\t\t\ttype: Boolean,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tcssTransitionDuration: 400,\r\n\t\t\tremovalTimeout: null,\r\n\t\t\tbgColorCss: '',\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tthis.bgColorCss = this.bgColor ? `background-color: ${this.bgColor};` : '';\r\n\r\n\t\tthis.$nextTick(this.showPanel);\r\n\r\n\t\tthis.$el.addEventListener('mouseover', this.clearRemovalDelay.bind(this) );\r\n\t\tthis.$el.addEventListener('mouseout', this.startRemovalDelay.bind(this, 1000) );\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'removeNotificationPanel',\r\n\t\t]),\r\n\t\tshowPanel(){\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tthis.$el.classList.remove('is-collapsed');\r\n\t\t\t}, 50); // COMMENT: A tiny delay, otherwise the animation will not be shown\r\n\r\n\t\t\tthis.startRemovalDelay();\r\n\t\t},\r\n\t\tclearRemovalDelay() {\r\n\t\t\tif ( this.removalTimeout ) {\r\n\t\t\t\tclearTimeout(this.removalTimeout);\r\n\t\t\t}\r\n\t\t},\r\n\t\tstartRemovalDelay(delay) {\r\n\t\t\t//console.log(\"startRemovalDelay\")\r\n\t\t\tif ( !delay ) delay = this.stallDuration + this.cssTransitionDuration\r\n\t\t\tif(this.autoRemove){\r\n\t\t\t\tthis.removalTimeout = setTimeout(()=>{\r\n\t\t\t\t\tthis.removePanel();\r\n\t\t\t\t}, delay);\r\n\t\t\t}\r\n\t\t},\r\n\t\tremovePanel(){\r\n\t\t\t// COMMENT: Start removal transition and then remove..\r\n\t\t\tif(this.autoRemove && this.removalTimeout){\r\n\t\t\t\tclearTimeout(this.removalTimeout);\r\n\t\t\t}\r\n\t\t\tthis.$el.classList.add('is-collapsed');\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tthis.removeNotificationPanel(this.id); // COMMENT: Mutation, by action\r\n\t\t\t}, this.cssTransitionDuration + 50); // ~400ms is the transition duration set by css. Added a little extra just to make sure the ui is done animating before removing\r\n\t\t},\r\n\t}\r\n};\r\n","\r\nimport { mapState } from 'vuex';\r\n\r\nimport NotificationPanel from './notification-panel';\r\n\r\nexport default {\r\n\tname: 'notification-panel-wrapper',\r\n\tcomponents: {\r\n\t\tNotificationPanel,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\thasMounted: false, // COMMENT: Ability to visually hide the component until it's ready\r\n\t\t}\r\n\t},\r\n\tcomputed: mapState(['notificationPanels']),\r\n\tmounted(){\r\n\t\tthis.hasMounted = true;\r\n\t},\r\n};","\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'notification-panel-examples-wrapper',\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'showNotificationPanel',\r\n\t\t]),\r\n\t\tshowAtc(){\r\n\t\t\tthis.showNotificationPanel({ type: 'atc', title: 'Added to cart', message: '– Fiber armchair', showClose: false, showLink:true });\r\n\t\t},\r\n\t\tshowAtcWithButton(){\r\n\t\t\tthis.showNotificationPanel({ type: 'atc', title: 'Fiber armchair', message: '– Swivel base', showClose: true });\r\n\t\t},\r\n\t\tshowErrorPanel(){\r\n\t\t\tthis.showNotificationPanel({ type: 'error', message: 'Error message' });\r\n\t\t},\r\n\t\tshowErrorTitlePanel(){\r\n\t\t\tthis.showNotificationPanel({ type: 'error', title: 'Error title', message: 'Error message' });\r\n\t\t},\r\n\t\tshowInfoPanel(){\r\n\t\t\tthis.showNotificationPanel({ type: 'info', title: 'Info title', message: 'Info message' });\r\n\t\t},\r\n\t\tshowCustomColorInfoPanel(){\r\n\t\t\tthis.showNotificationPanel({ type: 'info', message: 'Info message', bgColor: 'lime' });\r\n\t\t},\r\n\t\tshowWarningPanelMessage(){\r\n\t\t\tthis.showNotificationPanel({ type: 'warning', message: 'Message' });\r\n\t\t},\r\n\t\tshowWarningPanelTitle(){\r\n\t\t\tthis.showNotificationPanel({ type: 'warning', title: 'Title' });\r\n\t\t},\r\n\t\tshowWarningPanelTitleMessage(){\r\n\t\t\tthis.showNotificationPanel({ type: 'warning', title: 'Title', message: 'Message' });\r\n\t\t},\r\n\t},\r\n}\r\n","import TableComponent from '../../components/table-component/table-component'\r\nimport Modal from '../../components/modal/modal'\r\nimport { EDIT_ORDER_ASYNC } from '../../basics/js/store/static';\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'order-overview',\r\n\tcomponents: {\r\n\t\tTableComponent,\r\n\t\tModal\r\n\t},\r\n\tprops: {\r\n\t\tpageId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\teditOrderUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\teditOrderNotifyTitle: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\teditOrderNotifyMessage: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisEditingOrder: false\r\n\t\t};\t\r\n\t},\t\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tEDIT_ORDER_ASYNC.action\r\n\t\t]),\t\t\r\n\t\teditOrder(orderNumber, comment){\r\n\t\t\tif (this.isEditingOrder) return;\r\n\r\n\t\t\tthis.isEditingOrder = true;\r\n\t\t\tconst url = this.editOrderUrl;\r\n\t\t\tconst body = {\r\n\t\t\t\t\"comment\": comment,\r\n\t\t\t\t\"pageId\": this.pageId,\r\n\t\t\t\t\"orderNumber\": orderNumber\r\n\t\t\t};\r\n\t\t\tthis[EDIT_ORDER_ASYNC.action]({\r\n\t\t\t\turl,\r\n\t\t\t\tbody,\r\n\t\t\t\tnotification: {\r\n\t\t\t\t\ttype: 'info',\r\n\t\t\t\t\tshowClose: false,\r\n\t\t\t\t\ttitle: this.editOrderNotifyTitle,\r\n\t\t\t\t\tmessage: this.editOrderNotifyMessage\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.isEditingOrder = false;\r\n\t\t}\r\n\t}\r\n};","\r\nimport { mapActions, mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'overlay-backdrop',\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tbehindHeader: false,\r\n\t\t\tsearchMode: ''\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([\r\n\t\t\t'searchOverlayOpen',\r\n\t\t]),\r\n\t\tisActive: function(){\r\n\t\t\tthis.behindHeader = this.$store.state.overlayBackdropContext == 'behindHeader' ? true : false;\r\n\t\t\treturn this.$store.state.overlayBackdropActive;\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tsearchOverlayOpen(newVal) {\r\n\t\t\tthis.searchMode = newVal;\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t]),\r\n\t\tclose(){\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t},\r\n\t},\r\n};\r\n","import Swiper from 'swiper/dist/js/swiper.js';\r\nimport CylindoOverlay from '../../components/cylindo-overlay/cylindo-overlay';\r\nimport { mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'product-visualization',\r\n\tcomponents: {\r\n\t\tCylindoOverlay,\r\n\t},\r\n\tprops: {\r\n\t\tslideCount: 0\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tshowNavigation: true,\r\n\t\t\toverlaySlider: '',\r\n\t\t\tcylindoInstance: null,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([\r\n\t\t\t'isMobile',\r\n\t\t]),\r\n\t},\r\n\tmounted(){\r\n\t\tconst vm = this;\r\n\t\tconst productName = vm.$el.getAttribute('data-tracking-title') || 'Unspecified product name';\r\n\r\n\t\tlet settings = {\r\n\t\t\tloop: true,\r\n\t\t\tslidesPerView: 1,\r\n\t\t\tnavigation: {\r\n\t\t\t\tnextEl: '.product-swiper-button-next',\r\n\t\t\t\tprevEl: '.product-swiper-button-prev',\r\n\t\t\t},\r\n\t\t\tpreloadImages: false,\r\n\t\t\tlazy: {\r\n\t\t\t\tloadPrevNext: true,\r\n\t\t\t},\r\n\t\t\ton: {\r\n\t\t\t\treachEnd: function(){\r\n\t\t\t\t\t// COMMENT: When reaching the last image, open the cylindo-overlay (only if there is more than one product image)\r\n\t\t\t\t\t// \"realIndex\" is still 1 less than the actual last slide\r\n\t\t\t\t\tif(vm.isMobile && this.slides.length > 1){\r\n\t\t\t\t\t\tvar targetSrc = this.slides[this.realIndex + 1].querySelector('.product-visualization__image').getAttribute('src');\r\n\t\t\t\t\t\tvm.$refs['product-visualization-cylindo-overlay'].showOverlay(targetSrc);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tclick: function(e){\r\n\t\t\t\t\tconst { target } = e;\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!target.classList.contains('product-swiper-button-next') &&\r\n\t\t\t\t\t\t!target.classList.contains('product-swiper-button-prev')\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\t\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\t\t\t\"event\": \"trackPDP\",\r\n\t\t\t\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\t\t\t\"category\": \"Product detail page\",\r\n\t\t\t\t\t\t\t\t\"action\": \"Picture click\",\r\n\t\t\t\t\t\t\t\t\"label\": productName\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (target.classList.contains('product-visualization__image')) {\r\n\t\t\t\t\t\tvm.$refs['product-visualization-cylindo-overlay'].showOverlay(target.getAttribute('src'));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tlazyImageReady: function(){\r\n\t\t\t\t\t//this.slider.update();\r\n\t\t\t\t},\r\n\t\t\t\tslideChange: function(){\r\n\t\t\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\t\t\"event\": \"trackPDP\",\r\n\t\t\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\t\t\"category\": \"Product detail page\",\r\n\t\t\t\t\t\t\t\"action\": \"Picture slider click\",\r\n\t\t\t\t\t\t\t\"label\": this.activeIndex + 1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tif (this.slideCount < 2) {\r\n\t\t\tthis.showNavigation = false;\r\n\r\n\t\t\tObject.assign(settings, {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tnavigation: {},\r\n\t\t\t\tloop: false\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsettings.pagination = {\r\n\t\t\t\tel: this.$refs['product-slider-pagination'],\r\n\t\t\t\tclickable: true\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.slider = new Swiper(this.$refs['product-slider-container'], settings);\r\n\t}\r\n};\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"image-products__button\",\n class: { \"is-animated\": _vm.isAnimated, \"in-view\": _vm.isInview },\n style: { \"--image-products-button-bg-color\": _vm.backgroundColor },\n on: { click: _vm.clickHandler },\n },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon \", attrs: { viewBox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-plus-small\" },\n }),\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.buttonText))]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport mockData from \"./image-products-data\";\r\nimport { mapActions } from \"vuex\";\r\n\r\nimport { inView } from '../../basics/js/methods/inView/inView';\r\n\r\nexport default {\r\n\tname: \"image-products-button\",\r\n\tprops: {\r\n buttonText: {\r\n type: String,\r\n default: \"Shop this image\",\r\n },\r\n skuList: {\r\n type: String,\r\n required: true,\r\n },\r\n backgroundColor: {\r\n type: String,\r\n default: \"#FFFFFF\"\r\n },\r\n imageProductsOverlayData: {\r\n type: Object,\r\n default() {\r\n return mockData.imageProductsOverlayData;\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n isInview: false,\r\n isAnimated: false,\r\n };\r\n },\r\n methods: {\r\n\t\t...mapActions([\r\n\t\t\t'setImageProductsOverlayData',\r\n\t\t\t'openImageProductsOverlay',\r\n\t\t\t'showOverlayBackdrop'\r\n\t\t]),\r\n clickHandler(event) {\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tevent.preventDefault();\r\n\r\n this.showOverlayBackdrop();\r\n this.setImageProductsOverlayData(this.imageProductsOverlayData);\r\n this.openImageProductsOverlay(this.skuList);\r\n },\r\n animateButton() {\r\n if ( this.isAnimated ) return;\r\n this.isInview = true;\r\n setTimeout(() => {\r\n this.isAnimated = true;\r\n }, 2000);\r\n }\r\n },\r\n\tmounted() {\r\n inView({\r\n\t\t\tel: this.$el,\r\n\t\t\tonce: true,\r\n\t\t\tthreshold: 0.2,\r\n callback: this.animateButton.bind(this)\r\n\t\t});\r\n\t},\r\n}\r\n</script>\r\n<template>\r\n <button class=\"image-products__button\" :class=\"{'is-animated': isAnimated, 'in-view': isInview}\" v-on:click=\"clickHandler\" :style=\"{'--image-products-button-bg-color': backgroundColor}\">\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon \"><use xlink:href=\"/dist/svg/symbols.svg#svg-plus-small\"></use></svg>\r\n <span>{{buttonText}}</span>\r\n </button>\r\n</template>\r\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-products-button.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-products-button.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./image-products-button.vue?vue&type=template&id=9a63a8c0&\"\nimport script from \"./image-products-button.vue?vue&type=script&lang=js&\"\nexport * from \"./image-products-button.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9a63a8c0')) {\n api.createRecord('9a63a8c0', component.options)\n } else {\n api.reload('9a63a8c0', component.options)\n }\n module.hot.accept(\"./image-products-button.vue?vue&type=template&id=9a63a8c0&\", function () {\n api.rerender('9a63a8c0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/image-products/image-products-button.vue\"\nexport default component.exports","import Swiper from \"swiper/dist/js/swiper.js\";\r\nimport { inView } from \"../../basics/js/methods/inView/inView\";\r\nimport ImageProductsButton from \"../image-products/image-products-button.vue\"\r\n\r\n/**\r\n * @prop cssClass {String} - 'slider--inspiration' will turn it into an inspirational slider\r\n * @prop settings {Object} - swiper option object, will overwrite default options\r\n */\r\n\r\nexport default {\r\n\tname: \"slider\",\r\n\tcomponents: {\r\n ImageProductsButton,\r\n\t},\r\n\tprops: {\r\n\t\toptions: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tslideCount: 0,\r\n\t\ttype: String,\r\n\t\tslidesPerView: String,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tslider: null,\r\n\t\t\tshowNavigation: true,\r\n\r\n\t\t\tdefaultSettings: {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tpagination: true,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tnavigation: {\r\n\t\t\t\t\tnextEl: \".swiper-button-next\",\r\n\t\t\t\t\tprevEl: \".swiper-button-prev\",\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\tlazy: {\r\n\t\t\t\t\tloadPrevNext: true,\r\n\t\t\t\t\tloadPrevNextAmount: 3,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tsettings() {\r\n\t\t\treturn Object.assign({}, this.defaultSettings, this.options);\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tconst productName = this.$el.getAttribute('data-tracking-title');\r\n\r\n\t\tif (this.settings.pagination) {\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tel: this.$refs[\"slider-pagination\"],\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (productName && productName !== \"\") {\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\ton: {\r\n\t\t\t\t\tslideChange: function(){\r\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\t\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\t\t\t\"event\": \"trackPDP\",\r\n\t\t\t\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\t\t\t\"category\": \"Product detail page\",\r\n\t\t\t\t\t\t\t\t\"action\": \"Carousel slider click\",\r\n\t\t\t\t\t\t\t\t\"label\": this.activeIndex + 1\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t\tclick: function (e) {\r\n\t\t\t\t\t\tconst { target } = e;\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t!target.classList.contains('swiper-button-next') &&\r\n\t\t\t\t\t\t\t!target.classList.contains('swiper-button-prev')\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\t\t\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\t\t\t\t\"event\": \"trackPDP\",\r\n\t\t\t\t\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\t\t\t\t\"category\": \"Product detail page\",\r\n\t\t\t\t\t\t\t\t\t\"action\": \"Carousel click\",\r\n\t\t\t\t\t\t\t\t\t\"label\": productName\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (this.slideCount < 2) {\r\n\t\t\tthis.showNavigation = false;\r\n\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tnavigation: {},\r\n\t\t\t\tloop: false,\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\t\tthis.$emit(\"ready\", this.slider);\r\n\r\n\t\tinView({\r\n\t\t\tel: this.$refs.slider,\r\n\t\t\tonce: true,\r\n\t\t\tthreshold: 0.2\r\n\t\t});\r\n\t},\r\n};\r\n","export default {\r\n configureData: {\r\n headline: \"Choose Oslo member\",\r\n bodyText: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n items:[\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_blank\",\r\n url: \"#PDP-oslo-2seater\",\r\n label: \"2-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_self\",\r\n url: \"#PDP-oslo-3seater\",\r\n label: \"3-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n isPlanner: true,\r\n imageSrc: \"/static/images/product/chairs.png\",\r\n target: \"_parent\",\r\n color: \"red\",\r\n url: \"#planner-tool\",\r\n label: \"Try out planner tool\"\r\n },\r\n ]\r\n },\r\n arData: {\r\n headline: \"Try with AR\",\r\n bodyText: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n items:[\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_blank\",\r\n url: \"#PDP-oslo-2seater\",\r\n label: \"2-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_self\",\r\n url: \"#PDP-oslo-3seater\",\r\n label: \"3-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n ]\r\n }\r\n}\r\n","import mockData from \"./inspiration-tile-shortcuts-data\";\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n name: 'InspirationTile',\r\n props: {\r\n data: {\r\n type:Object,\r\n required: false,\r\n default() {\r\n return {\r\n bodyText:\"The final of our three creatives is Christiane Spangsberg, a Copenhagen-based painter, speaking on her workshop.\",\r\n code:\"312312 DRED\",\r\n colli:1,\r\n color:\"#000FFF\",\r\n designer:null,\r\n dispatchInfo:\"2-4 weeks\",\r\n formattedPrice:\"€450\",\r\n headline:\"AN INVITING SEAT:<br>COVER LOUNGE\",\r\n hoverImageUrl:null,\r\n imageAltText:\"Modern chair in modern color\",\r\n imageUrl:\" /static/images/product/fiber-armchair-700w.png\",\r\n isConfigurable:null,\r\n productPrimaryName:\"Fiber armchair\",\r\n productSecondaryName:\"Tube base\",\r\n trumpet:\"Designer portrait\",\r\n type:\"Variant\",\r\n url:\"/shop/product/fiber-side-chair---tube-base/fiber-side-chair---tube-base-dusty-red/25003/\",\r\n variantName:\"Dusty red/Dusty red\",\r\n }\r\n }\r\n },\r\n hasShortcuts: {\r\n type: Boolean,\r\n default: false,\r\n required: false,\r\n }, \r\n configureShortcutsOverlayData: {\r\n type: Object,\r\n required: false,\r\n default() {\r\n return mockData.configureData;\r\n }\r\n }, \r\n },\r\n computed: {\r\n\t\ttiletypeClass(){\r\n\t\t\tconst typeAndVariant = this.data.isLargeTile ? \"inspiration-tile--large\" : \"inspiration-tile--inset\";\r\n\t\t\treturn `${typeAndVariant}`\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n\t\t\t'openShortcutsOverlay',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t]),\r\n openConfigureOverlay: function() {\r\n this.openShortcutsOverlay(this.configureShortcutsOverlayData); \r\n this.showOverlayBackdrop();\r\n },\r\n }\r\n}","import ProductTileProd from '../../components/product-tile/product-tile';\r\nimport InspirationTile from '@components/inspiration-tile/inspiration-tile'\r\nimport { mapState } from 'vuex';\r\nimport { uid } from '../../basics/js/utils';\r\nimport { registerImpression } from \"../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer\";\r\n\r\nexport default {\r\n\tname: 'recommendation',\r\n\tcomponents: {\r\n\t\tProductTileProd,\r\n\t\tInspirationTile\r\n },\r\n props: {\r\n\t\tlimit: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: 4\r\n\t\t},\r\n\t\ttileDataJson: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\ttype: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tloadMoreUrl: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tloadMoreText: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\ttotalNumberOfProducts: {\r\n\t\t\ttype: Number,\r\n\t\t\trequired: false\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tlocalLimit: this.limit\t\r\n\t\t};\r\n\t}, \r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisMobile: state => state.isMobile\r\n\t\t}),\r\n\t\tshowLoadMoreButton(){\r\n\t\t\treturn this.localLimit < this.numberOfProducts;\r\n\t\t},\r\n\t\ttileData(){\r\n\t\t\treturn JSON.parse(this.tileDataJson)\r\n\t\t},\r\n\t\tnumberOfProducts(){\r\n\t\t\treturn this.totalNumberOfProducts > 0 ? this.totalNumberOfProducts : this.tileData.length\r\n\t\t},\r\n\t\tloadMoreCount(){\r\n\t\t\treturn this.totalNumberOfProducts > 0 ? this.totalNumberOfProducts : this.numberOfProducts - this.localLimit\r\n\t\t}\t\r\n\t},\r\n\tmethods: {\r\n\t\tuid,\r\n\t\tonLoadMore() {\r\n\t\t\tif(this.loadMoreUrl) {\r\n\t\t\t\tdocument.location.href = this.loadMoreUrl;\r\n\t\t\t} else {\r\n\t\t\t\t// show the rest of the products\r\n\t\t\t\tthis.localLimit = this.numberOfProducts;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t},\r\n\tmounted(){\r\n\t\tregisterImpression(this.tileDataJson, \"recommendation-block\")\r\n\t}\r\n};","import ProductVisualization from '../product-visualization/product-visualization';\r\nimport VariationDropdown from '../variation-dropdown/variation-dropdown';\r\nimport BuySection from '../../components/buy-section/buy-section';\r\nimport AccordionGroup from '../../components/accordion/accordion-group';\r\nimport Slider from '../../components/slider/slider';\r\nimport AddonsOverlay from '../../components/addons-overlay/addons-overlay';\r\nimport copyTextMixin from '../../components/vue-mixins/copyText';\r\nimport recommendation from '../../components/recommendation/recommendation';\r\nimport configurator from '../../components/configurator/configurator';\r\nimport { registerProductDetails } from '../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer'\r\n\r\nimport { mapActions, mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'pdp',\r\n\tprops: {\r\n\t\tvariantCode: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tformattedPrice: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tproductName: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tvariantName: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t},\r\n\tcomponents: {\r\n\t\tProductVisualization,\r\n\t\tVariationDropdown,\r\n\t\tBuySection,\r\n\t\tAccordionGroup,\r\n\t\tSlider,\r\n\t\tAddonsOverlay,\r\n\t\trecommendation,\r\n\t\tconfigurator\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tsku: this.variantCode,\r\n\t\t\tprice: this.formattedPrice,\r\n\t\t\tskuCopied: false,\r\n\t\t\tproductName: this.productName,\r\n\t\t\tvariantName: this.variantName\r\n\t\t};\r\n\t},\t\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tshowPDPSpinner: state => state.configurator.showPDPSpinner,\r\n\t\t})\r\n\t},\r\n\twatch: {\r\n\t\tshowPDPSpinner: function(newVal) {\r\n\t\t\tconsole.log(\"showPDPSpinner?\",newVal);\r\n\t\t}\r\n\t},\r\n\tmounted(){\r\n\t\tif ( !this.$refs['pdp-inspiration-slider'] ) return false;\r\n\r\n\t\tthis.$refs[\"pdp-inspiration-slider\"].$el.classList.add('slider--with-zoom')\r\n\r\n\t\tthis.$refs['pdp-inspiration-slider'].slider.on('click', function (e) {\r\n\t\t\tif (e.target.tagName.toLowerCase() == 'img') {\r\n\t\t\t\tthis.$refs['product-visualization-slider'].$refs['product-visualization-cylindo-overlay'].showOverlay(e.target.getAttribute('src'));\r\n\t\t\t}\r\n\t\t}.bind(this));\r\n\r\n\t\t//Auto open configurator if \"configure=true\"\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\tif (urlParams.get('configure')) this.openConfigurator();\r\n\r\n\t\t// TODO RRU, get missing data\r\n\t\tregisterProductDetails(this.productName, this.variantName, this.sku, this.price)\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'openAddonsOverlay',\r\n\t\t\t'openConfigurator',\r\n\t\t]),\r\n\t\tupdateReceiverMethodProductTile() {},\r\n\t\tonQuantityUpdate() {},\r\n\t\treadMoreClick(event) {\r\n\t\t\tlet targetElement = event.target.dataset ? document.querySelector(event.target.dataset.target) : null;\r\n\t\t\tconsole.log('event.target.dataset',event.target.dataset)\r\n\t\t\tif (targetElement instanceof HTMLElement) {\r\n\t\t\t\ttargetElement.scrollIntoView({behavior:'smooth',block:'start'});\r\n\t\t\t\tlet accordionTrigger = targetElement.querySelector('.accordion__trigger');\r\n\t\t\t\ttry {\r\n\t\t\t\t\taccordionTrigger.click();\r\n\t\t\t\t}\r\n\t\t\t\tcatch(error) {\r\n\t\t\t\t\t//CAN'T TRIGGER\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tcopyText(event, attr) {\r\n\t\t\tthis.skuCopied = true\r\n\t\t\tsetTimeout(()=> this.skuCopied = false, 2000);\r\n\r\n\t\t\tcopyTextMixin.methods.copyText(event,attr);\r\n\t\t}\r\n\r\n\t},\r\n};\r\n","import { mapActions } from \"vuex\";\r\nimport { SET_FILTER_COLOR } from '../../basics/js/store/static';\r\n\r\nexport default {\r\n\tname: 'form-checkbox-filter',\r\n\tcomponents: {\r\n\t},\r\n\tprops: {\r\n color: String,\r\n cssClass: Object,\r\n value: String,\r\n id: [String, Number],\r\n\t\ttooltip: String,\r\n checked: Boolean,\r\n disabled: Boolean,\r\n name: String,\r\n facet: String,\r\n\t\tcategory: Object\r\n },\r\n data() {\r\n return {\r\n isActive: false,\r\n label: this.name\r\n }\r\n },\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openToolTip\",\r\n\t\t]),\r\n\t\thover() {\r\n\t\t\tthis.$store.dispatch(SET_FILTER_COLOR.action, this.color || null);\r\n },\r\n onInputChange(event) {\r\n\t\t\tthis.$emit('inputchange', event);\r\n\t\t},\r\n\t\tmouseLeave() {\r\n\t\t\tthis.$store.dispatch(SET_FILTER_COLOR.action, null);\r\n\t\t}\r\n\t}\r\n};\r\n","import { mapActions } from \"vuex\";\r\nimport { SET_FILTER_COLOR } from '../../basics/js/store/static';\r\n\r\n\r\nexport default {\r\n\tname: 'form-logical-filter',\r\n\tcomponents: {\r\n\t},\r\n\tprops: {\r\n color: String,\r\n cssClass: Object,\r\n value: String,\r\n id: [String, Number],\r\n\t\ttooltip: String,\r\n disabled: Boolean,\r\n name: String,\r\n facet: String,\r\n\t\tcategory: Object\r\n },\r\n data() {\r\n return {\r\n isActive: false,\r\n label: this.name\r\n }\r\n },\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openToolTip\",\r\n\t\t]),\r\n\t\thover() {\r\n\t\t\tthis.$store.dispatch(SET_FILTER_COLOR.action, this.color || null);\r\n },\r\n onInputChange(event) {\r\n\t\t\tthis.$emit('inputchange', event);\r\n\t\t},\r\n\t\tmouseLeave() {\r\n\t\t\tthis.$store.dispatch(SET_FILTER_COLOR.action, null);\r\n\t\t}\r\n\t}\r\n};\r\n","import Store from '@store/store'\r\n\r\nexport default (checkbox) => {\r\n\r\n const selectedFiltersStore = Store.state.search.selectedFacets\r\n\r\n const selectedFilter = selectedFiltersStore.find(facet => facet.id === checkbox.facet)\r\n const matchingValue = selectedFilter ? selectedFilter.facetValues.find(value => value.id === checkbox.value) : null\r\n\r\n return !!matchingValue\r\n \r\n}","import Store from '@store/store'\r\n\r\nexport const LOGICAL_STATE = {\r\n\tINCLUDING: 'INCLUDING',\r\n\tEXCLUDING: 'EXCLUDING',\r\n\tINDIFFERENT: 'INDIFFERENT'\r\n};\r\n\r\n\r\nexport default (control) => {\r\n\tconst selectedFiltersStore = Store.state.search.selectedFacets\r\n\r\n const selectedFacet = selectedFiltersStore.find(facet => facet.id === control.facet);\r\n\r\n\tif ( selectedFacet ) {\r\n\t\tselectedFacet.facetValues = selectedFacet.facetValues || [];\r\n\r\n\t\tconst selectedFilter = selectedFacet.facetValues.find(filter => filter.id === control.id);\r\n\r\n\t\tif ( selectedFilter && selectedFilter.value ) return selectedFilter.value;\r\n\t}\r\n\r\n\treturn LOGICAL_STATE.INDIFFERENT;\r\n}\r\n","import { mapState, mapActions } from \"vuex\";\r\nimport AccordionItem from \"../../components/accordion/accordion\";\r\nimport FormCheckboxFilter from \"./form-checkbox-filter\";\r\nimport FormLogicalFilter from \"./form-logical-filter\";\r\nimport Store from \"@store/store\";\r\n\r\nimport { SET_FILTER_COLOR } from \"../../basics/js/store/static\";\r\n\r\nimport isChecked from \"./methods/isChecked\";\r\nimport getLogicalValue from './methods/getLogicalValue'\r\n\r\nexport default {\r\n\tname: \"accordion-item-filter\",\r\n\textends: AccordionItem,\r\n\tcomponents: {\r\n\t\tFormCheckboxFilter,\r\n\t\tFormLogicalFilter,\r\n\t},\r\n\tprops: {\r\n\t\tcolor: String,\r\n\t\tfilterGroupIndex: Number,\r\n\t\titem: Object,\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openToolTip\",\r\n\t\t]),\r\n\t\tshowRemainingFilters: function () {\r\n\t\t\tthis.allFiltersShown = true;\r\n\t\t},\r\n\t\tonInputChange: function (event) {\r\n\t\t\tthis.$emit(\"update\", { facet: event.facet, id: event.id, name: event.name, value: event.value });\r\n\t\t},\r\n\t\tisChecked,\r\n\t\tgetLogicalValue,\r\n\t\tsearch: function (event) {\r\n\t\t\tthis.searchQuery = event.target.value;\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tcheckedFilters: [],\r\n\t\t\tsearchQuery: \"\",\r\n\r\n\t\t\tallFiltersShown: false,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([SET_FILTER_COLOR.stateKey]),\r\n\t\tuseShowAll() {\r\n\t\t\t// console.log(\"useShowAll?\",\r\n\t\t\t// !!this.item,\r\n\t\t\t// !!this.item.categories,\r\n\t\t\t// this.item.categories.length === 1,\r\n\t\t\t// !!this.item.categories[0],\r\n\t\t\t// !!this.item.categories[0].filters,\r\n\t\t\t// this.item.categories[0].filters.length > 10 );\r\n\r\n\t\t\tif ( !!this.item\r\n\t\t\t\t&& !!this.item.categories\r\n\t\t\t\t&& this.item.categories.length === 1\r\n\t\t\t\t&& !!this.item.categories[0]\r\n\t\t\t\t&& !!this.item.categories[0].filters\r\n\t\t\t\t&& this.item.categories[0].filters.length > 10\r\n\t\t\t\t&& this.searchQuery.length === 0 ) return true;\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tselectedFilters() {\r\n\t\t\treturn Store.state.search.selectedFacets;\r\n\t\t},\r\n\t\tbackgroundColor() {\r\n\t\t\treturn this[SET_FILTER_COLOR.stateKey] ? `--product-filter-bg-color-active: ${this[SET_FILTER_COLOR.stateKey]}` : \"\";\r\n\t\t},\r\n\t\tcategories() {\r\n\t\t\tif (this.item.hasSearch && this.searchQuery.length > 1) {\r\n\t\t\t\tconsole.log(\"looking for\", this.searchQuery);\r\n\t\t\t\tlet filteredCategory = {filters: [], name: \"Search Results\"};\r\n\t\t\t\tthis.item.categories.forEach((category) => {\r\n\t\t\t\t\tcategory.filters.forEach((filter) => {\r\n\t\t\t\t\t\tconsole.log(\"filter\", filter);\r\n\t\t\t\t\t\tif (filter.name.toLowerCase().includes(this.searchQuery.toLowerCase())) {\r\n\t\t\t\t\t\t\tfilteredCategory.filters.push(filter);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\tconsole.log(\"filteredCategory\", filteredCategory);\r\n\t\t\t\treturn [filteredCategory];\r\n\t\t\t} else if (this.useShowAll) {\r\n\t\t\t\tif (this.allFiltersShown) {\r\n\t\t\t\t\treturn this.item.categories;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// return the first 10 filters in the first category\r\n\t\t\t\t\treturn this.item.categories.map((category) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t...category,\r\n\t\t\t\t\t\t\tfilters: category.filters.slice(0, 10),\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this.item.categories;\r\n\t\t},\r\n\t},\r\n};\r\n","// import TweenLite from 'gsap/umd/TweenLite';\r\nimport { TweenLite } from \"gsap\";\r\nimport { mapState, mapActions } from 'vuex';\r\n\r\nimport AccordionItemFilter from \"./accordion-item-filter\";\r\nimport AccordionItem from \"../../components/accordion/accordion\";\r\nimport { SET_FILTER_COLOR } from \"../../basics/js/store/static\";\r\n\r\nexport default {\r\n\tname: \"product-filter\",\r\n\tcomponents: {\r\n\t\tAccordionItemFilter,\r\n\t\tAccordionItem,\r\n\t},\r\n\tprops: {\r\n\t\tnumberOfProducts: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 0,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openProductFilters\",\r\n\t\t\t\"closeProductFilters\",\r\n\t\t]),\r\n\t\ttoggle () {\t\t\t\r\n\t\t\tif (this.isOpen == true) {\r\n\t\t\t\tthis.closeProductFilters();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openProductFilters();\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimateContent() {\r\n\t\t\tif ( this.hideContent ) return;\r\n\r\n\t\t\tconst filters = this.$refs['filter-content'];\r\n\r\n\t\t\tif (this.isOpen == true) {\r\n\t\t\t\tconsole.log(\"anim open\")\r\n\t\t\t\tTweenLite.set(filters, { height: 'auto' });\r\n\t\t\t\tTweenLite.from(filters, 0.3, { height: 0 });\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(\"anim close\")\r\n\t\t\t\tTweenLite.to(filters, 0.3, { height: 0});\r\n\t\t\t}\r\n\t\t},\r\n\t\tclear() {\r\n\t\t\tthis.selectedFilters = [];\r\n\t\t\t// TODO: this should be refactored, it's only to show how filters should work\r\n\t\t\t// it would be better if the filter intacted directly with the state\r\n\t\t\tthis.$emit(\"change\", this.selectedFilters);\r\n\t\t},\r\n\t\taddFilter() {\r\n\t\t\tconsole.log(\"add filter\");\r\n\t\t\tthis.selectedFilters.push({\r\n\t\t\t\tname: \"New Filter - lorem ipsum dolor sit amet\",\r\n\t\t\t\tid: Math.random(),\r\n\t\t\t});\r\n\t\t},\r\n\t\tremoveFilter(id) {\r\n\t\t\tthis.selectedFilters = this.selectedFilters.filter(\r\n\t\t\t\t(obj) => obj.id !== id\r\n\t\t\t);\r\n\t\t},\r\n\t\tgetFilterItems(items, id) {\r\n\t\t\treturn items.filter((item) => item.id === id);\r\n\t\t},\r\n\t\tonSelect(checkedFilter) {\r\n\t\t\tconst index = this.selectedFilters.findIndex(\r\n\t\t\t\t(e) => e.id === checkedFilter.id\r\n\t\t\t);\r\n\r\n\t\t\tif (index === -1) {\r\n\t\t\t\tthis.selectedFilters.push(checkedFilter);\r\n\t\t\t} else {\r\n\t\t\t\tthis.selectedFilters = this.selectedFilters.filter(\r\n\t\t\t\t\t(item) => item.id !== checkedFilter.id\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tthis.doApiStuff();\r\n\t\t},\r\n\t\tdoApiStuff() {\r\n\t\t\t// TODO: this should be refactored, it's only to show how filters should work\r\n\t\t\t// it would be better if the filter intacted directly with the state\r\n\t\t\tthis.$emit(\"change\", this.selectedFilters);\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([SET_FILTER_COLOR.stateKey, \"isMobile\", \"productFiltersOpen\"]),\r\n\t\tisOpen(){\r\n\t\t\treturn this.$store.state.productFiltersOpen\r\n\t\t},\r\n\t\tbackgroundColor() {\r\n\t\t\treturn this[SET_FILTER_COLOR.stateKey]\r\n\t\t\t\t? `--product-filter-bg-color-active: ${\r\n\t\t\t\t\t\tthis[SET_FILTER_COLOR.stateKey]\r\n\t\t\t\t}`\r\n\t\t\t\t: \"--product-filter-bg-color-active: #fff\";\r\n\t\t},\r\n\t\tavailableTotalResults() {\r\n\t\t\tvar number = 23218;\r\n\t\t\treturn number.toLocaleString(\"da-dk\");\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tisOpen(){\r\n\t\t\tthis.animateContent();\r\n\t\t},\r\n\t\tcheckedFilters() {\r\n\t\t\tconsole.log(\"Checked filters: \", this.checkedFilters);\r\n\t\t},\r\n\t\tsearchTerm() {\r\n\t\t\t// TODO/deprecated: add functionality to filter the filters\r\n\t\t\t// TODO: Add functionality to make the search-term a selected filter\r\n\t\t\tconsole.log(\"Filter products with searchTerm: \", this.searchTerm);\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.isMounted = true;\r\n\r\n\t\tthis.$on(\"toggleAccordion\", () => {\r\n\t\t\t// Close already open accordions\r\n\t\t\tthis.$refs[\"accordion\"].forEach(function (accordion) {\r\n\t\t\t\tif (accordion.isOpen) {\r\n\t\t\t\t\taccordion.close();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.animateContent();\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tsearchTerm: \"\",\r\n\t\t\tcheckedFilters: [],\r\n\t\t\tselectedFilters: [],\r\n\t\t\tfilterGroups: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 0,\r\n\t\t\t\t\ttitle: \"Type\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Dining chair\",\r\n\t\t\t\t\t\t\tid: 0,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Office chair\",\r\n\t\t\t\t\t\t\tid: 1,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 1,\r\n\t\t\t\t\ttitle: \"Family\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Family 1\",\r\n\t\t\t\t\t\t\tid: 3,\r\n\t\t\t\t\t\t\tactive: false,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Family 2\",\r\n\t\t\t\t\t\t\tid: 4,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Family 3\",\r\n\t\t\t\t\t\t\tid: 41,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Family 4\",\r\n\t\t\t\t\t\t\tid: 42,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Family 5\",\r\n\t\t\t\t\t\t\tid: 43,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Family 5\",\r\n\t\t\t\t\t\t\tid: 44,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 2,\r\n\t\t\t\t\ttitle: \"Material\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Eating chair\",\r\n\t\t\t\t\t\t\tid: 5,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Office dog chair\",\r\n\t\t\t\t\t\t\tid: 6,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 3,\r\n\t\t\t\t\ttitle: \"Basetype\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Eating chair\",\r\n\t\t\t\t\t\t\tid: 7,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Office dog chair\",\r\n\t\t\t\t\t\t\tid: 8,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 4,\r\n\t\t\t\t\ttitle: \"Height\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Eating chair\",\r\n\t\t\t\t\t\t\tid: 9,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Office dog chair\",\r\n\t\t\t\t\t\t\tid: 10,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 5,\r\n\t\t\t\t\ttitle: \"Color\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 11,\r\n\t\t\t\t\t\t\tactive: false,\r\n\t\t\t\t\t\t\tname: \"Cyan\",\r\n\t\t\t\t\t\t\tcolor: \"#ddeedd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 12,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Red\",\r\n\t\t\t\t\t\t\tcolor: \"#eedddd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 13,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Purple\",\r\n\t\t\t\t\t\t\tcolor: \"#ddddee\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 14,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Yellow\",\r\n\t\t\t\t\t\t\tcolor: \"#ffeedd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 15,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Cyan\",\r\n\t\t\t\t\t\t\tcolor: \"#ddeedd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 16,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Red\",\r\n\t\t\t\t\t\t\tcolor: \"#eedddd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 17,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Purple\",\r\n\t\t\t\t\t\t\tcolor: \"#ddddee\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 18,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Yellow\",\r\n\t\t\t\t\t\t\tcolor: \"#ffeedd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 19,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Cyan\",\r\n\t\t\t\t\t\t\tcolor: \"#ddeedd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 20,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Red\",\r\n\t\t\t\t\t\t\tcolor: \"#eedddd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 21,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Purple\",\r\n\t\t\t\t\t\t\tcolor: \"#ddddee\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 22,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t\tname: \"Yellow\",\r\n\t\t\t\t\t\t\tcolor: \"#ffeedd\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tid: 6,\r\n\t\t\t\t\ttitle: \"Designer\",\r\n\t\t\t\t\tfilters: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Andersen & Voll\",\r\n\t\t\t\t\t\t\tid: 0,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Cecilie Manz\",\r\n\t\t\t\t\t\t\tid: 1,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"David Geckeler\",\r\n\t\t\t\t\t\t\tid: 2,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Iskos-Berlin\",\r\n\t\t\t\t\t\t\tid: 3,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Mika Tolvanen\",\r\n\t\t\t\t\t\t\tid: 4,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname: \"Thomas Bentzen\",\r\n\t\t\t\t\t\t\tid: 5,\r\n\t\t\t\t\t\t\tactive: true,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\tisMounted: false,\r\n\t\t};\r\n\t},\r\n\t\r\n};\r\n","import urlComposer from '../urlComposer/urlComposer'\r\nimport Store from '@store/store';\r\n\r\nexport default function({method, historyStateAction = 'performProductFiltering', historyUnused = 'product-filter'}){\r\n\r\n const queryString = urlComposer({facets:Store.state.search.selectedFacets, searchQuery:Store.state.search.searchQuery})\r\n\r\n const manipulateHistoryMethod = method === 'replaceState' ? method : 'pushState'\r\n\r\n history[manipulateHistoryMethod](\r\n {\r\n action: historyStateAction,\r\n searchTerm:'',\r\n selectedFacets:Store.state.search.selectedFacets,\r\n searchQuery: Store.state.search.searchQuery,\r\n excludeEditorPicks: Store.state.search.excludeEditorPicks\r\n },\r\n historyUnused,\r\n location.pathname+queryString\r\n )\r\n\r\n}\r\n","import Store from '@store/store';\r\nimport updateBrowserHistory from '../updateBrowserHistory/updateBrowserHistory'\r\n\r\nexport default function(filters, skipFilterEndpoint = false){\r\n Store.commit('updateSelectedFacets',filters)\r\n Store.commit('updateFilterSkip',0)\r\n Store.commit('updateVisibleResults',0)\r\n Store.commit('updateExcludeEditorPicks',false)\r\n if ( !skipFilterEndpoint ) Store.dispatch('performProductFiltering')\r\n updateBrowserHistory({method:'replaceState'})\r\n\r\n // editor picks are not under component control, so we need to manually apply a \"hide\" class\r\n const editorPicksDOM = document.querySelector('.js--hide-when-filters-change')\r\n if(editorPicksDOM){\r\n editorPicksDOM.classList.add('hide-element')\r\n }\r\n}\r\n","// import TweenLite from 'gsap/umd/TweenLite';\r\nimport Store from '@store/store';\r\nimport {TweenLite} from 'gsap';\r\nimport { mapState, mapActions } from 'vuex';\r\n\r\nimport AccordionItemFilter from './accordion-item-filter';\r\nimport AccordionItem from '../../components/accordion/accordion';\r\nimport formCheckboxFilter from './form-checkbox-filter'\r\nimport { SET_FILTER_COLOR } from '../../basics/js/store/static';\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport updateFilteredResult from '../../basics/js/methods/updateTileFilters/updateTileFilters'\r\nimport { registerImpression } from \"../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer\";\r\n\r\nimport isChecked from './methods/isChecked'\r\nimport getLogicalValue, { LOGICAL_STATE } from './methods/getLogicalValue'\r\n\r\n\r\nexport default {\r\n\tname: 'tile-filter',\r\n\tcomponents: {\r\n\t\tAccordionItemFilter,\r\n\t\tAccordionItem,\r\n\t\tformCheckboxFilter\r\n\t},\r\n\tprops: {\r\n\t\tinitialAvailableTotalResults: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault:'0'\r\n\t\t},\r\n\t\tinitialFacets : {\r\n\t\t\ttype: String\r\n\t\t},\r\n\t\tinitialSelectedFacets: {\r\n\t\t\ttype: String\r\n\t\t},\r\n\t\tinitialSearchQuery: {\r\n\t\t\ttype: String\r\n\t\t},\r\n\t\tinitialResults: {\r\n\t\t\ttype: String\r\n\t\t},\r\n\t\tpageSize: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '0'\r\n\t\t},\r\n\t\tinitialPageSize: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '0'\r\n\t\t},\r\n\t\texcludeEditorPicks: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tpageId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tendpoint: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\thideBar: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\thideContent: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tnavigationLinks: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tmakeRoomForSearch: {\r\n\t\t\ttype: Boolean,\r\n\t\t},\r\n\t\tskipFilterEndpoint: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openProductFilters\",\r\n\t\t\t\"closeProductFilters\",\r\n\t\t]),\r\n\t\tisChecked,\r\n\t\tgetLogicalValue,\r\n\t\ttoggle () {\r\n\t\t\tif (this.isOpen == true) {\r\n\t\t\t\tthis.closeProductFilters();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openProductFilters();\r\n\t\t\t}\r\n\t\t\tthis.animateContent();\r\n\t\t},\r\n\t\tanimateContent () {\r\n\t\t\tif ( this.hideContent ) return;\r\n\r\n\t\t\tconst filters = this.$refs['filter-content'];\r\n\r\n\t\t\tif (this.isOpen == true) {\r\n\t\t\t\tTweenLite.set(filters, { height: 'auto' });\r\n\t\t\t\tif ( !this.hideBar || this.isMobile ) TweenLite.from(filters, 0.3, { height: 0 });\r\n\t\t\t} else {\r\n\t\t\t\tif ( !this.hideBar || this.isMobile ) TweenLite.to(filters, 0.3, { height: 0});\r\n\t\t\t}\r\n\t\t},\r\n\t\tclear () {\r\n\t\t\tthis.updateFilteredResult([], this.skipFilterEndpoint)\r\n\t\t},\r\n\t\tremoveFilter (filter) {\r\n\t\t\tthis.changeFilter(filter)\r\n\t\t},\r\n\t\tgetFilterItems (items, id) {\r\n\t\t\treturn items.filter(item => item.id === id);\r\n\t\t},\r\n\t\tonReadyToShip(event){\r\n\t\t\tthis.changeFilter({ value: event.target.value, label: event.target.name, name: event.target.name })\r\n\t\t},\r\n\t\tchangeFilter (checkedFilter) {\r\n\t\t\tconsole.log(\"changeFilter\", checkedFilter)\r\n\r\n\t\t\tconst checkedFilters = cloneDeep(this.checkedFilters)\r\n\r\n\t\t\tconst facet = checkedFilters.find(filter => filter.id === checkedFilter.facet)\r\n\r\n\t\t\tlet newFilter = {id: checkedFilter.id, name: checkedFilter.name}\r\n\t\t\tif ( checkedFilter.value ) newFilter.value = checkedFilter.value;\r\n\r\n\t\t\tif (facet) {\r\n\r\n\t\t\t\tconst existingFilter = facet.facetValues.find(value => value.id === checkedFilter.id)\r\n\t\t\t\tif ( existingFilter ) {\r\n\t\t\t\t\t// filter exists\r\n\t\t\t\t\tif ( checkedFilter.value && existingFilter.value !== checkedFilter.value ) {\r\n\t\t\t\t\t\t// remove filter if it is already checked and the new value is indifferent\r\n\t\t\t\t\t\tif ( checkedFilter.value === LOGICAL_STATE.INDIFFERENT ) {\r\n\t\t\t\t\t\t\tfacet.facetValues = facet.facetValues.filter(value => value.id !== checkedFilter.id)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// update value\r\n\t\t\t\t\t\t\texistingFilter.value = checkedFilter.value\r\n\t\t\t\t\t\t\tfacet.facetValues = facet.facetValues.map(value => {\r\n\t\t\t\t\t\t\t\tif ( value.id === checkedFilter.id ) return existingFilter\r\n\t\t\t\t\t\t\t\telse return value\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tfacet.facetValues = facet.facetValues.filter(value => value.id !== checkedFilter.id)\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfacet.facetValues.push(newFilter);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcheckedFilters.push({\r\n\t\t\t\t\tid: checkedFilter.facet,\r\n\t\t\t\t\tfacetValues: [newFilter]\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\tthis.updateFilteredResult(checkedFilters, this.skipFilterEndpoint)\r\n\r\n\t\t},\r\n\t\tupdateFilteredResult,\r\n\t\tlinkClass(link){\r\n\t\t\treturn `link ${link.active ? 'link--persistent active' : ''}`;\r\n\t\t}\r\n\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tsearchTerm: '',\r\n\t\t\tselectedFilters: [],\r\n\t\t\tnavigationLinksParsed: []\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState([SET_FILTER_COLOR.stateKey, 'isMobile', 'productFiltersOpen']),\r\n\t\tisOpen(){\r\n\t\t\treturn this.$store.state.productFiltersOpen\r\n\t\t},\r\n backgroundColor(){\r\n return this[SET_FILTER_COLOR.stateKey] ? `--product-filter-bg-color-active: ${this[SET_FILTER_COLOR.stateKey]}` : '--product-filter-bg-color-active: #fff'\r\n\t\t},\r\n\t\tfilterGroups(){\r\n\t\t\treturn Store.state.search.facets\r\n\t\t},\r\n\t\tisMounted(){\r\n\t\t\treturn !!Store.state.search.facets.length\r\n\t\t},\r\n\t\tcheckedFilters(){\r\n\t\t\treturn Store.state.search.selectedFacets\r\n\t\t},\r\n\t\tcountCheckedFilters(){\r\n\t\t\treturn this.checkedFilters.reduce((count,filter)=>{\r\n\t\t\t\treturn count + (filter.facetValues ? filter.facetValues.length : 0)\r\n\t\t\t},0)\r\n\t\t},\r\n\t\tavailableTotalResults(){\r\n\t\t\treturn Store.state.search.availableTotalResults.toLocaleString('da-dk');\r\n\t\t},\r\n\t\tdisplayCheckedFilters(){\r\n\t\t\treturn this.checkedFilters.filter(item => item.id !== 'readyToShip');\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tisOpen(){\r\n\t\t\tthis.animateContent();\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\r\n\t\t// load filters to display\r\n\t\tconst initialFacets = this.initialFacets ? JSON.parse(this.initialFacets) : []\r\n\t\tconst initialSelectedFacets = this.initialSelectedFacets ? JSON.parse(this.initialSelectedFacets): []\r\n\t\tconst initialResults = this.initialResults ? JSON.parse(this.initialResults) : []\r\n\t\tconst initialAvailableTotalResults = this.initialAvailableTotalResults ? +this.initialAvailableTotalResults : 30\r\n\t\tconst initialTake = +this.pageSize\r\n\t\tconst initialPageSize = +this.initialPageSize\r\n\t\tconst initialSearchQuery = this.initialSearchQuery\r\n\t\tconst excludeEditorPicks = this.excludeEditorPicks\r\n\r\n\r\n\t\tStore.dispatch('filterInitialLoad',{initialFacets,initialResults,initialAvailableTotalResults,initialSelectedFacets, initialSearchQuery, initialPageSize, excludeEditorPicks,initialTake, pageId: this.pageId, filterEndpoint: this.endpoint})\r\n\r\n\t\tconsole.log(\"initialSelectedFacets\",initialSelectedFacets)\r\n\r\n\t\tregisterImpression(initialResults, \"product-search-tile\")\r\n\r\n\t\tthis.$on('toggleAccordion', () => {\r\n\t\t\t// Close already open accordions\r\n\t\t\tthis.$refs['accordion'].forEach(function (accordion) {\r\n\t\t\t\tif (accordion.isOpen) {\r\n\t\t\t\t\taccordion.close();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.navigationLinksParsed = this.navigationLinks ? JSON.parse(this.navigationLinks) : null;\r\n\r\n\t\tthis.animateContent();\r\n\r\n\r\n\t},\r\n};\r\n","// import TweenLite from 'gsap/umd/TweenLite';\r\n\r\nimport ProductFilter from '../../components/product-filter/product-filter';\r\nimport TileFilter from '../../components/product-filter/tile-filter';\r\nimport ProductTileProd from '../../components/product-tile/product-tile';\r\n\r\nimport { mapActions, mapState } from 'vuex';\r\nimport { uid } from '../../basics/js/utils';\r\nimport { GET_PRODUCTS } from '../../basics/js/store/static';\r\n\r\nexport default {\r\n\tname: 'product-list-filter',\r\n\tcomponents: {\r\n\t\tProductFilter,\r\n\t\tTileFilter,\r\n ProductTileProd\r\n\t},\r\n\tprops: {\r\n\t\tlimit: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 16\r\n\t\t}\r\n\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisDirty: false, // has the list received the first products yet?\r\n\t\t\tghostProducts: [1,2],\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tproducts: state => state.plp[GET_PRODUCTS.stateKey],\r\n\t\t\tlimitProducts: function(state) {\r\n\t\t\t\tconst products = state.plp[GET_PRODUCTS.stateKey];\r\n\t\t\t\treturn this.limit ? products.slice(0, this.limit) : this.products;\r\n\t\t\t},\r\n\t\t\tisLoading: state => state.plp[GET_PRODUCTS.loadingKey]\r\n\t\t})\r\n\t},\r\n\twatch: {\r\n\t\tproducts() {\r\n\t\t\tif(this.isDirty) return;\r\n\t\t\tthis.isDirty = this.products.length>0;\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\tGET_PRODUCTS.action\r\n\t\t]),\r\n\t\tonFilterChange(event) {\r\n\t\t\t// TODO: this should be refactored, it's only to show how filters should work\r\n\t\t\tthis[GET_PRODUCTS.action](event.length ? {id: event.lastItem.id } : {id:\"\"});\r\n\t\t},\r\n\t\tgetId(){\r\n\t\t\treturn uid();\r\n\t\t},\r\n\t\tonMoreClick(){\r\n\t\t\tthis.limit = null;\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tmounted() {\r\n\t\tthis[GET_PRODUCTS.action]();\r\n }\r\n};\r\n","export default {\r\n\tname: 'expandable',\r\n\tprops: {\r\n\t\ttriggerOnce: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\texpanded: false,\r\n\t\t\tanimating: false\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\texpandButtonHandler(){\r\n\t\t\tif ( !this.expanded ) {\r\n\t\t\t\tthis.animating = true\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tthis.expanded = true\r\n\t\t\t\t}, 30)\r\n\t\t\t} else {\r\n\t\t\t\tthis.expanded = false\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tthis.animating = false\r\n\t\t\t\t\tthis.expanded = false\r\n\t\t\t\t}, 200)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","import { mapActions } from \"vuex\";\r\nimport Expandable from \"../expandable/expandable\";\r\n\r\nexport default {\r\n\tname: \"page-header\",\r\n\tdata: () => ({\r\n\t\tgradientColor: \"transparent\",\r\n\t}),\r\n\tcomponents: {\r\n\t\tExpandable\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"openMainSearch\"]),\r\n\t},\r\n\tmounted() {\r\n\t\tconst bodyBackground = getComputedStyle(document.body).backgroundColor\r\n\t\tconst noBackground = \"rgba(0, 0, 0, 0)\"\r\n\t\tthis.gradientColor =\r\n\t\t\tbodyBackground !== noBackground ? bodyBackground : \"#ffffff\";\r\n\t},\r\n};\r\n","/*\r\n * TouchScroll - using dom overflow:scroll\r\n * by kmturley\r\n */\r\n\r\n/*globals window, document */\r\n\r\nclass TouchScroll {\r\n\r\n\tconstructor() {\r\n\t\tthis.axis = 'x';\r\n\t\tthis.drag = false;\r\n\t\tthis.zoom = 1;\r\n\t\tthis.time = 0.04;\r\n\t\tthis.isIE = window.navigator.userAgent.toLowerCase().indexOf('msie') > -1;\r\n\t\tthis.isFirefox = window.navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\t}\r\n\r\n\t/**\r\n\t * @method init\r\n\t */\r\n\tinit(options) {\r\n\t\tvar me = this;\r\n\t\tthis.options = options;\r\n\r\n\t\t// find target element or fall back to body\r\n\t\tif (options && options.el) {\r\n\t\t\tthis.el = options.el;\r\n\t\t}\r\n\t\tif (!this.el) {\r\n\t\t\tif (this.isIE || this.isFirefox) {\r\n\t\t\t\tthis.el = document.documentElement;\r\n\t\t\t} else {\r\n\t\t\t\tthis.el = document.body;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if draggable option is enabled add events\r\n\t\tif (options.draggable === true) {\r\n\t\t\tif (this.isIE) {\r\n\t\t\t\tdocument.ondragstart = function () { return false; };\r\n\t\t\t}\r\n\t\t\tif (this.isIE || this.isFirefox) {\r\n\t\t\t\tthis.body = document.documentElement;\r\n\t\t\t} else {\r\n\t\t\t\tthis.body = document.body;\r\n\t\t\t}\r\n\t\t\tthis.addEvent('mousedown', this.el, function (e) { me.onMouseDown(e); });\r\n\t\t\tthis.addEvent('mousemove', this.el, function (e) { me.onMouseMove(e); });\r\n\t\t\tthis.addEvent('mouseup', this.body, function (e) { me.onMouseUp(e); });\r\n\t\t}\r\n\r\n\t\t// if zoom option exists add mouse wheel functionality to element\r\n\t\tif (options && options.zoom) {\r\n\t\t\tthis.elzoom = document.getElementById(options.zoom);\r\n\t\t\tif (this.isFirefox) {\r\n\t\t\t\tthis.addEvent('DOMMouseScroll', this.el, function (e) { me.onMouseWheel(e); });\r\n\t\t\t} else {\r\n\t\t\t\tthis.addEvent('mousewheel', this.el, function (e) { me.onMouseWheel(e); });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if scroll options exist add events\r\n\t\tif (options && options.prev) {\r\n\t\t\tthis.prev = document.getElementById(options.prev);\r\n\t\t\tthis.addEvent('mousedown', this.prev, function (e) {\r\n\t\t\t\tme.onMouseDown(e);\r\n\t\t\t});\r\n\t\t\tthis.addEvent('mouseup', this.prev, function (e) {\r\n\t\t\t\tme.diffx = options.distance ? (-options.distance / 11) : -11;\r\n\t\t\t\tme.onMouseUp(e);\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (options && options.next) {\r\n\t\t\tthis.next = document.getElementById(options.next);\r\n\t\t\tthis.addEvent('mousedown', this.next, function (e) {\r\n\t\t\t\tme.onMouseDown(e);\r\n\t\t\t});\r\n\t\t\tthis.addEvent('mouseup', this.next, function (e) {\r\n\t\t\t\tme.diffx = options.distance ? (options.distance / 11) : 11;\r\n\t\t\t\tme.onMouseUp(e);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @method addEvent\r\n\t */\r\n\taddEvent(name, el, func) {\r\n\t\tif (el.addEventListener) {\r\n\t\t\tel.addEventListener(name, func, false);\r\n\t\t} else if (el.attachEvent) {\r\n\t\t\tel.attachEvent('on' + name, func);\r\n\t\t} else {\r\n\t\t\tel[name] = func;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @method cancelEvent\r\n\t */\r\n\tcancelEvent(e) {\r\n\t\tif (!e) { e = window.event; }\r\n\t\tif (e.target && e.target.nodeName === 'IMG') {\r\n\t\t\te.preventDefault();\r\n\t\t} else if (e.srcElement && e.srcElement.nodeName === 'IMG') {\r\n\t\t\te.returnValue = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @method onMouseDown\r\n\t */\r\n\tonMouseDown(e) {\r\n\t\tif (this.drag === false || this.options.wait === false) {\r\n\t\t\t// ignore mousedown event if emitted on scrollbar\r\n\t\t\tthis.drag = e.offsetX <= e.target.clientWidth && e.offsetY <= e.target.clientHeight;\r\n\t\t\tthis.cancelEvent(e);\r\n\t\t\tthis.startx = e.clientX + this.el.scrollLeft;\r\n\t\t\tthis.starty = e.clientY + this.el.scrollTop;\r\n\t\t\tthis.diffx = 0;\r\n\t\t\tthis.diffy = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @method onMouseMove\r\n\t */\r\n\tonMouseMove(e) {\r\n\t\tif (this.drag === true) {\r\n\t\t\tthis.cancelEvent(e);\r\n\t\t\tif ( this.axis.indexOf('x') > -1 ) {\r\n\t\t\t\tthis.diffx = (this.startx - (e.clientX + this.el.scrollLeft));\r\n\t\t\t\tthis.el.scrollLeft += this.diffx;\r\n\t\t\t}\r\n\t\t\tif ( this.axis.indexOf('y') > -1 ) {\r\n\t\t\t\tthis.diffy = (this.starty - (e.clientY + this.el.scrollTop));\r\n\t\t\t\tthis.el.scrollTop += this.diffy;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @method onMouseMove\r\n\t */\r\n\tonMouseUp(e) {\r\n\t\tif (this.drag === true) {\r\n\t\t\tif (!this.options.wait) {\r\n\t\t\t\tthis.drag = null;\r\n\t\t\t}\r\n\t\t\tthis.cancelEvent(e);\r\n\t\t\tvar me = this,\r\n\t\t\t\tstart = 1,\r\n\t\t\t\tanimate = function () {\r\n\t\t\t\t\tvar step = Math.sin(start);\r\n\t\t\t\t\tif (step <= 0) {\r\n\t\t\t\t\t\tme.diffx = 0;\r\n\t\t\t\t\t\tme.diffy = 0;\r\n\t\t\t\t\t\twindow.cancelAnimationFrame(animate);\r\n\t\t\t\t\t\tme.drag = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tme.el.scrollLeft += me.diffx * step;\r\n\t\t\t\t\t\tme.el.scrollTop += me.diffy * step;\r\n\t\t\t\t\t\tstart -= me.time;\r\n\t\t\t\t\t\twindow.requestAnimationFrame(animate);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tanimate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @method onMouseMove\r\n\t */\r\n\tonMouseWheel(e) {\r\n\t\tthis.cancelEvent(e);\r\n\t\tif (e.detail) {\r\n\t\t\tthis.zoom -= e.detail;\r\n\t\t} else {\r\n\t\t\tthis.zoom += (e.wheelDelta / 1200);\r\n\t\t}\r\n\t\tif (this.zoom < 1) {\r\n\t\t\tthis.zoom = 1;\r\n\t\t} else if (this.zoom > 10) {\r\n\t\t\tthis.zoom = 10;\r\n\t\t}\r\n\t\t/*\r\n\t\tthis.elzoom.style.OTransform = 'scale(' + this.zoom + ', ' + this.zoom + ')';\r\n\t\tthis.elzoom.style.MozTransform = 'scale(' + this.zoom + ', ' + this.zoom + ')';\r\n\t\tthis.elzoom.style.msTransform = 'scale(' + this.zoom + ', ' + this.zoom + ')';\r\n\t\tthis.elzoom.style.WebkitTransform = 'scale(' + this.zoom + ', ' + this.zoom + ')';\r\n\t\tthis.elzoom.style.transform = 'scale(' + this.zoom + ', ' + this.zoom + ')';\r\n\t\t*/\r\n\t\tthis.elzoom.style.zoom = this.zoom * 100 + '%';\r\n\t\t//this.el.scrollLeft += e.wheelDelta / 10;\r\n\t\t//this.el.scrollTop += e.wheelDelta / 8;\r\n\t}\r\n}\r\n\r\nexport default TouchScroll;\r\n","import { mapActions } from \"vuex\";\r\n\r\nexport default {\r\n\tname: \"room\",\r\n\tprops: {\r\n\t\tallProductsJSON: {\r\n\t\t\ttype: Object,\r\n\t\t},\r\n\t\tmarkers: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault: null,\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"roomExplorerSingleProductChosen\",\r\n\t\t\t\"roomExplorerOverlayProductsChosen\",\r\n\t\t]),\r\n\t\tproductMarkerHandler(productJSON) {\r\n\t\t\tthis.roomExplorerSingleProductChosen(productJSON);\r\n\t\t},\r\n\t\tallProductsHandler() {\r\n\t\t\tthis.roomExplorerOverlayProductsChosen(this.allProductsJSON);\r\n\t\t},\r\n\t},\r\n};\r\n","import { mapActions } from \"vuex\";\r\n\r\nimport Swiper from \"swiper/dist/js/swiper.js\";\r\nimport TouchScroll from \"./touch-scroll\";\r\n\r\nimport Room from \"../../components/room-explorer/room\";\r\n\r\nexport default {\r\n\tname: \"room-explorer\",\r\n\tprops: {\r\n\t\troomsJson: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t},\r\n\tcomponents: {\r\n\t\tRoom,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tslider: null,\r\n\t\t\tscrollView: null,\r\n\t\t\tslidesCount: 0,\r\n\t\t\tslidesRef: null,\r\n\t\t\ttouchScrollers: null,\r\n\r\n\t\t\tsettings: {\r\n\t\t\t\tsimulateTouch: false,\r\n\t\t\t\tallowTouchMove: false,\r\n\t\t\t\teffect: \"fade\",\r\n\t\t\t\tfadeEffect: {\r\n\t\t\t\t\tcrossFade: true,\r\n\t\t\t\t},\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\tlazy: {\r\n\t\t\t\t\tloadPrevNext: true,\r\n\t\t\t\t\tloadPrevNextAmount: 3,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\troomsList() {\r\n\t\t\tlet list = this.roomsJson ? JSON.parse(this.roomsJson) : [];\r\n\t\t\treturn list;\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"roomExplorerSingleProductChosen\",\r\n\t\t\t\"roomExplorerOverlayProductsChosen\",\r\n\t\t]),\r\n\t\tproductMarkerHandler(roomId, markerId) {\r\n\t\t\tlet product = this.roomsList[roomId].markers[markerId].catalogEntry;\r\n\t\t\tthis.roomExplorerSingleProductChosen(product);\r\n\t\t},\r\n\t\tallProductsHandler(roomId) {\r\n\t\t\tconst room = this.roomsList[roomId];\r\n\t\t\tconst allProducts = room.markers.map((room) => ({\r\n\t\t\t\t...room.catalogEntry,\r\n\r\n\t\t\t\tquantity: 1,\r\n\t\t\t\tcolliProduct: room.catalogEntry.colli,\r\n\t\t\t\tcolliAmount: room.catalogEntry.colli,\r\n\t\t\t}));\r\n\r\n\t\t\tthis.roomExplorerOverlayProductsChosen(allProducts);\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.settings.navigation = {\r\n\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t};\r\n\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\r\n\t\tthis.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n\t\tthis.slidesCount = this.slidesRef.length;\r\n\t\tthis.touchScrollers = [];\r\n\r\n\t\tfor (let i = 0; i < this.slidesCount; i++) {\r\n\t\t\tlet ts = new TouchScroll();\r\n\t\t\tthis.touchScrollers.push(ts);\r\n\r\n\t\t\tlet tsEl = this.slidesRef[i].querySelector(\r\n\t\t\t\t\".room__image__container\"\r\n\t\t\t);\r\n\t\t\tts.init({\r\n\t\t\t\tel: tsEl,\r\n\t\t\t\tdraggable: true,\r\n\t\t\t\twait: false,\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n};\r\n","import ProductLineRoomExplorer from '../../components/product-line/product-line-room-explorer';\r\n\r\nimport { mapActions, mapState} from 'vuex';\r\n\r\nexport default {\r\n\tname: 'room-explorer-overlay',\r\n\tcomponents: {\r\n\t\tProductLineRoomExplorer,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisActive: false\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\troomExplorerOverlayProducts: state => state.roomExplorerOverlayProducts\r\n\t\t})\r\n\t},\r\n\twatch:{\r\n\t\troomExplorerOverlayProducts(newVal) {\r\n\t\t\tif (newVal) {\r\n\t\t\t\tthis.open();\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t\t'roomExplorerOverlayProductsChosen'\r\n\t\t]),\r\n\t\topen() {\r\n\t\t\tthis.isActive = true;\r\n\t\t\tthis.showOverlayBackdrop();\r\n\t\t},\r\n\t\tclose(){\r\n\t\t\tthis.isActive = false;\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\tthis.roomExplorerOverlayProductsChosen(null);\r\n\t\t},\r\n\t},\r\n};\r\n","import ProductLineCore from '../../components/product-line/product-line-core';\r\n\r\nexport default {\r\n\tname: 'product-line-room-explorer',\r\n\textends: ProductLineCore\r\n};\r\n","import { mapActions, mapState } from 'vuex';\r\n\r\nimport ProductTileProd from '../../components/product-tile/product-tile'\r\n\r\nexport default {\r\n\tname: 'room-explorer-product',\r\n\tcomponents: {\r\n\t\tProductTileProd\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisActive: false,\r\n\t\t\tslideContent: false,\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\troomExplorerSingleProduct: state => state.roomExplorerSingleProduct\r\n\t\t}),\r\n\t\titem() {\r\n\t\t\treturn this.roomExplorerSingleProduct\r\n\t\t}\r\n\t},\r\n\twatch:{\r\n\t\troomExplorerSingleProduct(newVal) {\r\n\t\t\tif (newVal) {\r\n\t\t\t\tthis.open();\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t\t'roomExplorerSingleProductChosen'\r\n\t\t]),\r\n\t\topen() {\r\n\t\t\tthis.isActive = true;\r\n\t\t\tthis.showOverlayBackdrop();\r\n\t\t},\r\n\t\tclose(){\r\n\t\t\tthis.isActive = false;\r\n\t\t\tthis.slideContent = false;\r\n\r\n\t\t},\r\n\t\tshowContent() {\r\n\t\t\tthis.slideContent = true;\r\n\t\t},\r\n\t\tbackdropSlidedOut() {\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\tthis.roomExplorerSingleProductChosen(null);\r\n\t\t}\r\n\t},\r\n};\r\n","import { mapState } from 'vuex';\r\nimport { uid } from '../../basics/js/utils';\r\n\r\nexport default {\r\n\tname: 'onlineshops',\r\n\tcomponents: {\r\n },\r\n props: {\r\n\t\ttileDataJson: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\ttileDataParsed: [],\r\n\t\t\tcategories: new Set(),\r\n\t\t\tmuutoExperience: false,\r\n\t\t\tfilter: \"\",\r\n\t\t\tsearch: \"\"\r\n\t\t};\r\n\t}, \r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisMobile: state => state.isMobile\r\n\t\t}),\r\n\t\ttileData(){\r\n\t\t\treturn JSON.parse(this.tileDataJson)\r\n\t\t},\r\n\t\tgetCategories(){\r\n\t\t\tvar categories = new Set();\r\n\t\t\tJSON.parse(this.tileDataJson).forEach(element => {\r\n\t\t\t\telement.categories.split(\", \").forEach(ele => {\r\n\t\t\t\t\tcategories.add(ele)\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tcategories.delete(\"\");\r\n\t\t\treturn categories;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\r\n\t},\r\n\tmethods: {\r\n\t\tuid,\r\n\t\tonLoadMore() {\r\n\t\t\tif(this.loadMoreUrl) {\r\n\t\t\t\tdocument.location.href = this.loadMoreUrl;\r\n\t\t\t} else {\r\n\t\t\t\t// show the rest of the products\r\n\t\t\t\tthis.localLimit = this.numberOfProducts;\r\n\t\t\t}\r\n\t\t},\r\n\t\tchangeMuutoExperience(){\r\n\t\t\tthis.muutoExperience = !this.muutoExperience\r\n\t\t},\r\n\t\tsetFilterValue(value){\r\n\t\t\tthis.filter = value\r\n\t\t},\r\n\t\tsetSearchString(value){\r\n\t\t\tthis.search = value;\r\n\t\t},\r\n\t\tonlineShops(){\r\n\t\t\tvar filtered = this.tileData.filter(\r\n\t\t\t\t(shop) => {\r\n\t\t\t\tif(this.muutoExperience){\r\n\t\t\t\t\treturn shop.muuto_experience == \"1\";\r\n\t\t\t\t} return true;\r\n\t\t\t})\r\n\t\t\tfiltered = filtered.filter(\r\n\t\t\t\t(shop) => {\r\n\t\t\t\treturn shop.categories.includes(this.filter);\r\n\t\t\t})\r\n\t\t\tfiltered = filtered.filter(\r\n\t\t\t\t(shop) => {\r\n\t\t\t\treturn (shop.company_name + \" \" + shop.website_name + \" \" + shop.country).toLowerCase().includes(this.search.toLowerCase());\r\n\t\t\t});\r\n\t\t\tthis.tileDataParsed = filtered;\r\n\t\t}\r\n\r\n\r\n\t\t\r\n\t},\r\n\tmounted(){\r\n\t\tthis.tileDataParsed = this.tileData\r\n\t\tthis.categories = this.getCategories\r\n\t}\r\n};","\r\nimport { TweenMax, Power1 } from 'gsap';\r\n\r\nimport ProductLineCore from '../../components/product-line/product-line-core';\r\n\r\n// import { mapState } from 'vuex';\r\nimport { mapActions } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'product-line-search',\r\n\textends: ProductLineCore,\r\n\tprops: {\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t};\r\n\t},\r\n\tmounted(){\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'removeCartItem',\r\n\t\t]),\r\n\t\tremoveProduct(product){\r\n\t\t\tTweenMax.to(this.$el, .005, {\r\n\t\t\t\theight: 0,\r\n\t\t\t\tease: Power1.easeOut,\r\n\t\t\t\tonComplete: ()=>{\r\n\t\t\t\t\tthis.removed = true;\r\n\t\t\t\t\tthis.removeCartItem(product); // action\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tremoveAnimationEnd(product){\r\n\t\t\tthis.removed = true;\r\n\t\t\tthis.removeCartItem(product); // action\r\n\t\t},\r\n\t},\r\n};","import ProductLineSearch from \"../../components/product-line/product-line-search\";\r\nimport { registerImpression } from \"../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer\";\r\nimport { mapActions, mapMutations, mapState } from \"vuex\";\r\nimport Store from \"@store/store\";\r\n\r\nimport debounce from \"lodash/debounce\";\r\n\r\nconst debouncedPerformSearch = debounce(() => {Store.dispatch(\"performSearch\");}, 500);\r\n\r\nexport default {\r\n\tname: \"search-overlay\",\r\n\tcomponents: {\r\n\t\tProductLineSearch,\r\n\t},\r\n\tprops: {\r\n\t\tpreSearchTerm: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: \"\",\r\n\t\t},\r\n\t\tsearchPageUri: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tsearchTerm: \"\",\r\n\t\t\tsearchTermSuggestionActive: false,\r\n\t\t\tminimumCharacters: 2,\r\n\t\t\tisSafari: /^((?!chrome|android).)*safari/i.test(navigator.userAgent),\r\n\t\t\tshowGhostContent: false,\r\n\t\t\tshowEmptySearch: false, //JPL: Set to true to show No results label\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tsearchTerm: function () {\r\n\t\t\t// do search when searchTerm is updated\r\n\t\t\tthis.doSearch();\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tsearchOverlayOpen: (state) => state.searchOverlayOpen,\r\n\t\t}),\r\n\t\tproductsTotalLink() {\r\n\t\t\treturn this.$store.state.search.productsTotalLink;\r\n\t\t},\r\n\t\tproductsTotalCount() {\r\n\t\t\treturn this.$store.state.search.productsTotalCount;\r\n\t\t},\r\n\t\ttagResults() {\r\n\t\t\treturn this.$store.state.search.tagResults;\r\n\t\t},\r\n\t\tsearchLoading() {\r\n\t\t\treturn this.$store.state.search.searchLoading;\r\n\t\t},\r\n\t\tisMobile() {\r\n\t\t\treturn this.$store.state.isMobile;\r\n\t\t},\r\n\t\tsuggestionShow: function () {\r\n\t\t\treturn this.searchTermSuggestion.length > 0;\r\n\t\t},\r\n\t\tshowPopularSearches: function () {\r\n\t\t\treturn this.searchTerm.length < this.minimumCharacters;\r\n\t\t},\r\n\t\tisActive: function () {\r\n\t\t\tif (this.searchOverlayOpen === true) {\r\n\t\t\t\t// COMMENT: When opening, set focus on input\r\n\t\t\t\t// Also fixes esc keypress issues\r\n\r\n\t\t\t\tthis.$refs.searchInput.focus();\r\n\r\n\t\t\t\tif (this.isSafari && window.matchMedia(\"(max-width: 1200px)\").matches) {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.$refs.searchInput.focus();\r\n\t\t\t\t\t\tthis.$el.querySelector(\".search-overlay__inner\").scrollTop = 0;\r\n\t\t\t\t\t\twindow.scrollTop = 0;\r\n\t\t\t\t\t\tif (document.scrollingElement) {\r\n\t\t\t\t\t\t\tdocument.scrollingElement.scrollTop = 0; // ios fix for input out of view when opening search\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 50); // COMMENT: Tiny delay so focus can be set first\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.showOverlayBackdrop(); // show backdrop action\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.$refs.searchInput.focus();\r\n\t\t\t\t}, 100);\r\n\t\t\t} else {\r\n\t\t\t\t// COMMENT: When closing, ex. via backdrop-click, reset results\r\n\t\t\t\tthis.$nextTick(this.resetSearch);\r\n\t\t\t}\r\n\t\t\treturn this.searchOverlayOpen;\r\n\t\t},\r\n\t\tsearchTermSuggestion() {\r\n\t\t\treturn this.$store.state.search.autoCompleteSuggestion;\r\n\t\t},\r\n\t\tproductResults() {\r\n\t\t\tvar products = this.$store.state.search.productResults;\r\n\t\t\tif (products && products.length > 1) {\r\n\t\t\t\tregisterImpression(products, \"search-overlay\");\r\n\t\t\t}\r\n\r\n\t\t\treturn products;\r\n\t\t},\r\n\t},\r\n\tmounted: function () {\r\n\t\tif (this.preSearchTerm != \"\") {\r\n\t\t\tthis.searchTerm = this.$refs.searchInput.value = this.preSearchTerm; // COMMENT: If template supplies a searchTerm from backend\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"closeMainSearch\", \"showOverlayBackdrop\", \"hideOverlayBackdrop\"]),\r\n\t\t...mapMutations([\"updateSearchTerm\", \"updateAutoCompleteSuggestion\", \"clearResults\", \"updateUrlString\"]),\r\n\r\n\t\thandlePopularClick(clickEvent, popularTerm) {\r\n\t\t\tthis.searchTerm = popularTerm;\r\n\t\t\tthis.$refs.searchInput.focus();\r\n\t\t},\r\n\t\thandleKeyinput(inputEvent) {\r\n\t\t\tif (this.searchTermSuggestion.length) {\r\n\t\t\t\tswitch (inputEvent.key) {\r\n\t\t\t\t\tcase \"Enter\":\r\n\t\t\t\t\t\tthis.submit();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"Backspace\":\r\n\t\t\t\t\t\t// COMMENT: Clear suggestion on backspace, and prevent clearing a charater\r\n\t\t\t\t\t\tinputEvent.preventDefault();\r\n\t\t\t\t\t\tthis.updateAutoCompleteSuggestion(\"\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"Tab\":\r\n\t\t\t\t\t\tthis.searchTerm = this.searchTerm + this.searchTermSuggestion;\r\n\t\t\t\t\t\tthis.updateAutoCompleteSuggestion(\"\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"ArrowRight\":\r\n\t\t\t\t\t\tthis.searchTerm = this.searchTerm + this.searchTermSuggestion;\r\n\t\t\t\t\t\tthis.updateAutoCompleteSuggestion(\"\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\thandleTermSuggestionClick() {\r\n\t\t\tif (this.searchTermSuggestion.length) {\r\n\t\t\t\tthis.searchTerm = this.searchTerm + this.searchTermSuggestion;\r\n\t\t\t\tthis.updateAutoCompleteSuggestion(\"\");\r\n\r\n\t\t\t\tif (this.isMobile) {\r\n\t\t\t\t\tthis.$refs.searchInput.blur(); // unfocus input, to better show results on mobile\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tdoSearch() {\r\n\t\t\tthis.showGhostContent = true;\r\n\t\t\tthis.showEmptySearch = true;\r\n\r\n\t\t\tthis.clearResults();\r\n\t\t\tif (this.searchTerm.length >= this.minimumCharacters) {\r\n\t\t\t\tthis.updateUrlString(`?q=${this.searchTerm}`);\r\n\t\t\t\tthis.updateSearchTerm(this.searchTerm);\r\n\t\t\t\tdebouncedPerformSearch();\r\n\t\t\t} else {\r\n\t\t\t\tthis.updateSearchTerm(\"\");\r\n\t\t\t\tthis.updateUrlString(``);\r\n\t\t\t\tdebouncedPerformSearch.cancel();\r\n\t\t\t}\r\n\t\t},\r\n\t\tsubmit() {\r\n\t\t\twindow.location = `${this.searchPageUri}?q=${this.searchTerm}`;\r\n\t\t},\r\n\t\tclose() {\r\n\t\t\tthis.showGhostContent = false;\r\n\t\t\tthis.closeMainSearch(); // action\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\t// COMMENT: A tiny delay for cleared(after animation is done), to prevent ui jumping\r\n\t\t\t\tthis.resetSearch();\r\n\t\t\t}, 550);\r\n\t\t},\r\n\t\tresetSearch() {\r\n\t\t\tthis.showGhostContent = false;\r\n\t\t\t// this.$refs.searchInput.value = '';\r\n\t\t\t// this.searchTerm = '';\r\n\r\n\t\t\t// QUESTION: Empty products on reset?\r\n\t\t\t// this.clearResults(); // TODO - Consider if results should be cleared, in all scenarios\r\n\t\t},\r\n\t},\r\n};\r\n","import Swiper from \"swiper/dist/js/swiper.js\";\r\nimport { inView } from \"../../basics/js/methods/inView/inView\";\r\n\r\nimport ImageProductsButton from \"../image-products/image-products-button.vue\"\r\nimport { mapActions } from 'vuex';\r\n\r\nconst calculateArrowVisibility = (swiper, element) => {\r\n\tif (swiper.isBeginning && swiper.isEnd) {\r\n\t\t\telement.querySelector('.swiper-button-next').classList.add('swiper-button-hidden');\r\n\t\t\telement.querySelector('.swiper-button-prev').classList.add('swiper-button-hidden');\r\n\t} else {\r\n\t\telement.querySelector('.swiper-button-prev').classList.remove('swiper-button-hidden');\r\n\t\telement.querySelector('.swiper-button-next').classList.remove('swiper-button-hidden');\r\n\t}\r\n}\r\n\r\n/**\r\n * @prop cssClass {String} - (decrecated description) 'slider--inspiration' will turn it into an inspirational slider\r\n * @prop settings {Object} - swiper option object, will overwrite default sliderOptions\r\n */\r\n\r\nexport default {\r\n\tname: \"slider-v2\",\r\n\tcomponents: {\r\n ImageProductsButton\r\n },\r\n\tprops: {\r\n\t\tsliderOptions: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tslideCount: Number,\r\n\t\ttype: String,\r\n\t\tslidesPerView: String\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tslider: null,\r\n\t\t\tshowPagination: false,\r\n\t\t\tshowNavigation: true,\r\n\r\n\t\t\tdefaultSliderSettings: {\r\n\t\t\t\tslidesPerView: 'auto',\r\n\t\t\t\tspaceBetween: 0,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tpagination: false,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\tlazy: {\r\n\t\t\t\t\tloadPrevNext: true,\r\n\t\t\t\t\tloadPrevNextAmount: 3,\r\n\t\t\t\t},\r\n\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tsettings() {\r\n\t\t\treturn Object.assign({}, this.defaultSliderSettings, this.sliderOptions);\r\n\t\t},\r\n\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openMosaicSliderOverlay\",\r\n\t\t]),\r\n\t\thandleSlideClick(index) {\r\n\t\t\tthis.openMosaicSliderOverlay(index);\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\r\n\r\n\t\tconst el = this.$el;\r\n\r\n\t\tif (this.slideCount < 2) {\r\n\t\t\tthis.showPagination = false;\r\n\t\t\tthis.showNavigation = false;\r\n\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tnavigation: {},\r\n\t\t\t\tloop: false,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.showNavigation) {\r\n\t\t\t// Delayed instancing of prev/next, to get the instance specific buttons\r\n\t\t\tthis.settings.navigation = {\r\n\t\t\t\tnextEl: el.querySelector('.swiper-button-next'),\r\n\t\t\t\tprevEl: el.querySelector('.swiper-button-prev')\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.settings.on = Object.assign({}, this.settings.on, {\r\n\t\t\tresize: function () {\r\n\t\t\t\tcalculateArrowVisibility(this, el);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\t\tthis.$emit(\"ready\", this.slider);\r\n\r\n\t\tcalculateArrowVisibility(this.slider, el);\r\n\r\n\t\tinView({\r\n\t\t\tel: this.$refs.slider,\r\n\t\t\tonce: true,\r\n\t\t\tthreshold: 0.2\r\n\t\t});\r\n\t},\r\n};\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"mosaic-slider-zoom\",\n class: { \"mosaic-slider-zoom--custom-cursor\": _vm.useCustomCursor },\n style: _vm.zoomStyle,\n on: {\n click: function ($event) {\n return _vm.$emit(\"close\")\n },\n },\n },\n [\n _c(\n \"div\",\n {\n ref: \"container\",\n staticClass: \"mosaic-slider-zoom__image\",\n on: { mousemove: _vm.mouseMoveHandler },\n },\n [\n _c(\"img\", {\n ref: \"image\",\n style: _vm.imageStyle,\n attrs: { src: _vm.zoomSrc },\n }),\n _vm._v(\" \"),\n _vm.noMouse\n ? _c(\"span\", [\n _vm._v(\"Panning only works with a mouse!\"),\n _c(\"br\"),\n _vm._v(\"Tap to close.\"),\n ])\n : _vm._e(),\n ]\n ),\n _vm._v(\" \"),\n _vm.useCustomCursor\n ? _c(\"div\", {\n ref: \"cursor\",\n staticClass: \"mosaic-slider-zoom__cursor\",\n })\n : _vm._e(),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\n\r\nimport { mapState } from 'vuex';\r\n\r\nexport default {\r\n\tname: 'mosaic-slider-zoom',\r\n\tprops: {\r\n\t\tzoomSrc: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\tuseCustomCursor: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\timageLoaded: false,\r\n\r\n\t\t\tzoomFactor: 2,\r\n\r\n\t\t\tcontainerCenterX: null,\r\n\t\t\tcontainerCenterY: null,\r\n\t\t\timageX: 0,\r\n\t\t\timageY: 0,\r\n\r\n\t\t\timageWidth: 0,\r\n\t\t\timageHeight: 0,\r\n\r\n\t\t\timageContainerWidth: 0,\r\n\t\t\timageContainerHeight: 0,\r\n\r\n\t\t\timage: null,\r\n\t\t\timageContainer: null,\r\n\r\n\t\t\tnoMouse: false,\r\n\r\n\t\t\tcursorX: 0,\r\n\t\t\tcursorY: 0,\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\twindowW: state => state.windowW,\r\n\t\t\twindowH: state => state.windowH,\r\n\t\t}),\r\n\t\timageStyle() {\r\n\t\t\treturn `transform: translate(${this.imageX}px, ${this.imageY}px) scale(${this.zoomFactor})`;\r\n\t\t},\r\n\t\tzoomStyle() {\r\n\t\t\treturn `--mosaic-slider-zoom-cursor-x: ${this.cursorX}px; --mosaic-slider-zoom-cursor-y: ${this.cursorY}px;`;\r\n\t\t}\r\n\t},\r\n\twatch: {\r\n\t\twindowW(newVal) {\r\n\t\t\tthis.resizeHandler();\r\n\t\t},\r\n\t\twindowH() {\r\n\t\t\tthis.resizeHandler();\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tresizeHandler() {\r\n\t\t\tif (this.imageContainer) {\r\n\t\t\t\tthis.containerWidth = this.imageContainer.offsetWidth;\r\n\t\t\t\tthis.containerHeight = this.imageContainer.offsetHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomFactor = 2;\r\n\t\t\tif (this.windowW > 1600) {\r\n\t\t\t\tthis.zoomFactor = 4;\r\n\t\t\t} else if (this.windowW > 900) {\r\n\t\t\t\tthis.zoomFactor = 3;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisTouchDevice() {\r\n\t\t\tvar el = document.createElement('div');\r\n\t\t\tel.setAttribute('ontouchstart', 'return;'); // or try \"ontouchstart\"\r\n\t\t\treturn typeof el.ontouchstart === \"function\";\r\n\t\t},\r\n\t\tmouseMoveHandler(e) {\r\n\t\t\tif (this.imageLoaded && !this.noMouse) {\r\n\r\n\t\t\t\t//get initial mouse position\r\n\t\t\t\tthis.containerCenterX = this.containerWidth / 2;\r\n\t\t\t\tthis.containerCenterY = this.containerHeight / 2;\r\n\r\n\t\t\t\t// calculate new image position where\r\n\t\t\t\t// moving to x 0% aligns image with left edge of container\r\n\t\t\t\t// and moving to x 100% aligns image with right edge of container etc\r\n\r\n\t\t\t\tconst xPos = (e.clientX - this.containerCenterX) / this.containerWidth;\r\n\t\t\t\tconst yPos = (e.clientY - this.containerCenterY) / this.containerHeight;\r\n\r\n\t\t\t\t// calculate new image position with an image scale\r\n\t\t\t\tthis.imageX = -xPos * (this.imageWidth * this.zoomFactor) / 2;\r\n\t\t\t\tthis.imageY = -yPos * (this.imageHeight * this.zoomFactor) / 2;\r\n\r\n\r\n\t\t\t\tthis.cursorX = e.clientX;\r\n\t\t\t\tthis.cursorY = e.clientY;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.image = this.$refs['image'];\r\n\t\tthis.imageContainer = this.$refs['container'];\r\n\r\n\t\tthis.resizeHandler();\r\n\r\n\t\tthis.image.addEventListener('load', () => {\r\n\t\t\tthis.imageWidth = this.image.naturalWidth;\r\n\t\t\tthis.imageHeight = this.image.naturalHeight;\r\n\r\n\t\t\tthis.imageLoaded = true;\r\n\t\t});\r\n\r\n\t\tthis.noMouse = this.isTouchDevice();\r\n\t},\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"mosaic-slider-zoom\" v-on:click=\"$emit('close')\" :style=\"zoomStyle\" :class=\"{'mosaic-slider-zoom--custom-cursor': useCustomCursor}\">\r\n\t\t<div class=\"mosaic-slider-zoom__image\" ref=\"container\" v-on:mousemove=\"mouseMoveHandler\">\r\n\t\t\t<img :src=\"zoomSrc\" ref=\"image\" :style=\"imageStyle\" />\r\n\t\t\t<span v-if=\"noMouse\">Panning only works with a mouse!<br />Tap to close.</span>\r\n\t\t</div>\r\n\t\t<div v-if=\"useCustomCursor\" class=\"mosaic-slider-zoom__cursor\" ref=\"cursor\"></div>\r\n\t</div>\r\n</template>\r\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./mosaic-slider-zoom.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./mosaic-slider-zoom.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./mosaic-slider-zoom.vue?vue&type=template&id=e21a8512&\"\nimport script from \"./mosaic-slider-zoom.vue?vue&type=script&lang=js&\"\nexport * from \"./mosaic-slider-zoom.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e21a8512')) {\n api.createRecord('e21a8512', component.options)\n } else {\n api.reload('e21a8512', component.options)\n }\n module.hot.accept(\"./mosaic-slider-zoom.vue?vue&type=template&id=e21a8512&\", function () {\n api.rerender('e21a8512', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/mosaic-slider/mosaic-slider-zoom.vue\"\nexport default component.exports","import Swiper from 'swiper/dist/js/swiper.js';\r\nimport MosaicSliderZoom from './mosaic-slider-zoom.vue';\r\nimport { inView } from '../../basics/js/methods/inView/inView';\r\n\r\nimport { mapActions, mapState } from 'vuex';\r\n\r\n/**\r\n * @prop cssClass {String} - (decrecated description) 'slider--inspiration' will turn it into an inspirational slider\r\n * @prop settings {Object} - swiper option object, will overwrite default sliderOptions\r\n */\r\n\r\nexport default {\r\n\tname: 'mosaic-slider',\r\n\tprops: {\r\n\t\tsliderOptions: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\thasZoom: false,\r\n\t\tslideCount: 0,\r\n\t\ttype: String,\r\n\t\tslidesPerView: String,\r\n\t},\r\n\tcomponents: {\r\n\t\tMosaicSliderZoom\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tactiveIndex: 0,\r\n\t\t\tcaptions: [],\r\n\t\t\tslider: null,\r\n\t\t\tshowPagination: false,\r\n\t\t\tshowNavigation: false,\r\n\t\t\tnavButtonsVisible: false,\r\n\t\t\tzoomSrc: null,\r\n\t\t\tdefaultSliderSettings: {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tspaceBetween: 0,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tpagination: false,\r\n\t\t\t\tinit: false,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tnavigation: {\r\n\t\t\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\tlazy: {\r\n\t\t\t\t\tloadPrevNext: true,\r\n\t\t\t\t\tloadPrevNextAmount: 3,\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tmosaicSliderOverlayOpen: state => state.mosaicSliderOverlayOpen,\r\n\t\t\tmosaicSliderOverlayActiveIndex: state => state.mosaicSliderOverlayActiveIndex\r\n\t\t}),\r\n\t\tsettings() {\r\n\t\t\treturn Object.assign({}, this.defaultSliderSettings, this.sliderOptions);\r\n\t\t},\r\n\t},\r\n\twatch:{\r\n\t\tmosaicSliderOverlayActiveIndex(value) {\r\n\r\n\t\t\t// console.log(\"mosaic-slider mosaicSliderOverlayActiveIndex | newVal=\"+value+\", this.activeIndex=\"+this.activeIndex);\r\n\r\n\t\t\tif (value !== this.activeIndex && this.mosaicSliderOverlayOpen) {\r\n\t\t\t\tthis.thumbEvent = true; // fake thumb event to prevent double slide\r\n\t\t\t\tthis.activeIndex = value;\r\n\t\t\t\tthis.captions.forEach(elm => {\r\n\t\t\t\t\telm.classList.remove('is-active');\r\n\t\t\t\t});\r\n\t\t\t\tthis.captions[value].classList.add('is-active');\r\n\t\t\t\t// this.changeCaption(value);\r\n\t\t\t\tthis.slider.slideTo(parseInt(value) + 1, 0);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"openMosaicSliderOverlay\",\r\n\t\t\t\"closeMosaicSliderOverlay\",\r\n\t\t]),\r\n\t\tthumbClick(newIndex){\r\n\t\t\tthis.thumbEvent = true;\r\n\r\n\t\t\t// console.log(\"mosaic-slider mosaicthumbClickliderOverlayActiveIndex | newIndex=\"+newIndex+\", this.activeIndex=\"+this.activeIndex);\r\n\t\t\tif (newIndex !== this.activeIndex) {\r\n\t\t\t\tthis.changeCaption(newIndex);\r\n\t\t\t\tthis.slider.slideTo(newIndex + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tchangeCaption(newIndex, carouselEvent = false){\r\n\t\t\t// Handle carousel loops\r\n\t\t\tlet direction;\r\n\t\t\tif (carouselEvent) {\r\n\t\t\t\tif (newIndex > this.captions.length - 1) { // \"wrap around\" to the start\r\n\t\t\t\t\tnewIndex = 0;\r\n\t\t\t\t\tdirection = 'next';\r\n\t\t\t\t} else if (newIndex < 0) {\r\n\t\t\t\t\tnewIndex = this.captions.length - 1; // \"wrap around\" to the end\r\n\t\t\t\t\tdirection = 'prev';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdirection = newIndex > this.activeIndex ? 'next' : 'prev';\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdirection = newIndex > this.activeIndex ? 'next' : 'prev';\r\n\t\t\t}\r\n\t\t\tconst activeCaption = this.captions[this.activeIndex];\r\n\t\t\tconst prevNextCaption = this.captions[newIndex];\r\n\r\n\t\t\tthis.captions.forEach(elm => { // cleanup all transition classes\r\n\t\t\t\telm.classList.remove('is-active', 'from-right', 'from-left', 'to-left', 'to-right');\r\n\t\t\t})\r\n\r\n\t\t\tif (direction === 'next') {\r\n\t\t\t\tactiveCaption.classList.add('to-left');\r\n\t\t\t\tprevNextCaption.classList.add('from-right');\r\n\t\t\t} else {\r\n\t\t\t\tactiveCaption.classList.add('to-right');\r\n\t\t\t\tprevNextCaption.classList.add('from-left');\r\n\t\t\t}\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tprevNextCaption.classList.add('is-active');\r\n\t\t\t}, 150);\r\n\r\n\t\t\tthis.activeIndex = newIndex;\r\n\t\t},\r\n\t\tcaptionTransitionEnd(event) {\r\n\t\t\t// Cleanup transition classes\r\n\t\t\tif (event.target.classList.contains('to-left') || event.target.classList.contains('to-right')) {\r\n\t\t\t\tevent.target.classList.remove('is-active');\r\n\t\t\t}\r\n\t\t\tevent.target.classList.remove('from-right', 'from-left', 'to-left', 'to-right');\r\n\t\t},\r\n\t\thandleSwiperSlideChange() {\r\n\t\t\tif (!this.thumbEvent) {\r\n\t\t\t\tconst newIndex = this.slider.activeIndex - 1;\r\n\t\t\t\tthis.changeCaption(newIndex, true);\r\n\t\t\t}\r\n\t\t\tthis.thumbEvent = false;\r\n\t\t},\r\n\t\thandleSwiperClick(event) {\r\n\t\t\tif ( event.target.classList.contains('mosaic-slider__image') ) {\r\n\t\t\t\tthis.zoomSrc = event.target.dataset.srczoom;\r\n\t\t\t}\r\n\t\t},\r\n\t\tzoomCloseHandler() {\r\n\t\t\tthis.zoomSrc = null;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.activeIndex = this.mosaicSliderOverlayActiveIndex;\r\n\t\tthis.captions = this.$el.querySelectorAll('.mosaic-slider__caption');\r\n\t\tthis.captions.forEach(caption => {\r\n\t\t\tcaption.addEventListener('transitionend', this.captionTransitionEnd);\r\n\t\t});\r\n\t\tthis.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n\t\tthis.slidesCount = this.slidesRef.length;\r\n\r\n\t\tif (this.slidesCount > 1) {\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\tnavigation: {\r\n\t\t\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\r\n\t\tthis.slider.on('slideChange', () => {\r\n\t\t\tthis.handleSwiperSlideChange();\r\n\t\t});\r\n\t\tthis.slider.on('click', event => {\r\n\t\t\tthis.handleSwiperClick(event);\r\n\t\t});\r\n\t\tthis.$emit('ready', this.slider);\r\n\t\tthis.slider.init();\r\n\r\n\t\tinView({\r\n\t\t\tel: this.$refs.slider,\r\n\t\t\tonce: true,\r\n\t\t\tthreshold: 0.2\r\n\t\t});\r\n\r\n\r\n\t\tlet timeoutHandle = setTimeout(() => {\r\n\t\t\tthis.navButtonsVisible = false;\r\n\t\t}, 0);\r\n\r\n\t\tthis.$refs.slider.addEventListener(\"mouseleave\", () => {\r\n\t\t\tthis.navButtonsVisible = false;\r\n\t\t});\r\n\t\tthis.$refs.slider.addEventListener(\"mousemove\", () => {\r\n\t\t\tthis.navButtonsVisible = true;\r\n\t\t\tclearTimeout(timeoutHandle);\r\n\t\t\ttimeoutHandle = setTimeout(() => {\r\n\t\t\t\tthis.navButtonsVisible = false;\r\n\t\t\t}, 1500);\r\n\t\t});\r\n\t\tthis.$refs.slider.addEventListener(\"mouseup\", () => {\r\n\t\t\tthis.navButtonsVisible = true;\r\n\t\t\tclearTimeout(timeoutHandle);\r\n\t\t\ttimeoutHandle = setTimeout(() => {\r\n\t\t\t\tthis.navButtonsVisible = false;\r\n\t\t\t}, 1500);\r\n\t\t});\r\n\t},\r\n};\r\n","import MosaicSlider from '../../components/mosaic-slider/mosaic-slider';\r\n\r\nimport { mapActions, mapState} from 'vuex';\r\n\r\nexport default {\r\n\tname: 'mosaic-slider-overlay',\r\n\tcomponents: {\r\n\t\t// ProductLineRoomExplorer,\r\n\t\tMosaicSlider\r\n\t},\r\n\tprops: {\r\n\t\thasZoom: false,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisActive: false\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tmosaicSliderOverlayOpen: state => state.mosaicSliderOverlayOpen\r\n\t\t})\r\n\t},\r\n\twatch:{\r\n\t\tmosaicSliderOverlayOpen(newVal) {\r\n\t\t\tif (newVal) {\r\n\t\t\t\tthis.open();\r\n\t\t\t} else {\r\n\t\t\t\tthis.close();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t\t'closeMosaicSliderOverlay',\r\n\t\t\t// 'roomExplorerOverlayProductsChosen'\r\n\t\t]),\r\n\t\topen() {\r\n\t\t\t// console.log('this.mosaicSliderOverlayOpen: ', this.mosaicSliderOverlayOpen);\r\n\t\t\tthis.isActive = true;\r\n\t\t\t// MosaicSlider.initSlider();\r\n\t\t\tthis.showOverlayBackdrop();\r\n\t\t},\r\n\t\tclose(){\r\n\t\t\tthis.isActive = false;\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t\tthis.closeMosaicSliderOverlay();\r\n\t\t\t// this.roomExplorerOverlayProductsChosen(null);\r\n\t\t},\r\n\t},\r\n};\r\n","/* eslint-disable no-undef */\r\nimport { mapActions, mapState } from 'vuex'\r\n\r\nexport default {\r\n\tname: 'store-locator-filters',\r\n\twatch: {\r\n\t\tfilteredStores (newVal) {\r\n\t\t\tif (newVal.length) {\r\n\t\t\t\tthis.storeCountText = `${newVal.length} ${\r\n\t\t\t\t\tnewVal.length === 1\r\n\t\t\t\t\t\t? this.copy.storesFound\r\n\t\t\t\t\t\t: this.copy.storesFoundPlenum\r\n\t\t\t\t}`\r\n\t\t\t} else {\r\n\t\t\t\tthis.storeCountText = this.copy.noStoresHead\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tfilteredStores: state => state.storeLocator.filteredStores,\r\n\t\t\tcopy: state => state.storeLocator.copy\r\n\t\t}),\r\n\t\tassortmentKeys () {\r\n\t\t\treturn this.copy.filterValues.split('|')\r\n\t\t}\r\n\t},\r\n\tdata () {\r\n\t\treturn {\r\n\t\t\tstoreCountText: ''\r\n\t\t\t// assortmentKeys: this.copy.filterValues.split('|')\r\n\t\t}\r\n\t},\r\n\tmounted () {\r\n\t\tlet as = this.$refs.assortmentSelect.querySelector('.form__item'),\r\n\t\t\tfc = this.$refs.flagShipCheckbox.querySelector('.form__item')\r\n\r\n\t\tif (as instanceof HTMLElement)\r\n\t\t\tas.addEventListener(\r\n\t\t\t\t'change',\r\n\t\t\t\tthis.assortmentSelectChange.bind(this)\r\n\t\t\t)\r\n\t\tif (as instanceof HTMLElement)\r\n\t\t\tfc.addEventListener(\r\n\t\t\t\t'change',\r\n\t\t\t\tthis.flagShipCheckboxChange.bind(this)\r\n\t\t\t)\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions(['assortmentFilterChange', 'flagShipFilterChange']),\r\n\t\tassortmentSelectChange (event) {\r\n\t\t\t// console.log(\r\n\t\t\t// \t'assortmentSelectChange',\r\n\t\t\t// \tthis.assortmentKeys[event.target.selectedIndex]\r\n\t\t\t// )\r\n\t\t\tthis.assortmentFilterChange(\r\n\t\t\t\tthis.assortmentKeys[event.target.selectedIndex]\r\n\t\t\t)\r\n\t\t},\r\n\t\tflagShipCheckboxChange (event) {\r\n\t\t\t// console.log(\"flagShipCheckboxChange\",event.target.checked)\r\n\t\t\tthis.flagShipFilterChange(event.target.checked)\r\n\t\t}\r\n\t}\r\n}\r\n","/* eslint-disable no-undef */\r\nimport { mapActions, mapState } from \"vuex\";\r\nimport { ENTER } from \"../../../../basics/js/store/static\";\r\n\r\nimport StoreLocatorListItem from \"@components/store-locator/partials/list-item/list-item\";\r\n\r\nexport default {\r\n\tname: \"store-locator-list\",\r\n\tcomponents: {\r\n\t\tStoreLocatorListItem,\r\n\t},\r\n\twatch: {\r\n\t\tselectedStore() {\r\n\t\t\t// console.log(\"list selectedStore(data)\",data)\r\n\t\t},\r\n\t\tmapReady(newVal) {\r\n\t\t\tif (newVal === true) {\r\n\t\t\t\tthis.initAutoComplete();\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tmapReady: (state) => state.storeLocator.mapReady,\r\n\t\t\tfilteredStores: (state) => state.storeLocator.filteredStores,\r\n\t\t\tselectedStore: (state) => state.storeLocator.selectedStore,\r\n\t\t\tcopy: (state) => state.storeLocator.copy,\r\n\t\t}),\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tready: false,\r\n\t\t\tautoComplete: null,\r\n\t\t\tautoCompleteInput: null,\r\n\t\t};\r\n\t},\r\n\tmounted() {\r\n\t\tthis.$on(\"scroll-to\", (e) => {\r\n\t\t\tif (this.$el.offsetTop) {\r\n\t\t\t\tthis.$refs.storeLocatorList.scrollTop = e.$el.offsetTop;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"placeChosen\", \"geoLocationChange\", \"placeSearch\"]),\r\n\t\tscrollToTop() {},\r\n\t\tinitAutoComplete() {\r\n\t\t\tthis.autoCompleteInput = this.$refs.storeLocatorSearch;\r\n\t\t\tthis.autoComplete = new google.maps.places.Autocomplete(\r\n\t\t\t\tthis.autoCompleteInput\r\n\t\t\t);\r\n\t\t\tthis.autoComplete.addListener(\"place_changed\", () => {\r\n\t\t\t\tthis.onPlaceChange();\r\n\t\t\t});\r\n\t\t},\r\n\t\tonPlaceChange() {\r\n\t\t\tlet place = this.autoComplete.getPlace();\r\n\t\t\tthis.placeChosen(place);\r\n\t\t},\r\n\t\tonPlaceInputClick(event) {\r\n\t\t\tif (event.key === ENTER) {\r\n\t\t\t\tthis.placeSearch(event.target.value);\r\n\t\t\t}\r\n\t\t},\r\n\t\tgeoLocationClick() {\r\n\t\t\tthis.getUserCordsPermission(window.navigator)\r\n\t\t\t\t.then((position) => {\r\n\t\t\t\t\tthis.geoLocationChange(position);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(() => {\r\n\t\t\t\t\tconsole.log(\"FAILED!\");\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tgetUserCordsPermission(navigator) {\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tif (navigator.geolocation) {\r\n\t\t\t\t\tnavigator.geolocation.getCurrentPosition(\r\n\t\t\t\t\t\t(pos) => resolve(pos),\r\n\t\t\t\t\t\treject,\r\n\t\t\t\t\t\t{ enableHighAccuracy: true }\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(new Error(this.copy.gpsFailMessage));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t},\r\n};\r\n","/* eslint-disable no-undef */\r\nimport { mapActions, mapState } from 'vuex'\r\n\r\nconst STORE_ID_NAME = 'company_number'\r\n\r\nexport default {\r\n\tname: 'store-locator-list-item',\r\n\tprops: {\r\n\t\titem: null\r\n\t},\r\n\tdata () {\r\n\t\treturn {\r\n\t\t\tready: false\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tselectedStore: state => state.storeLocator.selectedStore,\r\n\t\t\thoveredStore: state => state.storeLocator.hoveredStore,\r\n\t\t\tcopy: state => state.storeLocator.copy\r\n\t\t}),\r\n\t\titemData () {\r\n\t\t\tlet d = {}\r\n\t\t\td.title = this.item['company_name']\r\n\t\t\td.city = this.item['city']\r\n\t\t\tlet t = []\r\n\t\t\tif (this.item['furniture']) t.push('Furniture')\r\n\t\t\tif (this.item['accessories']) t.push('Accessories')\r\n\t\t\tif (this.item['lighting']) t.push('Lighting')\r\n\t\t\td.tagsString = t.join(', ')\r\n\r\n\t\t\tlet ph = this.item['phone'] ? this.item['phone'] : ''\r\n\r\n\t\t\td.muutoExperience = this.item['muuto_experience'] === '1'\r\n\r\n\t\t\td.address = `${this.item['street']}<br>${this.item['postcode']} ${this.item['city']}<br/>${ph}`\r\n\t\t\td.links = [\r\n\t\t\t\t{\r\n\t\t\t\t\thref: this.item['website'],\r\n\t\t\t\t\ttitle: this.copy.goToStore,\r\n\t\t\t\t\ttrackingAction: this.item['company_name'],\r\n\t\t\t\t\ttrackingLabel: this.copy.goToStore,\r\n\t\t\t\t\ttarget: '_blank',\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\thref: this.item['directions'],\r\n\t\t\t\t\ttitle: this.copy.directions,\r\n\t\t\t\t\ttrackingAction: this.item['company_name'],\r\n\t\t\t\t\ttrackingLabel: this.copy.directions,\r\n\t\t\t\t\ttarget: '_blank',\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t\treturn d\r\n\t\t},\r\n\t\tisActive () {\r\n\t\t\tif (!this.selectedStore.data) return false\r\n\r\n\t\t\tlet active =\r\n\t\t\t\tthis.selectedStore.data[STORE_ID_NAME] ===\r\n\t\t\t\tthis.item[STORE_ID_NAME]\r\n\t\t\tif (active) {\r\n\t\t\t\tthis.$parent.$emit('scroll-to', this)\r\n\t\t\t}\r\n\t\t\treturn active\r\n\t\t},\r\n\t\tisHighlighted () {\r\n\t\t\tif (!this.hoveredStore.data) return false\r\n\r\n\t\t\tlet highlighted =\r\n\t\t\t\tthis.hoveredStore.data[STORE_ID_NAME] ===\r\n\t\t\t\tthis.item[STORE_ID_NAME]\r\n\t\t\treturn highlighted\r\n\t\t},\r\n\t},\r\n\tmounted () {},\r\n\tmethods: {\r\n\t\t...mapActions(['setBypassFetch', 'selectStore']),\r\n\t\tlistItemClick() {\r\n\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\tthis.setBypassFetch(true)\r\n\t\t\tthis.selectStore({ data: this.item })\r\n\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\"event\": \"trackStorelocator\",\r\n\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\"category\": \"Store locator\",\r\n\t\t\t\t\t\"action\": \"Store click\",\r\n\t\t\t\t\t\"label\": this.item['company_name']\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tlinkClick(e) {\r\n\t\t\tconst { currentTarget } = e;\r\n\t\t\tconst action = currentTarget.dataset.trackingAction;\r\n\t\t\tconst label = currentTarget.dataset.trackingLabel;\r\n\t\t\twindow.dataLayer.push({\r\n\t\t\t\t\"event\": \"trackStorelocator\",\r\n\t\t\t\t\"eventData\": {\r\n\t\t\t\t\t\"category\": \"Store locator\",\r\n\t\t\t\t\t\"action\": action,\r\n\t\t\t\t\t\"label\": label\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","/* eslint-disable */\r\nexport default [\r\n\t{\r\n\t \"featureType\": \"administrative\",\r\n\t \"elementType\": \"geometry\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"administrative.country\",\r\n\t \"elementType\": \"geometry.stroke\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#596f75\"\r\n\t\t},\r\n\t\t{\r\n\t\t \"visibility\": \"on\"\r\n\t\t},\r\n\t\t{\r\n\t\t \"weight\": 2\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"administrative.land_parcel\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"administrative.neighborhood\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"landscape.natural\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#798f95\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"landscape.natural\",\r\n\t \"elementType\": \"geometry.fill\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#798f95\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"landscape.man_made\",\r\n\t \"elementType\": \"geometry.fill\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#798f95\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"landscape.natural.landcover\",\r\n\t \"elementType\": \"geometry.fill\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#798f95\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"landscape.natural.terrain\",\r\n\t \"elementType\": \"geometry.fill\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#798f95\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"poi\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"road\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#87a0a6\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"road\",\r\n\t \"elementType\": \"labels\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"road\",\r\n\t \"elementType\": \"labels.icon\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"road.highway\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#87a0a6\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"road.highway\",\r\n\t \"elementType\": \"geometry.fill\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#87a0a6\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"road.highway\",\r\n\t \"elementType\": \"geometry.stroke\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"transit\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"water\",\r\n\t \"elementType\": \"geometry.fill\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"color\": \"#bcc9cc\"\r\n\t\t}\r\n\t ]\r\n\t},\r\n\t{\r\n\t \"featureType\": \"water\",\r\n\t \"elementType\": \"labels.text\",\r\n\t \"stylers\": [\r\n\t\t{\r\n\t\t \"visibility\": \"off\"\r\n\t\t}\r\n\t ]\r\n\t}\r\n];\r\n/* eslint-enable */\r\n","import StoreLocatorFilters from \"@components/store-locator/partials/filters/filters\";\r\nimport StoreLocatorList from \"@components/store-locator/partials/list/list\";\r\nimport StoreLocatorMap from \"@components/store-locator/partials/map/map\";\r\n\r\nexport default {\r\n\tname: \"store-locator\",\r\n\tcomponents: {\r\n\t\tStoreLocatorFilters,\r\n\t\tStoreLocatorList,\r\n\t\tStoreLocatorMap,\r\n\t},\r\n\tprops: {\r\n\t\tcategoryId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tlat: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tlng: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tzoom: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\ttranslation: {\r\n\t\t\ttype: String,\r\n\t\t\trequire: false,\r\n\t\t\tdefault: \"{}\",\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.$store.commit(\"setStorelocatorId\", this.categoryId);\r\n\t\tconst defaults = {\r\n\t\t\tzoom: parseFloat(this.zoom) || null,\r\n\t\t\tcenter:\r\n\t\t\t\tthis.lat && this.lng\r\n\t\t\t\t\t? { lat: parseFloat(this.lat), lng: parseFloat(this.lng) }\r\n\t\t\t\t\t: null,\r\n\t\t\tcopy: { ...JSON.parse(this.translation) },\r\n\t\t};\r\n\t\tthis.$store.commit(\"setDefaults\", defaults);\r\n\t},\r\n};\r\n","/* eslint-disable no-undef */\r\nimport { mapActions, mapState } from \"vuex\";\r\n\r\nimport { FETCH_STORES } from \"../../../../basics/js/store/static\";\r\n\r\nimport { MarkerClusterer } from \"@googlemaps/markerclusterer\";\r\n\r\nimport mapStyles from \"./map-styles\";\r\n\r\n// import Store from '@store/store';\r\n\r\nconst STORE_ID_NAME = \"company_number\",\r\n\tSTORE_FLAGSHIP_NAME = \"muuto_experience\";\r\n\r\nexport default {\r\n\tname: \"store-locator-map\",\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tready: false,\r\n\r\n\t\t\tuseClusters: true,\r\n\r\n\t\t\tstateRef: null,\r\n\r\n\t\t\tmapContainer: null,\r\n\t\t\tmap: null,\r\n\r\n\t\t\tmarkers: [],\r\n\t\t\tmarkerClusterer: null,\r\n\t\t\tmarkerIcons: [],\r\n\r\n\t\t\ticons: {\r\n\t\t\t\tdefault: {\r\n\t\t\t\t\turl: \"../../static/images/storelocator/marker-default-idle.png\",\r\n\t\t\t\t\tw: 30,\r\n\t\t\t\t\th: 30,\r\n\t\t\t\t},\r\n\t\t\t\tdefaultSelected: {\r\n\t\t\t\t\turl: \"../../static/images/storelocator/marker-default-selected.png\",\r\n\t\t\t\t\tw: 50,\r\n\t\t\t\t\th: 50,\r\n\t\t\t\t},\r\n\t\t\t\tdefaultHover: {\r\n\t\t\t\t\turl: \"../../static/images/storelocator/marker-default-hover.png\",\r\n\t\t\t\t\tw: 30,\r\n\t\t\t\t\th: 30,\r\n\t\t\t\t},\r\n\r\n\t\t\t\tflagShip: {\r\n\t\t\t\t\turl: \"../../static/images/storelocator/marker-flagship-idle.png\",\r\n\t\t\t\t\tw: 30,\r\n\t\t\t\t\th: 30,\r\n\t\t\t\t},\r\n\t\t\t\tflagShipSelected: {\r\n\t\t\t\t\turl: \"../../static/images/storelocator/marker-flagship-selected.png\",\r\n\t\t\t\t\tw: 50,\r\n\t\t\t\t\th: 50,\r\n\t\t\t\t},\r\n\t\t\t\tflagShipHover: {\r\n\t\t\t\t\turl: \"../../static/images/storelocator/marker-flagship-hover.png\",\r\n\t\t\t\t\tw: 30,\r\n\t\t\t\t\th: 30,\r\n\t\t\t\t},\r\n\r\n\t\t\t\tgeolocation: {\r\n\t\t\t\t\turl: \"../../static/svg/geolocation-point.svg\",\r\n\t\t\t\t\tw: 24,\r\n\t\t\t\t\th: 24,\r\n\t\t\t\t},\r\n\t\t\t\tplaces: { url: \"../../static/svg/location.svg\", w: 30, h: 30 },\r\n\r\n\t\t\t\tcluster: { url: \"../../static/images/m/m\" },\r\n\t\t\t\tinfo: { url: \"../../static/images/storelocator/info.svg\" },\r\n\t\t\t},\r\n\r\n\t\t\tlocationMarker: null,\r\n\t\t};\r\n\t},\r\n\tmounted() {\r\n\t\tthis.stateRef = this.$store.state.storeLocator;\r\n\t\tthis.injectMapsApi();\r\n\t},\r\n\twatch: {\r\n\t\tstores(newVal) {\r\n\t\t\t//console.log(\"MAP | stores watch: newVal\",newVal)\r\n\r\n\t\t\tif (!newVal instanceof Array || newVal.length === 0) {\r\n\t\t\t\tif (this.$store.state.storeLocator.mapPlaceSearch) {\r\n\t\t\t\t\tthis.map.setZoom(this.map.zoom - 1);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis.sortStoresByDistance();\r\n\t\t},\r\n\t\tselectedStore(newVal) {\r\n\t\t\t//console.log(\"MAP | selectedStore.\",newVal)\r\n\t\t\tif (this.isObject(newVal)) {\r\n\t\t\t\tthis.goToLocation(newVal);\r\n\t\t\t\tthis.updateMarkerIcon(newVal);\r\n\t\t\t}\r\n\t\t},\r\n\t\thoveredStore(newVal) {\r\n\t\t\tthis.updateMarkerIcon(newVal);\r\n\t\t},\r\n\t\tchosenPlace(place) {\r\n\t\t\tif (this.isObject(place)) {\r\n\t\t\t\tthis.onPlaceChange(place);\r\n\t\t\t}\r\n\t\t},\r\n\t\tgeoLocationChanged(position) {\r\n\t\t\tthis.handleGeoLocation(position);\r\n\t\t},\r\n\t\tsortedStores(newVal) {\r\n\t\t\tif (newVal.length > 0) {\r\n\t\t\t\tthis.sortStoresByFilters();\r\n\t\t\t}\r\n\t\t},\r\n\t\tassortmentKeyChanged() {\r\n\t\t\tif (this.sortedStores.length > 0) {\r\n\t\t\t\tthis.sortStoresByFilters();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonlyFlagShipsChanged() {\r\n\t\t\tif (this.sortedStores.length > 0) {\r\n\t\t\t\tthis.sortStoresByFilters();\r\n\t\t\t}\r\n\t\t},\r\n\t\tsearchTerm() {\r\n\t\t\tif (this.searchTerm.length > 0) {\r\n\t\t\t\tthis.onSearchEnter(this.searchTerm);\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tstores: (state) => state.storeLocator[FETCH_STORES.stateKey],\r\n\t\t\tsortedStores: (state) => state.storeLocator.sortedStores,\r\n\t\t\tfilteredStores: (state) => state.storeLocator.filteredStores,\r\n\t\t\tselectedStore: (state) => state.storeLocator.selectedStore,\r\n\t\t\thoveredStore: (state) => state.storeLocator.hoveredStore,\r\n\t\t\tbypassFetch: (state) => state.storeLocator.bypassFetch,\r\n\t\t\tchosenPlace: (state) => state.storeLocator.chosenPlace,\r\n\t\t\tgeoLocationChanged: (state) => state.storeLocator.geoLocationCoords,\r\n\t\t\tassortmentKeyChanged: (state) => state.storeLocator.chosenAssortmentKey,\r\n\t\t\tonlyFlagShipsChanged: (state) => state.storeLocator.onlyFlagShips,\r\n\t\t\tsearchTerm: (state) => state.storeLocator.searchTerm,\r\n\t\t\tcopy: (state) => state.storeLocator.copy,\r\n\t\t}),\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"mapReady\",\r\n\t\t\t\"storeLocatorReady\",\r\n\t\t\t\"mapZoomChange\",\r\n\t\t\t\"mapDragChange\",\r\n\t\t\t\"setBypassFetch\",\r\n\t\t\t\"getInitialStores\",\r\n\t\t\t\"getStoresFromBound\",\r\n\t\t\t\"selectStore\",\r\n\t\t\t\"hoverStore\",\r\n\t\t\t\"statusCheck\",\r\n\t\t\t\"storesSortedByDistance\",\r\n\t\t\t\"storesSortedByFilters\",\r\n\t\t]),\r\n\t\tinjectMapsApi() {\r\n\t\t\tthis.mapContainer = this.$refs.storeLocatorMap;\r\n\r\n\t\t\tconst initCallBackId = \"initClientMap\";\r\n\t\t\tconst mapsScript = document.createElement(\"script\");\r\n\t\t\tconst urlString = [];\r\n\t\t\turlString.push(window.location.protocol);\r\n\t\t\turlString.push(this.stateRef.google.uri + \"?\");\r\n\t\t\turlString.push(\"libraries=\" + this.stateRef.google.libraries.join(\",\") + \"&\");\r\n\t\t\turlString.push(\"key=\" + this.stateRef.google.apiKey + \"&\");\r\n\t\t\turlString.push(\"callback=\" + initCallBackId);\r\n\r\n\t\t\tif (this.stateRef.google.languageCode) {\r\n\t\t\t\turlString.push(\"&language=\" + this.stateRef.google.languageCode);\r\n\t\t\t}\r\n\t\t\tif (this.stateRef.google.countryCode) {\r\n\t\t\t\turlString.push(\"®ion=\" + this.stateRef.google.countryCode.toLowerCase());\r\n\t\t\t}\r\n\t\t\tmapsScript.setAttribute(\"src\", urlString.join(\"\"));\r\n\t\t\tmapsScript.setAttribute(\"async\", \"\");\r\n\t\t\tdocument.head.appendChild(mapsScript);\r\n\r\n\t\t\twindow[initCallBackId] = this.initMap.bind(this);\r\n\r\n\t\t\t// DEPRECATED\r\n\t\t\t/*\r\n\t\t\tif (this.stateRef.google.markerClusterer) {\r\n\t\t\t\tconst clusterScript = document.createElement(\"script\");\r\n\t\t\t\tclusterScript.setAttribute(\r\n\t\t\t\t\t\"src\",\r\n\t\t\t\t\t\"//developers.google.com/maps/documentation/javascript/examples/markerclusterer/markerclusterer.js\"\r\n\t\t\t\t);\r\n\t\t\t\tclusterScript.setAttribute(\"async\", \"\");\r\n\t\t\t\tdocument.head.appendChild(clusterScript);\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t},\r\n\r\n\t\tinitMap() {\r\n\t\t\tconst clientMapTypeId = \"client_style\";\r\n\t\t\t// const icons = this.icons;\r\n\r\n\t\t\tif (!this.mapContainer) {\r\n\t\t\t\tconsole.warn(\"Missing map container: \", this.mapContainer);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.clientMapType = new google.maps.StyledMapType(mapStyles, {\r\n\t\t\t\tname: clientMapTypeId,\r\n\t\t\t});\r\n\t\t\tthis.map = new google.maps.Map(this.mapContainer, this.stateRef.mapOptions);\r\n\r\n\t\t\tthis.map.mapTypes.set(clientMapTypeId, this.clientMapType);\r\n\r\n\t\t\tthis.addMapEvents();\r\n\r\n\t\t\tthis.setupIcons();\r\n\r\n\t\t\t// maps ready and the application should be ready to fetch stores\r\n\t\t\tgoogle.maps.event.addListenerOnce(this.map, \"tilesloaded\", () => {\r\n\t\t\t\tthis.mapReady();\r\n\t\t\t\tthis.getInitialStores();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\taddMapEvents() {\r\n\t\t\tthis.map.addListener(\"dragend\", () => {\r\n\t\t\t\t//console.log(\"MAP | DRAG handler. this.bypassFetch:\"+this.bypassFetch)\r\n\r\n\t\t\t\tif (!this.bypassFetch) {\r\n\t\t\t\t\tthis.getStoresFromBound({\r\n\t\t\t\t\t\tmapCenter: this.getMapCenter(),\r\n\t\t\t\t\t\tmapBounds: this.getMapBounds(),\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.mapDragChange(this.getMapCenter());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.map.addListener(\"idle\", () => {\r\n\t\t\t\t//console.log(\"MAP | IDLE handler. this.bypassFetch:\"+this.bypassFetch)\r\n\t\t\t\tif (!this.bypassFetch) {\r\n\t\t\t\t\tthis.statusCheck({ mapBounds: this.getMapBounds() });\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.map.addListener(\"zoom_changed\", () => {\r\n\t\t\t\t//console.log(\"MAP | ZOOM handler. this.bypassFetch:\"+this.bypassFetch)\r\n\r\n\t\t\t\tif (!this.bypassFetch) {\r\n\t\t\t\t\tthis.getStoresFromBound({\r\n\t\t\t\t\t\tmapCenter: this.getMapCenter(),\r\n\t\t\t\t\t\tmapBounds: this.getMapBounds(),\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.mapZoomChange(this.map.zoom, this.getMapCenter());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Handles an autocomplete request for new place search\r\n\t\t * @Private\r\n\t\t */\r\n\t\tonPlaceChange(newPlace) {\r\n\t\t\tconst place = newPlace;\r\n\r\n\t\t\t// TODO RESET LOCATION\r\n\t\t\tif (this.locationMarker) {\r\n\t\t\t\tthis.locationMarker.setMap(null);\r\n\t\t\t\tthis.locationMarker = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (place.geometry) {\r\n\t\t\t\tconst icon = new google.maps.MarkerImage(\r\n\t\t\t\t\tthis.icons.places.url,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnew google.maps.Size(this.icons.places.w, this.icons.places.h)\r\n\t\t\t\t);\r\n\t\t\t\tthis.locationMarker = new google.maps.Marker({\r\n\t\t\t\t\tposition: place.geometry.location,\r\n\t\t\t\t\tmap: this.map,\r\n\t\t\t\t\ticon,\r\n\t\t\t\t\tclickable: true,\r\n\t\t\t\t\tdraggable: true,\r\n\t\t\t\t\tanimation: google.maps.Animation.DROP,\r\n\t\t\t\t\ttitle: this.stateRef.copy.yourSearchMarkerLabel,\r\n\t\t\t\t});\r\n\t\t\t\tthis.locationMarker.setAnimation(google.maps.Animation.BOUNCE);\r\n\t\t\t\twindow.setTimeout(() => {\r\n\t\t\t\t\tthis.locationMarker.setAnimation(null);\r\n\t\t\t\t}, 300);\r\n\r\n\t\t\t\tif (place.geometry.viewport) {\r\n\t\t\t\t\tthis.map.fitBounds(place.geometry.viewport);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.map.setCenter(place.geometry.location);\r\n\t\t\t\t\tthis.map.setZoom(13);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// appStore.dispatch(toggleSearch(true));\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * handleGeoLocation\r\n\t\t */\r\n\t\thandleGeoLocation(position) {\r\n\t\t\tconst latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);\r\n\t\t\tconst mapSize = new google.maps.Size(this.icons.geolocation.w, this.icons.geolocation.h);\r\n\t\t\tconst icon = new google.maps.MarkerImage(this.icons.geolocation.url, null, null, null, mapSize);\r\n\r\n\t\t\tthis.geoLocationMarker = new google.maps.Marker({\r\n\t\t\t\tposition: latlng,\r\n\t\t\t\tmap: this.map,\r\n\t\t\t\ttitle: this.copy.youAreHere,\r\n\t\t\t\ticon,\r\n\t\t\t\tdraggable: true,\r\n\t\t\t\tclient_id: \"you\", // jshint ignore:line\r\n\t\t\t});\r\n\r\n\t\t\tthis.map.setCenter(latlng);\r\n\t\t\tthis.map.setZoom(12);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * getMapCenter - calculates and returns the center of the map.\r\n\t\t */\r\n\t\tgetMapCenter(useLatLng = false) {\r\n\t\t\tif (useLatLng) {\r\n\t\t\t\treturn this.map.getCenter();\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tlat: this.map.center.lat(),\r\n\t\t\t\tlng: this.map.center.lng(),\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\tgetMapBounds() {\r\n\t\t\tlet m = this.map,\r\n\t\t\t\tb = m.getBounds(),\r\n\t\t\t\tj = b.toJSON();\r\n\r\n\t\t\treturn j;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * updateMarker is used to update the existing markers already created.\r\n\t\t * The method automatically generate new markers if they doesn't exist in the cached markers\r\n\t\t * TODO: filter on existing markers and remove them from the map\r\n\t\t * @public\r\n\t\t * @params\r\n\t\t */\r\n\t\tupdateMarkers() {\r\n\t\t\t//console.log(\"MAP | updateMarkers | filteredStores length = \"+this.filteredStores.length);\r\n\r\n\t\t\tif (this.useClusters) {\r\n\t\t\t\t//NOTE: When using clustering, markers + references have to be completely removed before updating\r\n\t\t\t\tfor (var i = 0; i < this.markers.length; i++) {\r\n\t\t\t\t\tthis.markers[i].setMap(null);\r\n\t\t\t\t}\r\n\t\t\t\tthis.markers = [];\r\n\r\n\t\t\t\tthis.filteredStores.forEach((storeData) => {\r\n\t\t\t\t\tthis.markers.push(this.createMarker(storeData));\r\n\t\t\t\t});\r\n\t\t\t\t// console.log(\"this.markers\",this.markers);\r\n\r\n\t\t\t\tthis.handleMarkerClustering();\r\n\t\t\t} else {\r\n\t\t\t\t//NOTE: Without clustering, markers can be kept around and references can stay\r\n\t\t\t\tconst currentStoresIds = [];\r\n\r\n\t\t\t\t// create markers if they doesn't exist and add map instance if they already exist\r\n\t\t\t\tthis.filteredStores.forEach((storeData) => {\r\n\t\t\t\t\t//locate marker matching store data by id\r\n\t\t\t\t\tconst selectedMarker = this.markers.find(\r\n\t\t\t\t\t\t(marker) => marker.storeData[STORE_ID_NAME] === storeData[STORE_ID_NAME]\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (selectedMarker) {\r\n\t\t\t\t\t\t// marker exists\r\n\t\t\t\t\t\tif (!selectedMarker.map) {\r\n\t\t\t\t\t\t\tselectedMarker.setMap(this.map);\r\n\t\t\t\t\t\t\tselectedMarker.setVisible(true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// marker doesn't exist so create new\r\n\t\t\t\t\t\tthis.markers.push(this.createMarker(storeData));\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//only allow markers within filter\r\n\t\t\t\t\tcurrentStoresIds.push(storeData[STORE_ID_NAME]);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// console.log(\"currentStoresIds\",currentStoresIds)\r\n\r\n\t\t\t\t// remove the markers that shouldn't be on the map\r\n\t\t\t\tthis.markers.forEach((marker) => {\r\n\t\t\t\t\tlet markerIdPosition = currentStoresIds.indexOf(marker.storeData[STORE_ID_NAME]);\r\n\t\t\t\t\t// console.log(\"markerIdPosition: \"+markerIdPosition)\r\n\t\t\t\t\tif (markerIdPosition === -1) {\r\n\t\t\t\t\t\t// console.log(\"HIDE MARKER \"+marker.storeData[STORE_ID_NAME])\r\n\t\t\t\t\t\t// marker.map = null;\r\n\t\t\t\t\t\tmarker.setMap(null);\r\n\t\t\t\t\t\tmarker.setVisible(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclusterRenderer({ count, position }) {\r\n\t\t\t// use d3-interpolateRgb to interpolate between red and blue\r\n\t\t\t// create svg url with fill color\r\n\t\t\tconst svg = window.btoa(`\r\n\t\t\t\t<svg fill=\"#EBE7DC\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\">\r\n\t\t\t\t<circle cx=\"120\" cy=\"120\" r=\"70\" />\r\n\t\t\t\t</svg>`);\r\n\r\n\t\t\tlet dynamicSize = Math.min(50 + count * 2, 100);\r\n\t\t\t// create marker using svg icon\r\n\t\t\treturn new google.maps.Marker({\r\n\t\t\t\tposition,\r\n\t\t\t\ticon: {\r\n\t\t\t\t\turl: `data:image/svg+xml;base64,${svg}`,\r\n\t\t\t\t\tscaledSize: new google.maps.Size(dynamicSize, dynamicSize),\r\n\t\t\t\t},\r\n\t\t\t\tlabel: {\r\n\t\t\t\t\ttext: String(count),\r\n\t\t\t\t\tcolor: \"#000000\",\r\n\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t},\r\n\t\t\t\t// adjust zIndex to be above other markers\r\n\t\t\t\tzIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\thandleMarkerClustering() {\r\n\t\t\tconsole.log(\"MAP | handleMarkerClustering | this.markerClusterer?\", this.markerClusterer);\r\n\r\n\t\t\tif (this.markerClusterer) {\r\n\t\t\t\tthis.markerClusterer.clearMarkers();\r\n\t\t\t}\r\n\t\t\t// let options = { imagePath: this.icons.cluster.url };\r\n\r\n\t\t\tthis.markerClusterer = new MarkerClusterer({ map:this.map, markers:this.markers, renderer: {render:this.clusterRenderer} });\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * private\r\n\t\t * setMarkers is called on instantiation\r\n\t\t *\r\n\t\t */\r\n\t\tcreateMarker(storeData) {\r\n\t\t\tconst pos = new google.maps.LatLng(storeData.latitude, storeData.longitude);\r\n\r\n\t\t\tconst storeType = this.getStoreType(storeData);\r\n\r\n\t\t\tlet icon = this.markerIcons[storeType].idle;\r\n\t\t\tif (this.selectedStore.data && storeData[STORE_ID_NAME] == this.selectedStore.data[STORE_ID_NAME]) {\r\n\t\t\t\ticon = this.markerIcons[storeType].selected;\r\n\t\t\t}\r\n\r\n\t\t\tconst marker = new google.maps.Marker({\r\n\t\t\t\tposition: pos,\r\n\t\t\t\tmap: this.map,\r\n\t\t\t\ticon: icon,\r\n\t\t\t\tanimation: false,\r\n\t\t\t\tclickable: true,\r\n\t\t\t\tstoreData: storeData,\r\n\t\t\t\toptimized: false,\r\n\t\t\t});\r\n\t\t\tgoogle.maps.event.addListener(marker, \"click\", () => {\r\n\t\t\t\tthis.selectStore({\r\n\t\t\t\t\tdata: storeData,\r\n\t\t\t\t\tselect: true,\r\n\t\t\t\t\tscrollTo: true,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tgoogle.maps.event.addListener(marker, \"mouseover\", () => {\r\n\t\t\t\tthis.hoverStore({ data: storeData, hover: true });\r\n\t\t\t});\r\n\r\n\t\t\tgoogle.maps.event.addListener(marker, \"mouseout\", () => {\r\n\t\t\t\tthis.hoverStore({ data: storeData, hover: false });\r\n\t\t\t});\r\n\r\n\t\t\treturn marker;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * updateMarkerIcon - updates the icon of a marker\r\n\t\t * @public\r\n\t\t * @param state {obj} selected, hover, id\r\n\t\t */\r\n\t\tupdateMarkerIcon(markerRef) {\r\n\t\t\tlet icon = \"\",\r\n\t\t\t\tstoreType = this.getStoreType(markerRef.data);\r\n\r\n\t\t\t//console.log(\"MAP | updateMarkerIcon. this.selectedStore?\"+this.isObject(this.selectedStore), markerRef, storeType)\r\n\r\n\t\t\tif (this.selectedStore.data && markerRef.data[STORE_ID_NAME] == this.selectedStore.data[STORE_ID_NAME]) {\r\n\t\t\t\ticon = this.markerIcons[storeType].selected;\r\n\t\t\t\tthis.markers.forEach((marker) => {\r\n\t\t\t\t\tlet mst = this.getStoreType(marker.storeData);\r\n\t\t\t\t\tlet mi = this.markerIcons[mst].idle;\r\n\t\t\t\t\tmarker.setIcon(mi);\r\n\t\t\t\t});\r\n\t\t\t} else if (markerRef.hover) {\r\n\t\t\t\ticon = this.markerIcons[storeType].hover;\r\n\t\t\t} else {\r\n\t\t\t\ticon = this.markerIcons[storeType].idle;\r\n\t\t\t}\r\n\r\n\t\t\tconst currentMarker = this.markers.filter(\r\n\t\t\t\t(marker) => markerRef.data[STORE_ID_NAME] === marker.storeData[STORE_ID_NAME]\r\n\t\t\t);\r\n\t\t\tcurrentMarker[0].setIcon(icon);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * goToLocation moved the map to a storeModel\r\n\t\t * @param {obj} position - with latitude and longitude that the map should move to\r\n\t\t * @param {number} zoomLevel - overwrite the zoomlevel provided in the settings\r\n\t\t * @param {bool} silent - disable next tick in the storelocators breath\r\n\t\t */\r\n\r\n\t\tgoToLocation(markerRef) {\r\n\t\t\t//console.log(\"MAP | goToLocation\",markerRef)\r\n\t\t\tconst latlng = new google.maps.LatLng(markerRef.data.latitude, markerRef.data.longitude);\r\n\r\n\t\t\tthis.map.panTo(latlng);\r\n\t\t\t// this.map.setZoom(13);\r\n\r\n\t\t\tthis.setBypassFetch(false);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * sortStoresByDistance sorts all stores by distance to map center\r\n\t\t * @public sortStoresByDistance\r\n\t\t * @param {*} stores\r\n\t\t *\r\n\t\t */\r\n\t\tsortStoresByDistance() {\r\n\t\t\t// let stores = [].concat(this.stores);\r\n\t\t\tlet stores = JSON.parse(JSON.stringify(this.stores));\r\n\r\n\t\t\t// setting distance to center\r\n\t\t\tstores = stores.map((store) => {\r\n\t\t\t\tstore.distanceToCenter = this.getDistanceToCenter(store);\r\n\t\t\t\treturn store;\r\n\t\t\t});\r\n\r\n\t\t\t// sorting closest to center\r\n\t\t\tstores.sort((a, b) => parseFloat(a.distanceToCenter) - parseFloat(b.distanceToCenter));\r\n\t\t\t//console.log(\"MAP | sortStoresByDistance\",stores)\r\n\r\n\t\t\t// sorting closest to center\r\n\t\t\tstores.sort((a, b) => (a[\"muuto_experience\"] == \"1\" && b[\"muuto_experience\"] != \"1\" ? -1 : 1));\r\n\t\t\t//console.log(\"MAP | sortStoresByDistance | muuto_experience first\",stores)\r\n\r\n\t\t\tthis.storesSortedByDistance(stores);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * sortStoresByFilters\r\n\t\t * @public sortStoresByDistance\r\n\t\t * @param {*} stores\r\n\t\t *\r\n\t\t */\r\n\t\tsortStoresByFilters() {\r\n\t\t\tif (this.sortedStores.length > 0) {\r\n\t\t\t\tlet assortmentFilter = this.stateRef.chosenAssortmentKey;\r\n\t\t\t\tlet flagShipFilter = this.stateRef.onlyFlagShips;\r\n\r\n\t\t\t\tlet stores = JSON.parse(JSON.stringify(this.sortedStores));\r\n\t\t\t\tlet newStores = [];\r\n\t\t\t\tlet storesCount = stores.length;\r\n\r\n\t\t\t\tfor (let i = 0; i < storesCount; i++) {\r\n\t\t\t\t\tlet store = JSON.parse(JSON.stringify(stores[i]));\r\n\r\n\t\t\t\t\tif (flagShipFilter == false && assortmentFilter == \"all\") {\r\n\t\t\t\t\t\t// console{.log(\"no filter\")\r\n\t\t\t\t\t\tnewStores.push(store);\r\n\t\t\t\t\t} else if (flagShipFilter == true) {\r\n\t\t\t\t\t\tif (store[\"muuto_experience\"] == \"1\") {\r\n\t\t\t\t\t\t\tif (assortmentFilter != \"all\") {\r\n\t\t\t\t\t\t\t\tif (store[assortmentFilter]) {\r\n\t\t\t\t\t\t\t\t\t// console.log(\"flagship store + assortment ok\")\r\n\t\t\t\t\t\t\t\t\tnewStores.push(store);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t// console.log(\"just flagship store\")\r\n\t\t\t\t\t\t\t\tnewStores.push(store);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (assortmentFilter != \"all\" && store[assortmentFilter]) {\r\n\t\t\t\t\t\t// console.log(\"just assortment ok\")\r\n\t\t\t\t\t\tnewStores.push(store);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//console.log(\"MAP | sortStoresByFilters\",newStores)\r\n\r\n\t\t\t\tthis.storesSortedByFilters(newStores);\r\n\t\t\t}\r\n\r\n\t\t\tthis.updateMarkers();\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * ToDO check for geoLocation and use that as center if it's available\r\n\t\t * @private\r\n\t\t */\r\n\t\tgetDistanceToCenter(store) {\r\n\t\t\tconst center = this.getMapCenter(true);\r\n\r\n\t\t\tconst markerPos = new google.maps.LatLng(store.latitude, store.longitude);\r\n\r\n\t\t\tlet distanceToCenter = google.maps.geometry.spherical.computeDistanceBetween(center, markerPos);\r\n\r\n\t\t\treturn distanceToCenter;\r\n\t\t},\r\n\r\n\t\tgetStoreType(storeData) {\r\n\t\t\treturn storeData[STORE_FLAGSHIP_NAME] === \"1\" ? \"flagShip\" : \"default\";\r\n\t\t},\r\n\r\n\t\tisObject(item) {\r\n\t\t\treturn item && typeof item === \"object\" && !Array.isArray(item);\r\n\t\t},\r\n\t\t/**\r\n\t\t * getLocationFromAddress\r\n\t\t */\r\n\t\tgetLocationFromAddress(address) {\r\n\t\t\tconst geocoder = new google.maps.Geocoder();\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tgeocoder.geocode({ address }, (results, status) => {\r\n\t\t\t\t\tif (status === google.maps.GeocoderStatus.OK) {\r\n\t\t\t\t\t\tresolve(results);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treject(new Error(\"Geocode was not successful: \" + status));\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t},\r\n\t\tonSearchEnter(value) {\r\n\t\t\tconst service = new google.maps.places.AutocompleteService();\r\n\t\t\tservice.getPlacePredictions({ input: value }, (result) => {\r\n\t\t\t\tthis.getLocationFromAddress(result[0].description).then((place) => {\r\n\t\t\t\t\tthis.onPlaceChange(place[0]);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tsetupIcons() {\r\n\t\t\tthis.markerIcons = {\r\n\t\t\t\tdefault: {\r\n\t\t\t\t\tidle: new google.maps.MarkerImage(\r\n\t\t\t\t\t\tthis.icons.default.url,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnew google.maps.Size(this.icons.default.w, this.icons.default.h)\r\n\t\t\t\t\t),\r\n\t\t\t\t\thover: new google.maps.MarkerImage(\r\n\t\t\t\t\t\tthis.icons.defaultHover.url,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnew google.maps.Size(this.icons.defaultHover.w, this.icons.defaultHover.h)\r\n\t\t\t\t\t),\r\n\t\t\t\t\tselected: new google.maps.MarkerImage(\r\n\t\t\t\t\t\tthis.icons.defaultSelected.url,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnew google.maps.Size(this.icons.defaultSelected.w, this.icons.defaultSelected.h)\r\n\t\t\t\t\t),\r\n\t\t\t\t},\r\n\t\t\t\tflagShip: {\r\n\t\t\t\t\tidle: new google.maps.MarkerImage(\r\n\t\t\t\t\t\tthis.icons.flagShip.url,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnew google.maps.Size(this.icons.flagShip.w, this.icons.flagShip.h)\r\n\t\t\t\t\t),\r\n\t\t\t\t\thover: new google.maps.MarkerImage(\r\n\t\t\t\t\t\tthis.icons.flagShipHover.url,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnew google.maps.Size(this.icons.flagShipHover.w, this.icons.flagShipHover.h)\r\n\t\t\t\t\t),\r\n\t\t\t\t\tselected: new google.maps.MarkerImage(\r\n\t\t\t\t\t\tthis.icons.flagShipSelected.url,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tnew google.maps.Size(this.icons.flagShipSelected.w, this.icons.flagShipSelected.h)\r\n\t\t\t\t\t),\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t},\r\n\t},\r\n};\r\n","import { vueVimeoPlayer } from 'vue-vimeo-player';\r\n\r\nexport default {\r\n\tname: 'video-player-vimeo',\r\n\tcomponents: { vueVimeoPlayer },\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tvideoID: '286898202',\r\n\t\t\toptions: {},\r\n\t\t\tplayerReady: false,\r\n\t\t\tisPlaying: false,\r\n\t\t\twidth: '100%',\r\n\t\t\theight: '100%'\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tonReady() {\r\n\t\t\tthis.playerReady = true;\r\n\t\t},\r\n\t\tplay () {\r\n\t\t\tthis.$refs.player.play();\r\n\t\t\tthis.isPlaying = true;\r\n\t\t}\r\n\t}\r\n};\r\n","import ProductTile from '../product-tile/product-tile'\r\nimport ProductTileProd from '../product-tile/product-tile'\r\nimport InspirationTile from '@components/inspiration-tile/inspiration-tile'\r\nimport clearTileFilters from '../../basics/js/methods/updateTileFilters/updateTileFilters'\r\n\r\nexport default {\r\n name: 'tile-list',\r\n computed:{\r\n tileListData(){\r\n return this.$store.state.search.tileListData\r\n },\r\n\t\tshowLoadMore(){\r\n return (this.$store.state.search.availableTotalResults > 0 && this.$store.state.search.availableTotalResults > this.$store.state.search.visibleResults)\r\n },\r\n noResults(){\r\n return this.$store.state.search.availableTotalResults === 0;\r\n },\r\n filteringInProgress(){\r\n return this.$store.state.search.filteringInProgress\r\n }\r\n },\r\n methods:{\r\n loadMoreResults(){\r\n\r\n const skipValue = (this.$store.state.search.filterSkip === 0)\r\n ? this.$store.state.search.visibleResults\r\n : (this.$store.state.search.filterSkip+this.$store.state.search.filterTake)\r\n\r\n\r\n this.$store.commit('updateFilterSkip',skipValue)\r\n this.$store.dispatch('performProductFiltering')\r\n },\r\n clearTileFilters(){\r\n clearTileFilters([])\r\n }\r\n },\r\n components: {\r\n ProductTile,\r\n ProductTileProd,\r\n InspirationTile\r\n }\r\n\r\n}\r\n","import throttle from \"lodash/throttle\";\r\n\r\nexport default {\r\n\tname: \"sticky-gallery\",\r\n\tprops: {\r\n\t\tcontent: { type: Array, default: () => [] },\r\n\t},\r\n\tdata: () => ({\r\n\t\timageHeight: 0, // calculated on scroll\r\n\t\taspectRatio: 0, // how heigh is the images (defined in css)\r\n\t\tcurActive: 0, // what image is in view\r\n\t\tamount: 60, // setting, how much effect? 0 = none, 100 = sticky image\r\n\t}),\r\n\tcomputed: {\r\n\t\teffect() {\r\n\t\t\treturn this.amount * this.aspectRatio * -1;\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\tonScroll() {\r\n\t\t\tthrottle(this.update, 16)();\r\n\t\t},\r\n\t\tsetActive(idx, top) {\r\n\t\t\tif (top < 0 && -top < this.imageHeight) {\r\n\t\t\t\tthis.curActive = idx + 1;\r\n\t\t\t} else if (idx === 0 && top > 0) {\r\n\t\t\t\tthis.curActive = 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\tupdate() {\r\n\t\t\tconst {\r\n\t\t\t\ttop: componentTop,\r\n\t\t\t\tbottom,\r\n\t\t\t} = this.$el.getBoundingClientRect();\r\n\r\n\t\t\tif (\r\n\t\t\t\t(componentTop > 0 && bottom > 0) ||\r\n\t\t\t\t(componentTop < 0 && bottom < 0)\r\n\t\t\t) {\r\n\t\t\t\t// component is not in view\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst { innerWidth, innerHeight } = window;\r\n\t\t\tconst [, ...tail] = this.$refs[\"sticky-gallery__item\"];\r\n\r\n\t\t\tthis.imageHeight = Math.max(\r\n\t\t\t\tinnerHeight,\r\n\t\t\t\tinnerWidth * this.aspectRatio\r\n\t\t\t);\r\n\r\n\t\t\ttail.forEach((image, idx) => {\r\n\t\t\t\tconst top = componentTop + this.imageHeight * (idx + 1);\r\n\t\t\t\tconst parallaxAmount = (top / innerHeight) * this.effect;\r\n\r\n\t\t\t\timage.firstChild.style.transform =\r\n\t\t\t\t\ttop > innerHeight || top < 0\r\n\t\t\t\t\t\t? `translate(0)`\r\n\t\t\t\t\t\t: `translate3d(0, ${parallaxAmount}%, 0)`;\r\n\r\n\t\t\t\tthis.setActive(idx, top);\r\n\t\t\t});\r\n\t\t},\r\n\t\tsetHeaderColor() {\r\n\t\t\tconst { backgroundColor } = getComputedStyle(document.body);\r\n\r\n\t\t\tconst headerColor =\r\n\t\t\t\tbackgroundColor !== \"rgba(0, 0, 0, 0)\"\r\n\t\t\t\t\t? backgroundColor\r\n\t\t\t\t\t: \"#ffffff\";\r\n\r\n\t\t\tthis.$refs[\r\n\t\t\t\t\"sticky-gallery__header\"\r\n\t\t\t].style.backgroundColor = headerColor;\r\n\t\t},\r\n\t\tgetAspectRatio() {\r\n\t\t\tconst { paddingBottom } = getComputedStyle(\r\n\t\t\t\tthis.$refs[\"sticky-gallery__item\"][0]\r\n\t\t\t);\r\n\r\n\t\t\tthis.aspectRatio = parseInt(paddingBottom) / window.innerWidth;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.onScroll();\r\n\t\t// this.setHeaderColor();\r\n\t\tthis.getAspectRatio();\r\n\r\n\t\twindow.addEventListener(\"scroll\", this.onScroll.bind(this));\r\n\t},\r\n\tbeforeDestroy() {\r\n\t\twindow.removeEventListener(\"scroll\", this.onScroll.bind(this));\r\n\t},\r\n};\r\n","export default {\r\n\tname: \"mega-links\",\r\n\tprops: {\r\n\t\tlinks: {\r\n\t\t\ttype: Array,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tactiveItem: null,\r\n\t\t\tactiveIndex: -1,\r\n\t\t\tmediaLoaded: false,\r\n\r\n\t\t\timageX: 0,\r\n\t\t\timageY: 0,\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\tmouseOverHandler: function (item, index) {\r\n\t\t\tthis.mediaLoaded = false;\r\n\t\t\tthis.activeItem = item;\r\n\t\t\tthis.activeIndex = index;\r\n\r\n\t\t\tif ( item.videoSrc ) {\r\n\t\t\t\tthis.mediaLoadedHandler();\r\n\t\t\t}\r\n\t\t},\r\n\t\tmouseOutHandler: function () {\r\n\t\t\tthis.activeItem = null;\r\n\t\t\tthis.activeIndex = -1;\r\n\t\t},\r\n\t\tmediaLoadedHandler: function () {\r\n\t\t\tthis.mediaLoaded = true;\r\n\t\t},\r\n\t\tmouseMoveHandler: function (event) {\r\n\t\t\tthis.imageX = event.clientX;\r\n\t\t\tthis.imageY = event.clientY;\r\n\t\t},\r\n\t\tgetXlinkHref: function(icon) {\r\n\t\t\treturn `/Static/dist/svg/symbols.svg#svg-${icon}`;\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\timageStyle() {\r\n\t\t\treturn `--mega-links-image-x: ${this.imageX}px; --mega-links-image-y: ${this.imageY}px;`;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\twindow.addEventListener(\"mousemove\", this.mouseMoveHandler.bind(this));\r\n\t},\r\n};\r\n","import { rInterval } from \"./../../basics/js/utils\";\r\n\r\nexport default {\r\n\tname: \"sliding-presentation\",\r\n\tdata: () => ({\r\n\t\tyLerpPos: 0,\r\n\t}),\r\n\tmethods: {\r\n\t\ttransform() {\r\n\t\t\tthis.yLerpPos += (window.pageYOffset - this.yLerpPos) * 0.15;\r\n\t\t\tconst limited = Math.max(0.0001, this.yLerpPos);\r\n\r\n\t\t\tconst browsers = [\"webkitTransform\", \"MozTransform\", \"transform\"];\r\n\r\n\t\t\tconst leftPos = Math.min(limited / 4, 100);\r\n\t\t\tconst textScale = Math.min(1, limited / 1300 + 0.7);\r\n\t\t\tconst textLeftStyle = `translate(calc(${leftPos / 1.01}vw - ${leftPos}%), ${-limited / 3.5}px) scale(${textScale})`;\r\n\t\t\tconst textRightStyle = `translateY(${-limited / 100}px) scale(${textScale})`;\r\n\t\t\tconst mediaStyle = `translateY(${window.pageYOffset / 37}vmax)`;\r\n\t\t\tconst trumpetStyle = `translate(${-limited / 12}vmax, ${window.pageYOffset}px)`;\r\n\r\n\t\t\tbrowsers.forEach((browser) => {\r\n\t\t\t\tthis.$refs[\"text-left\"].style[browser] = textLeftStyle;\r\n\t\t\t\tthis.$refs[\"text-right\"].style[browser] = textRightStyle;\r\n\t\t\t\tthis.$refs[\"trumpet\"].style[browser] = trumpetStyle;\r\n\r\n\t\t\t\tif (this.$refs[\"media\"]) {\r\n\t\t\t\t\tthis.$refs[\"media\"].style[browser] = mediaStyle;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tgetPositionOnPage() {\r\n\t\t\tconst transformY = this.$el.parentElement.style.transform.replace(/[^\\d.]/g, \"\");\r\n\t\t\treturn transformY;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tdocument.body.style.overflow = \"hidden\";\r\n\r\n\t\twindow.scrollTo(0, 0);\r\n\r\n\t\tconst styles = getComputedStyle(this.$el);\r\n\t\tconst animationDuration = parseFloat(styles.getPropertyValue(\"--dur\")) * 1000;\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tdocument.body.style.removeProperty(\"overflow\");\r\n\t\t}, animationDuration);\r\n\r\n\t\t//Reset scroll top\r\n\t\thistory.scrollRestoration = \"manual\";\r\n\r\n\t\trInterval(this.transform, 16);\r\n\r\n\t\t/**\r\n\t\t * safari can't transform an element,\r\n\t\t * if it has an animation on it.\r\n\t\t */\r\n\t\tconst cssAnimatedElements = [this.$refs[\"text-left\"], this.$refs[\"text-right\"], this.$refs[\"media\"]];\r\n\t\tcssAnimatedElements.forEach((element) => {\r\n\t\t\telement.addEventListener(\"animationend\", () => {\r\n\t\t\t\telement.style.animation = \"none\";\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * todo: better init?\r\n\t\t */\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.$refs[\"sliding-presentation\"].classList.add(\"is-animating\");\r\n\t\t}, 1000);\r\n\t},\r\n};\r\n","import { mapState } from \"vuex\";\r\nimport Hero from \"../../components/hero/hero\";\r\nimport MegaLinks from \"../../components/mega-links/mega-links\";\r\nimport CategoryTile from \"../../components/category-tile/category-tile\";\r\nimport SlidingPresentation from \"../../components/sliding-presentation/sliding-presentation\";\r\nimport { rInterval } from \"./../../basics/js/utils\";\r\n\r\nexport default {\r\n\tname: \"sticky-scroll\",\r\n\tcomponents: {\r\n\t\tHero,\r\n\t\tMegaLinks,\r\n\t\tCategoryTile,\r\n\t\tSlidingPresentation,\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\twindowW: (state) => state.windowW,\r\n\t\t\twindowH: (state) => state.windowH,\r\n\t\t}),\r\n\t},\r\n\twatch: {\r\n\t\twindowW: function () {\r\n\t\t\tthis.resizeListener();\r\n\t\t},\r\n\t\twindowH: function () {\r\n\t\t\tthis.resizeListener();\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\toldScrollY: 0,\r\n\t\t\tresizeTimeout: 0,\r\n\t\t\tscrollPosition: 0,\r\n\t\t\tcontainerHeight: 0,\r\n\t\t\tsectionProps: [],\r\n\t\t\tsections: [],\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\tscrollListener: function (forceUpdate) {\r\n\t\t\tlet scroll = window.scrollY;\r\n\r\n\t\t\t// console.log(\"scroll??\",scroll)\r\n\r\n\t\t\tif (this.sections && this.sections.length > 0 && (scroll != this.oldScrollY || forceUpdate)) {\r\n\t\t\t\tthis.oldScrollY = scroll;\r\n\r\n\t\t\t\tthis.sectionProps.forEach((props, index) => {\r\n\t\t\t\t\tlet section = this.sections[index];\r\n\t\t\t\t\tif (scroll > props.y) {\r\n\t\t\t\t\t\tif (scroll <= props.y + props.h) {\r\n\t\t\t\t\t\t\t//scrolled inside\r\n\t\t\t\t\t\t\tsection.classList.add(\"is-active\");\r\n\t\t\t\t\t\t\tsection.classList.remove(\"is-past\");\r\n\r\n\t\t\t\t\t\t\tlet prop = `translateY(${props.y}px)`;\r\n\t\t\t\t\t\t\tsection.style.setProperty(\"transform\", prop);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t//scrolled past\r\n\t\t\t\t\t\t\tsection.classList.remove(\"is-active\");\r\n\t\t\t\t\t\t\tsection.classList.add(\"is-past\");\r\n\t\t\t\t\t\t\tsection.style.setProperty(\"transform\", \"translateY(0)\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//element not yet reached\r\n\t\t\t\t\t\tsection.classList.remove(\"is-active\");\r\n\t\t\t\t\t\tsection.classList.remove(\"is-past\");\r\n\t\t\t\t\t\tsection.style.setProperty(\"transform\", \"translateY(0)\");\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tresizeListener: function () {\r\n\t\t\tif (this.sections && this.sections.length > 0) {\r\n\t\t\t\tlet sectionCount = this.sections.length;\r\n\r\n\t\t\t\tthis.sections.forEach((section) => {\r\n\t\t\t\t\tsection.classList.add(\"is-measuring\");\r\n\t\t\t\t});\r\n\t\t\t\tthis.$refs.container.style.setProperty(\"height\", \"auto\");\r\n\r\n\t\t\t\t// console.log(\"before:\" + this.containerHeight);\r\n\t\t\t\tclearTimeout(this.resizeTimeout);\r\n\t\t\t\tthis.resizeTimeout = setTimeout(() => {\r\n\t\t\t\t\tthis.sectionProps = this.sections.map((section) => {\r\n\t\t\t\t\t\treturn { y: this.getOffsetTopRecursive(section), h: Math.max(section.clientHeight, this.windowH) };\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.containerHeight = this.$refs.container.offsetHeight;\r\n\t\t\t\t\t// console.log(\"after:\" + this.containerHeight);\r\n\r\n\t\t\t\t\tthis.sections.forEach((section, index) => {\r\n\t\t\t\t\t\tsection.style.setProperty(\"z-index\", sectionCount - index);\r\n\t\t\t\t\t\tsection.classList.remove(\"is-measuring\");\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.$refs.container.style.setProperty(\"height\", this.containerHeight + \"px\");\r\n\t\t\t\t\tthis.scrollListener();\r\n\t\t\t\t}, 200);\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\r\n\t\t\treturn actualOffset;\r\n\t\t},\r\n\t\t// rInterval: function (callback, delay) {\r\n\t\t// \tlet dateNow = Date.now,\r\n\t\t// \t\trequestAnimation = window.requestAnimationFrame,\r\n\t\t// \t\tstart = dateNow(),\r\n\t\t// \t\tstop,\r\n\t\t// \t\tintervalFunc = function () {\r\n\t\t// \t\t\tdateNow() - start < delay || ((start += delay), callback());\r\n\t\t// \t\t\tstop || requestAnimation(intervalFunc);\r\n\t\t// \t\t};\r\n\t\t// \trequestAnimation(intervalFunc);\r\n\t\t// \treturn {\r\n\t\t// \t\tclear: function () {\r\n\t\t// \t\t\tstop = 1;\r\n\t\t// \t\t},\r\n\t\t// \t};\r\n\t\t// },\r\n\t},\r\n\tmounted() {\r\n\t\tthis.sections = [...this.$refs.container.querySelectorAll(\".section\")];\r\n\t\tlet isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\r\n\t\tif (this.sections && this.sections.length > 0 && !isIE11) {\r\n\t\t\trInterval(this.scrollListener, 50);\r\n\r\n\t\t\tsetTimeout(\r\n\t\t\t\tfunction () {\r\n\t\t\t\t\tthis.scrollListener(true);\r\n\t\t\t\t}.bind(this),\r\n\t\t\t\t250\r\n\t\t\t);\r\n\r\n\t\t\tthis.sections[0].classList.add(\"is-active\");\r\n\t\t\tthis.$el.classList.add(\"is-ready\");\r\n\t\t}\r\n\t},\r\n};\r\n","/* eslint-disable no-undef */\r\nimport { mapState, mapActions } from \"vuex\";\r\n\r\nimport { vueVimeoPlayer } from \"vue-vimeo-player\";\r\n\r\nexport default {\r\n\tname: \"video-player-global\",\r\n\tcomponents: { vueVimeoPlayer },\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tactiveVideoVimeoId: (state) => state.globalVideo.activeVimeoVideoId,\r\n\t\t\tactiveVideoSrc: (state) => state.globalVideo.activeVideoSrc,\r\n\t\t}),\r\n\t\tshowHTMLPlayer: function () {\r\n\t\t\treturn typeof this.activeVideoSrc == \"string\" && this.activeVideoSrc.length > 0;\r\n\t\t},\r\n\t\tshowVimeoPlayer: function () {\r\n\t\t\treturn typeof this.activeVideoVimeoId == \"string\" && this.activeVideoVimeoId.length > 0;\r\n\t\t},\r\n\t\tvimeoId: function () {\r\n\t\t\treturn this.showVimeoPlayer ? this.activeVideoVimeoId : \"\";\r\n\t\t},\r\n\t\tvideoSrc: function () {\r\n\t\t\treturn this.showHTMLPlayer ? this.activeVideoSrc : \"\";\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"setActiveVideo\"]),\r\n\t\tcloseHandler: function () {\r\n\t\t\tthis.setActiveVideo({ type: null, value: null });\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\t// console.log(\"MOUNTED\", this.vimeoId, this.type);\r\n\t},\r\n};\r\n","import ProductLineCart from '../../components/product-line/product-line-cart';\r\nimport ProductLineAddons from '../../components/product-line/product-line-addons';\r\nimport ProductLineSearch from '../../components/product-line/product-line-search';\r\n\r\nexport default {\r\n\tname: 'product-line-examples',\r\n\tcomponents: {\r\n ProductLineCart,\r\n ProductLineSearch,\r\n ProductLineAddons,\r\n },\r\n};","import { mapState } from \"vuex\";\r\n\r\nimport { rInterval } from \"./../../basics/js/utils\";\r\n\r\nexport default {\r\n\tname: \"stores-navigation\",\r\n\tprops: {\r\n\t\tbackgroundHoverColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tstoresLabel: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Showrooms\",\r\n\t\t},\r\n\t\tlinks: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#copenhagen\",\r\n\t\t\t\t\t\ttitle: \"Copenhagen\",\r\n\t\t\t\t\t\taddress: \"Vejvej 256<br/>12345 City<br/>Denmark\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/400/600\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#stockholm\",\r\n\t\t\t\t\t\ttitle: \"Stockholm\",\r\n\t\t\t\t\t\taddress: \"Streetstreet 14<br/>12345 City<br/>Stockholm\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/600/300\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#hamburg\",\r\n\t\t\t\t\t\ttitle: \"Hamburg\",\r\n\t\t\t\t\t\taddress: \"Old street 8<br/>12345 City<br/>Germany\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/404/400\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#london\",\r\n\t\t\t\t\t\ttitle: \"London\",\r\n\t\t\t\t\t\taddress: \"Testroad 2<br/>12345 City<br/>England\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/500/600\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#paris\",\r\n\t\t\t\t\t\ttitle: \"Paris\",\r\n\t\t\t\t\t\taddress: \"Lorem ipsum square 46<br/>12345 City<br/>France\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/600/600\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#aarhus\",\r\n\t\t\t\t\t\ttitle: \"Aarhus\",\r\n\t\t\t\t\t\taddress: \"Roadname 14<br/>12345 City<br/>Denmark\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/600/500\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#shanghai\",\r\n\t\t\t\t\t\ttitle: \"Shanghai\",\r\n\t\t\t\t\t\taddress: \"Roadname 14<br/>12345 City<br/>Shanghai\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/430/530\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#oslo\",\r\n\t\t\t\t\t\ttitle: \"Oslo\",\r\n\t\t\t\t\t\taddress: \"Roadname 14<br/>12345 City<br/>Norway\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/400/210\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#cologna\",\r\n\t\t\t\t\t\ttitle: \"Cologna\",\r\n\t\t\t\t\t\taddress: \"Roadname 14<br/>12345 City<br/>Germany\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/560/410\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thref: \"#chicago\",\r\n\t\t\t\t\t\ttitle: \"Chicago\",\r\n\t\t\t\t\t\taddress: \"Roadname 14<br/>12345 City<br/>USA\",\r\n\t\t\t\t\t\thours: \"Monday 7–8<br/>Tuesday–Sunday: closed\",\r\n\t\t\t\t\t\timageSrc: \"https://picsum.photos/200/300\",\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tbodyRef: null,\r\n\t\t\tbodyBackgroundColor: null,\r\n\r\n\t\t\tactiveItem: null,\r\n\t\t\tactiveIndex: -1,\r\n\t\t\timageLoaded: false,\r\n\r\n\t\t\timageX: 0,\r\n\t\t\timageY: 0,\r\n\r\n\t\t\toffsetTop: 0,\r\n\t\t\toffsetHeight: 0,\r\n\r\n\t\t\tlabelHeight: 0,\r\n\t\t\tlistHeight: 0,\r\n\r\n\t\t\tmobileBehaviour: false,\r\n\r\n\t\t\tlineHeight: 0,\r\n\t\t\tscrollPanelHeight: 0,\r\n\r\n\t\t\tcurrentLine: 0,\r\n\r\n\t\t\tclearInterval: null,\r\n\r\n\t\t\tlinksLength: 0,\r\n\r\n\t\t\tisFixed: false,\r\n\r\n\t\t\tscrollPosTranslated: 0,\r\n\r\n\t\t\timageTimeoutHandle: -1,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\twindowH: (state) => state.windowH,\r\n\t\t\twindowW: (state) => state.windowW,\r\n\t\t\twindowY: (state) => state.windowY,\r\n\t\t}),\r\n\t\tmoduleStyle() {\r\n\t\t\tlet baseStyle = `\r\n\t\t\t\t--label-height: ${this.labelHeight}px;\r\n\t\t\t\t--list-height: ${this.listHeight}px;\r\n\t\t\t\t--line-height: ${this.lineHeight}px;\r\n\t\t\t\t--scroll-pos: ${this.scrollPosTranslated};\r\n\t\t\t\t--stores-navigation-image-x: ${this.imageX};\r\n\t\t\t\t--stores-navigation-image-y: ${this.imageY};`;\r\n\r\n\t\t\t// if ( this.activeItem ) {\r\n\t\t\t// \tbaseStyle += `\r\n\t\t\t// \t\t--stores-navigation-bg-color: ${this.activeItem.backgroundColor};\r\n\t\t\t// \t\t--stores-navigation-text-color: ${this.activeItem.textColor};\r\n\t\t\t// \t\tbackground-color: ${this.activeItem.backgroundColor};\r\n\t\t\t// \t\tcolor: ${this.activeItem.textColor};`;\r\n\t\t\t// }\r\n\r\n\t\t\treturn baseStyle;\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\twindowW: function (newVal) {\r\n\t\t\tthis.mobileBehaviour = newVal < 1150;\r\n\r\n\t\t\tthis.offsetTop = this.$el.offsetTop;\r\n\t\t\tthis.offsetHeight = this.$el.offsetHeight;\r\n\r\n\t\t\tthis.labelHeight = this.$refs.label.offsetHeight;\r\n\r\n\t\t\tthis.linksLength = this.links.length;\r\n\r\n\t\t\t//height: 5 link line heights\r\n\t\t\tlet fontSize = 0.13;\r\n\t\t\tif (newVal >= 768) fontSize = 0.11;\r\n\t\t\tif (newVal >= 950) fontSize = 0.09;\r\n\t\t\tif (newVal >= 1024) fontSize = 0.08;\r\n\r\n\t\t\tthis.lineHeight = fontSize * newVal * 1.111;\r\n\t\t\tthis.listHeight = this.$refs.list.offsetHeight;\r\n\r\n\t\t\tif (this.mobileBehaviour) {\r\n\t\t\t\tthis.addMobileHandlers();\r\n\t\t\t} else {\r\n\t\t\t\tthis.activeItem = null;\r\n\t\t\t\tthis.activeIndex = -1;\r\n\t\t\t\tthis.lineHeight = 0;\r\n\t\t\t\tthis.removeMobileHandlers();\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\tmouseOverHandler: function (item, index) {\r\n\t\t\tif (this.mobileBehaviour) return false;\r\n\r\n\t\t\tthis.imageLoaded = false;\r\n\t\t\tthis.activeItem = item;\r\n\t\t\tthis.activeIndex = index;\r\n\r\n\t\t\tthis.bodyRef.style = `background-color: ${this.backgroundHoverColor};`;\r\n\t\t},\r\n\t\tmouseOutHandler: function () {\r\n\t\t\tif (!this.mobileBehaviour) {\r\n\t\t\t\tthis.activeItem = null;\r\n\t\t\t\tthis.activeIndex = -1;\r\n\r\n\t\t\t\tthis.bodyRef.style = `background-color: ${this.bodyBackgroundColor};`;\r\n\t\t\t}\r\n\t\t},\r\n\t\timageLoadedHandler: function () {\r\n\t\t\tthis.imageLoaded = true;\r\n\t\t},\r\n\t\tmouseMoveHandler: function (event) {\r\n\t\t\tif (!this.mobileBehaviour) {\r\n\t\t\t\tthis.imageX = event.clientX;\r\n\t\t\t\tthis.imageY = event.clientY;\r\n\t\t\t}\r\n\t\t},\r\n\t\tupdateScrollPosition: function () {\r\n\r\n\r\n\t\t\tthis.offsetTop = this.$el.offsetTop;\r\n\t\t\tthis.offsetHeight = this.$el.offsetHeight;\r\n\r\n\t\t\tlet scrollPosAdjusted = this.windowY - this.offsetTop + this.windowH / 2;\r\n\t\t\tthis.scrollPosTranslated = (scrollPosAdjusted - this.lineHeight / 2 - this.labelHeight) / this.listHeight;\r\n\t\t\tthis.scrollListTo(this.scrollPosTranslated * this.linksLength);\r\n\t\t},\r\n\r\n\t\tscrollHandler: function () {\r\n\t\t\tif (this.imageTimeoutHandle) clearTimeout(this.imageTimeoutHandle);\r\n\t\t\tthis.imageTimeoutHandle = setTimeout(\r\n\t\t\t\tfunction () {\r\n\t\t\t\t\tthis.imageY = this.windowH / 2 + this.scrollPosTranslated * (this.listHeight - this.windowH * 0.1);\r\n\t\t\t\t}.bind(this),\r\n\t\t\t\t50\r\n\t\t\t);\r\n\t\t},\r\n\r\n\t\tscrollListTo: function (index) {\r\n\t\t\tthis.activeIndex = Math.round(index);\r\n\r\n\t\t\tif (this.activeIndex >= 0 && this.activeIndex < this.linksLength) {\r\n\t\t\t\tthis.activeItem = this.links[this.activeIndex];\r\n\t\t\t\tthis.bodyRef.style = `background-color: ${this.backgroundHoverColor};`;\r\n\t\t\t} else {\r\n\t\t\t\tthis.activeItem = null;\r\n\t\t\t\tthis.bodyRef.style = `background-color: ${this.bodyBackgroundColor};`;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\taddMobileHandlers: function () {\r\n\t\t\ttry {\r\n\t\t\t\tthis.removeMobileHandlers();\r\n\t\t\t} catch (err) {\r\n\t\t\t\t//DO NOTHING\r\n\t\t\t}\r\n\t\t\tthis.clearInterval = rInterval(this.updateScrollPosition.bind(this), 50).clear;\r\n\t\t\twindow.addEventListener(\"scroll\", this.scrollHandler.bind(this));\r\n\t\t},\r\n\t\tremoveMobileHandlers: function () {\r\n\t\t\tif (this.clearInterval) this.clearInterval();\r\n\t\t\twindow.removeEventListener(\"scroll\", this.scrollHandler.bind(this));\r\n\t\t},\r\n\t\tgetOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\r\n\t\t\treturn actualOffset;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.bodyRef = document.querySelector(\"body\");\r\n\t\tthis.bodyBackgroundColor = window.getComputedStyle(this.bodyRef).getPropertyValue(\"background-color\");\r\n\r\n\t\twindow.addEventListener(\"mousemove\", this.mouseMoveHandler.bind(this));\r\n\t},\r\n};\r\n","\r\nexport default {\r\n\tname: 'toolbox',\r\n\tprops: {\r\n toolboxLabel: {\r\n type: String,\r\n },\r\n expandButtonLabel: {\r\n type: String,\r\n\t\t\tdefault: 'Show All'\r\n },\r\n initialCount: {\r\n type: String,\r\n\t\t\tdefault: '3'\r\n },\r\n navigationItems: {\r\n type: Array,\r\n },\r\n\t\tborderColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tlabelColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n },\r\n computed: {\r\n initialCountComputed: function() {\r\n return Number(this.initialCount);\r\n }\r\n },\r\n\r\n data: function() {\r\n return {\r\n isExpanded: false\r\n }\r\n },\r\n methods: {\r\n expandAll: function() {\r\n this.isExpanded = true;\r\n },\r\n getHoverColor: function(hex){\r\n return this.blendColors(hex, '#FFFFFF', 0.75);\r\n },\r\n blendColors: function(color1, color2, percentage) {\r\n\r\n // based on https://coderwall.com/p/z8uxzw/javascript-color-blender\r\n // check input\r\n color1 = color1 || '#000000';\r\n color2 = color2 || '#ffffff';\r\n percentage = percentage || 0.5;\r\n\r\n // 1: validate input, make sure we have provided a valid hex\r\n if (color1.length != 4 && color1.length != 7)\r\n return color1;\r\n\r\n if (color2.length != 4 && color2.length != 7)\r\n return color1;\r\n\r\n if (percentage > 1 || percentage < 0)\r\n return color1;\r\n\r\n // 2: check to see if we need to convert 3 char hex to 6 char hex, else slice off hash\r\n // the three character hex is just a representation of the 6 hex where each character is repeated\r\n // ie: #060 => #006600 (green)\r\n if (color1.length == 4)\r\n color1 = color1[1] + color1[1] + color1[2] + color1[2] + color1[3] + color1[3];\r\n else\r\n color1 = color1.substring(1);\r\n if (color2.length == 4)\r\n color2 = color2[1] + color2[1] + color2[2] + color2[2] + color2[3] + color2[3];\r\n else\r\n color2 = color2.substring(1);\r\n\r\n // 3: we have valid input, convert colors to rgb\r\n color1 = [parseInt(color1[0] + color1[1], 16), parseInt(color1[2] + color1[3], 16), parseInt(color1[4] + color1[5], 16)];\r\n color2 = [parseInt(color2[0] + color2[1], 16), parseInt(color2[2] + color2[3], 16), parseInt(color2[4] + color2[5], 16)];\r\n\r\n\r\n // 4: blend\r\n var color3 = [\r\n (1 - percentage) * color1[0] + percentage * color2[0],\r\n (1 - percentage) * color1[1] + percentage * color2[1],\r\n (1 - percentage) * color1[2] + percentage * color2[2]\r\n ];\r\n\r\n\r\n // 5: convert to hex\r\n color3 = '#' + this.int_to_hex(color3[0]) + this.int_to_hex(color3[1]) + this.int_to_hex(color3[2]);\r\n\r\n // return hex\r\n return color3;\r\n },\r\n int_to_hex: function(num)\r\n {\r\n var hex = Math.round(num).toString(16);\r\n if (hex.length == 1)\r\n hex = '0' + hex;\r\n return hex;\r\n }\r\n }\r\n};\r\n","import { mapState } from \"vuex\";\r\nimport Toolbox from \"../../components/toolbox-hero/toolbox\";\r\n\r\nexport default {\r\n\tname: 'toolbox-hero',\r\n components: {\r\n Toolbox\r\n },\r\n\tprops: {\r\n headlinePartOne: {\r\n type: String,\r\n },\r\n headlinePartTwo: {\r\n type: String,\r\n },\r\n headlineUnbroken: {\r\n type: String,\r\n },\r\n heroVideoSrc: {\r\n type: String,\r\n default: null\r\n },\r\n heroImageSrc: {\r\n type: String,\r\n default: null\r\n },\r\n navigationItems: {\r\n type: Array,\r\n }\r\n },\r\n data: function() {\r\n return {\r\n windowTrigger: 0,\r\n scrolledIntoBanner: false,\r\n scrolledPastBanner: false\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n windowH: state => state.windowH,\r\n windowW: state => state.windowW,\r\n windowY: state => state.windowY\r\n }),\r\n toolboxHeroStyle() {\r\n return `--parallax: ${0.25 * (Math.max(0, this.windowY - this.windowTrigger))};`;\r\n },\r\n bgMediaStyle() {\r\n let speed = 0.25; //0.25 px pr window scroll px\r\n let windowOffset = speed * (this.windowY - this.windowTrigger); //scroll pos - trigger point * speed\r\n let overlap = 0;\r\n let maxOffset = overlap * this.windowH;\r\n if ( windowOffset < 0 ) windowOffset = 0;\r\n if ( windowOffset > maxOffset ) windowOffset = maxOffset;\r\n\r\n return `--video-offset: -${windowOffset}px`;\r\n }\r\n },\r\n watch: {\r\n windowY() {\r\n this.update();\r\n }\r\n },\r\n methods: {\r\n update: function() {\r\n this.windowTrigger = this.getOffsetTopRecursive(this.$el);\r\n\r\n\t\t\tif ( this.windowTrigger < 10 ) this.windowTrigger = 10;\r\n\t\t\tif ( this.windowTrigger > this.windowH ) this.windowTrigger -= this.windowH/3;\r\n\r\n if (this.windowY > this.windowTrigger) {\r\n this.scrolledPastBanner = true;\r\n this.scrolledIntoBanner = false;\r\n } else {\r\n this.scrolledPastBanner = false;\r\n this.scrolledIntoBanner = true;\r\n }\r\n },\r\n getOffsetTopRecursive: function (element) {\r\n var actualOffset = element.offsetTop;\r\n var current = element.offsetParent;\r\n while (current != null) {\r\n actualOffset += current.offsetTop;\r\n current = current.offsetParent;\r\n }\r\n return actualOffset;\r\n },\r\n },\r\n\tmounted() {\r\n\t\tthis.update();\r\n\t}\r\n\r\n};\r\n","export default [\r\n {\r\n imageSrcDefault: \"/static/images/product/fiber-armchair-700w.png\",\r\n imageSrcAlternative: \"/static/images/hero-portrait.jpg\",\r\n name: \"Outline\",\r\n url:\"/#\"\r\n },\r\n {\r\n imageSrcDefault: \"/static/images/product/fiber-armchair-700w.png\",\r\n imageSrcAlternative: \"/static/images/hero-portrait.jpg\",\r\n name: \"Oslo\",\r\n url:\"/#\"\r\n },\r\n {\r\n imageSrcDefault: \"/static/images/product/fiber-armchair-700w.png\",\r\n imageSrcAlternative: \"/static/images/hero-portrait.jpg\",\r\n name: \"In Situ\",\r\n url:\"/#\"\r\n },\r\n {\r\n imageSrcDefault: \"/static/images/product/fiber-armchair-700w.png\",\r\n imageSrcAlternative: \"/static/images/hero-portrait.jpg\",\r\n name: \"Lorem\",\r\n url:\"/#\"\r\n },\r\n {\r\n imageSrcDefault: \"/static/images/product/fiber-armchair-700w.png\",\r\n imageSrcAlternative: \"/static/images/hero-portrait.jpg\",\r\n name: \"Ipsum\",\r\n url:\"/#\"\r\n },\r\n {\r\n imageSrcDefault: \"/static/images/product/fiber-armchair-700w.png\",\r\n imageSrcAlternative: \"/static/images/hero-portrait.jpg\",\r\n name: \"Dolor\",\r\n url:\"/#\"\r\n },\r\n]","import mockData from \"./series-overview-data\";\r\n\r\nconst VIEW_STATE = {DEFAULT: \"DEFAULT\", ALTERNATIVE: \"ALTERNATIVE\"};\r\n\r\nexport default {\r\n name: \"series-overview\",\r\n props: {\r\n itemList: {\r\n type: Array,\r\n default() {\r\n return mockData;\r\n }\r\n },\r\n toggleButtonText: {\r\n type: String,\r\n default: \"Room\"\r\n },\r\n titleText: {\r\n type: String,\r\n default: \"Explore our sofa series\"\r\n }\r\n },\r\n data() {\r\n return {\r\n viewState: VIEW_STATE.DEFAULT\r\n }\r\n },\r\n methods: {\r\n toggleViewHandler: function() {\r\n this.viewState = this.viewState === VIEW_STATE.DEFAULT ? VIEW_STATE.ALTERNATIVE : VIEW_STATE.DEFAULT;\r\n }\r\n }\r\n}","export default {\r\n\tprops: {\r\n\t\thasImageProducts: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tbuttonText: {\r\n type: String,\r\n default: \"Shop this image\",\r\n },\r\n skuList: {\r\n type: String,\r\n },\r\n backgroundColor: {\r\n type: String,\r\n default: \"#FFFFFF\"\r\n },\r\n imageProductsOverlayData: {\r\n type: Object \r\n }\r\n\t},\r\n};\r\n","import { mapState } from \"vuex\";\r\nimport HasImageProducts from \"../../image-products/has-image-products\";\r\nimport ImageProductsButton from \"../../image-products/image-products-button.vue\"\r\n\r\nexport default {\r\n\tname: \"animated-hero\",\r\n extends: HasImageProducts,\r\n components: {\r\n ImageProductsButton\r\n },\r\n\tprops: {\r\n heroType: {\r\n type: String,\r\n },\r\n headlinePartOne: {\r\n type: String,\r\n },\r\n headlinePartTwo: {\r\n type: String,\r\n },\r\n headlinePartThree: {\r\n type: String,\r\n },\r\n goExploreText: {\r\n type: String,\r\n },\r\n labelText: {\r\n type: String,\r\n },\r\n heroVideoSrc: {\r\n type: String,\r\n default: null\r\n },\r\n heroImageSrc: {\r\n type: String,\r\n default: null\r\n },\r\n heroHref: {\r\n type: String,\r\n default: null\r\n },\r\n },\r\n data: function() {\r\n return {\r\n offsetTop: 0,\r\n windowTrigger: 0,\r\n scrolledIntoBanner: false,\r\n scrolledPastBanner: false\r\n }\r\n },\r\n computed: {\r\n\t\t...mapState({\r\n\t\t\twindowH: state => state.windowH,\r\n\t\t\twindowW: state => state.windowW,\r\n\t\t\twindowY: state => state.windowY,\r\n\t\t\texplanationData: state => state.explanationData,\r\n\t\t\texplanationOverlayOpen: state => state.explanationOverlayOpen,\r\n\t\t}),\r\n\t\tcolorStyle() {\r\n\t\t\tif ( this.explanationData && this.explanationData.backgroundColor ) {\r\n\t\t\t\treturn `background-color: ${this.explanationData.backgroundColor}; --material-overlay-bg-color: ${this.explanationData.backgroundColor};color: ${this.explanationData.textColor}; --material-overlay-text-color: ${this.explanationData.textColor}`;\r\n\t\t\t}\r\n\t\t},\r\n parallaxStyle() {\r\n return `--parallax: ${0.25 * (Math.max(0, (this.windowY - this.offsetTop) - this.windowTrigger))};`;\r\n },\r\n videoStyle() {\r\n let speed = 0.25; //0.25 px pr window scroll px\r\n let windowOffset = speed * (this.windowY - this.windowTrigger); //scroll pos - trigger point * speed\r\n let overlap = 0;\r\n let maxOffset = overlap * this.windowH;\r\n if ( windowOffset < 0 ) windowOffset = 0;\r\n if ( windowOffset > maxOffset ) windowOffset = maxOffset;\r\n\r\n return `--video-offset: -${windowOffset}px`;\r\n }\r\n },\r\n watch: {\r\n windowY: function (newVal) {\r\n\t\t\tlet newScrollY = newVal < 0 ? this.windowTrigger : newVal;\r\n if (newScrollY >= this.windowTrigger) {\r\n this.scrolledPastBanner = true;\r\n this.scrolledIntoBanner = false;\r\n } else {\r\n this.scrolledPastBanner = false;\r\n this.scrolledIntoBanner = true;\r\n }\r\n },\r\n windowW: function () {\r\n this.resizeListener();\r\n },\r\n windowH: function () {\r\n this.resizeListener();\r\n }\r\n },\r\n\tmethods: {\r\n\t\tresizeListener: function () {\r\n this.offsetTop = this.getOffsetTopRecursive(this.$el);\r\n this.windowTrigger = this.offsetTop + 10; \r\n },\r\n getOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\t\t\treturn actualOffset;\r\n\t\t},\r\n\t\tscrollDownHandler: function() { \r\n let isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\t\t\tif ( !isIE11 ) window.scrollTo({ top: this.windowH, behavior: 'smooth' });\r\n else window.scroll(0, this.windowH);\r\n\t\t}\r\n }\r\n};","import HasImageProducts from \"../../image-products/has-image-products\";\r\nimport ImageProductsButton from \"../../image-products/image-products-button.vue\"\r\n\r\nexport default {\r\n name: \"introduction-block\",\r\n extends: HasImageProducts,\r\n components: {\r\n ImageProductsButton\r\n },\r\n props: {\r\n mediaVideoSrc: {\r\n type: String,\r\n default: null \r\n },\r\n mediaImageSrc: {\r\n type: String,\r\n default: null\r\n },\r\n }\r\n}","import Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\nexport default {\r\n name: \"tabs-bar\",\r\n props: {\r\n items: {\r\n type: Array,\r\n default() {\r\n return [{\r\n label:\"Lorem\"\r\n }, {\r\n label:\"Ipsum\"\r\n }]\r\n }\r\n }, \r\n tabClickHandler: {\r\n type: Function,\r\n default() {\r\n return (item,index)=>console.log(\"click\",item,index);\r\n }\r\n },\r\n activeIndex: {\r\n type: Number,\r\n required: true\r\n }\r\n },\r\n data() {\r\n return {\r\n slider: null,\r\n settings: {\r\n slidesPerView: \"auto\",\r\n spaceBetween: 0,\r\n freeMode: true,\r\n }\r\n }\r\n },\r\n mounted() {\r\n if ( this.$refs.slider ) this.slider = new Swiper(this.$refs.slider, this.settings);\r\n }\r\n} \r\n","export default [\r\n {\r\n category: \"All styles\",\r\n slides: [\r\n\r\n {\r\n name:\"Outline\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Oslo\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/designer-portrait-img2.jpg\"\r\n },\r\n {\r\n name:\"In Situ\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/plp-inspirational-image1.jpg\"\r\n },\r\n {\r\n name:\"Dolor\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/designer-portrait-img2.jpg\"\r\n },\r\n {\r\n name:\"Sit amet\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Model 6\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/plp-inspirational-image1.jpg\"\r\n }\r\n ]\r\n },\r\n {\r\n category: \"Lounge sofas\",\r\n slides: [\r\n {\r\n name:\"Lounge sofas\",\r\n description: \"Iquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum.\",\r\n url: null,\r\n imageSrc: null,\r\n textColor: '#E6D8CB',\r\n backgroundColor: '#6D727C'\r\n },\r\n {\r\n name:\"Outline\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Lorem\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/plp-inspirational-image1.jpg\"\r\n },\r\n {\r\n name:\"Ipsum\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Dolor\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/designer-portrait-img2.jpg\"\r\n },\r\n {\r\n name:\"Sit amet\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Model 6\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/plp-inspirational-image1.jpg\"\r\n }\r\n ]\r\n },\r\n {\r\n category: \"Minimalistic\",\r\n slides: [\r\n {\r\n name:\"Minimalist\",\r\n description: \"Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempoccaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum.\",\r\n url: null,\r\n imageSrc:\"/static/svg/tree.svg\",\r\n textColor: '#DBE8F3',\r\n backgroundColor: '#3F8B69'\r\n },\r\n {\r\n name:\"Oslo\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/designer-portrait-img2.jpg\"\r\n },\r\n {\r\n name:\"Lorem\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Ipsum\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n }\r\n ]\r\n },\r\n {\r\n category: \"Tuxedo\",\r\n slides: [\r\n {\r\n name:\"Tuxedo\",\r\n description: \"Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident sunt in culpa qui.\",\r\n url: null,\r\n imageSrc: null,\r\n textColor: '#C2AFCD',\r\n backgroundColor: '#A06219'\r\n },\r\n {\r\n name:\"In Situ\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/plp-inspirational-image1.jpg\"\r\n },\r\n {\r\n name:\"Lorem\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Ipsum\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/product/master-product-image-sofa.jpg\"\r\n },\r\n {\r\n name:\"Sit amet\",\r\n url: \"/#\",\r\n imageSrc:\"/static/images/designer-portrait-img2.jpg\"\r\n }\r\n ]\r\n },\r\n];\r\n","export default {\r\n name: \"usp-spot\",\r\n props: {\r\n\t\tname: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n description: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n linkUrl: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n linkText: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n textColor: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n backgroundColor: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n modifier: {\r\n\t\t\ttype: String,\r\n required: false\r\n },\r\n\t\tmedia: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false\r\n\t\t},\r\n },\r\n computed: {\r\n getModifiers: function() {\r\n if ( this.modifier ) {\r\n return {[this.modifier]: true};\r\n } else {\r\n return {'usp-spot--image-icon': true};\r\n }\r\n },\r\n getColorStyle: function() {\r\n let style = '';\r\n if ( this.backgroundColor ) {\r\n\t\t\t\tstyle += `background-color: ${this.backgroundColor}; --usp-spot-bg-color: ${this.backgroundColor};`;\r\n }\r\n if ( this.textColor ) {\r\n\t\t\t\tstyle += `color: ${this.textColor}; --usp-spot-text-color: ${this.textColor}`;\r\n\t\t\t}\r\n return style;\r\n }\r\n },\r\n}\r\n","import Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\nimport TabsBar from \"../tabs-bar/tabs-bar\"\r\nimport mockData from \"./design-explorer-data\"\r\n\r\nimport UspSpot from \"./../../usp-spot/usp-spot\";\r\n\r\nexport default {\r\n name: \"design-explorer\",\r\n components: {\r\n TabsBar,\r\n UspSpot\r\n },\r\n props: {\r\n titleNumber: {\r\n type: String,\r\n default: '1.'\r\n },\r\n titleText: {\r\n type: String,\r\n default: 'Whats your style?'\r\n },\r\n bodyText: {\r\n type: String,\r\n default: 'Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.'\r\n },\r\n styleExplorerData: {\r\n type: Array,\r\n default() {\r\n return mockData;\r\n }\r\n }\r\n },\r\n computed: {\r\n getStyleList: function() {\r\n let list = [];\r\n list = this.styleExplorerData.map(item=>{ return {label: item.category}; });\r\n return list;\r\n },\r\n\r\n },\r\n data() {\r\n return {\r\n activeStyleIndex: 0,\r\n activeCategory: this.styleExplorerData[0],\r\n\r\n slider: null,\r\n\t\t\tslidesCount: 0,\r\n\t\t\tslidesRef: null,\r\n\r\n\t\t\tsettings: {\r\n\t\t\t\tsimulateTouch: true,\r\n\t\t\t\tallowTouchMove: true,\r\n\r\n\t\t\t\tslidesPerView: 3.25,\r\n spaceBetween: 40,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n\t\t\t\twatchOverflow: true,\r\n breakpoints: {\r\n // when window width is >= 320px\r\n 560: {\r\n slidesPerView: 1.25,\r\n spaceBetween: 10\r\n },\r\n 768: {\r\n slidesPerView: 1.75,\r\n spaceBetween: 20\r\n },\r\n // when window width is >= 480px\r\n 1024: {\r\n slidesPerView: 2.25,\r\n spaceBetween: 20\r\n },\r\n 1920: {\r\n slidesPerView: 2.5,\r\n spaceBetween: 30\r\n },\r\n }\r\n\t\t\t},\r\n }\r\n },\r\n methods: {\r\n styleChangeHandler: function(item,index) {\r\n this.activeStyleIndex = index;\r\n this.activeCategory = this.styleExplorerData[this.activeStyleIndex];\r\n\r\n\r\n setTimeout(function() {\r\n this.slider.update();\r\n this.slider.slideTo(0);\r\n }.bind(this),10);\r\n },\r\n getSlideStyle: function(item) {\r\n if ( item ) {\r\n\t\t\t\treturn `background-color: ${item.backgroundColor}; --design-explorer-slide-bg-color: ${item.backgroundColor};color: ${item.textColor}; --design-explorer-slide-text-color: ${item.textColor}`;\r\n\t\t\t}\r\n }\r\n },\r\n mounted() {\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\r\n\t\tthis.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n\r\n\t\tthis.slidesCount = this.slidesRef.length;\r\n }\r\n}\r\n","export default [\r\n {\r\n category: \"Comfort\",\r\n rangeStartText: \"Soft\",\r\n rangeEndText: \"Firm\",\r\n models: [\r\n {\r\n name:\"Outline\",\r\n description: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n },\r\n {\r\n name:\"Oslo\",\r\n description: \"Lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n },\r\n {\r\n name:\"In Situ\",\r\n description: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed enteratin sit amet\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n },\r\n {\r\n name:\"Connect\",\r\n description: \"Lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n }\r\n ]\r\n },\r\n {\r\n category: \"Seat depth\",\r\n rangeStartText: \"Shallow\",\r\n rangeEndText: \"Deep\",\r\n models: [\r\n {\r\n name:\"Outline\",\r\n description: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n },\r\n {\r\n name:\"Lorem\",\r\n description: \"Lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n },\r\n {\r\n name:\"Ipsum\",\r\n description: \"Form follows function - so whether you need to lounge, enteratin.\",\r\n linkHref: \"/#\",\r\n linkText:\"Explore sofa\",\r\n imageSrc:\"/static/images/product/new-spec-sofa.png\"\r\n }\r\n ]\r\n }\r\n];\r\n","import { mapState } from \"vuex\";\r\nimport Swiper from \"swiper/dist/js/swiper.js\";\r\nimport TabsBar from \"../tabs-bar/tabs-bar\";\r\nimport mockData from \"./property-explorer-data\";\r\n\r\n\r\nexport default {\r\n\tname: \"property-explorer\",\r\n components: {\r\n TabsBar\r\n },\r\n props: {\r\n titleNumber: {\r\n type: String, \r\n default: '2.'\r\n },\r\n titleText: {\r\n type: String, \r\n default: 'Comfort and seating style'\r\n },\r\n bodyText: {\r\n type: String,\r\n default: \"The oslo family has a broad range of members. It comes in 3-seater sofa, 2-seater sofa, chair, pouf & bench\",\r\n },\r\n propertyExplorerData: {\r\n type: Array,\r\n default() {\r\n return mockData;\r\n }\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n windowW: (state) => state.windowW,\r\n }),\r\n getPropertyList: function() { \r\n let list = [];\r\n list = this.propertyExplorerData.map(item=>{ return {label: item.category}; });\r\n return list;\r\n },\r\n },\r\n watch: {\r\n\t\twindowW: function () {\r\n this.resizeListener();\r\n }\r\n },\r\n data() {\r\n return { \r\n \r\n activeCategory: this.propertyExplorerData[0],\r\n activeCategoryModelCount: 0,\r\n activeCategoryIndex: 0,\r\n activeModelIndex: 0,\r\n \r\n activeRangePosition: 0,\r\n\r\n slider: null,\r\n\t\t\tslidesRef: null,\r\n \r\n\t\t\t\r\n\t\t\tsettings: {\r\n simulateTouch: true,\r\n\t\t\t\tallowTouchMove: false,\r\n \r\n effect: \"fade\",\r\n fadeEffect: {\r\n crossFade: true\r\n },\r\n\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n\t\t\t\twatchOverflow: true\r\n\t\t\t},\r\n }\r\n },\r\n methods: {\r\n propertyChangeHandler: function(item,index) {\r\n this.activeCategoryIndex = index;\r\n this.activeCategory = this.propertyExplorerData[this.activeCategoryIndex];\r\n this.activeCategoryModelCount = this.activeCategory.models.length;\r\n this.activeModelIndex = Math.round(this.activeCategoryModelCount/2)-1;\r\n \r\n \r\n setTimeout(function() {\r\n this.slider.update();\r\n this.slider.slideTo(this.activeModelIndex);\r\n this.activeRangePosition = Math.round((this.activeCategoryModelCount * 100) / 2);\r\n }.bind(this),10);\r\n },\r\n rangeChangeHandler: function(event) {\r\n this.activeModelIndex = Math.ceil(event.target.value / 100)-1;\r\n \r\n this.slider.slideTo(this.activeModelIndex);\r\n },\r\n resizeListener: function () { \r\n this.slider.update();\r\n this.slider.slideTo(this.activeModelIndex);\r\n\t\t},\r\n },\r\n mounted() {\r\n this.activeCategoryModelCount = this.activeCategory.models.length;\r\n this.activeModelIndex = Math.round((this.activeCategoryModelCount)/2) - 1;\r\n this.activeRangePosition = Math.round((this.activeCategoryModelCount * 100) / 2);\r\n \r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\t\tthis.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n \r\n setTimeout(function() {\r\n this.activeRangePosition = Math.round((this.activeCategoryModelCount * 100) / 2);\r\n this.resizeListener();\r\n }.bind(this),500);\r\n }\r\n}","export default [\r\n {\r\n headline: \"Leather\", \r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n \r\n linkText: \"Explore leather\",\r\n \r\n\r\n mainImages: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/portrait-image.jpg\",\r\n skuList: \"98s7df;hjg232;78df0sf\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/roomexplorer-3_4.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/mega-menu-life-style-image.jpg\",\r\n skuList: \"98s7df;hjg232;78df0sf\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/master-product-image_4_5.jpg\",\r\n skuList: \"98s7df;hjg232;78df0sf\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/IMG_Lifestyle1.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/hero-portrait.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/editorial/product_1_4_3.png\",\r\n skuList: \"98s7df;hjg232;78df0sf\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle2.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle3.jpg\"\r\n }\r\n ],\r\n\r\n backgroundColor: \"#E6C4A6\",\r\n textColor: \"#282828\",\r\n \r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular solid color materials\",\r\n subCategories: [\r\n {\r\n headline: \"Solid color 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/turquoise-(150)-thumb.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular solid color sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/designer-portrait-img2.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n ]\r\n },\r\n {\r\n headline: \"Woven\",\r\n bodyText: \"Woven description lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n linkText: \"Explore woven\",\r\n \r\n mainImages: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle1.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle2.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle3.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle1.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle2.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle3.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle1.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle2.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle3.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle1.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle2.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle3.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle1.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle2.jpg\" \r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_lifestyle3.jpg\"\r\n },\r\n ],\r\n\r\n backgroundColor: \"#E6C4A6\",\r\n textColor: \"#282828\",\r\n \r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular solid color materials\",\r\n subCategories: [\r\n {\r\n headline: \"Solid color 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/turquoise-(150)-thumb.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular solid color sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/designer-portrait-img2.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n ]\r\n },\r\n {\r\n headline: \"Velour\",\r\n bodyText: \"Velour description lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n linkText: \"Explore velour\",\r\n \r\n mainImages: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/article/IMG_store2.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/mega-menu-life-style-image.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/master-product-image_4_5.jpg\"\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Nulla sagittaris quam in ex aliquat non bibendum\",\r\n imageSrc:\"/static/images/IMG_Lifestyle1.jpg\" \r\n },\r\n ],\r\n\r\n backgroundColor: \"#E6C4A6\",\r\n textColor: \"#282828\",\r\n \r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular solid color materials\",\r\n subCategories: [\r\n {\r\n headline: \"Solid color 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/turquoise-(150)-thumb.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular solid color sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/designer-portrait-img2.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n ]\r\n\r\n },\r\n];","import { mapActions, mapState } from \"vuex\";\r\n\r\nimport TabsBar from \"../tabs-bar/tabs-bar\"\r\nimport mockData from \"./inspiration-gallery-data\"\r\nimport ImageProductsButton from \"../../image-products/image-products-button.vue\"\r\n\r\n\r\nexport default {\r\n name: \"inspiration-gallery\",\r\n components: {\r\n ImageProductsButton, \r\n TabsBar\r\n },\r\n props: {\r\n titleText: {\r\n type: String, \r\n default: 'Materials & color'\r\n },\r\n inspirationGalleryData: {\r\n type: Array,\r\n default() {\r\n return mockData;\r\n }\r\n }\r\n }, \r\n computed: {\r\n\t\t...mapState({\r\n\t\t\twindowH: state => state.windowH,\r\n\t\t\twindowW: state => state.windowW,\r\n\t\t\twindowY: state => state.windowY,\t\t\t\r\n\t\t}),\r\n getCategoryList: function() { \r\n let list = [];\r\n list = this.inspirationGalleryData.map(item=>{ return {label: item.headline}; });\r\n return list;\r\n },\r\n parallaxStyle() {\r\n return `--parallax: ${0.25 * (Math.max(0, (this.windowY - this.offsetTop) - this.windowTrigger))}; \r\n --item-count: ${this.activeCategoryImageCount}`; \r\n } \r\n },\r\n watch: {\r\n windowH: function() {\r\n this.resizeListener();\r\n },\r\n windowW: function() {\r\n this.resizeListener();\r\n },\r\n },\r\n data() {\r\n return { \r\n activeCategoryIndex: 0,\r\n activeCategory: this.inspirationGalleryData[0], \r\n activeCategoryImageCount: 0,\r\n\r\n offsetTop: 0,\r\n windowTrigger: 300,\r\n\r\n randomOffsets: []\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"setActiveVideo\",\r\n \"openMaterialOverlay\",\r\n\t\t\t\"showOverlayBackdrop\",\r\n \"setTriggerExperienceResize\"\r\n\t\t]),\r\n categoryChangeHandler: function(item,index) {\r\n window.scrollTo({ top: this.$el.offsetTop, behavior: 'smooth' });\r\n \r\n if ( this.windowY > this.$el.offsetTop + 100 ) {\r\n setTimeout( function () {\r\n this.changeCategory(index)\r\n }.bind(this), 1000);\r\n } else {\r\n this.changeCategory(index)\r\n }\r\n },\r\n changeCategory: function(index) {\r\n this.activeCategoryIndex = index;\r\n this.activeCategory = this.inspirationGalleryData[this.activeCategoryIndex];\r\n this.activeCategoryImageCount = this.activeCategory.mainImages.length;\r\n this.setTriggerExperienceResize(true);\r\n\r\n this.randomOffsets = [];\r\n for (let i=0; i<this.activeCategoryImageCount; i++) {\r\n this.randomOffsets.push(Math.random() * 0.3);\r\n }\r\n },\r\n\t\tresizeListener: function () {\r\n this.offsetTop = this.getOffsetTopRecursive(this.$el);\r\n this.windowTrigger = this.$refs.grid.offsetTop;\r\n },\r\n categoryClickHandler: function() {\r\n this.showOverlayBackdrop();\r\n this.openMaterialOverlay({data: this.inspirationGalleryData, activeIndex: this.activeCategoryIndex});\r\n },\r\n getOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\t\t\treturn actualOffset;\r\n\t\t},\r\n imageStyle(index) {\r\n if ( this.randomOffsets[index] ) {\r\n return `--adjustment-factor: ${this.randomOffsets[index]}`;\r\n } else { \r\n return 1; \r\n }\r\n }\r\n },\r\n mounted() { \r\n this.randomOffsets = [];\r\n for (let i=0; i<this.activeCategory.mainImages.length; i++) {\r\n this.randomOffsets.push(Math.random() * 0.3);\r\n }\r\n setTimeout( function () {\r\n this.resizeListener();\r\n }.bind(this), 250);\r\n }\r\n}","export default {\r\n categories: [\r\n\t\t{\r\n headline: \"strength, durability & stability\",\r\n bodyText: \"Form follows function\\nSo wheather you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n\r\n byline: \"9 obtained\",\r\n imageSrc: \"/static/images/textiles/textured.jpg\",\r\n\r\n backgroundColor: \"#F9F8F2\",\r\n textColor: \"#282828\",\r\n\r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular Textured materials\",\r\n subCategories: [\r\n {\r\n headline: \"Textured 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/textured.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n {\r\n headline: \"Textured 2\",\r\n bodyText: \"Consectetur adipiscing elit do eiusmod tempor...\",\r\n imageSrc: \"/static/images/textiles/textured.jpg\",\r\n content: \"<p>Consectetur adipiscing elit, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Refine leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular textured sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/designer-portrait-img2.jpg\",\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n ]\r\n },\r\n\t\t{\r\n headline: \"safety & regulations\",\r\n bodyText: \"Form follows function - so wheather you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n backgroundColor: \"#DBE8F3\",\r\n textColor: \"#DA6E00\",\r\n\r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular textured materials\",\r\n subCategories: [\r\n {\r\n headline: \"Textured 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n {\r\n headline: \"Textured 2\",\r\n bodyText: \"Consectetur adipiscing elit do eiusmod tempor...\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n content: \"<p>Consectetur adipiscing elit, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Refine leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n {\r\n headline: \"Textured 3\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular leather sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n ]\r\n },\r\n {\r\n headline: \"ecolabels & certificates\",\r\n bodyText: \"Form follows function - so wheather you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n\r\n byline: \"5 obtained\",\r\n imageSrc: \"/static/images/textiles/smooth.jpg\",\r\n backgroundColor: \"#E6C4A6\",\r\n textColor: \"#282828\",\r\n\r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular solid color materials\",\r\n subCategories: [\r\n {\r\n headline: \"Soft 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/smooth.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular solid color sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/designer-portrait-img2.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n ]\r\n },\r\n {\r\n headline: \"electromagnetic compatability\",\r\n bodyText: \"Form follows function - so wheather you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n\r\n byline: \"5 obtained\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n backgroundColor: \"#DBE8F3\",\r\n textColor: \"#DA6E00\",\r\n\r\n materialsLabel: \"Materials\",\r\n subCategoriesLabel:\"Popular textured materials\",\r\n subCategories: [\r\n {\r\n headline: \"Textured 1\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n {\r\n headline: \"Textured 2\",\r\n bodyText: \"Consectetur adipiscing elit do eiusmod tempor...\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n content: \"<p>Consectetur adipiscing elit, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Refine leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n {\r\n headline: \"Textured 3\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/textiles/leather.jpg\",\r\n content: \"<p>Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment.</p><table><tbody><tr><th>Material type:</th><td>Aniline leather</td></tr><tr><th>Martindale:</th><td>20.000 (General domestic)</td></tr></tbody></table>\",\r\n seeMoreLabel: \"See more\",\r\n ctaLabel: \"Find a sofa with Faux leather\",\r\n ctaHref: \"#findasofa\",\r\n },\r\n ],\r\n sliderLabel: \"Popular leather sofas\",\r\n sliderItems: [\r\n {\r\n headline: \"Outline\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_4.jpg\",\r\n },\r\n {\r\n headline: \"Connect Soft\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit...\",\r\n imageSrc: \"/static/images/roomexplorer-3_2.jpg\",\r\n },\r\n ]\r\n },\r\n ],\r\n features: [\r\n {\r\n headlineNumber: \"01\",\r\n headline: \"Durability\",\r\n bodyText: \"Referring to the durability of the textile, The Martindale Score ranges from 10,000 to 150,000, denoting the number of abrasions before the character of the fabric visibly starts to change.\\nAll of Muuto’s materials have high Martindale scores and are suitable for domestic use.\",\r\n ctaText: \"Read more\",\r\n ctaHref: null,\r\n explanationData: {\r\n backgroundColor: \"lavender\",\r\n textColor: \"green\",\r\n headline: \"Durability\",\r\n content: [\r\n {\r\n text: \"Lorem ipsum dolor sit amet, sed do eiusmod tempor. The Leather is dyed through, chrome tanned and produced without the use of PCP and CFC wich can ve damaging to the environment\",\r\n },\r\n {\r\n image: \"/static/images/product/master-product-image.jpg\",\r\n },\r\n {\r\n text: \"Exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes\",\r\n },\r\n {\r\n text: \"The visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes\",\r\n },\r\n {\r\n image: \"/static/images/product/plp-inspirational-image1.jpg\",\r\n },\r\n {\r\n text: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail.\",\r\n },\r\n ]\r\n }\r\n },\r\n {\r\n headlineNumber: \"02\",\r\n headline: \"Sunlight Exposure\",\r\n bodyText: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes.\\nAll of Muuto’s materials offer a lightfastness of at least 3. \",\r\n imageSrc: \"/static/images/product/master-product-image.jpg\",\r\n ctaText: \"Check it out\",\r\n ctaHref: \"http://www.deptagency.com\",\r\n explanationData: null\r\n },\r\n {\r\n headlineNumber: \"03\",\r\n headline: \"Pilling\",\r\n bodyText: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes.\\nAll of Muuto’s materials offer a lightfastness of at least 3. \",\r\n videoSrc: \"/static/video/test3.mp4\",\r\n ctaText: \"Read more\",\r\n ctaHref: null,\r\n explanationData: {\r\n backgroundColor: \"brown\",\r\n textColor: \"yellow\",\r\n headline: \"Pilling\",\r\n content: [\r\n {\r\n image: \"/static/images/product/plp-inspirational-image1.jpg\",\r\n },\r\n {\r\n text: \"Exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes\",\r\n },\r\n {\r\n text: \"The visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes\",\r\n },\r\n {\r\n text: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail.\",\r\n },\r\n ]\r\n }\r\n },\r\n {\r\n headlineNumber: \"02\",\r\n headline: \"Sunlight Exposure\",\r\n bodyText: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes.\\nAll of Muuto’s materials offer a lightfastness of at least 3. \",\r\n imageSrc: \"/static/images/product/master-product-image.jpg\",\r\n ctaText: \"Check it out\",\r\n ctaHref: \"http://www.deptagency.com\",\r\n explanationData: null\r\n },\r\n {\r\n headlineNumber: \"03\",\r\n headline: \"Pilling\",\r\n bodyText: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes.\\nAll of Muuto’s materials offer a lightfastness of at least 3. \",\r\n imageSrc: \"/static/images/product/master-product-image.jpg\",\r\n ctaText: \"Read more\",\r\n ctaHref: null,\r\n explanationData: {\r\n backgroundColor: \"brown\",\r\n textColor: \"yellow\",\r\n headline: \"Pilling\",\r\n content: [\r\n {\r\n image: \"/static/images/product/plp-inspirational-image1.jpg\",\r\n },\r\n {\r\n text: \"Exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes\",\r\n },\r\n {\r\n text: \"The visible discoloration that exposure to direct sunlight can entail. The higher the number, the longer it will take before the color of the textile changes\",\r\n },\r\n {\r\n text: \"Measured on a scale from 1 to 8, lightfastness refers to a material’s ability to withstand the visible discoloration that exposure to direct sunlight can entail.\",\r\n },\r\n ]\r\n }\r\n }\r\n ]\r\n}\r\n","import { mapState } from \"vuex\";\r\nimport mockData from \"./material-explorer-data-2\";\r\nimport { mapActions } from \"vuex\";\r\nimport Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\nexport default {\r\n\tname: \"material-explorer\",\r\n\tprops: {\r\n\t\ttitleNumber: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"3.\",\r\n\t\t},\r\n\t\ttitleText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Materials & qualities\",\r\n\t\t},\r\n\r\n\t\theadline: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"3 practical considerations:\",\r\n\t\t},\r\n\r\n\t\tbodyText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault:\r\n\t\t\t\t\"When choosing upholstery for your sofa, there are a few practical points you may want to consider: durability, exposure to sunlight, and pilling. To the right, you can read about these terms and what they mean for your choice of material.\",\r\n\t\t},\r\n\t\tcategoryList: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn mockData.categories;\r\n\t\t\t},\r\n\t\t},\r\n\t\tfeaturesLabel: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Featured\",\r\n\t\t},\r\n\t\tfeaturesList: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn mockData.features;\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\twindowW: (state) => state.windowW,\r\n\t\t\twindowH: (state) => state.windowH,\r\n\t\t})\r\n\t},\r\n\twatch: {\r\n\t\twindowW() {\r\n\t\t\tthis.resizeListener();\r\n\t\t},\r\n\t\twindowH() {\r\n\t\t\tthis.resizeListener();\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\tconst itemLength = this.featuresList.length;\r\n\r\n\t\treturn {\r\n\t\t\tslider: null,\r\n\t\t\tsettings: {\r\n\t\t\t\tslidesPerView: 3,\r\n\t\t\t\tspaceBetween: 0,\r\n\t\t\t\tfreeMode: true,\r\n\r\n\t\t\t\tobserver: true,\r\n\t\t\t\tobserveParents: true,\r\n\r\n\t\t\t\tbreakpoints: {\r\n\t\t\t\t\t565: {\r\n\t\t\t\t\t\tslidesPerView: 1.1,\r\n\t\t\t\t\t\tspaceBetween: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t767: {\r\n\t\t\t\t\t\tslidesPerView: 1.25,\r\n\t\t\t\t\t\tspaceBetween: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t1023: {\r\n\t\t\t\t\t\tslidesPerView: 1.5,\r\n\t\t\t\t\t\tspaceBetween: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t1279: {\r\n\t\t\t\t\t\tslidesPerView: 1.75,\r\n\t\t\t\t\t\tspaceBetween: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t1923: {\r\n\t\t\t\t\t\tslidesPerView: itemLength <= 3 ? 3 : 2.25,\r\n\t\t\t\t\t\tspaceBetween: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"setActiveVideo\", \"openMaterialOverlay\", \"showOverlayBackdrop\", \"openExplanationOverlay\"]),\r\n\t\tfeatureClickHandler: function (item) {\r\n\t\t\tthis.showOverlayBackdrop();\r\n\t\t\tthis.openExplanationOverlay(item.explanationData);\r\n\t\t},\r\n\t\tcategoryClickHandler: function (index) {\r\n\t\t\tthis.showOverlayBackdrop();\r\n\t\t\tthis.openMaterialOverlay({ data: this.categoryList, activeIndex: index });\r\n\t\t},\r\n\t\topenVideo(item) {\r\n\t\t\tthis.setActiveVideo({ type: item.videoType, value: item.videoValue });\r\n\t\t},\r\n\t\tresizeListener() {\r\n\t\t\tif (this.windowW > 768 && this.featuresList.length <= 3) {\r\n\t\t\t\tconst test = document.querySelectorAll(\".material-explorer__features__slider .swiper-wrapper .swiper-slide\");\r\n\t\t\t\ttest.three = true;\r\n\t\t\t}\r\n\t\t\tif (!this.slider) {\r\n\t\t\t\tObject.assign(this.settings, {\r\n\t\t\t\t\tnavigation: {\r\n\t\t\t\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n","export default [\r\n {\r\n headline: \"Interior design ideas\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet\",\r\n img1Src: \"/static/images/product/plp-inspirational-image1.jpg\",\r\n img2Src: \"/static/images/product/master-product-image-sofa.jpg\",\r\n backgroundColor: \"#A9B5D6\",\r\n textColor: \"#976F38\"\r\n },\r\n {\r\n headline: \"Ipsum dolor sit amet consec­tetur\",\r\n bodyText: \"Sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet\",\r\n img1Src: \"/static/images/product/master-product-image-sofa.jpg\",\r\n img2Src: \"/static/images/mega-menu-life-style-image.jpg\",\r\n backgroundColor: \"#3E5659\",\r\n textColor: \"#E4E4DC\"\r\n },\r\n {\r\n headline: \"Dolor sit amet consec­tetur\",\r\n bodyText: \"Tempor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet\",\r\n img1Src: \"/static/images/roomexplorer-3_4.jpg\",\r\n img2Src: \"/static/images/product/plp-inspirational-image1.jpg\",\r\n backgroundColor: \"#EEFF88\",\r\n textColor: \"#77FFEE\"\r\n },\r\n {\r\n headline: \"Amet consec­tetur\",\r\n bodyText: \"Consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet\",\r\n img1Src: \"/static/images/roomexplorer-3_2.jpg\",\r\n img2Src: \"/static/images/portrait-image.jpg\",\r\n backgroundColor: \"#AA77AA\",\r\n textColor: \"#EE77FF\"\r\n },\r\n {\r\n headline: \"Lorem ipsum dolor\",\r\n bodyText: \"Consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet\",\r\n img1Src: \"/static/images/product/master-product-image-sofa.jpg\",\r\n img2Src: \"/static/images/master-product-image_4_5.jpg\",\r\n backgroundColor: \"#4455EE\",\r\n textColor: \"#229955\"\r\n }\r\n]","import Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\nimport mockData from \"./inspiration-slider-data\";\r\nimport ImageProductsButton from \"../../image-products/image-products-button.vue\"\r\nimport HasImageProducts from \"../../image-products/has-image-products\";\r\n\r\nexport default {\r\n name: \"inspiration-slider\",\r\n\textends: HasImageProducts,\r\n components: {\r\n ImageProductsButton\r\n },\r\n props: {\r\n labelText: {\r\n type: String,\r\n default: \"Inspiration\"\r\n },\r\n slideList: {\r\n type: Array,\r\n default() {\r\n return mockData;\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n slider: null,\r\n\t\t\tslidesCount: 0,\r\n\t\t\tslidesRef: null,\r\n\r\n\t\t\tactiveSlideIndex: 0,\r\n\t\t\t\r\n\t\t\tsettings: {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tallowTouchMove: true,\r\n\t\t\t\teffect: \"fade\",\r\n\t\t\t\tfadeEffect: {\r\n\t\t\t\t\tcrossFade: true,\r\n\t\t\t\t},\r\n\t\t\t\tpagination: true,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 600,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tnavigation: {\r\n\t\t\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: true,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\tlazy: {\r\n\t\t\t\t\tloadPrevNext: true,\r\n\t\t\t\t\tloadPrevNextAmount: 3,\r\n\t\t\t\t}, \r\n\t\t\t\ton: {\r\n slideChange: this.slideChangeHandler.bind(this)\r\n } \r\n\t\t\t},\r\n }\r\n },\r\n\tcomputed: {\r\n\t\tgetSlideStyle: function() {\r\n\t\t\tlet currentSlide = this.slideList[this.activeSlideIndex];\r\n\t\t\treturn {\r\n\t\t\t\t'background-color': currentSlide.backgroundColor,\r\n\t\t\t\t'--inspiration-slider-bg-color': currentSlide.backgroundColor,\r\n\t\t\t\t'color': currentSlide.textColor,\r\n\t\t\t\t'--inspiration-slider-text-color': currentSlide.textColor,\r\n\t\t\t};\r\n\t\t},\r\n\t},\r\n\tmethods: {\t\t\r\n\t\tslideChangeHandler: function(){\r\n\t\t\tthis.activeSlideIndex = this.slider.activeIndex;\r\n\t\t}\r\n\t},\r\n mounted() {\r\n\t\tthis.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n\t\tthis.slidesCount = this.slidesRef.length;\r\n\r\n\t\tif (this.slidesCount > 1) {\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\tnavigation: {\r\n\t\t\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif (this.settings.pagination ) {\r\n\t\t\t\tObject.assign(this.settings, {\r\n\t\t\t\t\tpagination: {\r\n\t\t\t\t\t\tel: this.$refs.pagination\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\r\n }\r\n\r\n};","export default [\r\n {\r\n headline:\"Guided tour\",\r\n bodyText:\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n position: \"TOP_RIGHT\",\r\n button: {\r\n class: \"ar-link\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n },\r\n {\r\n headline:\"The comfort 2\",\r\n bodyText:\"Sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n position: \"BOTTOM_LEFT\",\r\n button: {\r\n class: \"link link--persistent\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n },\r\n\t{\r\n\t\theadline:\"The comfort\",\r\n\t\tbodyText:\"Sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n\t\tposition: \"TOP_RIGHT\",\r\n\t\tbutton: {\r\n\t\t\tclass: \"button button--primary\",\r\n\t\t\ttext: \"Try sofa in AR\",\r\n\t\t\thref: \"#\"\r\n\t\t}\r\n\t},\r\n {\r\n headline:\"Be playful\",\r\n bodyText:\"Sit amet, consectetur adipiscing elit, sed do eiusmod tempor Lorem ipsum dolor sit amet, consectetur.\",\r\n position: \"BOTTOM_LEFT\",\r\n button: {\r\n\t\t\tclass: \"button button--primary button--custom-colors\",\r\n\t\t\tstyle: \"--custom-color-1: pink; --custom-color-2: black; --custom-color-3: black; --custom-color-4: pink;\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n },\r\n {\r\n headline:\"Message 4\",\r\n bodyText:\"Eiusmod tempor Lorem ipsum dolor sit amet, consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.\",\r\n position: \"BOTTOM_LEFT\",\r\n button: {\r\n class: \"button button--secondary button--custom-colors\",\r\n\t\t\tstyle: \"--custom-color-1: tomato; --custom-color-2: lime; --custom-color-3: tomato; --custom-color-4: tomato;\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n }\r\n];\r\n","import { mapState } from \"vuex\";\r\nimport mockData from \"./scroll-rotator-data\";\r\n\r\nconst MESSAGE_POSITION = { TOP_RIGHT: \"TOP_RIGHT\", BOTTOM_LEFT: \"BOTTOM_LEFT\" };\r\n\r\nexport default {\r\n\tname: \"scroll-rotator\",\r\n\tprops: {\r\n\t\tcylindoSku: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"OSLO_SOFA_2-SEATER\",\r\n\t\t\t// default: \"OSLO_LOUNGE_CHAIR\"\r\n\t\t\t// default: \"IN_SITU_CORNER_CONFIGURATION_9\"\r\n\t\t\t// default: \"OUTLINE_SOFA_3_1_2-SEATER_FABRIC\"\r\n\t\t\t// default: \"OUTLINE_SOFA_POUF_FABRIC\"\r\n\t\t},\r\n\t\tstartAngle: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"270\",\r\n\t\t},\r\n\t\tmessageList: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn mockData;\r\n\t\t\t},\r\n\t\t},\r\n\t\textraCylindoOptions: {\r\n\t\t\ttype: Object,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn {\r\n\t\t\t\t\thej: \"lars\",\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\twindowH: (state) => state.windowH,\r\n\t\t\twindowY: (state) => state.windowY,\r\n\t\t\tbodyFixed: (state) => state.bodyFixed,\r\n\t\t}),\r\n\t\toverallStyle() {\r\n\t\t\treturn `--message-count: ${this.messageList.length};`;\r\n\t\t},\r\n\t\tstartAngleConverted() {\r\n\t\t\tlet sA = parseInt(this.startAngle, 0);\r\n\t\t\tif (sA > 360) sA = 360;\r\n\t\t\tif (sA < 0) sA = 0;\r\n\t\t\treturn sA;\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tbodyFixed(state) {\r\n\t\t\tif (!state) {\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t},\r\n\t\twindowY(newVal) {\r\n\t\t\tif (newVal) {\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t},\r\n\t\twindowW() {\r\n\t\t\tthis.update();\r\n\t\t},\r\n\t\twindowH() {\r\n\t\t\tthis.update();\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tmessageCount: 0,\r\n\r\n\t\t\tcountry: this.$store.state.country,\r\n\t\t\tlanguage: this.$store.state.language,\r\n\t\t\tcylindoAccountId: this.$store.state.cylindoAccountId,\r\n\r\n\t\t\tcylindoInstance: null,\r\n\t\t\tcylindoInitDone: false,\r\n\r\n\t\t\tactiveMessageIndex: 0,\r\n\t\t\toffsetTop: 0,\r\n\t\t\toffsetHeight: 0,\r\n\r\n\t\t\tscrollPosition: 0,\r\n\t\t\thasScrolledInto: false,\r\n\t\t\thasScrolledPast: false,\r\n\r\n\t\t\trotationIncrement: 0,\r\n\r\n\t\t\tsynchronizedRotation: false,\r\n\t\t};\r\n\t},\r\n\tmethods: {\r\n\t\tinitCylindo() {\r\n\t\t\t// COMMENT: Make sure the cylindo framework has been \"installed\"\r\n\r\n\t\t\tif (window.cylindo) {\r\n\t\t\t\t// do not instantiate the viewer until the framework reports ready.\r\n\t\t\t\twindow.cylindo.on(\"ready\", () => {\r\n\t\t\t\t\t// COMMENT: The opts object should hold the start properties of the 360 HD Viewer\r\n\t\t\t\t\tlet cylindoOptions = {\r\n\t\t\t\t\t\taccountID: this.cylindoAccountId,\r\n\t\t\t\t\t\tcountry: this.country,\r\n\t\t\t\t\t\tlanguage: this.language,\r\n\t\t\t\t\t\tSKU: this.cylindoSku,\r\n\t\t\t\t\t\tencoding: \"png\",\r\n\t\t\t\t\t\tdebug: false,\r\n\t\t\t\t\t\tcontainerID: \"cylindo-container\",\r\n\t\t\t\t\t\tformat: \"png\",\r\n\t\t\t\t\t\tthumbs: false,\r\n\t\t\t\t\t\tfullscreen: false,\r\n\t\t\t\t\t\tsize: \"2048\",\r\n\t\t\t\t\t\tprogressBar: false,\r\n\t\t\t\t\t\tzoom: false,\r\n\t\t\t\t\t\ttitle: \"\",\r\n\t\t\t\t\t\tbackgroundColor: \"\",\r\n\t\t\t\t\t\tARDesktop: false,\r\n\t\t\t\t\t\tARQuickLook: false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (this.extraCylindoOptions) {\r\n\t\t\t\t\t\tObject.assign(cylindoOptions, this.extraCylindoOptions);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (cylindoOptions.size) cylindoOptions.size = Number(cylindoOptions.size);\r\n\t\t\t\t\t// console.log(\"cylindoOptions\", cylindoOptions)\r\n\r\n\t\t\t\t\t// COMMENT: Create the cylindo-instance\r\n\t\t\t\t\tthis.cylindoInstance = window.cylindo.viewer.create(cylindoOptions);\r\n\t\t\t\t\tthis.cylindoInitDone = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tupdate: function () {\r\n\t\t\tif (this.bodyFixed) return false;\r\n\r\n\t\t\tthis.offsetTop = this.getOffsetTopRecursive(this.$el);\r\n\t\t\tthis.offsetHeight = this.messageList.length * this.windowH;\r\n\r\n\t\t\tlet deckTopRelative = this.windowY - this.offsetTop;\r\n\t\t\tlet deckBottomRelative = this.windowY - (this.offsetTop + this.offsetHeight) + this.windowH;\r\n\r\n\t\t\tthis.hasScrolledInto = deckTopRelative > 0;\r\n\t\t\tthis.hasScrolledPast = deckBottomRelative > 0;\r\n\r\n\t\t\tthis.scrollPosition = deckTopRelative / (this.offsetHeight - this.windowH);\r\n\r\n\t\t\tif (!this.hasScrolledInto && !this.hasScrolledPast && this.cylindoInstance) {\r\n\t\t\t\tthis.activeMessageIndex = 0;\r\n\t\t\t\tthis.cylindoInstance.goToAngle(this.startAngleConverted);\r\n\t\t\t} else if (this.hasScrolledInto && !this.hasScrolledPast) {\r\n\t\t\t\tlet newIndex = Math.round(this.scrollPosition * (this.messageCount - 1));\r\n\r\n\t\t\t\tif (this.synchronizedRotation && this.cylindoInstance ) {\r\n\t\t\t\t\tthis.cylindoInstance.goToAngle(360 * this.scrollPosition + this.startAngleConverted);\r\n\t\t\t\t} else if (newIndex != this.activeMessageIndex && this.cylindoInstance) {\r\n\t\t\t\t\tif (newIndex < this.activeMessageIndex) {\r\n\t\t\t\t\t\tthis.cylindoInstance.rotate(-this.rotationIncrement, 300);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.cylindoInstance.rotate(this.rotationIncrement, 300);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.activeMessageIndex = newIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tfindActiveIndex: function (position) {\r\n\t\t\tlet foundIndex = 0;\r\n\t\t\tthis.messageList.forEach((item, index) => {\r\n\t\t\t\tif (position >= item.scrollPosition) {\r\n\t\t\t\t\t//not last element\r\n\t\t\t\t\tif (index < this.messageCount - 1) {\r\n\t\t\t\t\t\tif (position < this.messageList[index + 1].scrollPosition) {\r\n\t\t\t\t\t\t\t//found it\r\n\t\t\t\t\t\t\tfoundIndex = index;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t//not it\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//at last element\r\n\t\t\t\t\t\tfoundIndex = index;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn foundIndex;\r\n\t\t},\r\n\t\tgetMessagePositionClass: function (item) {\r\n\t\t\tif (item.position === MESSAGE_POSITION.TOP_RIGHT) return { \"scroll-rotator__message--top-right\": true };\r\n\t\t\telse if (item.position === MESSAGE_POSITION.BOTTOM_LEFT) return { \"scroll-rotator__message--bottom-left\": true };\r\n\t\t},\r\n\t\tgetOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\r\n\t\t\treturn actualOffset;\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.rotationIncrement = 360 / (this.messageList.length + 1);\r\n\t\tthis.messageCount = this.messageList.length;\r\n\r\n\t\tlet initInterval = setInterval(\r\n\t\t\tfunction () {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tthis.initCylindo();\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\t//console.log(\"INIT CYLINDO ERROR\", err)\r\n\t\t\t\t}\r\n\t\t\t\tif (this.cylindoInitDone) {\r\n\t\t\t\t\tthis.cylindoInstance.goToAngle(this.startAngleConverted);\r\n\r\n\t\t\t\t\tclearInterval(initInterval);\r\n\t\t\t\t}\r\n\t\t\t}.bind(this),\r\n\t\t\t500\r\n\t\t);\r\n\t},\r\n};\r\n","export default [\r\n {\r\n type: \"2-seater\",\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n linkText: \"More details\",\r\n linkUrl: \"#oslo-2seater\",\r\n details: [\r\n {\r\n label: \"Width\",\r\n title: \"150\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Depth\",\r\n title: \"80\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Seat depth\",\r\n title: \"40\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Seat height\",\r\n title: \"50\",\r\n unit: \"cm\"\r\n }\r\n ],\r\n },\r\n {\r\n type: \"3-seater\",\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n linkText: \"More details\",\r\n linkUrl: \"#oslo-3seater\",\r\n details: [\r\n {\r\n label: \"Width\",\r\n title: \"50\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Depth\",\r\n title: \"120\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Seat depth\",\r\n title: \"40\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Seat height\",\r\n title: \"60\",\r\n unit: \"cm\"\r\n }\r\n ],\r\n },\r\n {\r\n type: \"bench\",\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n linkText: \"More details\",\r\n linkUrl: \"#oslo-bench\",\r\n details: [\r\n {\r\n label: \"Width\",\r\n title: \"100\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Depth\",\r\n title: \"70\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Seat depth\",\r\n title: \"40\",\r\n unit: \"cm\"\r\n }\r\n ],\r\n },\r\n {\r\n type: \"pouf\",\r\n imageSrc: \"/static/images/product/Five_pouf_Remix_123-low-res.png\",\r\n linkText: \"More details\",\r\n linkUrl: \"#oslo-pouf\",\r\n details: [\r\n {\r\n label: \"Width\",\r\n title: \"80\",\r\n unit: \"cm\"\r\n },\r\n {\r\n label: \"Depth\",\r\n title: \"80\",\r\n unit: \"cm\"\r\n }\r\n ],\r\n },\r\n {\r\n isPlanner: true,\r\n type: \"Planning Tool\",\r\n color: \"red\",\r\n imageSrc: \"/static/images/family-pencil-drawing.jpg\",\r\n linkText: \"Plan your own modular sofa\",\r\n linkUrl: \"#planning-tool\",\r\n details: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed enteratin sit amet\"\r\n },\r\n]\r\n","import mockData from \"./model-explorer-data\"\r\n\r\nimport Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\n\r\nexport default {\r\n name: \"model-explorer\",\r\n props: {\r\n titleText: {\r\n type: String,\r\n default: \"The Oslo Family\",\r\n },\r\n bodyText: {\r\n type: String,\r\n default: \"The oslo family has a broad range of members. It comes in 3-seater sofa, 2-seater sofa, chair, pouf & bench\",\r\n },\r\n plannerLinkHref: {\r\n type: String,\r\n default: \"#planner\",\r\n },\r\n plannerLinkText: {\r\n type: String,\r\n default: \"Plan your own\",\r\n },\r\n plannerLinkTarget: {\r\n type: String,\r\n default: \"_self\",\r\n },\r\n readMoreText: {\r\n type: String,\r\n default: \"More details\",\r\n },\r\n modelList: {\r\n type: Array,\r\n default() {\r\n return mockData;\r\n }\r\n }\r\n },\r\n data() {\r\n return { \r\n activeModelIndex: 0,\r\n activeModel: this.modelList[0],\r\n \r\n slider: null,\r\n\t\t\tslidesCount: 0,\r\n\t\t\tslidesRef: null,\r\n\t\t\t\r\n\t\t\tsettings: {\r\n\t\t\t\tsimulateTouch: true,\r\n\t\t\t\tallowTouchMove: true,\r\n\r\n grabCursor: true,\r\n navigation: {\r\n\t\t\t\t\t\r\n\t\t\t\t},\r\n\t\t\t\tslidesPerView: 3.85,\r\n spaceBetween: 20,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: false,\r\n breakpoints: {\r\n 767: {\r\n slidesPerView: 1.5,\r\n spaceBetween: 15\r\n },\r\n 1023: {\r\n slidesPerView: 2,\r\n spaceBetween: 20\r\n },\r\n 1439: {\r\n slidesPerView: 3,\r\n spaceBetween: 20\r\n },\r\n },\r\n on: {\r\n slideChange: this.slideChangeHandler.bind(this)\r\n } \r\n\t\t\t},\r\n }\r\n },\r\n methods: {\r\n slideChangeHandler: function() {\r\n if ( this.slider.activeIndex < this.modelList.length ) {\r\n this.activeModel = this.modelList[this.slider.activeIndex];\r\n } \r\n },\r\n slideClickHandler: function(index) {\r\n this.slider.slideTo(index);\r\n }\r\n },\r\n mounted() {\r\n \r\n this.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n this.slidesCount = this.slidesRef.length;\r\n \r\n if (this.slidesCount > 1) {\r\n Object.assign(this.settings, {\r\n navigation: {\r\n nextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n }\r\n \r\n this.slider = new Swiper(this.$refs.slider, this.settings);\r\n }\r\n}","import { mapActions, mapState} from 'vuex';\r\nimport Swiper from \"swiper/dist/js/swiper.js\";\r\nimport TabsBar from '../tabs-bar/tabs-bar';\r\n\r\n\r\nexport default {\r\n name: \"material-overlay\",\r\n\tcomponents: {\r\n\t\tTabsBar\r\n\t},\r\n\twatch: {\r\n\t\tactiveMaterialIndex: function() {\r\n\t\t\tif ( this.materialsData && this.activeMaterialIndex >= 0) {\r\n\t\t\t\tthis.activeCategory = this.materialsData[this.activeMaterialIndex];\r\n\t\t\t}\r\n\t\t},\r\n\t\tmaterialsData: function() {\r\n\t\t\tif ( this.materialsData && this.activeMaterialIndex >= 0) {\r\n\t\t\t\tthis.categoryTabsList = this.getCategoryList();\r\n\t\t\t\tthis.activeCategory = this.materialsData[this.activeMaterialIndex];\r\n\t\t\t}\r\n\r\n setTimeout(function() {\r\n\t\t\t\tObject.assign(this.settings, {\r\n\t\t\t\t\tnavigation: {\r\n\t\t\t\t\t\tnextEl: this.$refs[\"nextButton\"],\r\n\t\t\t\t\t\tprevEl: this.$refs[\"prevButton\"],\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n }.bind(this),100);\r\n\t\t}\r\n\t},\r\n computed: {\r\n\t\t...mapState({\r\n\t\t\tmaterialsData: state => state.materialsData,\r\n\t\t\tactiveMaterialIndex: state => state.activeMaterialIndex,\r\n\t\t\tmaterialOverlayOpen: state => state.materialOverlayOpen,\r\n\t\t}),\r\n\t\tactiveCategoryStyle() {\r\n\t\t\tif ( this.activeCategory && this.activeCategory.backgroundColor ) {\r\n\t\t\t\treturn `background-color: ${this.activeCategory.backgroundColor}; --material-overlay-bg-color: ${this.activeCategory.backgroundColor};color: ${this.activeCategory.textColor}; --material-overlay-text-color: ${this.activeCategory.textColor}`;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tprops: {\r\n\t\tcloseText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Close\"\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tactiveCategory: null,\r\n\t\t\tcategoryTabsList: null,\r\n\t\t\tactiveAccordionIndex: -1,\r\n\t\t\tslider: null,\r\n settings: {\r\n\t\t\t\tslidesPerView: 1.25,\r\n spaceBetween: 0,\r\n freeMode: true,\r\n\t\t\t\tnavigation: { },\r\n }\r\n\t\t}\r\n\t},\r\n methods: {\r\n\t\t...mapActions([\r\n\t\t\t'openMaterialOverlay',\r\n\t\t\t'closeMaterialOverlay',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t\t'setActiveMaterialCategory',\r\n\t\t]),\r\n\t\tclose(){\r\n this.closeMaterialOverlay();\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t},\r\n\t\tcategoryChangeHandler: function(item, index) {\r\n\t\t\tthis.activeAccordionIndex = -1;\r\n\r\n this.setActiveMaterialCategory(index);\r\n\t\t\tthis.$refs.inner.scrollTop = 0;\r\n\r\n setTimeout(function() {\r\n\t\t\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n }.bind(this),100);\r\n\t\t},\r\n\t\tgetCategoryList: function() {\r\n let list = [];\r\n\t\t\tif ( this.materialsData && this.materialsData.length ) {\r\n\t\t\t\tlist = this.materialsData.map(item=>{ return {label: item.headline}; });\r\n\t\t\t}\r\n return list;\r\n },\r\n\t\ttoggleAccordion: function(index) {\r\n\t\t\tif ( this.activeAccordionIndex === index ) {\r\n\t\t\t\tthis.activeAccordionIndex = -1;\r\n\t\t\t} else {\r\n\t\t\t\tthis.activeAccordionIndex = index;\r\n\t\t\t\ttry {this.$refs.accordions.querySelectorAll('li')[this.activeAccordionIndex].scrollIntoView({block: \"center\", inline: \"nearest\",behavior:\"smooth\"});} catch (err) {\r\n\t\t\t\t\tconsole.log(err);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { mapActions, mapState} from 'vuex';\r\n\r\nexport default {\r\n\tname: \"explanation-overlay\",\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\texplanationData: state => state.explanationData,\r\n\t\t\texplanationOverlayOpen: state => state.explanationOverlayOpen,\r\n\t\t}),\r\n\t\tcolorStyle() {\r\n\t\t\tif ( this.explanationData && this.explanationData.backgroundColor ) {\r\n\t\t\t\treturn `background-color: ${this.explanationData.backgroundColor}; --material-overlay-bg-color: ${this.explanationData.backgroundColor};color: ${this.explanationData.textColor}; --material-overlay-text-color: ${this.explanationData.textColor}`;\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n\tprops: {\r\n\t\tcloseText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Close\"\r\n\t\t}\r\n\t},\r\n methods: {\r\n\t\t...mapActions([\r\n\t\t\t'openExplanationOverlay',\r\n\t\t\t'closeExplanationOverlay',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t]),\r\n\t\tclose(){\r\n\t\t\tthis.closeExplanationOverlay();\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t},\r\n\t}\r\n}","export default {\r\n configureData: {\r\n headline: \"Choose Oslo member\",\r\n bodyText: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n items:[\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_blank\",\r\n url: \"#PDP-oslo-2seater\",\r\n label: \"2-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_self\",\r\n url: \"#PDP-oslo-3seater\",\r\n label: \"3-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n isPlanner: true,\r\n imageSrc: \"/static/images/product/chairs.png\",\r\n target: \"_parent\",\r\n color: \"red\",\r\n url: \"#planner-tool\",\r\n label: \"Try out planner tool\"\r\n },\r\n ]\r\n },\r\n arData: {\r\n headline: \"Try with AR\",\r\n bodyText: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n items:[\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_blank\",\r\n url: \"#PDP-oslo-2seater\",\r\n label: \"2-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_self\",\r\n url: \"#PDP-oslo-3seater\",\r\n label: \"3-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n ]\r\n }\r\n}\r\n","import mockData from \"./shortcuts-bar-data\";\r\nimport { mapActions, mapState } from 'vuex';\r\nimport { inView } from \"../../../basics/js/methods/inView/inView\";\r\n\r\n\r\nexport default {\r\n name: \"shortcuts-bar\",\r\n props: {\r\n viewportsBeforeActivation: {\r\n type: Number,\r\n default: 1\r\n },\r\n findInStoreText: {\r\n type: String,\r\n default: \"Find in store\"\r\n },\r\n productLabel: {\r\n type: String,\r\n default: \"The Oslo Sofa\"\r\n },\r\n findInStoreHref: {\r\n type: String,\r\n default: \"/#findinstore\"\r\n },\r\n findInStoreTarget: {\r\n type: String,\r\n default: \"none\"\r\n },\r\n backText: {\r\n type: String,\r\n default: \"Back to Sofa Experience front page\"\r\n },\r\n backHref: {\r\n type: String,\r\n default: \"#frontpage\"\r\n },\r\n tryWithARText: {\r\n type: String,\r\n default: \"Try with AR\"\r\n },\r\n configureText: {\r\n type: String,\r\n default: \"Configure\"\r\n },\r\n configureShortcutsOverlayData: {\r\n type: Object,\r\n default() {\r\n return mockData.configureData;\r\n }\r\n }, \r\n arShortcutsOverlayData: {\r\n type: Object,\r\n default() {\r\n return mockData.arData;\r\n }\r\n } \r\n },\r\n computed: {\r\n\t\t...mapState({\r\n isMobile: state => state.isMobile,\r\n windowH: state => state.windowH,\r\n windowW: state => state.windowW,\r\n windowY: state => state.windowY\r\n }),\r\n getOffsetStyle() {\r\n if ( this.isMobile ) {\r\n if ( this.isActive ) {\r\n return `bottom: -2px;`;\r\n } else {\r\n return `bottom: -${this.height + 2}px;`;\r\n }\r\n } else {\r\n if ( this.isActive ) {\r\n return \"bottom: -2px;\";\r\n } else {\r\n return `bottom: -${this.height + 2}px;`;\r\n }\r\n }\r\n }\r\n },\r\n watch: {\r\n windowH: function() {\r\n this.resizeListener();\r\n },\r\n windowW: function() {\r\n this.resizeListener();\r\n },\r\n windowY: function(newVal) {\r\n if ( newVal > this.triggerPoint ) {\r\n //not scrolled to page bottom yet\r\n this.isActive = true;\r\n }\r\n else {\r\n //scrolled too far down\r\n this.isActive = false;\r\n }\r\n },\r\n },\r\n data() {\r\n return {\r\n isActive: false,\r\n offset: 0,\r\n height: 70,\r\n \r\n triggerPoint: 0,\r\n isStuck: false\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n\t\t\t'openShortcutsOverlay',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t]),\r\n openConfigureOverlay: function() {\r\n this.openShortcutsOverlay(this.configureShortcutsOverlayData); \r\n this.showOverlayBackdrop();\r\n },\r\n openAROverlay: function() {\r\n this.openShortcutsOverlay(this.arShortcutsOverlayData); \r\n this.showOverlayBackdrop();\r\n },\r\n scrollListener() {\r\n if ( this.windowY > this.triggerPoint ) {\r\n //not scrolled to page bottom yet\r\n this.isActive = true;\r\n }\r\n else {\r\n //scrolled too far down\r\n this.isActive = false;\r\n }\r\n },\r\n resizeListener() {\r\n this.triggerPoint = this.viewportsBeforeActivation * this.windowH;\r\n \r\n if ( this.windowW < 1024 ) {\r\n this.height = 70;\r\n } else {\r\n this.height = 50;\r\n }\r\n }\r\n },\r\n mounted() { \r\n\r\n inView({\r\n\t\t\tel: this.$el,\r\n\t\t\tthreshold: 1\r\n\t\t});\r\n }\r\n\r\n}","import { mapActions, mapState} from 'vuex';\r\n\r\nexport default {\r\n name: \"shortcuts-overlay\",\r\n computed: {\r\n\t\t...mapState({\r\n\t\t\tshortcutsData: state => state.shortcutsData,\r\n\t\t\tshortcutsOverlayOpen: state => state.shortcutsOverlayOpen,\r\n\t\t}),\r\n\t},\r\n\tprops: {\r\n\t\tcloseText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Close\"\r\n\t\t}\r\n\t},\r\n methods: {\r\n\t\t...mapActions([\r\n\t\t\t'openShortcutsOverlay',\r\n\t\t\t'closeShortcutsOverlay',\r\n\t\t\t'hideOverlayBackdrop',\r\n\t\t]),\r\n\t\tclose(){\r\n this.closeShortcutsOverlay();\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t},\r\n\t}\r\n\r\n}","export default {\r\n headline: \"Choose Oslo member\",\r\n bodyText: \"Form follows function - so whether you need to lounge, enteratin, lorem ipsum dolor sit amet consectetur adipiscing elit sed.\",\r\n items:[\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_blank\",\r\n url: \"#PDP-oslo-2seater\",\r\n label: \"2-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_self\",\r\n url: \"#PDP-oslo-3seater\",\r\n label: \"3-seater\"\r\n },\r\n {\r\n imageSrc: \"/static/images/product/Outline_3_seater_cognac_Refine_leather_-low-res.png\",\r\n target: \"_parent\",\r\n url: \"#PDP-oslo-bench\",\r\n label: \"Bench\"\r\n },\r\n ]\r\n}\r\n","import mockData from \"./ar-banner-data\";\r\nimport { mapActions } from 'vuex';\r\nimport HasImageProducts from \"../../image-products/has-image-products\";\r\nimport ImageProductsButton from \"../../image-products/image-products-button.vue\"\r\n\r\nexport default {\r\n\tname: \"ar-banner\",\r\n extends: HasImageProducts,\r\n components: {\r\n ImageProductsButton\r\n },\r\n\tprops: {\r\n labelText: {\r\n type: String,\r\n default: \"AR Experience\"\r\n },\r\n headline: {\r\n type: String,\r\n default: \"Try it in your home\"\r\n },\r\n bodyText: {\r\n type: String,\r\n default: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.\"\r\n },\r\n ctaHref: {\r\n type: String\r\n },\r\n ctaTarget: {\r\n type: String\r\n },\r\n ctaText: {\r\n type: String\r\n },\r\n imageSrc: {\r\n type: String,\r\n default: \"/static/images/phone-ar.png\"\r\n },\r\n iconName: {\r\n type: String\r\n // ,default: 'ar'\r\n },\r\n iconSrc: {\r\n type: String\r\n ,default: \"/static/svg/ar-framed.svg\"\r\n },\r\n configureShortcutsOverlayData: {\r\n type: Object,\r\n default() {\r\n return mockData;\r\n }\r\n } \r\n },\r\n methods: {\r\n ...mapActions([\r\n\t\t\t'openShortcutsOverlay',\r\n\t\t\t'showOverlayBackdrop',\r\n\t\t]),\r\n activateClickHandler: function() {\r\n this.openShortcutsOverlay(this.configureShortcutsOverlayData); \r\n this.showOverlayBackdrop();\r\n },\r\n getXlinkHref: function(icon) {\r\n\t\t\treturn `/Static/dist/svg/symbols.svg#svg-${icon}`;\r\n\t\t}\r\n }\r\n}","export default {\r\n slidesIdeal:[\r\n {\r\n headline: \"Choose between various combinations\",\r\n bodyText: \"Dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.\",\r\n backgroundColor: \"beige\",\r\n textColor: \"coral\",\r\n media: {\r\n imageSrc: \"/static/images/frontpage-ipad.png\",\r\n },\r\n button: {\r\n type: \"button button--primary\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\" \r\n }\r\n },\r\n {\r\n headline: \"...Or start with a blank canvas\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.\",\r\n backgroundColor: \"darkgoldenrod\",\r\n textColor: \"yellow\",\r\n media: {\r\n imageSrc: \"/static/images/support-block-image-crop.png\",\r\n }, \r\n button: {\r\n type: \"button button--secondary\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n } \r\n },\r\n {\r\n headline: \"I can show you the world\",\r\n bodyText: \"Adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.\",\r\n backgroundColor: \"burlywood\",\r\n textColor: \"firebrick\",\r\n media: {\r\n imageSrc: \"/static/images/frontpage-ipad.png\",\r\n }, \r\n button: {\r\n type: \"link\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n },\r\n {\r\n headline: \"...Shining, shimmering, splendid\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem. consectetur adipiscing elit, sed do eiusmod tempor lorem\",\r\n backgroundColor: \"black\",\r\n textColor: \"silver\",\r\n media: {\r\n imageSrc: \"/static/images/support-block-image-crop.png\",\r\n },\r\n button: {\r\n type: \"button button--primary\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\",\r\n backgroundColor: \"coral\",\r\n textColor: \"black\"\r\n }\r\n },\r\n {\r\n headline: \"Tell me, princess, now when did you last let your heart decide?\",\r\n bodyText: \"Adipiscing elit, sed do.\",\r\n backgroundColor: \"burlywood\",\r\n textColor: \"firebrick\",\r\n media: {\r\n imageSrc: \"/static/images/frontpage-ipad.png\",\r\n },\r\n button: {\r\n type: \"button button--secondary\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\",\r\n textColor: \"white\",\r\n backgroundColor: \"tomato\"\r\n }\r\n },\r\n ],\r\n slidesRealistic: [\r\n {\r\n headline: \"It's dangerous to go alone. Take this.\",\r\n bodyText: \"Consectetur adipiscing elit, sed do eiusmod tempor lorem\",\r\n backgroundColor: \"lavender\",\r\n textColor: \"green\",\r\n media: {\r\n imageSrc: \"/static/images/product/plp-inspirational-image1.jpg\",\r\n },\r\n button: {\r\n type: \"button button--primary\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\",\r\n backgroundColor: \"goldenrod\",\r\n textColor: \"yellow\"\r\n }\r\n },\r\n {\r\n headline: \"Choose between various combinations or start with a blank canvas consectetur adipiscing elit, sed do eiusmod tempor lorem\",\r\n bodyText: \"Choose between various combinations or start with a blank canvas \",\r\n backgroundColor: \"darkblue\",\r\n textColor: \"pink\",\r\n media: {\r\n imageSrc: \"/static/images/portrait-image.jpg\",\r\n },\r\n button: {\r\n type: \"link\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n },\r\n {\r\n headline: \"Lorem\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem. \",\r\n backgroundColor: \"cyan\",\r\n textColor: \"tomato\",\r\n media: {\r\n videoSrc: \"/static/video/test3.mp4\",\r\n },\r\n button: {\r\n type: \"button button--secondary\",\r\n text: \"Try sofa in AR\",\r\n href: \"#\"\r\n }\r\n },\r\n {\r\n headline: \"Sit amet\",\r\n bodyText: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor lorem.\",\r\n backgroundColor: \"darkgreen\",\r\n textColor: \"yellow\",\r\n media: {\r\n imageSrc: \"/static/images/master-product-image_4_5.jpg\",\r\n }\r\n },\r\n ]\r\n};","import Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\nimport mockData from \"./step-guide-data\";\r\n\r\nexport default {\r\n\tname: \"step-guide\",\r\n\tprops: {\r\n stepText: {\r\n type: String,\r\n default: \"Step\"\r\n },\r\n labelText: {\r\n type: String,\r\n default: \"Guide to Product Planer\"\r\n },\r\n slideList: {\r\n type: Array,\r\n default() {\r\n return mockData.slidesIdeal;\r\n }\r\n } \r\n },\r\n data() {\r\n return {\r\n slider: null,\r\n\t\t\tslidesCount: 0,\r\n\t\t\tslidesRef: null,\r\n\r\n activeSlideIndex: 0,\r\n\t\t\t\r\n\t\t\tsettings: {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tallowTouchMove: true,\r\n\t\t\t\teffect: \"fade\",\r\n\t\t\t\tfadeEffect: {\r\n\t\t\t\t\tcrossFade: true,\r\n\t\t\t\t},\r\n\t\t\t\tpagination: true,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 600,\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\tnavigation: {\r\n\t\t\t\t\tnextEl: \".swiper-button-next\",\r\n\t\t\t\t\tprevEl: \".swiper-button-prev\",\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: true,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\tlazy: {\r\n\t\t\t\t\tloadPrevNext: true,\r\n\t\t\t\t\tloadPrevNextAmount: 3,\r\n\t\t\t\t},\r\n\t\t\t\ton: {\r\n slideChange: this.slideChangeHandler.bind(this)\r\n } \r\n\t\t\t},\r\n }\r\n }, \r\n computed: {\r\n\t\tactiveSlideStyle: function() {\r\n\t\t\tlet currentSlide = this.slideList[this.activeSlideIndex];\r\n\t\t\treturn {\r\n\t\t\t\t'background-color': currentSlide.backgroundColor,\r\n\t\t\t\t'--step-guide-bg-color': currentSlide.backgroundColor,\r\n\t\t\t\t'color': currentSlide.textColor,\r\n\t\t\t\t'--step-guide-text-color': currentSlide.textColor,\r\n\t\t\t};\r\n\t\t},\r\n\t},\r\n\tmethods: {\t\t\r\n\t\tslideChangeHandler: function(){\r\n\t\t\tthis.activeSlideIndex = this.slider.activeIndex;\r\n\t\t},\r\n\t\tgetButtonStyle: function(button) {\r\n let styles;\r\n if ( button.backgroundColor ) {\r\n styles = {};\r\n styles.backgroundColor = button.backgroundColor;\r\n styles['--background-color'] = button.backgroundColor;\r\n }\r\n if ( button.textColor ) {\r\n if ( !styles ) styles = {};\r\n styles.textColor = button.textColor;\r\n styles['--text-color'] = button.textColor;\r\n }\r\n return styles;\r\n }\r\n\r\n\t},\r\n mounted() {\r\n\t\tthis.slidesRef = this.$refs.slider.querySelectorAll(\".swiper-slide\");\r\n\t\tthis.slidesCount = this.slidesRef.length;\r\n let sT = this.stepText;\r\n console.log(\"sT\",sT)\r\n\t\tif (this.settings.pagination && this.slidesCount > 1) {\r\n\t\t\tObject.assign(this.settings, {\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tel: this.$refs.pagination,\r\n type: \"custom\",\r\n renderCustom: function (swiper, current, total) {\r\n return `<strong>${sT}:</strong><small>${current < 10 ? '0'+current : current} / ${total < 10 ? '0'+total : total}</small>`;\r\n },\r\n }\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.settings);\r\n\r\n }\r\n}","let products = [\r\n\t{\r\n\t\timageSrc:\r\n\t\t\t\"/static/images/product/Fiber-barstool-w-back-75-woodbase-black-silk-leather-black-MUUTO-low-res.png\",\r\n\t\tproductName: \"Fiber Bar Stool\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product0\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/fiber-armchair-400w.png\",\r\n\t\tproductName: \"Fiber Armchair\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product1\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/Five_pouf_Remix_123-low-res.png\",\r\n\t\tproductName: \"Base Table Incredibly Nice\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product2\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/product-line-image-1.png\",\r\n\t\tproductName: \"Fiber Armchair\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product3\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc:\r\n\t\t\t\"/static/images/product/Fiber-barstool-w-back-75-woodbase-black-silk-leather-black-MUUTO-low-res.png\",\r\n\t\tproductName: \"Fiber Bar Stool\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product4\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/fiber-armchair-400w.png\",\r\n\t\tproductName: \"Fiber Armchair\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product5\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/Five_pouf_Remix_123-low-res.png\",\r\n\t\tproductName: \"Base Table\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product6\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/product-line-image-1.png\",\r\n\t\tproductName: \"Fiber Armchair With Deluxe Dowels\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product7\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/product-line-image-1.png\",\r\n\t\tproductName: \"Fiber Armchair\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product8\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/fiber-armchair-400w.png\",\r\n\t\tproductName: \"Fiber Armchair\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product9\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/Five_pouf_Remix_123-low-res.png\",\r\n\t\tproductName: \"Base Table\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product10\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/product-line-image-1.png\",\r\n\t\tproductName: \"Fiber Armchair With Deluxe Dowels\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product11\",\r\n\t\tproductHref: \"#product\"\r\n\t},\r\n\t{\r\n\t\timageSrc: \"/static/images/product/product-line-image-1.png\",\r\n\t\tproductName: \"Fiber Armchair\",\r\n\t\tproductVariant: \"Wood Base\",\r\n\t\tproductId: \"product12\",\r\n\t\tproductHref: \"#product\"\r\n\t}\r\n];\r\n\r\nexport default {\r\n\tchapters: [\r\n\t\t{\r\n\t\t\ttitle: \"\",\r\n\t\t\tstartIndex: 0,\r\n\t\t\tendIndex: 1,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Content slides\",\r\n\t\t\tstartIndex: 2,\r\n\t\t\tendIndex: 4,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Product slide 1-6\",\r\n\t\t\tstartIndex: 5,\r\n\t\t\tendIndex: 10,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Product slides 7-X\",\r\n\t\t\tstartIndex: 11,\r\n\t\t\tendIndex: 16,\r\n\t\t},\r\n\t],\r\n\tstories: [\r\n\t\t{\r\n\t\t\ttype: \"cover\",\r\n\t\t\ttitlePart1: \"meet\",\r\n\t\t\ttitlePart2: \"fiber\",\r\n\t\t\tdescription:\r\n\t\t\t\t\"<p>The unique shape of the Fiber Armchair marries friendly, embracing curves with an innovative wood fiber composite, giving the design its distinctly tactile texture.</p><p>Iskos-Berlin lorem ipsum dolor sit amet ...</p>\",\r\n\t\t\timageSrc: \"/static/images/product/master-product-image.jpg\",\r\n\t\t\ttextColor: \"#C5DBF3\",\r\n\t\t\tbackgroundColor: \"#3F8B69\",\r\n\t\t\tcursorBackgroundColor: \"#C5DBF3\",\r\n\t\t\tcursorTextColor: \"#3F8B69\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"cover\",\r\n\t\t\ttitlePart1: \"10 different models\",\r\n\t\t\tvideoSrc: \"/static/video/test3.mp4\",\r\n\t\t\ttextColor: \"#004B89\",\r\n\t\t\tbackgroundColor: \"#E6D8CB\",\r\n\t\t\tcursorBackgroundColor: \"#004B89\",\r\n\t\t\tcursorTextColor: \"#E6D8CB\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tisAssembled: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"content\",\r\n\t\t\ttitlePart1: \"words from\",\r\n\t\t\ttitlePart2: \"the\",\r\n\t\t\ttitlePart3: \"designer\",\r\n\t\t\tdescription:\r\n\t\t\t\t\"<p>“ One of the most difficult and noble disciplines of design is to create simple, well-functioning and almost ordinary objects that nevertheless have a strong identity. We designed the Fiber Conference Armchair to do just that. The chair’s sculptural language, paired with its wide seat, refuses to compromise on comfort and invites the user to be seated for hours on end. Through soft upholstery and the fixed cushion of its seat, the Fiber Conference armchair enhances the idea of grand comfort. The chair’s inner shell is made using recycled plastic for a conscious and innovative perspective on materials.â€</p>\",\r\n\t\t\timageSrc1: \"/static/images/designer-portrait-img1.jpg\",\r\n\t\t\tisDesigner: true,\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\ttextColor: \"#282828\",\r\n\t\t\ttextColor2: \"#FFFDE6\",\r\n\t\t\tbackgroundColor: \"#BA9BEE\",\r\n\t\t\tcursorBackgroundColor: \"#FFFDE6\",\r\n\t\t\tcursorTextColor: \"#282828\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"content\",\r\n\t\t\ttitlePart1: \"made of recycled plastic\",\r\n\t\t\tdescription:\r\n\t\t\t\t\"<p>The Fiber Chair Family, designed by Iskos-Berlin was born from a wish to make a forward-thinking take on the archetypal shell chair.<br>This was achieved by creating an innovative shell of plastic and wood fibers that makes for a soft inviting touch with a matte and tactile surface.</p>\",\r\n\t\t\timageSrc1: \"/static/images/hero-portrait.jpg\",\r\n\t\t\timageSrc2: \"/static/images/hero-portrait2.jpg\",\r\n\t\t\ttextColor: \"#E7E498\",\r\n\t\t\tbackgroundColor: \"#3F8B69\",\r\n\t\t\tcursorBackgroundColor: \"#E7E498\",\r\n\t\t\tcursorTextColor: \"#3F8B69\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"video\",\r\n\t\t\ttitlePart1: \"giving new life\",\r\n\t\t\ttitlePart2: \"to plastic waste\",\r\n\t\t\tdescription:\r\n\t\t\t\t\"<p>Muuto’s Fiber design by Copenhagen duo Iskos-Berlin came from a desire to not just create another plastic chair but rather bring something new to the design that resonated with how we perceive the world today and at the same time had a unique expression. This is the story of Fiber.</p>\",\r\n\t\t\tvideoPosterSrc: \"/static/images/meet-designer.jpg\",\r\n\t\t\t// videoId: \"258092024\",\r\n\t\t\tvideoSrc: \"/static/video/test2.mp4\",\r\n\t\t\tvideoDuration: \"2:30\",\r\n\t\t\tvideoTitlePart1: \"MUUTO LOREM IPSUM\",\r\n\t\t\tvideoTitlePart2: \"ISKOS BERLIN\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\ttextColor: \"#D64712\",\r\n\t\t\tbackgroundColor: \"#FFF19F\",\r\n\t\t\tcursorBackgroundColor: \"#D64712\",\r\n\t\t\tcursorTextColor: \"#FFF19F\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 1\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,1),\r\n\t\t\ttextColor: \"#3F8B69\",\r\n\t\t\tbackgroundColor: \"#C5DBF3\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 2\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,2),\r\n\t\t\ttextColor: \"red\",\r\n\t\t\tbackgroundColor: \"#C5DBF4\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 3\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,3),\r\n\t\t\ttextColor: \"blue\",\r\n\t\t\tbackgroundColor: \"#C5DBF5\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 4\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,4),\r\n\t\t\ttextColor: \"yellow\",\r\n\t\t\tbackgroundColor: \"#C5DBF6\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 5\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,5),\r\n\t\t\ttextColor: \"orange\",\r\n\t\t\tbackgroundColor: \"#C5DBF7\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 6\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,6),\r\n\t\t\ttextColor: \"magenta\",\r\n\t\t\tbackgroundColor: \"#C5DBF8\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 7\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,7),\r\n\t\t\ttextColor: \"firebrick\",\r\n\t\t\tbackgroundColor: \"#C5DBF9\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 8\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,8),\r\n\t\t\ttextColor: \"turquoise\",\r\n\t\t\tbackgroundColor: \"#C5DBFA\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Connect Modular\",\r\n\t\t\ttitlePart2: \"Sofa Family\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,9),\r\n\t\t\ttextColor: \"#3F8B69\",\r\n\t\t\tbackgroundColor: \"#C5DBFB\",\r\n\t\t\tcursorBackgroundColor: \"#3F8B69\",\r\n\t\t\tcursorTextColor: \"#C5DBFB\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 10\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,10),\r\n\t\t\ttextColor: \"firebrick\",\r\n\t\t\tbackgroundColor: \"#C5DBFC\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 11\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,11),\r\n\t\t\ttextColor: \"slateblue\",\r\n\t\t\tbackgroundColor: \"#C5DBFC\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members 12\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products.slice(0,12),\r\n\t\t\ttextColor: \"coral\",\r\n\t\t\tbackgroundColor: \"#C5DBFC\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttype: \"products\",\r\n\t\t\ttitlePart1: \"The Fiber\",\r\n\t\t\ttitlePart2: \"Members X\",\r\n\t\t\tbuttonHref: \"#\",\r\n\t\t\tbuttonLabel: \"Go explore\",\r\n\t\t\tproductList: products,\r\n\t\t\ttextColor: \"steelblue\",\r\n\t\t\tbackgroundColor: \"#C5DBFC\",\r\n\t\t\tcursorBackgroundColor: \"#8844FF\",\r\n\t\t\tcursorTextColor: \"#005500\",\r\n\t\t},\r\n\t],\r\n};\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"story-slide-cover\",\n class: { \"story-slide-cover--assembled\": _vm.isAssembled },\n style: _vm.slideStyle,\n },\n [\n _vm.imageSrc\n ? _c(\"img\", {\n staticClass: \"story-slide-cover__media\",\n attrs: { src: _vm.imageSrc },\n })\n : _vm.videoSrc\n ? _c(\"video\", {\n staticClass: \"story-slide-cover__media\",\n attrs: {\n autoplay: \"\",\n playsinline: \"\",\n muted: \"\",\n loop: \"\",\n preload: \"auto\",\n src: _vm.videoSrc,\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"story-slide-cover__content\" }, [\n _c(\"h2\", { staticClass: \"story-slide-cover__title\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.titlePart1))]),\n _vm._v(\" \"),\n _vm.titlePart2\n ? _c(\"span\", [_vm._v(_vm._s(_vm.titlePart2))])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isAssembled && _vm.buttonHref && _vm.buttonText\n ? _c(\n \"a\",\n {\n staticClass: \"button button--secondary button--custom-colors\",\n style: _vm.buttonStyle,\n attrs: { href: _vm.buttonHref },\n },\n [\n _c(\"span\", { staticClass: \"text\" }, [\n _vm._v(_vm._s(_vm.buttonText)),\n ]),\n ]\n )\n : _vm._e(),\n ]),\n _vm._v(\" \"),\n _vm.description\n ? _c(\"div\", { staticClass: \"story-slide-cover__description\" }, [\n _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.description) } }),\n _vm._v(\" \"),\n !_vm.isAssembled && _vm.buttonHref && _vm.buttonText\n ? _c(\n \"a\",\n {\n staticClass:\n \"button button--secondary button--custom-colors\",\n style: _vm.buttonStyle,\n attrs: { href: _vm.buttonHref },\n },\n [\n _c(\"span\", { staticClass: \"text\" }, [\n _vm._v(_vm._s(_vm.buttonText)),\n ]),\n ]\n )\n : _vm._e(),\n ])\n : _vm._e(),\n ]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\n\r\nimport { inView } from \"../../../basics/js/methods/inView/inView\";\r\n\r\nexport default {\r\n name: \"story-slide\",\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n slideIndex: {\r\n type: Number,\r\n default: 0,\r\n }\r\n },\r\n computed: {\r\n slideStyle() {\r\n\t\t\tif ( !this.item ) return {};\r\n const { textColor, textColor2, backgroundColor } = this.item;\r\n return {\r\n \"--story-slider-text1-color\": textColor || null,\r\n\t\t\t\t\"--story-slider-text2-color\": textColor2 || textColor,\r\n\t\t\t\t\"--story-slider-bg-color\": backgroundColor || null,\r\n\t\t\t};\r\n\t\t},\r\n buttonStyle() {\r\n if ( !this.item ) return {};\r\n const { textColor, textColor2, backgroundColor } = this.item;\r\n return {\r\n \"--custom-color-1\": textColor2 || textColor,\r\n \"--custom-color-2\": backgroundColor,\r\n \"--custom-color-3\": textColor2 || textColor,\r\n \"--custom-color-4\": textColor2 || textColor\r\n };\r\n },\r\n buttonHref() {\r\n return this.item && this.item.buttonHref;\r\n },\r\n buttonText() {\r\n return this.item && this.item.buttonLabel;\r\n },\r\n },\r\n\tmounted() {\r\n inView({\r\n\t\t\tel: this.$el,\r\n\t\t\tthreshold: 0.5\r\n\t\t});\r\n\t}\r\n};\r\n</script>\r\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./story-slide.vue?vue&type=script&lang=js&\"\nexport * from \"./story-slide.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2c153212')) {\n api.createRecord('2c153212', component.options)\n } else {\n api.reload('2c153212', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"src/components/story-slider/partials/story-slide.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-cover.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-cover.vue?vue&type=script&lang=js&\"","<script>\r\nimport StorySlide from \"../story-slide.vue\";\r\n\r\nexport default {\r\n name: \"story-slide-cover\",\r\n extends: StorySlide,\r\n computed: {\r\n imageSrc() {\r\n return this.item && this.item.imageSrc;\r\n },\r\n videoSrc() {\r\n return this.item && this.item.videoSrc;\r\n },\r\n titlePart1() {\r\n return this.item && this.item.titlePart1;\r\n },\r\n titlePart2() {\r\n return this.item && this.item.titlePart2;\r\n },\r\n description() {\r\n return this.item && this.item.description;\r\n },\r\n isAssembled() {\r\n return this.item && this.item.isAssembled;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"story-slide-cover\" :style=\"slideStyle\" :class=\"{'story-slide-cover--assembled': isAssembled}\">\r\n <img v-if=\"imageSrc\" class=\"story-slide-cover__media\" :src=\"imageSrc\" />\r\n <video v-else-if=\"videoSrc\" class=\"story-slide-cover__media\" autoplay playsinline muted loop preload=\"auto\" :src=\"videoSrc\" />\r\n\r\n <div class=\"story-slide-cover__content\">\r\n <h2 class=\"story-slide-cover__title\">\r\n <span>{{ titlePart1 }}</span>\r\n <span v-if=\"titlePart2\">{{ titlePart2 }}</span>\r\n\r\n <a v-if=\"isAssembled && buttonHref && buttonText\" :href=\"buttonHref\" class=\"button button--secondary button--custom-colors\" :style=\"buttonStyle\">\r\n <span class=\"text\">{{buttonText}}</span>\r\n </a>\r\n </h2>\r\n\r\n <div v-if=\"description\" class=\"story-slide-cover__description\">\r\n <div v-html=\"description\"></div>\r\n\r\n <a v-if=\"!isAssembled && buttonHref && buttonText\" :href=\"buttonHref\" class=\"button button--secondary button--custom-colors\" :style=\"buttonStyle\">\r\n <span class=\"text\">{{buttonText}}</span>\r\n </a>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n</template>\r\n","import { render, staticRenderFns } from \"./story-slide-cover.vue?vue&type=template&id=b196cca0&\"\nimport script from \"./story-slide-cover.vue?vue&type=script&lang=js&\"\nexport * from \"./story-slide-cover.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b196cca0')) {\n api.createRecord('b196cca0', component.options)\n } else {\n api.reload('b196cca0', component.options)\n }\n module.hot.accept(\"./story-slide-cover.vue?vue&type=template&id=b196cca0&\", function () {\n api.rerender('b196cca0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/story-slider/partials/story-slide-cover/story-slide-cover.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"story-slide-content\",\n class: { \"story-slide-content--designer\": _vm.isDesigner },\n style: _vm.slideStyle,\n },\n [\n _c(\"div\", { staticClass: \"story-slide-content__content\" }, [\n _vm.imageSrc1\n ? _c(\"img\", {\n staticClass:\n \"story-slide-content__media story-slide-content__media--1\",\n attrs: { src: _vm.imageSrc1 },\n })\n : _vm.videoSrc1\n ? _c(\"video\", {\n staticClass:\n \"story-slide-content__media story-slide-content__media--1\",\n attrs: {\n autoplay: \"\",\n playsinline: \"\",\n muted: \"\",\n loop: \"\",\n preload: \"auto\",\n src: _vm.videoSrc1,\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.imageSrc2\n ? _c(\"img\", {\n staticClass:\n \"story-slide-content__media story-slide-content__media--2\",\n attrs: { src: _vm.imageSrc2 },\n })\n : _vm.videoSrc2\n ? _c(\"video\", {\n staticClass:\n \"story-slide-content__media story-slide-content__media--2\",\n attrs: {\n autoplay: \"\",\n playsinline: \"\",\n muted: \"\",\n loop: \"\",\n preload: \"auto\",\n src: _vm.videoSrc2,\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"h2\", { staticClass: \"story-slide-content__title\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.titlePart1))]),\n _vm._v(\" \"),\n _vm.titlePart2\n ? _c(\"span\", [_vm._v(_vm._s(_vm.titlePart2))])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.titlePart3\n ? _c(\"span\", [_vm._v(_vm._s(_vm.titlePart3))])\n : _vm._e(),\n ]),\n _vm._v(\" \"),\n _vm.description\n ? _c(\"div\", { staticClass: \"story-slide-content__description\" }, [\n _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.description) } }),\n _vm._v(\" \"),\n _vm.buttonHref && _vm.buttonText\n ? _c(\n \"a\",\n {\n staticClass: \"link link--persistent\",\n attrs: { href: _vm.buttonHref },\n },\n [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.buttonText) + \"\\n\\t\\t\\t\")]\n )\n : _vm._e(),\n ])\n : _vm._e(),\n ]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport StorySlide from \"../story-slide.vue\";\r\n\r\nexport default {\r\n\tname: \"story-slide-content\",\r\n\textends: StorySlide,\r\n\tcomputed: {\r\n\t\timageSrc1() {\r\n\t\t\treturn this.item && this.item.imageSrc1;\r\n\t\t},\r\n\t\tvideoSrc1() {\r\n\t\t\treturn this.item && this.item.videoSrc1;\r\n\t\t},\r\n\t\timageSrc2() {\r\n\t\t\treturn this.item && this.item.imageSrc2;\r\n\t\t},\r\n\t\tvideoSrc2() {\r\n\t\t\treturn this.item && this.item.videoSrc2;\r\n\t\t},\r\n\r\n\t\ttitlePart1() {\r\n\t\t\treturn this.item && this.item.titlePart1;\r\n\t\t},\r\n\t\ttitlePart2() {\r\n\t\t\treturn this.item && this.item.titlePart2;\r\n\t\t},\r\n\t\ttitlePart3() {\r\n\t\t\treturn this.item && this.item.titlePart3;\r\n\t\t},\r\n\r\n\t\tdescription() {\r\n\t\t\treturn this.item && this.item.description;\r\n\t\t},\r\n\t\tisDesigner() {\r\n\t\t\treturn this.item && this.item.isDesigner;\r\n\t\t}\r\n\t}\r\n};\r\n</script>\r\n\r\n\r\n<template>\r\n\t<div class=\"story-slide-content\" :style=\"slideStyle\" :class=\"{ 'story-slide-content--designer': isDesigner }\">\r\n\t\t<div class=\"story-slide-content__content\">\r\n\r\n\t\t\t<img v-if=\"imageSrc1\" class=\"story-slide-content__media story-slide-content__media--1\" :src=\"imageSrc1\" />\r\n\t\t\t<video v-else-if=\"videoSrc1\" class=\"story-slide-content__media story-slide-content__media--1\" autoplay\r\n\t\t\t\tplaysinline muted loop preload=\"auto\" :src=\"videoSrc1\" />\r\n\r\n\t\t\t<img v-if=\"imageSrc2\" class=\"story-slide-content__media story-slide-content__media--2\" :src=\"imageSrc2\" />\r\n\t\t\t<video v-else-if=\"videoSrc2\" class=\"story-slide-content__media story-slide-content__media--2\" autoplay\r\n\t\t\t\tplaysinline muted loop preload=\"auto\" :src=\"videoSrc2\" />\r\n\r\n\r\n\t\t\t<h2 class=\"story-slide-content__title\">\r\n\t\t\t\t<span>{{ titlePart1 }}</span>\r\n\t\t\t\t<span v-if=\"titlePart2\">{{ titlePart2 }}</span>\r\n\t\t\t\t<span v-if=\"titlePart3\">{{ titlePart3 }}</span>\r\n\t\t\t</h2>\r\n\r\n\t\t\t<div v-if=\"description\" class=\"story-slide-content__description\">\r\n\t\t\t\t<div v-html=\"description\"></div>\r\n\r\n\t\t\t\t<a v-if=\"buttonHref && buttonText\" :href=\"buttonHref\" class=\"link link--persistent\">\r\n\t\t\t\t\t{{ buttonText }}\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-content.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-content.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./story-slide-content.vue?vue&type=template&id=0e16ee98&\"\nimport script from \"./story-slide-content.vue?vue&type=script&lang=js&\"\nexport * from \"./story-slide-content.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0e16ee98')) {\n api.createRecord('0e16ee98', component.options)\n } else {\n api.reload('0e16ee98', component.options)\n }\n module.hot.accept(\"./story-slide-content.vue?vue&type=template&id=0e16ee98&\", function () {\n api.rerender('0e16ee98', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/story-slider/partials/story-slide-content/story-slide-content.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"story-slide-video\", style: _vm.slideStyle },\n [\n _c(\"div\", { staticClass: \"story-slide-video__content\" }, [\n _c(\"h2\", { staticClass: \"story-slide-video__title\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.titlePart1))]),\n _vm._v(\" \"),\n _vm.titlePart2\n ? _c(\"span\", [_vm._v(_vm._s(_vm.titlePart2))])\n : _vm._e(),\n ]),\n _vm._v(\" \"),\n _vm.description\n ? _c(\"div\", { staticClass: \"story-slide-video__description\" }, [\n _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.description) } }),\n _vm._v(\" \"),\n _vm.buttonHref && _vm.buttonText\n ? _c(\n \"a\",\n {\n staticClass: \"link link--persistent\",\n attrs: { href: _vm.buttonHref },\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.buttonText) + \"\\n\\t\\t\\t\\t\"\n ),\n ]\n )\n : _vm._e(),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"story-slide-video__player video-player video-player--vimeo\",\n },\n [\n _c(\"div\", { staticClass: \"video-player__inner\" }, [\n _vm.videoSrc\n ? _c(\n \"button\",\n {\n staticClass: \"video-player__start\",\n on: { click: _vm.playClickHandler },\n },\n [\n _c(\"span\", { staticClass: \"icon\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"byline\" }, [\n _c(\"div\", [_vm._v(_vm._s(_vm.videoTitlePart1))]),\n _vm._v(\" \"),\n _c(\"div\", [_vm._v(_vm._s(_vm.videoTitlePart2))]),\n ]),\n _vm._v(\" \"),\n _c(\"h5\", [_vm._v(_vm._s(_vm.videoDuration))]),\n _vm._v(\" \"),\n _vm.videoPosterSrc\n ? _c(\"img\", {\n attrs: { src: _vm.videoPosterSrc, alt: \"poster\" },\n })\n : _vm._e(),\n ]\n )\n : _c(\"div\", { staticClass: \"video-player__start\" }, [\n _vm.videoPosterSrc\n ? _c(\"img\", {\n attrs: { src: _vm.videoPosterSrc, alt: \"poster\" },\n })\n : _vm._e(),\n ]),\n ]),\n ]\n ),\n ]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport { vueVimeoPlayer } from 'vue-vimeo-player';\r\nimport { mapActions } from \"vuex\";\r\n\r\nimport StorySlide from \"../story-slide.vue\";\r\n\r\nexport default {\r\n name: \"story-slide-video\",\r\n extends: StorySlide,\r\n components: {\r\n vueVimeoPlayer\r\n },\r\n props: {\r\n activeIndex: {\r\n type: Number,\r\n default: 0\r\n }\r\n },\r\n computed: {\r\n titlePart1() {\r\n return this.item && this.item.titlePart1;\r\n },\r\n titlePart2() {\r\n return this.item && this.item.titlePart2;\r\n },\r\n description() {\r\n return this.item && this.item.description;\r\n },\r\n videoSrc() {\r\n return this.item && this.item.videoSrc;\r\n },\r\n videoTitlePart1() {\r\n return this.item && this.item.videoTitlePart1;\r\n },\r\n videoTitlePart2() {\r\n return this.item && this.item.videoTitlePart2;\r\n },\r\n videoDuration() {\r\n return this.item && this.item.videoDuration;\r\n },\r\n videoPosterSrc() {\r\n return this.item && this.item.videoPosterSrc;\r\n }\r\n },\r\n data() {\r\n return {\r\n playerReady: false\r\n\t\t}\r\n },\r\n methods: {\r\n\t\t...mapActions([\"setActiveVideo\"]),\r\n playClickHandler() {\r\n this.setActiveVideo({ type: \"html\", value: this.videoSrc });\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"story-slide-video\" :style=\"slideStyle\">\r\n <div class=\"story-slide-video__content\">\r\n\r\n <h2 class=\"story-slide-video__title\">\r\n <span>{{ titlePart1 }}</span>\r\n <span v-if=\"titlePart2\">{{ titlePart2 }}</span>\r\n </h2>\r\n\r\n <div v-if=\"description\" class=\"story-slide-video__description\">\r\n <div v-html=\"description\"></div>\r\n\r\n\r\n\t\t\t\t<a v-if=\"buttonHref && buttonText\" :href=\"buttonHref\" class=\"link link--persistent\">\r\n\t\t\t\t\t{{ buttonText }}\r\n\t\t\t\t</a>\r\n </div>\r\n\r\n <div class=\"story-slide-video__player video-player video-player--vimeo\">\r\n <div class=\"video-player__inner\">\r\n <button v-if=\"videoSrc\" class=\"video-player__start\" v-on:click=\"playClickHandler\">\r\n <span class=\"icon\"></span>\r\n <div class=\"byline\">\r\n <div>{{ videoTitlePart1 }}</div>\r\n <div>{{ videoTitlePart2 }}</div>\r\n </div>\r\n <h5>{{ videoDuration }}</h5>\r\n\r\n <img v-if=\"videoPosterSrc\" :src=\"videoPosterSrc\" alt=\"poster\" />\r\n </button>\r\n\t\t\t\t\t<div class=\"video-player__start\" v-else>\r\n\t\t\t\t\t\t<img v-if=\"videoPosterSrc\" :src=\"videoPosterSrc\" alt=\"poster\" />\r\n\t\t\t\t\t</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-video.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-video.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./story-slide-video.vue?vue&type=template&id=e6cd2390&\"\nimport script from \"./story-slide-video.vue?vue&type=script&lang=js&\"\nexport * from \"./story-slide-video.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('e6cd2390')) {\n api.createRecord('e6cd2390', component.options)\n } else {\n api.reload('e6cd2390', component.options)\n }\n module.hot.accept(\"./story-slide-video.vue?vue&type=template&id=e6cd2390&\", function () {\n api.rerender('e6cd2390', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/story-slider/partials/story-slide-video/story-slide-video.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"story-slide-products\", style: _vm.slideStyle },\n [\n _c(\"div\", { staticClass: \"story-slide-products__content\" }, [\n _c(\"h2\", { staticClass: \"story-slide-products__title\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.titlePart1))]),\n _vm._v(\" \"),\n _vm.titlePart2\n ? _c(\"span\", [_vm._v(_vm._s(_vm.titlePart2))])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.buttonHref && _vm.buttonText\n ? _c(\n \"a\",\n {\n staticClass: \"button button--secondary button--custom-colors\",\n style: _vm.buttonStyle,\n attrs: { href: _vm.buttonHref },\n },\n [\n _c(\"span\", { staticClass: \"text\" }, [\n _vm._v(_vm._s(_vm.buttonText)),\n ]),\n ]\n )\n : _vm._e(),\n ]),\n _vm._v(\" \"),\n _c(\n \"nav\",\n {\n staticClass: \"story-slide-products__list\",\n class:\n \"story-slide-products__list--items-\" +\n (_vm.productList.length <= 12 ? _vm.productList.length : \"X\"),\n },\n _vm._l(_vm.productList, function (product) {\n return _c(\n \"a\",\n { key: product.productId, attrs: { href: product.productHref } },\n [\n _c(\"figure\", [_c(\"img\", { attrs: { src: product.imageSrc } })]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"h3\", [_vm._v(_vm._s(product.productName))]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(_vm._s(product.productVariant)),\n _vm.productsHaveVariants\n ? _c(\"span\", [_vm._v(\" \")])\n : _vm._e(),\n ]),\n ]),\n ]\n )\n }),\n 0\n ),\n ]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport StorySlide from \"../story-slide.vue\";\r\n\r\nexport default {\r\n name: \"story-slide-products\",\r\n extends: StorySlide,\r\n computed: {\r\n titlePart1() {\r\n return this.item && this.item.titlePart1;\r\n },\r\n titlePart2() {\r\n return this.item && this.item.titlePart2;\r\n },\r\n productList() {\r\n return this.item && this.item.productList;\r\n },\r\n\t\tproductsHaveVariants() {\r\n\t\t\t//test for item in productlist with valid productVariant value\r\n\t\t\treturn this.item && this.item.productList && this.item.productList.some(item => item.productVariant);\r\n\t\t},\r\n },\r\n};\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"story-slide-products\" :style=\"slideStyle\">\r\n\r\n <div class=\"story-slide-products__content\">\r\n\r\n <h2 class=\"story-slide-products__title\">\r\n <span>{{ titlePart1 }}</span>\r\n <span v-if=\"titlePart2\">{{ titlePart2 }}</span>\r\n\r\n <a v-if=\"buttonHref && buttonText\" :href=\"buttonHref\"\r\n class=\"button button--secondary button--custom-colors\" :style=\"buttonStyle\">\r\n <span class=\"text\">{{ buttonText }}</span>\r\n </a>\r\n </h2>\r\n\r\n <nav class=\"story-slide-products__list\" :class=\"'story-slide-products__list--items-' + (productList.length <= 12 ? productList.length : 'X')\">\r\n <a v-for=\"product in productList\" :key=\"product.productId\" :href=\"product.productHref\">\r\n <figure>\r\n <img :src=\"product.imageSrc\" />\r\n </figure>\r\n <div>\r\n <h3>{{ product.productName }}</h3>\r\n <p>{{ product.productVariant }}<span v-if=\"productsHaveVariants\"> </span></p>\r\n </div>\r\n </a>\r\n </nav>\r\n </div>\r\n </div>\r\n</template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-products.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./story-slide-products.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./story-slide-products.vue?vue&type=template&id=ecc3dbb0&\"\nimport script from \"./story-slide-products.vue?vue&type=script&lang=js&\"\nexport * from \"./story-slide-products.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('ecc3dbb0')) {\n api.createRecord('ecc3dbb0', component.options)\n } else {\n api.reload('ecc3dbb0', component.options)\n }\n module.hot.accept(\"./story-slide-products.vue?vue&type=template&id=ecc3dbb0&\", function () {\n api.rerender('ecc3dbb0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/story-slider/partials/story-slide-products/story-slide-products.vue\"\nexport default component.exports","import Swiper from \"swiper/dist/js/swiper.js\";\r\n\r\nimport mockData from \"./mock/story-slider-mock\";\r\n\r\nimport StorySlideCover from \"./partials/story-slide-cover/story-slide-cover.vue\";\r\nimport StorySlideContent from \"./partials/story-slide-content/story-slide-content.vue\";\r\nimport StorySlideVideo from \"./partials/story-slide-video/story-slide-video.vue\";\r\nimport StorySlideProducts from \"./partials/story-slide-products/story-slide-products.vue\";\r\n\r\nimport StorySlide from \"./partials/story-slide.vue\";\r\n\r\n\r\nexport default {\r\n\tname: \"story-slider\",\r\n\tcomponents: {\r\n\t\tStorySlide,\r\n\t\tStorySlideCover,\r\n\t\tStorySlideContent,\r\n\t\tStorySlideVideo,\r\n\t\tStorySlideProducts,\r\n\t},\r\n\tprops: {\r\n\t\tstories: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn mockData.stories;\r\n\t\t\t},\r\n\t\t},\r\n\t\tchapters: {\r\n\t\t\ttype: Array,\r\n\t\t\tdefault() {\r\n\t\t\t\treturn mockData.chapters;\r\n\t\t\t},\r\n\t\t},\r\n\t\tdragText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Drag\",\r\n\t\t},\r\n\t\tuseDragCursor: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tuseAutoPlay: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tslider: null,\r\n\t\t\tactiveChapter: null,\r\n\r\n\t\t\tactiveStoryIndex: null,\r\n\t\t\tactiveStoryItem: null,\r\n\r\n\t\t\tshowPagination: false,\r\n\t\t\tshowNavigation: true,\r\n\t\t\tautoplayProgress: 0,\r\n\t\t\tautoplayStarttime: Date.now(),\r\n\r\n\t\t\tsliderSettings: {\r\n\t\t\t\tslidesPerView: 1,\r\n\t\t\t\tspaceBetween: 0,\r\n\t\t\t\tcenteredSlides: false,\r\n\t\t\t\tautoHeight: false,\r\n\t\t\t\tspeed: 450,\r\n\t\t\t\t// autoplay: {\r\n\t\t\t\t// \tdelay: 4000,\r\n\t\t\t\t// },\r\n\t\t\t\tkeyboard: {\r\n\t\t\t\t\tenabled: true,\r\n\t\t\t\t\tonlyInViewport: true,\r\n\t\t\t\t},\r\n\t\t\t\ton: {\r\n\t\t\t\t\tslideChange: this.slideChangeHandler.bind(this),\r\n\t\t\t\t},\r\n\t\t\t\tpreloadImages: true,\r\n\t\t\t\twatchOverflow: true,\r\n\t\t\t\ttouchStartPreventDefault: false, //\"thanks\" emil\r\n\t\t\t},\r\n\r\n\t\t\tcursorX: 0,\r\n\t\t\tcursorY: 0,\r\n\r\n\t\t\tcursorTargetX: 0,\r\n\t\t\tcursorTargetY: 0,\r\n\r\n\t\t\tcursorActive: false,\r\n\r\n\t\t\tcursorFocused: false,\r\n\r\n\t\t\tnavButtonsVisible: false,\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\tslideStyle() {\r\n\t\t\tif (this.activeStoryItem === null) return {};\r\n\t\t\t//get story colors, add as custom props\r\n\t\t\tconst { textColor, textColor2, backgroundColor, cursorTextColor, cursorBackgroundColor } = this.activeStoryItem;\r\n\t\t\treturn {\r\n\t\t\t\t\"--story-slider-text1-color\": textColor,\r\n\t\t\t\t\"--story-slider-text2-color\": textColor2 || null,\r\n\t\t\t\t\"--story-slider-bg-color\": backgroundColor,\r\n\t\t\t\t\"--story-slider-cursor-text-color\": cursorTextColor,\r\n\t\t\t\t\"--story-slider-cursor-bg-color\": cursorBackgroundColor,\r\n\t\t\t\t\"--story-slider-active-bullet-progress\": this.autoplayProgress,\r\n\t\t\t};\r\n\t\t},\r\n\t\tcursorStyle() {\r\n\t\t\treturn {\r\n\t\t\t\t\"--cursor-y\": this.cursorY + \"px\",\r\n\t\t\t\t\"--cursor-x\": this.cursorX + \"px\",\r\n\t\t\t};\r\n\t\t},\r\n\t\tfooterClass() {\r\n\t\t\treturn {\r\n\t\t\t\t\"story-slider__footer--nav-visible\": this.navButtonsVisible,\r\n\t\t\t};\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\tslideChangeHandler() {\r\n\t\t\tconst activeIndex = this.slider.activeIndex;\r\n\t\t\tthis.activeChapter = this.chapters.find((chapter) => {\r\n\t\t\t\treturn chapter.startIndex <= activeIndex && chapter.endIndex >= activeIndex;\r\n\t\t\t});\r\n\t\t\tthis.activeStoryIndex = activeIndex;\r\n\t\t\tthis.activeStoryItem = this.stories[activeIndex];\r\n\t\t\tthis.autoplayStarttime = Date.now();\r\n\t\t\tthis.autoplayProgress = this.useAutoPlay ? 0 : 1;\r\n\t\t},\r\n\t\tchapterClickHandler(index) {\r\n\t\t\tthis.slider.slideTo(index);\r\n\t\t},\r\n\t\tlerp(start, end, percentage) {\r\n\t\t\tconst differenceBetween = end - start;\r\n\t\t\tconst lerpedValue = differenceBetween * percentage;\r\n\t\t\treturn lerpedValue;\r\n\t\t},\r\n\t\tgetOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\r\n\t\t\treturn actualOffset;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.activeChapter = this.chapters[0];\r\n\r\n\t\tthis.activeStoryIndex = 0;\r\n\t\tthis.activeStoryItem = this.stories[0];\r\n\r\n\t\tthis.sliderSettings.pagination = {\r\n\t\t\tel: this.$refs.pagination,\r\n\t\t\tclickable: true,\r\n\t\t};\r\n\t\tthis.sliderSettings.navigation = {\r\n\t\t\tnextEl: this.$refs.nextButton,\r\n\t\t\tprevEl: this.$refs.prevButton,\r\n\t\t};\r\n\r\n\t\tthis.slider = new Swiper(this.$refs.slider, this.sliderSettings);\r\n\r\n\t\tif (this.useDragCursor) {\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mousemove\", (e) => {\r\n\t\t\t\tthis.cursorTargetX = e.pageX;\r\n\t\t\t\tthis.cursorTargetY = e.pageY - this.getOffsetTopRecursive(this.$el);\r\n\t\t\t});\r\n\r\n\t\t\t//same function but for drag\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"touchmove\", (e) => {\r\n\t\t\t\tthis.cursorTargetX = e.pageX;\r\n\t\t\t\tthis.cursorTargetY = e.pageY - this.getOffsetTopRecursive(this.$el);\r\n\t\t\t});\r\n\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mouseenter\", () => {\r\n\t\t\t\tthis.cursorActive = true;\r\n\t\t\t});\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mouseover\", (e) => {\r\n\t\t\t\t// hide cursor if mouse is over button or link\r\n\t\t\t\tif (e.target.tagName === \"BUTTON\" || e.target.tagName === \"A\") {\r\n\t\t\t\t\tthis.cursorActive = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.cursorActive = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mouseleave\", () => {\r\n\t\t\t\tthis.cursorActive = false;\r\n\t\t\t});\r\n\t\t}\r\n\t\t//else make it so when a user mouse enters the slider, the navButtonsVisible is set to true and if the mouse stands still for 1 sec, the navButtonsVisible is set to false\r\n\t\telse {\r\n\t\t\tlet timeoutHandle = setTimeout(() => {\r\n\t\t\t\tthis.navButtonsVisible = false;\r\n\t\t\t}, 0);\r\n\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mouseleave\", () => {\r\n\t\t\t\tthis.navButtonsVisible = false;\r\n\t\t\t});\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mousemove\", () => {\r\n\t\t\t\tthis.navButtonsVisible = true;\r\n\t\t\t\tclearTimeout(timeoutHandle);\r\n\t\t\t\ttimeoutHandle = setTimeout(() => {\r\n\t\t\t\t\tthis.navButtonsVisible = false;\r\n\t\t\t\t}, 1500);\r\n\t\t\t});\r\n\t\t\tthis.$refs[\"cursor-target\"].addEventListener(\"mouseup\", () => {\r\n\t\t\t\tthis.navButtonsVisible = true;\r\n\t\t\t\tclearTimeout(timeoutHandle);\r\n\t\t\t\ttimeoutHandle = setTimeout(() => {\r\n\t\t\t\t\tthis.navButtonsVisible = false;\r\n\t\t\t\t}, 1500);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//run on all animation frames\r\n\t\tconst loop = () => {\r\n\t\t\tthis.cursorX += this.lerp(this.cursorX, this.cursorTargetX, 0.2);\r\n\t\t\tthis.cursorY += this.lerp(this.cursorY, this.cursorTargetY, 0.2);\r\n\r\n\t\t\t// request the next animation frame\r\n\t\t\trequestAnimationFrame(loop);\r\n\r\n\t\t\t// set autoplay progress using autoplayStarttime\r\n\t\t\tif (this.slider.autoplay.running) {\r\n\t\t\t\tthis.autoplayProgress = (Date.now() - this.autoplayStarttime) / this.sliderSettings.autoplay.delay;\r\n\t\t\t\tif (this.autoplayProgress > 1) this.autoplayProgress = 1;\r\n\t\t\t\tif (this.autoplayProgress < 0) this.autoplayProgress = 0;\r\n\t\t\t} else {\r\n\t\t\t\tthis.autoplayProgress = 1;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\trequestAnimationFrame(loop);\r\n\t},\r\n};\r\n","import { mapState, mapActions } from 'vuex';\r\nimport { rInterval } from \"./../../basics/js/utils\";\r\n\r\n\r\nimport SeriesOverview from \"./series-overview/series-overview\";\r\nimport AnimatedHero from \"./animated-hero/animated-hero\";\r\nimport IntroductionBlock from \"./introduction-block/introduction-block\";\r\nimport DesignExplorer from \"./design-explorer/design-explorer\";\r\nimport PropertyExplorer from \"./property-explorer/property-explorer\";\r\nimport InspirationGallery from \"./inspiration-gallery/inspiration-gallery\";\r\nimport MaterialExplorer from \"./material-explorer/material-explorer\";\r\nimport InspirationSlider from \"./inspiration-slider/inspiration-slider\";\r\nimport ScrollRotator from \"./scroll-rotator/scroll-rotator\";\r\nimport ModelExplorer from \"./model-explorer/model-explorer\";\r\nimport MaterialOverlay from \"./material-overlay/material-overlay\";\r\nimport ExplanationOverlay from \"./explanation-overlay/explanation-overlay\";\r\nimport ShortcutsBar from \"./shortcuts-bar/shortcuts-bar\";\r\nimport ShortcutsOverlay from \"./shortcuts-overlay/shortcuts-overlay\";\r\nimport ArBanner from \"./ar-banner/ar-banner\";\r\nimport StepGuide from '../../components/step-guide/step-guide';\r\nimport ImageProductsButton from \"../image-products/image-products-button\";\r\nimport StorySlider from \"../story-slider/story-slider\";\r\nimport AccordionGroup from \"../accordion/accordion-group\";\r\n\r\n\r\nexport default {\r\n\tname: \"experience-scroll\",\r\n\tcomponents: {\r\n\t\tAnimatedHero,\r\n\t\tIntroductionBlock,\r\n\t\tPropertyExplorer,\r\n\t\tDesignExplorer,\r\n\t\tSeriesOverview,\r\n\t\tMaterialExplorer,\r\n\t\tMaterialOverlay,\r\n\t\tInspirationSlider,\r\n\t\tScrollRotator,\r\n\t\tModelExplorer,\r\n\t\tInspirationGallery,\r\n\t\tExplanationOverlay,\r\n\t\tShortcutsOverlay,\r\n\t\tShortcutsBar,\r\n\t\tArBanner,\r\n\t\tStepGuide,\r\n\t\tImageProductsButton,\r\n\t\tStorySlider,\r\n\t\tAccordionGroup\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\toffsetTop: 0,\r\n\t\t\toldScrollY: 0,\r\n\t\t\tresizeTimeout: 0,\r\n\t\t\tscrollPosition: 0,\r\n\t\t\tsectionProps: [],\r\n\t\t\tsections: [],\r\n\t\t\tsectionTriggerPoint: 0.4, //show section, when 40% is visible\r\n\t\t\tmarginOffset: 0\r\n\t\t};\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tbodyFixed: state => state.bodyFixed,\r\n windowH: state => state.windowH,\r\n windowW: state => state.windowW,\r\n\t\t\ttriggerExperienceResize: state => state.triggerExperienceResize,\r\n\t\t}),\r\n\t},\r\n\twatch: {\r\n windowH: function() {\r\n this.resizeListener();\r\n },\r\n windowW: function() {\r\n this.resizeListener();\r\n },\r\n\t\tbodyFixed(state) {\r\n\t\t\tif (state) {\r\n\t\t\t\tthis.sections.forEach((section) => {\r\n\t\t\t\t\tsection.classList.add(\"is-active\");\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.scrollListener();\r\n\t\t\t}\r\n\t\t},\r\n\t\ttriggerExperienceResize(newVal) {\r\n\t\t\tif (newVal === true) {\r\n\t\t\t\tthis.resizeListener();\r\n\t\t\t\tthis.setTriggerExperienceResize(false);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n \"setTriggerExperienceResize\"\r\n\t\t]),\r\n\r\n\t\tresizeListener: function () {\r\n\t\t\t\r\n\t\t\tif (this.sections && this.sections.length > 0) {\r\n\t\t\t\t\r\n\t\t\t\tthis.marginOffset = window.innerHeight * (1 - this.sectionTriggerPoint);\r\n\t\t\t\t\r\n\t\t\t\tthis.$refs.container.style.setProperty(\"height\", \"auto\");\r\n\t\t\t\tclearTimeout(this.resizeTimeout);\r\n\t\t\t\t\r\n\t\t\t\tthis.resizeTimeout = setTimeout(() => {\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.offsetTop = this.$el.offsetTop;\r\n\t\t\t\t\t// console.log(\" this.offsetTop???\", this.offsetTop)\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.sectionProps = this.sections.map((section) => {\r\n\t\t\t\t\t\treturn { y: section.offsetTop, h: section.offsetHeight };\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t// this.sectionProps[0].y += this.marginOffset;\r\n\r\n\t\t\t\t\t// console.table(this.sectionProps);\r\n\t\t\t\t\tthis.scrollListener();\r\n\t\t\t\t}, 2000);\r\n\t\t\t}\r\n\t\t},\r\n\t\tscrollListener: function (forceUpdate) {\r\n\t\t\tif ( this.bodyFixed ) return false;\r\n\r\n\r\n\t\t\tlet scroll = window.scrollY < 0 ? 0 : window.scrollY;\r\n\t\t\t\r\n\t\t\tif (this.sections && this.sections.length > 0 && (scroll === 0 || scroll != this.oldScrollY || forceUpdate)) {\r\n\t\t\t\tthis.oldScrollY = scroll;\r\n\r\n\t\t\t\tthis.sectionProps.forEach((props, index) => {\r\n\t\t\t\t\tlet section = this.sections[index];\r\n\r\n\t\t\t\t\tlet adjustedScrollPosition = scroll - this.offsetTop;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// BEHAVIOR EXPLANATION:\r\n\t\t\t\t\t// A section gets active, when scrolled to its y position minus marginOffset (so, once 25% is inside the viewport) UNTIL it has left the viewport completely.\r\n\t\t\t\t\tif (adjustedScrollPosition + this.marginOffset >= props.y) {\r\n\t\t\t\t\t\tif (adjustedScrollPosition <= props.y + props.h) {\r\n\t\t\t\t\t\t\t//scrolled inside\r\n\t\t\t\t\t\t\tsection.classList.add(\"is-active\");\r\n\t\t\t\t\t\t\tsection.classList.remove(\"is-past\");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tsection.classList.remove(\"is-active\");\r\n\t\t\t\t\t\t\tsection.classList.add(\"is-past\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//element not yet reached\r\n\t\t\t\t\t\tsection.classList.remove(\"is-active\");\r\n\t\t\t\t\t\tsection.classList.remove(\"is-past\");\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetOffsetTopRecursive: function (element) {\r\n\t\t\tvar actualOffset = element.offsetTop;\r\n\r\n\t\t\tvar current = element.offsetParent;\r\n\t\t\twhile (current != null) {\r\n\t\t\t\tactualOffset += current.offsetTop;\r\n\r\n\t\t\t\tcurrent = current.offsetParent;\r\n\t\t\t}\r\n\r\n\t\t\treturn actualOffset;\r\n\t\t},\r\n\t},\r\n\tmounted() {\r\n\t\tthis.sections = [...this.$refs.container.querySelectorAll(\".section\")];\r\n\t\tlet isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\r\n\t\tif (this.sections && this.sections.length > 0 ) {\r\n\t\t\tif ( !isIE11 ) {\r\n\t\t\t\trInterval(this.scrollListener, 50);\r\n\r\n\t\t\t\tsetTimeout(\r\n\t\t\t\t\tfunction () {\r\n\t\t\t\t\t\tthis.scrollListener(true);\r\n\t\t\t\t\t}.bind(this),\r\n\t\t\t\t\t1000\r\n\t\t\t\t);\r\n\r\n\t\t\t\tthis.sections[0].classList.add(\"is-active\");\r\n\t\t\t\tthis.$el.classList.add(\"is-ready\");\r\n\t\t\t\t\r\n\t\t\t} else {\r\n\t\t\t\t//make all sections ready for IE11\r\n\t\t\t\tthis.sections.forEach((section) => {\r\n\t\t\t\t\tsection.classList.add(\"is-active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n","import { mapState } from \"vuex\";\r\n\r\nimport ImageProductsButton from \"../image-products/image-products-button.vue\"\r\n\r\nexport default {\r\n\tname: \"hero-fragmented\",\r\n components: {\r\n ImageProductsButton,\r\n },\r\n props: {\r\n modifierClass: {\r\n type: String,\r\n default: \"hero-fragmented--default\",\r\n required: false,\r\n },\r\n label: {\r\n type: String,\r\n required: false,\r\n },\r\n headlineFull: {\r\n type: String,\r\n required: false,\r\n },\r\n headlinePartOne: {\r\n type: String,\r\n required: false,\r\n },\r\n headlinePartTwo: {\r\n type: String,\r\n required: false,\r\n },\r\n bodyText: {\r\n type: String,\r\n required: false,\r\n },\r\n media1: {\r\n type: Object,\r\n\t\t\trequired: true,\r\n default: () => {return {src: '/static/images/article/IMG_lifestyle3.jpg', type:'image'}}\r\n },\r\n media2: {\r\n type: Object,\r\n required: false,\r\n },\r\n linkText: {\r\n type: String,\r\n required: false,\r\n },\r\n linkUrl: {\r\n type: String,\r\n required: false,\r\n },\r\n imageProductsOverlayData: {\r\n type: Object\r\n }\r\n },\r\n data() {\r\n return {\r\n hoverTextVisible: false,\r\n hoverTextX: 0,\r\n hoverTextY: 0,\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n }),\r\n hoverTextStyles: function() {\r\n if ( this.hoverTextVisible ) return {left: `${this.hoverTextX}px`, top: `${this.hoverTextY}px`};\r\n else return {};\r\n }\r\n },\r\n methods: {\r\n\r\n mouseOverHandler: function() {\r\n this.hoverTextVisible = true;\r\n },\r\n mouseMoveHandler: function(event) {\r\n\t\t\tif ( !this.hoverTextVisible ) return;\r\n\r\n\t\t\t//to avoid collision with shop image buttons\r\n\t\t\tif ( event.target.tagName === \"BUTTON\" ) {\r\n\t\t\t\tthis.hoverTextVisible = false;\r\n\t\t\t}\r\n\r\n\t\t\t// to ensure correct target, and not just the hover label itself\r\n this.hoverTextX = event.clientX + 1;\r\n this.hoverTextY = event.clientY + 1;\r\n },\r\n mouseOutHandler: function() {\r\n this.hoverTextVisible = false;\r\n },\r\n },\r\n mounted() {\r\n this.$el.addEventListener('mouseover', this.mouseOverHandler.bind(this));\r\n this.$el.addEventListener('mousemove', this.mouseMoveHandler.bind(this));\r\n this.$el.addEventListener('mouseout', this.mouseOutHandler.bind(this));\r\n this.$el.addEventListener('mouseleave', this.mouseOutHandler.bind(this));\r\n }\r\n\r\n};\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.cta && _vm.cta.type === \"action\"\n ? _c(\n \"button\",\n {\n class: _vm.tileClass,\n style: _vm.tileStyle,\n on: { click: _vm.clickHandler },\n },\n [\n _vm.media\n ? _c(\"figure\", { staticClass: \"inspiration-tile-v2__media\" }, [\n _vm.media.type === \"image\"\n ? _c(\"img\", {\n attrs: {\n src: _vm.media.src,\n alt: _vm.media.alt,\n srcset: _vm.media.srcset,\n sizes: _vm.media.sizes,\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.media.type === \"video\"\n ? _c(\"video\", {\n attrs: {\n src: _vm.media.src,\n muted: \"\",\n autoplay: \"\",\n loop: \"\",\n playsinline: \"\",\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.trumpet\n ? _c(\"h6\", { staticClass: \"inspiration-tile-v2__trumpet\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.trumpet))]),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.headline\n ? _c(\"h4\", {\n staticClass: \"inspiration-tile-v2__headline\",\n domProps: { innerHTML: _vm._s(_vm.headline) },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.bodyText\n ? _c(\"p\", { staticClass: \"inspiration-tile-v2__bodytext\" }, [\n _vm._v(_vm._s(_vm.bodyText)),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cta.text\n ? _c(\n \"div\",\n {\n staticClass: \"inspiration-tile-v2__cta\",\n class: _vm.cta.class,\n style: _vm.cta.style,\n },\n [_c(\"span\", [_vm._v(_vm._s(_vm.cta.text))])]\n )\n : _vm._e(),\n ]\n )\n : _vm.cta && _vm.cta.type === \"navigation\"\n ? _c(\n \"a\",\n {\n class: _vm.tileClass,\n style: _vm.tileStyle,\n attrs: { href: _vm.cta.value },\n },\n [\n _vm.media\n ? _c(\"figure\", { staticClass: \"inspiration-tile-v2__media\" }, [\n _vm.media.type === \"image\"\n ? _c(\"img\", {\n attrs: {\n src: _vm.media.src,\n alt: _vm.media.alt,\n srcset: _vm.media.srcset,\n sizes: _vm.media.sizes,\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.media.type === \"video\"\n ? _c(\"video\", {\n attrs: {\n src: _vm.media.src,\n muted: \"\",\n autoplay: \"\",\n loop: \"\",\n playsinline: \"\",\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.trumpet\n ? _c(\"h6\", { staticClass: \"inspiration-tile-v2__trumpet\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.trumpet))]),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.headline\n ? _c(\"h4\", {\n staticClass: \"inspiration-tile-v2__headline\",\n domProps: { innerHTML: _vm._s(_vm.headline) },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.bodyText\n ? _c(\"p\", { staticClass: \"inspiration-tile-v2__bodytext\" }, [\n _vm._v(_vm._s(_vm.bodyText)),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cta.text\n ? _c(\n \"div\",\n {\n staticClass: \"inspiration-tile-v2__cta\",\n class: _vm.cta.class,\n style: _vm.cta.style,\n },\n [_c(\"span\", [_vm._v(_vm._s(_vm.cta.text))])]\n )\n : _vm._e(),\n ]\n )\n : _c(\"article\", { class: _vm.tileClass, style: _vm.tileStyle }, [\n _vm.media\n ? _c(\"figure\", { staticClass: \"inspiration-tile-v2__media\" }, [\n _vm.media.type === \"image\"\n ? _c(\"img\", {\n attrs: {\n src: _vm.media.src,\n alt: _vm.media.alt,\n srcset: _vm.media.srcset,\n sizes: _vm.media.sizes,\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.media.type === \"video\"\n ? _c(\"video\", {\n attrs: {\n src: _vm.media.src,\n muted: \"\",\n autoplay: \"\",\n loop: \"\",\n playsinline: \"\",\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.trumpet\n ? _c(\"h6\", { staticClass: \"inspiration-tile-v2__trumpet\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.trumpet))]),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.headline\n ? _c(\"h4\", {\n staticClass: \"inspiration-tile-v2__headline\",\n domProps: { innerHTML: _vm._s(_vm.headline) },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.bodyText\n ? _c(\"p\", { staticClass: \"inspiration-tile-v2__bodytext\" }, [\n _vm._v(_vm._s(_vm.bodyText)),\n ])\n : _vm._e(),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport { mapActions } from \"vuex\";\r\n\r\nexport default {\r\n\tname: \"inspiration-tile-v2\",\r\n\tprops: {\r\n\t\theadline: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\ttrumpet: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tbodyText: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tmedia: {\r\n\t\t\ttype: Object,\r\n\t\t},\r\n\t\tcta: {\r\n\t\t\ttype: Object,\r\n\t\t},\r\n\t\ttype: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\talignBottom: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\treverseOrder: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tsplitContent: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\toverlapHeader: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\r\n\t\tbackgroundColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\ttextColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\ttileClass() {\r\n\t\t\treturn (\r\n\t\t\t\t`inspiration-tile-v2 inspiration-tile-v2--type-${this.type.toLowerCase()}` +\r\n\t\t\t\t` ${this.alignBottom ? \"inspiration-tile-v2--align-bottom\" : \"\"}` +\r\n\t\t\t\t` ${this.reverseOrder ? \"inspiration-tile-v2--reverse-order\" : \"\"}` +\r\n\t\t\t\t` ${this.overlapHeader ? \"inspiration-tile-v2--overlap-header\" : \"\"}` +\r\n\t\t\t\t` ${this.splitContent ? \"inspiration-tile-v2--split-content\" : \"\"}`\r\n\t\t\t);\r\n\t\t},\r\n\t\ttileStyle() {\r\n\t\t\treturn (\r\n\t\t\t\t`${this.backgroundColor ? \"--inspiration-tile-v2-bg-color:\" + this.backgroundColor + \";\" : \"\"}` +\r\n\t\t\t\t`${this.textColor ? \"--inspiration-tile-v2-text-color:\" + this.textColor + \";\" : \"\"}`\r\n\t\t\t);\r\n\t\t},\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\"openShortcutsOverlay\", \"showOverlayBackdrop\"]),\r\n\r\n\t\topenConfigureOverlay: function () {\r\n\t\t\tif ( this.cta.data !== undefined ) {\r\n\t\t\t\tthis.openShortcutsOverlay(this.cta.data);\r\n\t\t\t\tthis.showOverlayBackdrop();\r\n\t\t\t}\r\n\t\t},\r\n\t\tclickHandler() {\r\n\t\t\tconsole.log(\"clickHandler | action=\" + this.cta.value);\r\n\t\t\tswitch (this.cta.value) {\r\n\t\t\t\tcase \"configure\":\r\n\t\t\t\t\tthis.openConfigureOverlay();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tconsole.log(\"clickHandler | action=\" + this.cta.value + \" not implemented\");\r\n\t\t\t}\r\n\t\t},\r\n\t},\r\n};\r\n\r\n</script>\r\n<template>\r\n\t<button v-if=\"cta && cta.type === 'action'\" :class=\"tileClass\" :style=\"tileStyle\" v-on:click=\"clickHandler\">\r\n\t\t<figure class=\"inspiration-tile-v2__media\" v-if=\"media\">\r\n\t\t\t<img v-if=\"media.type === 'image'\" :src=\"media.src\" :alt=\"media.alt\" :srcset=\"media.srcset\" :sizes=\"media.sizes\"/>\r\n\t\t\t<video v-if=\"media.type === 'video'\" :src=\"media.src\" muted autoplay loop playsinline></video>\r\n\t\t</figure>\r\n\t\t<h6 class=\"inspiration-tile-v2__trumpet\" v-if=\"trumpet\">\r\n\t\t\t<span>{{ trumpet }}</span>\r\n\t\t</h6>\r\n\t\t<h4 class=\"inspiration-tile-v2__headline\" v-if=\"headline\" v-html=\"headline\"></h4>\r\n\t\t<p class=\"inspiration-tile-v2__bodytext\" v-if=\"bodyText\">{{ bodyText }}</p>\r\n\t\t<div class=\"inspiration-tile-v2__cta\" v-if=\"cta.text\" :class=\"cta.class\" :style=\"cta.style\"><span>{{ cta.text }}</span></div>\r\n\t</button>\r\n\r\n\t<a v-else-if=\"cta && cta.type === 'navigation'\" :class=\"tileClass\" :style=\"tileStyle\" :href=\"cta.value\">\r\n\t\t<figure class=\"inspiration-tile-v2__media\" v-if=\"media\">\r\n\t\t\t<img v-if=\"media.type === 'image'\" :src=\"media.src\" :alt=\"media.alt\" :srcset=\"media.srcset\" :sizes=\"media.sizes\"/>\r\n\t\t\t<video v-if=\"media.type === 'video'\" :src=\"media.src\" muted autoplay loop playsinline></video>\r\n\t\t</figure>\r\n\t\t<h6 class=\"inspiration-tile-v2__trumpet\" v-if=\"trumpet\">\r\n\t\t\t<span>{{ trumpet }}</span>\r\n\t\t</h6>\r\n\t\t<h4 class=\"inspiration-tile-v2__headline\" v-if=\"headline\" v-html=\"headline\"></h4>\r\n\t\t<p class=\"inspiration-tile-v2__bodytext\" v-if=\"bodyText\">{{ bodyText }}</p>\r\n\t\t<div class=\"inspiration-tile-v2__cta\" v-if=\"cta.text\" :class=\"cta.class\" :style=\"cta.style\"><span>{{ cta.text }}</span></div>\r\n\t</a>\r\n\r\n\t<article v-else :class=\"tileClass\" :style=\"tileStyle\">\r\n\t\t<figure class=\"inspiration-tile-v2__media\" v-if=\"media\">\r\n\t\t\t<img v-if=\"media.type === 'image'\" :src=\"media.src\" :alt=\"media.alt\" :srcset=\"media.srcset\" :sizes=\"media.sizes\"/>\r\n\t\t\t<video v-if=\"media.type === 'video'\" :src=\"media.src\" muted autoplay loop playsinline></video>\r\n\t\t</figure>\r\n\t\t<h6 class=\"inspiration-tile-v2__trumpet\" v-if=\"trumpet\">\r\n\t\t\t<span>{{ trumpet }}</span>\r\n\t\t</h6>\r\n\t\t<h4 class=\"inspiration-tile-v2__headline\" v-if=\"headline\" v-html=\"headline\"></h4>\r\n\t\t<p class=\"inspiration-tile-v2__bodytext\" v-if=\"bodyText\">{{ bodyText }}</p>\r\n\t</article>\r\n</template>\r\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./inspiration-tile-v2.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./inspiration-tile-v2.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./inspiration-tile-v2.vue?vue&type=template&id=49bb1541&\"\nimport script from \"./inspiration-tile-v2.vue?vue&type=script&lang=js&\"\nexport * from \"./inspiration-tile-v2.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('49bb1541')) {\n api.createRecord('49bb1541', component.options)\n } else {\n api.reload('49bb1541', component.options)\n }\n module.hot.accept(\"./inspiration-tile-v2.vue?vue&type=template&id=49bb1541&\", function () {\n api.rerender('49bb1541', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/inspiration-tile-v2/inspiration-tile-v2.vue\"\nexport default component.exports","import { mapState } from \"vuex\";\r\nimport { rInterval } from \"../../basics/js/utils\";\r\nimport TableComponent from \"../table-component/table-component\";\r\n\r\n\r\nexport default {\r\n\tname: \"data-table-scroll\",\r\n\tdata: () => ({\r\n\t\tscrolledToStart: true,\r\n\t\tscrolledToEnd: false,\r\n\t\tscrollIncrement: 200,\r\n\t\tscrollYDelta: 0,\r\n\t}),\r\n\tcomponents: {\r\n\t\tTableComponent,\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n windowY: state => state.windowY,\r\n\t\t\twindowH: state => state.windowH,\r\n }),\r\n\t},\r\n\twatch: {\r\n\t\twindowY(newVal) {\r\n\t\t\tlet rect = {top: this.$el.scrollTop, bottom: this.$el.clientHeight - this.$el.scrollTop - this.windowH/2};\r\n\r\n\t\t\tif ( newVal > rect.top && newVal < rect.bottom ) {\r\n\t\t\t\tthis.scrollYDelta = newVal - rect.top;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\thandleScroll() {\r\n\t\t\tthis.scrolledToStart = this.$refs.scrollable.scrollLeft < 10;\r\n\t\t\tthis.scrolledToEnd = this.$refs.scrollable.scrollLeft >= this.$refs.scrollable.scrollWidth - this.$refs.scrollable.clientWidth - 10;\r\n\r\n\t\t\tthis.scrollIncrement = (this.$refs.scrollable.scrollWidth - this.$refs.scrollable.clientWidth)/4;\r\n\t\t\tif ( this.scrollIncrement < 200 ) this.scrollIncrement = 200;\r\n\t\t},\r\n\t\tscrollLeft() {\r\n\t\t\tthis.$refs.scrollable.scrollLeft -= this.scrollIncrement;\r\n\t\t},\r\n\t\tscrollRight() {\r\n\t\t\tthis.$refs.scrollable.scrollLeft += this.scrollIncrement;\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tif ( this.$refs.scrollable ) rInterval(this.handleScroll, 100);\r\n\t}\r\n};\r\n","import TileFilter from \"../product-filter/tile-filter\";\r\nimport TileList from \"../tile-list/tile-list\";\r\nimport ProductTile from \"../product-tile/product-tile\";\r\nimport InspirationTile from \"../inspiration-tile/inspiration-tile\";\r\nimport InspirationTileV2 from \"../inspiration-tile-v2/inspiration-tile-v2\";\r\nimport UspSpot from \"../usp-spot/usp-spot\";\r\nimport DataTableScroll from \"../data-table/data-table-scroll\";\r\n\r\nexport default {\r\n\tname: \"horizontal-collapsible\",\r\n\tcomponents: {\r\n\t\tTileFilter,\r\n\t\tTileList,\r\n\t\tProductTile,\r\n\t\tInspirationTile,\r\n\t\tInspirationTileV2,\r\n\t\tUspSpot,\r\n\t\tDataTableScroll,\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\ttestActive: false,\r\n\t\t};\r\n\t},\r\n\tprops: {\r\n\t\tstateKey: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\tisExpanded() {\r\n\t\t\treturn this.$store.state[this.stateKey];\r\n\t\t},\r\n\t},\r\n};\r\n","import { mapActions, mapState} from 'vuex';\r\nimport ProductTileProd from '../product-tile/product-tile';\r\n\r\nexport default {\r\n name: \"image-products-overlay\",\r\n\tcomponents: {\r\n\t\tProductTileProd,\r\n\t},\r\n computed: {\r\n\t\t...mapState({\r\n\t\t\tproductsData: state => state.imageProductsOverlay.productsData,\r\n\t\t\tcontentData: state => state.imageProductsOverlay.contentData,\r\n\t\t\toverlayOpen: state => state.imageProductsOverlay.overlayOpen,\r\n\t\t}),\r\n\t\tcolorStyle() {\r\n if ( this.contentData && this.contentData.backgroundColor ) {\r\n\t\t\t\treturn `background-color: ${this.contentData.backgroundColor}; --image-products-overlay-bg-color: ${this.contentData.backgroundColor};`;\r\n\t\t\t}\r\n\t\t\treturn '';\r\n\t\t},\r\n\t},\r\n\tprops: {\r\n\t\ttitleText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"Shop products\"\r\n\t\t},\r\n\t\tcountText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: \"items\"\r\n\t\t}\r\n\t},\r\n methods: {\r\n\t\t...mapActions([\r\n\t\t\t'closeImageProductsOverlay',\r\n\t\t\t'hideOverlayBackdrop',\t\r\n\t\t]),\r\n\t\tclose(){\r\n this.closeImageProductsOverlay();\r\n\t\t\tthis.hideOverlayBackdrop();\r\n\t\t}\r\n\t}\r\n\r\n}","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n staticClass: \"presentation-tile\",\n class: {\n \"is-double\": _vm.isDouble,\n \"is-packshot\": _vm.isPackshot,\n \"is-cylindo\": _vm.isCylindo,\n \"is-content\": _vm.isContent,\n \"is-disabled\": !_vm.isInteractive,\n },\n attrs: { id: _vm.anchor },\n },\n [\n _vm.isCylindo\n ? _c(\n \"div\",\n {\n staticClass: \"presentation-tile__inner\",\n style: _vm.getSlideStyle,\n },\n [\n _c(\"cylindo-viewer\", {\n attrs: {\n \"cylindo-sku\": _vm.cylindoSku,\n \"cylindo-features\": _vm.cylindoFeatures,\n texts: _vm.cylindoTexts,\n \"use-simple-guide\": true,\n \"no-message\": true,\n \"no-zoom\": true,\n \"start-frame\": _vm.startFrame,\n \"has-a-r-callback\": _vm.hasARCallback,\n },\n }),\n ],\n 1\n )\n : !_vm.isContent\n ? _c(\n \"button\",\n {\n staticClass: \"presentation-tile__inner\",\n style: _vm.getSlideStyle,\n on: { click: _vm.imageClickHandler },\n },\n [\n _vm.media && _vm.media.type === \"image\" && _vm.media.src\n ? _c(\n \"figure\",\n {\n staticClass: \"presentation-tile__media\",\n class: {\n \"is-dynamic\": _vm.media.srcLrg,\n \"has-error\":\n _vm.imageLoadError || _vm.imageLrgLoadError,\n },\n },\n [\n _c(\"img\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.imageLoadSuccess && !_vm.imageLoadError,\n expression: \"imageLoadSuccess && !imageLoadError\",\n },\n ],\n attrs: { src: _vm.media.src },\n on: {\n load: function () {\n return _vm.imageLoadHandler()\n },\n error: function () {\n return _vm.imageErrorHandler()\n },\n },\n }),\n _vm._v(\" \"),\n _vm.media.srcLrg\n ? _c(\"img\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.imageLrgLoadSuccess &&\n !_vm.imageLrgLoadError,\n expression:\n \"imageLrgLoadSuccess && !imageLrgLoadError\",\n },\n ],\n attrs: { src: _vm.media.srcLrg },\n on: {\n load: function () {\n return _vm.imageLoadHandler(true)\n },\n error: function () {\n return _vm.imageErrorHandler(true)\n },\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.imageLoadError || _vm.imageLrgLoadError\n ? _c(\"p\", [_vm._v(\"⚠\")])\n : _vm._e(),\n ]\n )\n : _vm.media && _vm.media.type === \"video\" && _vm.media.src\n ? _c(\"figure\", { staticClass: \"presentation-tile__media\" }, [\n _c(\"video\", {\n attrs: {\n src: _vm.media.src,\n muted: \"\",\n autoplay: \"\",\n loop: \"\",\n playsinline: \"\",\n },\n domProps: { muted: true },\n }),\n ])\n : _vm._e(),\n ]\n )\n : _c(\n \"div\",\n { staticClass: \"presentation-tile__inner\" },\n [\n _c(\"usp-spot\", {\n attrs: {\n name: _vm.name,\n description: _vm.description,\n media: _vm.media,\n \"text-color\": _vm.textColor,\n \"background-color\": _vm.backgroundColor,\n },\n inlineTemplate: {\n render: function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"usp-spot usp-spot--image-icon\" },\n [\n _c(\n \"div\",\n {\n staticClass: \"usp-spot__inner\",\n style: _vm.getColorStyle,\n },\n [\n _vm.media\n ? _c(\n \"figure\",\n { staticClass: \"usp-spot__media\" },\n [\n _vm.media.type === \"image\"\n ? _c(\"img\", {\n attrs: {\n src: _vm.media.src,\n alt: _vm.media.alt,\n srcset: _vm.media.srcset,\n sizes: _vm.media.sizes,\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.media.type === \"video\"\n ? _c(\"video\", {\n attrs: {\n src: _vm.media.src,\n muted: \"\",\n autoplay: \"\",\n loop: \"\",\n playsinline: \"\",\n },\n domProps: { muted: true },\n })\n : _vm._e(),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"h3\", { staticClass: \"usp-spot__name\" }, [\n _vm._v(_vm._s(_vm.name)),\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"usp-spot__description\" }, [\n _vm._v(_vm._s(_vm.description)),\n ]),\n ]\n ),\n ]\n )\n },\n staticRenderFns: [],\n },\n }),\n ],\n 1\n ),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"cylindo-viewer\",\n class: {\n \"is-zooming\": _vm.cylindoZoomMode,\n \"is-panning\": _vm.cylindoPanMode,\n \"is-focused\": _vm.isMobile && _vm.isFocused,\n \"is-loading\": _vm.cylindoIsLoading,\n },\n },\n [\n _c(\"div\", {\n staticClass: \"cylindo-viewer__container\",\n attrs: { id: _vm.containerID },\n }),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"cylindo-viewer__zoom\",\n attrs: { id: _vm.containerID + \"-zoom\" },\n }),\n _vm._v(\" \"),\n _vm.useFocusToggle && _vm.isBlurred\n ? _c(\n \"button\",\n {\n ref: \"toggler\",\n staticClass:\n \"cylindo-viewer__toggler cylindo-viewer__toggler--focus\",\n on: { click: _vm.focusViewer },\n },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-plus\" },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.useFocusToggle && _vm.isFocused\n ? _c(\n \"button\",\n {\n staticClass:\n \"cylindo-viewer__toggler cylindo-viewer__toggler--blur\",\n on: { click: _vm.blurViewer },\n },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-close\" },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.guideVisible\n ? _c(\"span\", [\n _vm.useSimpleGuide\n ? _c(\n \"p\",\n {\n staticClass: \"cylindo-viewer__guide\",\n class: { \"is-active\": _vm.cylindoGuideActive },\n },\n [_c(\"span\", [_vm._v(_vm._s(_vm.texts.dragToRotate))])]\n )\n : _c(\n \"div\",\n {\n staticClass: \"cylindo-viewer__guide\",\n class: { \"is-active\": _vm.cylindoGuideActive },\n },\n [\n !_vm.isMobile\n ? _c(\"span\", [\n _vm._v(\n _vm._s(_vm.texts.dragToRotate) +\n \" / \" +\n _vm._s(_vm.texts.clickToZoom)\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isMobile && !_vm.isFocused\n ? _c(\"span\", [_vm._v(_vm._s(_vm.texts.tapToInteract))])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isMobile && _vm.isFocused\n ? _c(\"span\", [\n _vm._v(\n _vm._s(_vm.texts.dragToRotate) +\n \" / \" +\n _vm._s(_vm.texts.doubleTapToZoom)\n ),\n ])\n : _vm._e(),\n ]\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.noMessage\n ? _c(\n \"div\",\n {\n staticClass: \"configurator-message\",\n class: { \"is-active\": _vm.messageShown },\n },\n [\n !_vm.messageShown\n ? _c(\n \"button\",\n {\n staticClass: \"configurator-message__icon\",\n on: { click: _vm.toggleMessage },\n },\n [\n _c(\"span\", [_vm._v(_vm._s(_vm.texts.messageLabel))]),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n attrs: {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewbox: \"0 0 17.97 17.97\",\n },\n },\n [\n _c(\"path\", {\n attrs: {\n d: \"M9,.8A8.19,8.19,0,1,1,.8,9,8.2,8.2,0,0,1,9,.8M9,0a9,9,0,1,0,9,9A9,9,0,0,0,9,0Z\",\n },\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n attrs: {\n d: \"M8.09,11.8a.9.9,0,0,1,.37-.73h1a.93.93,0,0,1,.38.73.9.9,0,0,1-1.79,0Zm.32-3.58V5.28H9.56V8.22l-.22,2h-.7Z\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.messageShown\n ? _c(\n \"div\",\n {\n staticClass: \"configurator-message__inner\",\n on: { click: _vm.closeMessage },\n },\n [\n _c(\"p\", [_vm._v(_vm._s(_vm.texts.messageBody))]),\n _vm._v(\" \"),\n _c(\"button\", [\n _c(\"span\", [_vm._v(_vm._s(_vm.texts.messageButton))]),\n ]),\n ]\n )\n : _vm._e(),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cylindoIsLoading\n ? _c(\"div\", { staticClass: \"cylindo-viewer__loader\" }, [\n _c(\"div\", { staticClass: \"spinner spinner--large\" }),\n ])\n : _vm._e(),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport { mapState, mapActions } from \"vuex\";\r\nimport { CylindoViewMode } from \"../constants\";\r\nimport { inView } from \"../../../../basics/js/methods/inView/inView\";\r\nimport { swipeDetect } from \"../../../../basics/js/utils\";\r\n\r\nexport default {\r\n\tname: \"cylindo-viewer\",\r\n\tprops: {\r\n\t\tcylindoSku: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tcylindoFeatures: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\ttexts: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: true\r\n\t\t},\r\n\t\tnoZoom: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tuseGuide: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true\r\n\t\t},\r\n\t\tuseSimpleGuide: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tuseFocusToggle: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tnoMessage: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tmodeShiftCallback: {\r\n\t\t\ttype: Function,\r\n\t\t\tdefault: null\r\n\t\t},\r\n\t\thasARCallback: {\r\n\t\t\ttype: Function,\r\n\t\t\tdefault: () => { }\r\n\t\t},\r\n\t\tstartFrame: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 4,\r\n\t\t}\r\n\t},\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tisMobile: state => state.isMobile,\r\n\t\t\tcylindoAccountId: state => state.cylindoAccountId,\r\n\t\t\tisConfiguring: state => state.reconfigurator.reconfiguratorOpen,\r\n\t\t\tcurrentCylindoFeatures: state => state.reconfigurator.currentCylindoFeatures,\r\n\t\t\tviewMode: state => state.reconfigurator.cylindoViewMode,\r\n\t\t\tcurrentCylindoSku: state => state.reconfigurator.currentCylindoSku,\r\n\t\t}),\r\n\t\tisBlurred() {\r\n\t\t\treturn this.isMobile && this.viewMode === CylindoViewMode.MOBILE_BLUR\r\n\t\t},\r\n\t\tisFocused() {\r\n\t\t\treturn this.isMobile && this.viewMode === CylindoViewMode.MOBILE_FOCUS\r\n\t\t},\r\n\t\tguideVisible() {\r\n\t\t\treturn this.useGuide\r\n\t\t},\r\n\t},\r\n\twatch: {\r\n\t\tisMobile(newVal) {\r\n\t\t\tif (newVal) {\r\n\t\t\t\tthis.setCylindoViewMode(CylindoViewMode.MOBILE_BLUR)\r\n\t\t\t} else {\r\n\t\t\t\tthis.setCylindoViewMode(CylindoViewMode.DESKTOP)\r\n\t\t\t}\r\n\t\t},\r\n\t\tcurrentCylindoFeatures: {\r\n\t\t\thandler: function (features) {\r\n\t\t\t\tif (this.isConfiguring) {\r\n\t\t\t\t\tconst newFeatures = this.makeFeaturesTuples(features);\r\n\r\n\t\t\t\t\tif (this.cylindoInstance) {\r\n\r\n\t\t\t\t\t\tlet oldFeatures = this.cylindoInstance.getFeatures();\r\n\t\t\t\t\t\tlet identicalFeatures = this.compareArrayVals(oldFeatures, newFeatures);\r\n\r\n\t\t\t\t\t\t//Also test for no old features as it will be an empty array if the product is not renderable at page load, such as illusion material products\r\n\t\t\t\t\t\t//Problem originated from https://jira.immeo.dk/browse/MUU0011-2275\r\n\t\t\t\t\t\tif (!identicalFeatures || oldFeatures.length === 0) {\r\n\t\t\t\t\t\t\tthis.cylindoIsLoading = true;\r\n\t\t\t\t\t\t\tthis.cylindoInstance.setFeatures(newFeatures);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdeep: true\r\n\t\t},\r\n\t\tcurrentCylindoSku(newVal) {\r\n\t\t\tif (this.cylindoInstance && this.cylindoInstance.setProduct) {\r\n\t\t\t\tthis.cylindoIsLoading = true;\r\n\t\t\t\tthis.cylindoInstance.setProduct(this.currentCylindoSku);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tcountry: this.$store.state.country,\r\n\t\t\tlanguage: this.$store.state.language,\r\n\r\n\t\t\tcontainerID: 'cylindo-container-' + (Math.random() + new Date().toISOString()).replace(/[^a-zA-Z0-9]/g, ''),\r\n\r\n\t\t\trotationDone: false,\r\n\r\n\t\t\tcylindoSettings: {},\r\n\t\t\tcylindoInstance: null,\r\n\t\t\tcylindoIsLoading: true,\r\n\t\t\tcylindoInitDone: false,\r\n\t\t\tcylindoSkuChanged: false,\r\n\t\t\tcylindoGuideActive: true,\r\n\t\t\tcylindoErrorHandlerAdded: false,\r\n\r\n\t\t\tcylindoZoomMode: false,\r\n\t\t\tcylindoPanMode: false,\r\n\r\n\t\t\tzoomAllowed: !this.noZoom,\r\n\r\n\t\t\tmessageShown: false\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"setCylindoViewMode\",\r\n\t\t]),\r\n\t\tmakeFeaturesTuples(featureData) {\r\n\t\t\tconst featureKeys = Object.keys(featureData);\r\n\t\t\tconst featuresTuples = [];\r\n\r\n\t\t\tfeatureKeys.forEach((key) => {\r\n\t\t\t\tconst value = featureData[key];\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tfeaturesTuples.push(key.toUpperCase());\r\n\t\t\t\t\tfeaturesTuples.push(value.toUpperCase());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn featuresTuples;\r\n\t\t},\r\n\t\tcompareArrayVals(arr1, arr2) {\r\n\t\t\tif (!arr1 || !arr2) return false;\r\n\r\n\t\t\tlet arraysMatch = true;\r\n\t\t\tarr1.forEach((item, index) => {\r\n\t\t\t\tif (item !== arr2[index]) arraysMatch = false;\r\n\t\t\t});\r\n\t\t\treturn arraysMatch;\r\n\t\t},\r\n\t\tinitCylindo() {\r\n\r\n\t\t\tif (window.cylindo) {\r\n\t\t\t\t// do not instantiate the viewer until the framework reports ready.\r\n\t\t\t\twindow.cylindo.on(\"ready\", () => {\r\n\t\t\t\t\t// COMMENT: The opts object should hold the start properties of the 360 HD Viewer\r\n\t\t\t\t\tlet cylindoOptions = {\r\n\t\t\t\t\t\taccountID: this.cylindoAccountId,\r\n\t\t\t\t\t\tcountry: this.country,\r\n\t\t\t\t\t\tlanguage: this.language,\r\n\t\t\t\t\t\tSKU: this.cylindoSku || this.currentCylindoSku,\r\n\t\t\t\t\t\tencoding: \"png\",\r\n\t\t\t\t\t\tdebug: false,\r\n\t\t\t\t\t\tcontainerID: this.containerID,\r\n\t\t\t\t\t\tcustomZoomContainer: this.containerID + \"-zoom\",\r\n\t\t\t\t\t\tformat: \"png\",\r\n\t\t\t\t\t\tthumbs: false,\r\n\t\t\t\t\t\tfullscreen: false,\r\n\t\t\t\t\t\tsize: 1024,\r\n\t\t\t\t\t\tprogressBar: true,\r\n\t\t\t\t\t\tzoom: this.zoomAllowed,\r\n\t\t\t\t\t\ttitle: \"\",\r\n\t\t\t\t\t\tbackgroundColor: \"F9F8F2\",\r\n\t\t\t\t\t\tARDesktop: true,\r\n\t\t\t\t\t\tARQuickLook: true,\r\n\t\t\t\t\t\tARBtnTxt: this.texts.tryAR,\r\n\t\t\t\t\t\tstartFrame: this.startFrame,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (this.cylindoFeatures) {\r\n\t\t\t\t\t\tcylindoOptions.features = this.makeFeaturesTuples(this.cylindoFeatures);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// COMMENT: Create the cylindo-instance\r\n\r\n\t\t\t\t\t// console.log(\"cylindoOptions\",cylindoOptions,\"currentCylindoSku: \"+this.currentCylindoSku)\r\n\r\n\t\t\t\t\tthis.cylindoInstance = window.cylindo.viewer.create(cylindoOptions);\r\n\t\t\t\t\tthis.cylindoInitDone = true;\r\n\r\n\t\t\t\t\tthis.addCylindoEvents();\r\n\r\n\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\taddCylindoEvents() {\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.THREESIXTY_COMPLETE, () => {\r\n\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.SPIN_BEGIN, () => {\r\n\t\t\t\tthis.cylindoGuideActive = false;\r\n\t\t\t\tthis.cylindoPanMode = true;\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.SPIN_END, () => {\r\n\t\t\t\tthis.cylindoGuideActive = true;\r\n\t\t\t\tthis.cylindoPanMode = false;\r\n\t\t\t});\r\n\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.ZOOM_ENTER, () => {\r\n\t\t\t\tthis.cylindoGuideActive = false;\r\n\t\t\t\tthis.cylindoZoomMode = true;\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.ZOOM_EXIT, () => {\r\n\t\t\t\tthis.cylindoGuideActive = true;\r\n\t\t\t\tthis.cylindoZoomMode = false;\r\n\t\t\t});\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.FEATURES_ERROR, () => {\r\n\t\t\t\tthis.cylindoIsLoading = false;\r\n\t\t\t});\r\n\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.AR_BUTTON_READY, (event, data) => {\r\n\t\t\t\tconsole.log(\"AR READY\", data.url, this.hasARCallback)\r\n\t\t\t\tif (this.hasARCallback) {\r\n\t\t\t\t\tconsole.log(\"AR READY CALLBACK\")\r\n\t\t\t\t\tthis.hasARCallback(data.url);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.cylindoInstance.on(this.cylindoInstance.events.VIEWER_READY, () => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (!this.cylindoErrorHandlerAdded) {\r\n\t\t\t\t\t\tvar ct = document.querySelector(\".cylindo-tooltip\");\r\n\t\t\t\t\t\tct.addEventListener(\"mousedown\", function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tct.addEventListener(\"touchstart\", function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.cylindoErrorHandlerAdded = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tconsole.warn(\"COULDN'T FIND TOOLTIP, NO LISTENER\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Auto rotate product on load\r\n\r\n\t\t\t\tinView({\r\n\t\t\t\t\tel: this.$el,\r\n\t\t\t\t\tthreshold: 0.8,\r\n\t\t\t\t\tratio: 1,\r\n\t\t\t\t\tcallback: (inView) => {\r\n\t\t\t\t\t\tif (inView && !this.rotationDone) {\r\n\t\t\t\t\t\t\tthis.rotationDone = true;\r\n\t\t\t\t\t\t\t// console.log(\"ROTATE THE SUCKER!\")\r\n\t\t\t\t\t\t\tthis.cylindoInstance.rotate(360, 1600);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// console.log(\"ALL IMGS LOADED!\")\r\n\t\t\t\tthis.cylindoIsLoading = false;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tcloseMessage() {\r\n\t\t\tthis.messageShown = false;\r\n\t\t},\r\n\t\topenMessage() {\r\n\t\t\tthis.messageShown = true;\r\n\t\t},\r\n\t\ttoggleMessage() {\r\n\t\t\tif (this.messageShown) this.closeMessage();\r\n\t\t\telse this.openMessage();\r\n\t\t},\r\n\t\tfocusViewer() {\r\n\t\t\tif (this.isFocused) return;\r\n\r\n\t\t\tif (this.isMobile) {\r\n\t\t\t\tthis.setCylindoViewMode(CylindoViewMode.MOBILE_FOCUS);\r\n\t\t\t}\r\n\t\t\tif (this.modeShiftCallback) this.modeShiftCallback(this.viewMode);\r\n\t\t},\r\n\t\tblurViewer() {\r\n\t\t\tif (this.isMobile) {\r\n\t\t\t\tthis.setCylindoViewMode(CylindoViewMode.MOBILE_BLUR);\r\n\t\t\t\tthis.cylindoInstance.exitZoom();\r\n\t\t\t}\r\n\t\t\tif (this.modeShiftCallback) this.modeShiftCallback(this.viewMode);\r\n\t\t},\r\n\r\n\r\n\t},\r\n\tmounted() {\r\n\r\n\t\tlet initInterval = setInterval(function () {\r\n\t\t\ttry {\r\n\t\t\t\tthis.initCylindo();\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconsole.log(\"INIT CYLINDO ERROR\", err)\r\n\t\t\t}\r\n\t\t\tif (this.cylindoInitDone) {\r\n\t\t\t\tclearInterval(initInterval);\r\n\t\t\t}\r\n\t\t}.bind(this), 500);\r\n\r\n\t\tthis.setCylindoViewMode(this.isMobile ? CylindoViewMode.MOBILE_BLUR : CylindoViewMode.DESKTOP);\r\n\r\n\t\tif (this.isConfiguring) {\r\n\t\t\tswipeDetect(this.$refs.toggler, () => this.focusViewer());\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n\r\n<template>\r\n\t<div class=\"cylindo-viewer\"\r\n\t\t:class=\"{ 'is-zooming': cylindoZoomMode, 'is-panning': cylindoPanMode, 'is-focused': isMobile && isFocused, 'is-loading': cylindoIsLoading }\">\r\n\r\n\r\n\t\t<!-- Container for the Cylindo 360 viewer -->\r\n\t\t<div class=\"cylindo-viewer__container\" :id=\"containerID\"></div>\r\n\r\n\t\t<!-- Container for the Cylindo zoom view -->\r\n\t\t<div class=\"cylindo-viewer__zoom\" :id=\"containerID + '-zoom'\"></div>\r\n\r\n\r\n\t\t<!-- Button for switching from default mobile to focused mode -->\r\n\t\t<button class=\"cylindo-viewer__toggler cylindo-viewer__toggler--focus\" v-if=\"useFocusToggle && isBlurred\"\r\n\t\t\tv-on:click=\"focusViewer\" ref=\"toggler\">\r\n\t\t\t<svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n\t\t\t\t<use xlink:href=\"/dist/svg/symbols.svg#svg-plus\"></use>\r\n\t\t\t</svg>\r\n\t\t</button>\r\n\r\n\t\t<!-- Button for switching back to default mobile mode -->\r\n\t\t<button class=\"cylindo-viewer__toggler cylindo-viewer__toggler--blur\" v-if=\"useFocusToggle && isFocused\"\r\n\t\t\tv-on:click=\"blurViewer\">\r\n\t\t\t<svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n\t\t\t\t<use xlink:href=\"/dist/svg/symbols.svg#svg-close\"></use>\r\n\t\t\t</svg>\r\n\t\t</button>\r\n\r\n\r\n\t\t<!-- Guide text -->\r\n\t\t<span v-if=\"guideVisible\">\r\n\r\n\t\t\t<p class=\"cylindo-viewer__guide\" :class=\"{ 'is-active': cylindoGuideActive }\" v-if=\"useSimpleGuide\">\r\n\t\t\t\t<span>{{ texts.dragToRotate }}</span>\r\n\t\t\t</p>\r\n\r\n\t\t\t<div class=\"cylindo-viewer__guide\" :class=\"{ 'is-active': cylindoGuideActive }\" v-else>\r\n\t\t\t\t<span v-if=\"!isMobile\">{{ texts.dragToRotate }} / {{ texts.clickToZoom }}</span>\r\n\t\t\t\t<span v-if=\"isMobile && !isFocused\">{{ texts.tapToInteract }}</span>\r\n\t\t\t\t<span v-if=\"isMobile && isFocused\">{{ texts.dragToRotate }} / {{ texts.doubleTapToZoom }}</span>\r\n\t\t\t</div>\r\n\t\t</span>\r\n\r\n\r\n\t\t<div class=\"configurator-message\" v-if=\"!noMessage\" :class=\"{ 'is-active': messageShown }\">\r\n\t\t\t<button class=\"configurator-message__icon\" v-on:click=\"toggleMessage\" v-if=\"!messageShown\">\r\n\t\t\t\t<span>{{ texts.messageLabel }}</span>\r\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 17.97 17.97\">\r\n\t\t\t\t\t<path d=\"M9,.8A8.19,8.19,0,1,1,.8,9,8.2,8.2,0,0,1,9,.8M9,0a9,9,0,1,0,9,9A9,9,0,0,0,9,0Z\" />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M8.09,11.8a.9.9,0,0,1,.37-.73h1a.93.93,0,0,1,.38.73.9.9,0,0,1-1.79,0Zm.32-3.58V5.28H9.56V8.22l-.22,2h-.7Z\" />\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\r\n\t\t\t<div class=\"configurator-message__inner\" v-if=\"messageShown\" v-on:click=\"closeMessage\">\r\n\t\t\t\t<p>{{ texts.messageBody }}</p>\r\n\t\t\t\t<button>\r\n\t\t\t\t\t<span>{{ texts.messageButton }}</span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"cylindo-viewer__loader\" v-if=\"cylindoIsLoading\">\r\n\t\t\t<div class=\"spinner spinner--large\"></div>\r\n\t\t</div>\r\n</div></template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cylindo-viewer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cylindo-viewer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cylindo-viewer.vue?vue&type=template&id=8770458e&\"\nimport script from \"./cylindo-viewer.vue?vue&type=script&lang=js&\"\nexport * from \"./cylindo-viewer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('8770458e')) {\n api.createRecord('8770458e', component.options)\n } else {\n api.reload('8770458e', component.options)\n }\n module.hot.accept(\"./cylindo-viewer.vue?vue&type=template&id=8770458e&\", function () {\n api.rerender('8770458e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/cylindo-viewer/cylindo-viewer.vue\"\nexport default component.exports","<script>\r\nimport { mapState, mapActions } from \"vuex\";\r\n\r\nimport CylindoViewer from \"../cylindo-viewer/cylindo-viewer.vue\";\r\nimport { registerPictureClick } from '../../../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer'\r\nimport UspSpot from \"../../../usp-spot/usp-spot\"\r\n\r\nexport default {\r\n\tname: \"presentation-tile\",\r\n\tcomponents: {\r\n\t\tCylindoViewer,\r\n\t\tUspSpot\r\n\t},\r\n\tprops: {\r\n\r\n\t\tisDouble: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tisPackshot: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tisCylindo: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tisContent: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tisInteractive: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true\r\n\t\t},\r\n\r\n\t\tcylindoSku: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tcylindoFeatures: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tname: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tdescription: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tanchor: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\ttextColor: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tbackgroundColor: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\tcylindoTexts: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: false\r\n\t\t},\r\n\t\thasARCallback: {\r\n\t\t\ttype: Function,\r\n\t\t\tdefault: null\r\n\t\t},\r\n\t\tgalleryId: {\r\n\t\t\ttype: Number,\r\n\t\t},\r\n\t\tstartFrame: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 4,\r\n\t\t},\r\n\t\tmedia: {\r\n type: Object,\r\n required: false\r\n },\r\n productName: {\r\n default: false\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n }),\r\n getSlideStyle: function() {\r\n let style = '';\r\n if ( this.backgroundColor ) {\r\n\t\t\t\tstyle += `background-color: ${this.backgroundColor}; --presentation-tile-bg-color: ${this.backgroundColor};`;\r\n\r\n\t\t\t}\r\n\t\t\tif (this.textColor) {\r\n\t\t\t\tstyle += `color: ${this.textColor}; --presentation-tile-text-color: ${this.textColor}`;\r\n\t\t\t}\r\n return style;\r\n }\r\n },\r\n data() {\r\n return {\r\n imageLoadSuccess: false,\r\n imageLoadError: false,\r\n imageLrgLoadSuccess: false,\r\n imageLrgLoadError: false,\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"openZoomOverlay\",\r\n \"showOverlayBackdrop\",\r\n \"openMosaicSliderOverlay\",\r\n ]),\r\n imageClickHandler() {\r\n registerPictureClick(this.productName)\r\n if ( this.isMobile && this.media && this.media.type === 'image') {\r\n this.openZoomOverlay(this.media);\r\n this.showOverlayBackdrop();\r\n } else if (!isNaN(this.galleryId)) {\r\n this.openMosaicSliderOverlay(this.galleryId);\r\n }\r\n },\r\n imageLoadHandler(largeSrc) {\r\n if ( largeSrc ) this.imageLrgLoadSuccess = true;\r\n else this.imageLoadSuccess = true;\r\n },\r\n imageErrorHandler(largeSrc) {\r\n if ( largeSrc ) this.imageLrgLoadError = true;\r\n else this.imageLoadError = true;\r\n },\r\n }\r\n};\r\n\r\n</script>\r\n\r\n<template>\r\n\t<li class=\"presentation-tile\"\r\n\t\t:class=\"{ 'is-double': isDouble, 'is-packshot': isPackshot, 'is-cylindo': isCylindo, 'is-content': isContent, 'is-disabled': !isInteractive }\"\r\n\t\t:id=\"anchor\">\r\n\t\t<div class=\"presentation-tile__inner\" :style=\"getSlideStyle\" v-if=\"isCylindo\">\r\n\t\t\t<cylindo-viewer :cylindo-sku=\"cylindoSku\" :cylindo-features=\"cylindoFeatures\" :texts=\"cylindoTexts\"\r\n\t\t\t\t:use-simple-guide=\"true\" :no-message=\"true\" :no-zoom=\"true\" :start-frame=\"startFrame\"\r\n\t\t\t\t:has-a-r-callback=\"hasARCallback\">\r\n\t\t\t</cylindo-viewer>\r\n\t\t</div>\r\n\r\n\t\t<button v-else-if=\"!isContent\" class=\"presentation-tile__inner\" :style=\"getSlideStyle\"\r\n\t\t\tv-on:click=\"imageClickHandler\">\r\n\t\t\t<figure class=\"presentation-tile__media\" v-if=\"media && media.type === 'image' && media.src\" :class=\"{ 'is-dynamic': media.srcLrg, 'has-error': imageLoadError || imageLrgLoadError }\r\n\t\t\t\">\r\n\t\t\t\t<img :src=\"media.src\" v-on:load=\"() => imageLoadHandler()\" v-on:error=\"() => imageErrorHandler()\"\r\n\t\t\t\t\tv-show=\"imageLoadSuccess && !imageLoadError\" />\r\n\t\t\t\t<img v-if=\"media.srcLrg\" :src=\"media.srcLrg\" v-on:load=\"() => imageLoadHandler(true)\"\r\n\t\t\t\t\tv-on:error=\"() => imageErrorHandler(true)\" v-show=\"imageLrgLoadSuccess && !imageLrgLoadError\" />\r\n\r\n\t\t\t\t<p v-if=\"imageLoadError || imageLrgLoadError\">⚠</p>\r\n\t\t\t</figure>\r\n\t\t\t<figure class=\"presentation-tile__media\" v-else-if=\"media && media.type === 'video' && media.src\">\r\n\t\t\t\t<video :src=\"media.src\" muted autoplay loop playsinline></video>\r\n\t\t\t</figure>\r\n\t\t</button>\r\n\r\n\t\t<div v-else class=\"presentation-tile__inner\">\r\n\t\t\t<usp-spot :name=\"name\" :description=\"description\" :media=\"media\" :text-color=\"textColor\"\r\n\t\t\t\t:background-color=\"backgroundColor\" inline-template>\r\n\t\t\t\t<div class=\"usp-spot usp-spot--image-icon\">\r\n\t\t\t\t\t<div class=\"usp-spot__inner\" :style=\"getColorStyle\">\r\n\t\t\t\t\t\t<figure class=\"usp-spot__media\" v-if=\"media\">\r\n\t\t\t\t\t\t\t<img v-if=\"media.type === 'image'\" :src=\"media.src\" :alt=\"media.alt\" :srcset=\"media.srcset\" :sizes=\"media.sizes\"/>\r\n\t\t\t\t\t\t\t<video v-if=\"media.type === 'video'\" :src=\"media.src\" muted autoplay loop playsinline></video>\r\n\t\t\t\t\t\t</figure>\r\n\t\t\t\t\t\t<h3 class=\"usp-spot__name\">{{ name }}</h3>\r\n\t\t\t\t\t\t<p class=\"usp-spot__description\">{{ description }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</usp-spot>\r\n\t\t</div>\r\n\t</li>\r\n</template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./presentation-tile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./presentation-tile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./presentation-tile.vue?vue&type=template&id=45944d46&\"\nimport script from \"./presentation-tile.vue?vue&type=script&lang=js&\"\nexport * from \"./presentation-tile.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('45944d46')) {\n api.createRecord('45944d46', component.options)\n } else {\n api.reload('45944d46', component.options)\n }\n module.hot.accept(\"./presentation-tile.vue?vue&type=template&id=45944d46&\", function () {\n api.rerender('45944d46', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/presentation-tile/presentation-tile.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"zoom-overlay\",\n class: { \"is-active\": _vm.overlayImage && _vm.isOpen },\n attrs: { tabindex: \"0\" },\n on: {\n keydown: function ($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])\n ) {\n return null\n }\n return _vm.close($event)\n },\n },\n },\n [\n _c(\"div\", { ref: \"inner\", staticClass: \"zoom-overlay__inner\" }, [\n _vm.overlayImage\n ? _c(\"img\", {\n ref: \"image\",\n attrs: {\n src: _vm.overlayImage.srcLrg || _vm.overlayImage.src,\n alt: _vm.overlayImage.title,\n },\n })\n : _c(\"img\", { ref: \"image\", attrs: { src: \"\" } }),\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n { staticClass: \"zoom-overlay__close\", on: { click: _vm.close } },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-close\" },\n }),\n ]\n ),\n ]\n ),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\n import { mapState, mapActions } from \"vuex\";\r\n import { rInterval } from \"../../../../basics/js/utils\";\r\n\r\n export default {\r\n name: \"zoom-overlay\",\r\n data() {\r\n return {\r\n intervalClear:-1\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n bodyFixed: state => state.bodyFixed,\r\n windowH: state => state.windowH,\r\n windowW: state => state.windowW,\r\n \r\n isOpen: state => state.reconfigurator.zoomOverlayOpen,\r\n overlayImage: state => state.reconfigurator.zoomOverlayImage\r\n }),\r\n },\r\n watch: {\r\n overlayImage(newVal) {\r\n if ( newVal ) {\r\n\t\t this.intervalClear = rInterval(this.imageLoadListener.bind(this), 100).clear;\r\n }\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"closeZoomOverlay\",\r\n \"hideOverlayBackdrop\",\r\n ]),\r\n imageLoadListener: function () {\r\n \r\n // console.log(\"this.$refs.image.naturalWidth\", this.$refs.image.naturalWidth)\r\n // console.log(\"this.$refs.image.complete\", this.$refs.image.complete)\r\n\r\n if ( this.$refs.image.naturalWidth > 0 && this.$refs.image.naturalHeight > 0 ) {\r\n this.intervalClear();\r\n this.intervalClear = null;\r\n // console.log(\"LOADED\");\r\n\r\n this.imageLoaded();\r\n }\r\n },\r\n close: function() {\r\n this.hideOverlayBackdrop();\r\n this.closeZoomOverlay();\r\n },\r\n imageLoaded: function() {\r\n // console.log(\"loaded\", this.$refs.image.width, this.$refs.image.height,this.windowW,this.windowH)\r\n this.$refs.inner.scrollLeft = this.$refs.image.width / 2 - this.windowW / 2;\r\n this.$refs.inner.scrollTop = this.$refs.image.height / 2 - this.windowH / 2;\r\n }\r\n }\r\n };\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"zoom-overlay\" :class=\"{'is-active': overlayImage && isOpen}\" v-on:keydown.esc=\"close\" tabindex=\"0\">\r\n \r\n <div class=\"zoom-overlay__inner\" ref=\"inner\">\r\n <img v-if=\"overlayImage\" :src=\"(overlayImage.srcLrg || overlayImage.src)\" :alt=\"overlayImage.title\" ref=\"image\"/>\r\n <img v-else src=\"\" ref=\"image\"/>\r\n </div>\r\n \r\n <button class=\"zoom-overlay__close\" v-on:click=\"close\">\r\n <svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-close\"></use>\r\n </svg> \r\n </button>\r\n </div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoom-overlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoom-overlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./zoom-overlay.vue?vue&type=template&id=3ef3f6d9&\"\nimport script from \"./zoom-overlay.vue?vue&type=script&lang=js&\"\nexport * from \"./zoom-overlay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3ef3f6d9')) {\n api.createRecord('3ef3f6d9', component.options)\n } else {\n api.reload('3ef3f6d9', component.options)\n }\n module.hot.accept(\"./zoom-overlay.vue?vue&type=template&id=3ef3f6d9&\", function () {\n api.rerender('3ef3f6d9', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/zoom-overlay/zoom-overlay.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"variant-options\" }, [\n !_vm.isMobile\n ? _c(\n \"span\",\n { staticClass: \"variant-options__inner\" },\n [\n _vm.variantLists && _vm.variantLists.length > 1\n ? _c(\"tabs-bar\", {\n attrs: {\n \"tab-click-handler\": _vm.variantCategoryChangeHandler,\n \"active-index\": _vm.activeVariantCategoryIndex,\n items: _vm.variantLists,\n },\n inlineTemplate: {\n render: function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"nav\", { staticClass: \"tabs-bar\" }, [\n _c(\n \"div\",\n { staticClass: \"tabs-bar__inner\" },\n _vm._l(_vm.items, function (item, index) {\n return _c(\n \"button\",\n {\n key: index,\n staticClass: \"tabs-bar__button\",\n class: {\n \"is-active\": index === _vm.activeIndex,\n },\n on: {\n click: function ($event) {\n return _vm.tabClickHandler(item, index)\n },\n },\n },\n [\n !_vm.isMobile && index === _vm.activeIndex\n ? _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-angle-arrow\",\n },\n }),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.name))]),\n ]\n )\n }),\n 0\n ),\n ])\n },\n staticRenderFns: [],\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"variant-options__name\" }, [\n _c(\"strong\", [_vm._v(_vm._s(_vm.labelText) + \":\")]),\n _vm._v(\" \" + _vm._s(_vm.selectedVariantName)),\n ]),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { key: _vm.listKey, staticClass: \"variant-options__list\" },\n [\n _vm._l(_vm.currentVariantListItems, function (item, index) {\n return _c(\n \"li\",\n {\n key: _vm.currentVariantList.name + index,\n staticClass: \"variant-options__item\",\n class: {\n \"is-active\": item.isActive,\n \"is-hidden\":\n _vm.currentVariantListItems.length > 4 && index > 2,\n },\n },\n [\n _c(\n \"a\",\n {\n attrs: { href: item.href },\n on: {\n mouseover: function ($event) {\n return _vm.variantHoverHandler(index)\n },\n mouseout: function ($event) {\n return _vm.variantUnhoverHandler(index)\n },\n },\n },\n [_c(\"img\", { attrs: { src: item.image.src } })]\n ),\n _vm._v(\" \"),\n _vm.currentVariantList.isEditable\n ? _c(\n \"button\",\n {\n staticClass: \"variant-options__item__delete\",\n on: {\n click: function ($event) {\n return _vm.deleteItemHandler(item)\n },\n },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewbox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-close\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n ]\n )\n }),\n _vm._v(\" \"),\n _vm.currentVariantListItems.length > 4\n ? _c(\n \"li\",\n {\n staticClass:\n \"variant-options__item variant-options__item--more\",\n },\n [\n _c(\"button\", { on: { click: _vm.showAllVariants } }, [\n _c(\"span\", [\n _vm._v(\n \"+ \" +\n _vm._s(_vm.currentVariantListItems.length - 3)\n ),\n ]),\n ]),\n ]\n )\n : _vm._e(),\n ],\n 2\n ),\n ],\n 1\n )\n : _c(\n \"button\",\n {\n staticClass: \"variant-options__inner\",\n on: { click: _vm.showAllVariants },\n },\n [\n _c(\n \"ul\",\n { staticClass: \"variant-options__list\" },\n _vm._l(_vm.currentVariantListItems, function (item, index) {\n return _c(\n \"li\",\n {\n key: index,\n staticClass: \"variant-options__item\",\n class: {\n \"is-active\": item.isActive,\n \"is-hidden\":\n _vm.currentVariantListItems.length > 3 && index > 3,\n },\n },\n [_c(\"img\", { attrs: { src: item.image.src } })]\n )\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass:\n \"variant-options__item variant-options__item--more\",\n },\n [\n _vm.currentVariantListItems.length > 3\n ? _c(\"span\", [\n _vm._v(_vm._s(_vm.currentVariantListItems.length - 3)),\n ])\n : _vm._e(),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n staticClass: \"variant-options__icon svg-icon\",\n attrs: { viewbox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-plus-mini\",\n },\n }),\n ]\n ),\n ]\n ),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport { mapState, mapActions } from \"vuex\";\r\nimport TabsBar from \"../../../experience/tabs-bar/tabs-bar\"\r\nimport Cookies from 'js-cookie'\r\nimport { CookiePrefix } from \"../constants\";\r\n\r\nexport default {\r\n name: \"variant-options\",\r\n components: {\r\n TabsBar,\r\n },\r\n props: {\r\n variantListsInitIndex: {\r\n type: Number,\r\n default: 0\r\n },\r\n variantLists: {\r\n type: Array,\r\n required: true,\r\n },\r\n labelText: {\r\n type: String,\r\n required: true\r\n },\r\n variantFallbackName:{\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data() {\r\n return {\r\n hoverVariantIndex: -1,\r\n activeVariantCategoryIndex: 0,\r\n listKey: 0\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n currentProductId: state => state.reconfigurator.currentProductId,\r\n overlayItems: state => state.reconfigurator.optionsOverlayItems,\r\n }),\r\n currentVariantList() {\r\n return this.variantLists[this.activeVariantCategoryIndex] || null;\r\n },\r\n currentVariantListItems() {\r\n return this.currentVariantList ? this.currentVariantList.items : [];\r\n },\r\n selectedVariant() {\r\n let foundVariant;\r\n this.variantLists.forEach(list => {\r\n let fV = list.items.find(variant => variant.isActive);\r\n if (fV) foundVariant = fV;\r\n })\r\n return foundVariant;\r\n },\r\n selectedVariantName() {\r\n if (this.hoverVariantIndex > -1) {\r\n return this.currentVariantListItems[this.hoverVariantIndex] && this.currentVariantListItems[this.hoverVariantIndex].name ? this.currentVariantListItems[this.hoverVariantIndex].name : \"\";\r\n }\r\n else {\r\n return this.selectedVariant ? this.selectedVariant.name : this.variantFallbackName;\r\n }\r\n }\r\n },\r\n watch: {\r\n overlayItems() {\r\n this.listKey++;\r\n if (!this.currentVariantList || this.currentVariantListItems.length === 0) {\r\n this.activeVariantCategoryIndex = 0;\r\n }\r\n }\r\n },\r\n mounted() {\r\n this.activeVariantCategoryIndex = this.variantListsInitIndex;\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"openOptionsOverlay\",\r\n \"showOverlayBackdrop\",\r\n ]),\r\n variantCategoryChangeHandler: function (item, newIndex) {\r\n this.activeVariantCategoryIndex = newIndex;\r\n },\r\n variantHoverHandler: function (newIndex) {\r\n this.hoverVariantIndex = newIndex;\r\n },\r\n variantUnhoverHandler: function () {\r\n this.hoverVariantIndex = -1;\r\n },\r\n showAllVariants: function () {\r\n //open overlay?\r\n\r\n window.scrollTo({ top: 0 }); //to ensure no overflow hidden on body visual glitches\r\n this.openOptionsOverlay({ items: this.variantLists, activeListIndex: this.activeVariantCategoryIndex });\r\n this.showOverlayBackdrop();\r\n },\r\n deleteItemHandler: function (item) {\r\n\r\n if (item.variantCode) {\r\n\r\n console.log('cookie',CookiePrefix + this.currentProductId);\r\n let currentSaved = Cookies.get(CookiePrefix + this.currentProductId);\r\n console.log(\"DELETE | cookie before\", currentSaved);\r\n\r\n if (currentSaved) {\r\n currentSaved = currentSaved.replace(item.variantCode, '');\r\n currentSaved = currentSaved.replace('||', '|');\r\n Cookies.set(CookiePrefix + this.currentProductId, currentSaved, { expires: 60 });\r\n\r\n console.log(\"DELETE | cookie after\", Cookies.get(CookiePrefix + this.currentProductId))\r\n }\r\n }\r\n\r\n this.currentVariantListItems.splice(this.currentVariantListItems.indexOf(item), 1);\r\n\r\n if (this.currentVariantListItems.length === 0) {\r\n let index = this.variantLists.indexOf(this.currentVariantList);\r\n\r\n //if list empty, remove it\r\n this.variantLists.splice(index, 1);\r\n this.activeVariantCategoryIndex = 0;\r\n }\r\n\r\n // deleted item is the current variant\r\n if (item.isActive) {\r\n if (this.variantLists[0] && this.variantLists[0].items[0]) {\r\n window.open(this.variantLists[0].items[0].href);\r\n }\r\n } else {\r\n //TODO: do something?\r\n }\r\n\r\n this.listKey++;\r\n }\r\n }\r\n};\r\n\r\n</script>\r\n\r\n<template>\r\n <div class=\"variant-options\">\r\n <span class=\"variant-options__inner\" v-if=\"!isMobile\">\r\n\r\n <tabs-bar inline-template v-if=\"variantLists && variantLists.length > 1\"\r\n :tab-click-handler=\"variantCategoryChangeHandler\" :active-index=\"activeVariantCategoryIndex\"\r\n :items=\"variantLists\">\r\n <nav class=\"tabs-bar\">\r\n <div class=\"tabs-bar__inner\">\r\n <button class=\"tabs-bar__button\" v-for=\"(item, index) in items\" :key=\"index\"\r\n :class=\"{ 'is-active': index === activeIndex }\" v-on:click=\"tabClickHandler(item, index)\"\r\n v-cloak>\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon\" v-if=\"!isMobile && index === activeIndex\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-angle-arrow\"></use>\r\n </svg>\r\n <span>{{ item.name }}</span>\r\n </button>\r\n </div>\r\n </nav>\r\n </tabs-bar>\r\n\r\n <p class=\"variant-options__name\"><strong>{{ labelText }}:</strong> {{ selectedVariantName }}</p>\r\n\r\n <ul class=\"variant-options__list\" :key=\"listKey\">\r\n <li v-for=\"(item, index) in currentVariantListItems\" :key=\"currentVariantList.name + index\"\r\n class=\"variant-options__item\"\r\n :class=\"{ 'is-active': item.isActive, 'is-hidden': currentVariantListItems.length > 4 && index > 2 }\">\r\n <a :href=\"item.href\" v-on:mouseover=\"variantHoverHandler(index)\"\r\n v-on:mouseout=\"variantUnhoverHandler(index)\">\r\n <img :src=\"item.image.src\" />\r\n </a>\r\n\r\n <button class=\"variant-options__item__delete\" v-on:click=\"deleteItemHandler(item)\"\r\n v-if=\"currentVariantList.isEditable\">\r\n <svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-close\"></use>\r\n </svg>\r\n </button>\r\n </li>\r\n <li class=\"variant-options__item variant-options__item--more\" v-if=\"currentVariantListItems.length > 4\">\r\n <button v-on:click=\"showAllVariants\">\r\n <span>+ {{ currentVariantListItems.length - 3 }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </span>\r\n <button class=\"variant-options__inner\" v-else v-on:click=\"showAllVariants\">\r\n <ul class=\"variant-options__list\">\r\n <li v-for=\"(item, index) in currentVariantListItems\" :key=\"index\" class=\"variant-options__item\"\r\n :class=\"{ 'is-active': item.isActive, 'is-hidden': currentVariantListItems.length > 3 && index > 3 }\">\r\n <img :src=\"item.image.src\" />\r\n </li>\r\n </ul>\r\n <p class=\"variant-options__item variant-options__item--more\"><span\r\n v-if=\"currentVariantListItems.length > 3\">{{ currentVariantListItems.length - 3 }}</span></p>\r\n\r\n <svg viewbox=\"0 0 100 100\" class=\"variant-options__icon svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-plus-mini\"></use>\r\n </svg>\r\n </button>\r\n </div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./variant-options.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./variant-options.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./variant-options.vue?vue&type=template&id=390dd787&\"\nimport script from \"./variant-options.vue?vue&type=script&lang=js&\"\nexport * from \"./variant-options.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('390dd787')) {\n api.createRecord('390dd787', component.options)\n } else {\n api.reload('390dd787', component.options)\n }\n module.hot.accept(\"./variant-options.vue?vue&type=template&id=390dd787&\", function () {\n api.rerender('390dd787', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/variant-options/variant-options.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"attribute-options\" }, [\n _c(\n \"button\",\n {\n staticClass: \"attribute-options__button\",\n on: { click: _vm.showAllAttributes },\n },\n [\n _c(\"p\", [\n _c(\"strong\", [\n _vm._v(\n _vm._s(\n _vm.isMobile\n ? _vm.attributeList.nameShort\n : _vm.attributeList.name + \":\"\n )\n ),\n ]),\n _vm._v(\" \"),\n _c(\"em\", [_vm._v(_vm._s(_vm.selectedAttributeName))]),\n ]),\n _vm._v(\" \"),\n !_vm.isMobile\n ? _c(\n \"svg\",\n {\n staticClass: \"attribute-options__icon svg-icon\",\n attrs: { viewbox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-select-chevron\",\n },\n }),\n ]\n )\n : _c(\n \"svg\",\n {\n staticClass: \"attribute-options__icon svg-icon\",\n attrs: { viewbox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-plus-mini\",\n },\n }),\n ]\n ),\n ]\n ),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\n import { mapState, mapActions } from \"vuex\";\r\n\r\n export default {\r\n name: \"attribute-options\",\r\n props: {\r\n attributeList: {\r\n type: Object,\r\n required: true,\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n }),\r\n selectedAttributeName() { \r\n let foundAttribute = this.attributeList.items.find(attribute => attribute.isActive);\r\n return foundAttribute ? foundAttribute.name : '';\r\n }\r\n },\r\n methods: { \r\n ...mapActions([\r\n \"openOptionsOverlay\",\r\n \"showOverlayBackdrop\",\r\n ]),\r\n showAllAttributes: function () {\r\n \r\n window.scrollTo({ top: 0 }); //to ensure no overflow hidden on body visual glitches\r\n this.openOptionsOverlay({items:this.attributeList});\r\n this.showOverlayBackdrop();\r\n }\r\n }\r\n };\r\n</script>\r\n\r\n<template> \r\n <div class=\"attribute-options\">\r\n <button class=\"attribute-options__button\" v-on:click=\"showAllAttributes\">\r\n <p><strong>{{isMobile ? attributeList.nameShort : attributeList.name + ':'}}</strong> <em>{{selectedAttributeName}}</em></p>\r\n \r\n <svg viewbox=\"0 0 100 100\" class=\"attribute-options__icon svg-icon\" v-if=\"!isMobile\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-select-chevron\"></use>\r\n </svg> \r\n <svg viewbox=\"0 0 100 100\" class=\"attribute-options__icon svg-icon\" v-else>\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-plus-mini\"></use>\r\n </svg>\r\n </button>\r\n </div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./attribute-options.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./attribute-options.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./attribute-options.vue?vue&type=template&id=f38bdf96&\"\nimport script from \"./attribute-options.vue?vue&type=script&lang=js&\"\nexport * from \"./attribute-options.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f38bdf96')) {\n api.createRecord('f38bdf96', component.options)\n } else {\n api.reload('f38bdf96', component.options)\n }\n module.hot.accept(\"./attribute-options.vue?vue&type=template&id=f38bdf96&\", function () {\n api.rerender('f38bdf96', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/attribute-options/attribute-options.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"options-overlay\",\n class: { \"is-active\": _vm.isOpen && _vm.currentOptionList },\n attrs: { tabindex: \"0\" },\n on: {\n keydown: function ($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])\n ) {\n return null\n }\n return _vm.close($event)\n },\n },\n },\n [\n _c(\n \"button\",\n { staticClass: \"options-overlay__close\", on: { click: _vm.close } },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-close\" },\n }),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _vm.overlayItems && _vm.overlayItems.length > 1\n ? _c(\"tabs-bar\", {\n attrs: {\n \"tab-click-handler\": _vm.optionListChangeHandler,\n \"active-index\": _vm.activeOptionListIndex,\n items: _vm.overlayItems,\n },\n inlineTemplate: {\n render: function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"nav\", { staticClass: \"tabs-bar\" }, [\n _c(\n \"div\",\n { staticClass: \"tabs-bar__inner\" },\n _vm._l(_vm.items, function (item, index) {\n return _c(\n \"button\",\n {\n key: index,\n staticClass: \"tabs-bar__button\",\n class: { \"is-active\": index === _vm.activeIndex },\n on: {\n click: function ($event) {\n return _vm.tabClickHandler(item, index)\n },\n },\n },\n [_c(\"span\", [_vm._v(_vm._s(item.name))])]\n )\n }),\n 0\n ),\n ])\n },\n staticRenderFns: [],\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"options-overlay__inner\" }, [\n _vm.currentOptionListItems && _vm.currentOptionListItems.length > 0\n ? _c(\n \"ul\",\n {\n key: _vm.listKey,\n staticClass: \"options-overlay__list\",\n class: { \"is-editable\": _vm.currentOptionList.isEditable },\n },\n _vm._l(_vm.currentOptionListItems, function (item) {\n return _c(\n \"li\",\n {\n key: item.name + \"_\" + item.id,\n staticClass: \"options-overlay__list-item\",\n class: {\n \"is-active\": item.isActive,\n \"is-deleting\":\n _vm.isDeleting &&\n _vm.currentDeleteItem.variantCode === item.variantCode,\n },\n },\n [\n _c(\n \"a\",\n {\n staticClass: \"options-overlay__button\",\n attrs: { href: item.href },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-angle-arrow\",\n },\n }),\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.name))]),\n _vm._v(\" \"),\n _c(\"img\", {\n attrs: { src: item.image.src, alt: item.name },\n }),\n ]\n ),\n _vm._v(\" \"),\n _vm.currentOptionList.isEditable &&\n (_vm.isMobile ||\n !_vm.isDeleting ||\n (_vm.isDeleting &&\n _vm.currentDeleteItem.variantCode === item.variantCode))\n ? _c(\n \"button\",\n {\n staticClass: \"options-overlay__list-item__delete\",\n on: {\n click: function ($event) {\n return _vm.deleteItemHandler(item)\n },\n },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewbox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-close\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isDeleting &&\n _vm.currentDeleteItem.variantCode === item.variantCode\n ? _c(\n \"div\",\n {\n staticClass:\n \"options-overlay__list-item__confirmation\",\n },\n [\n _c(\"p\", [\n _vm._v(\n _vm._s(_vm.systemText.variantDeleteHeadline)\n ),\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n { on: { click: _vm.deleteConfirmHandler } },\n [\n _vm._v(\n _vm._s(_vm.systemText.variantDeleteConfirm)\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n { on: { click: _vm.deleteCancelHandler } },\n [\n _vm._v(\n _vm._s(_vm.systemText.variantDeleteCancel)\n ),\n ]\n ),\n ]\n )\n : _vm._e(),\n ]\n )\n }),\n 0\n )\n : _vm._e(),\n ]),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport { mapState, mapActions } from \"vuex\";\r\nimport TabsBar from \"../../../experience/tabs-bar/tabs-bar\"\r\nimport Cookies from 'js-cookie'\r\nimport { CookiePrefix } from \"../constants\";\r\n\r\nexport default {\r\n name: \"options-overlay\",\r\n components: {\r\n TabsBar,\r\n },\r\n props: {\r\n systemText: {\r\n type: Object,\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n activeOptionListIndex: 0,\r\n listKey: 0,\r\n isDeleting: false,\r\n currentDeleteItem: null\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n bodyFixed: state => state.bodyFixed,\r\n currentProductId: state => state.reconfigurator.currentProductId,\r\n isOpen: state => state.reconfigurator.optionsOverlayOpen,\r\n overlayItems: state => state.reconfigurator.optionsOverlayItems,\r\n overlayActiveListIndex: state => state.reconfigurator.optionsOverlayActiveListIndex\r\n }),\r\n currentOptionList() {\r\n if (this.overlayItems && this.overlayItems.length) {\r\n return this.overlayItems[this.activeOptionListIndex];\r\n } else {\r\n return this.overlayItems || null;\r\n }\r\n },\r\n currentOptionListItems() {\r\n return this.currentOptionList ? this.currentOptionList.items : [];\r\n },\r\n },\r\n watch: {\r\n overlayActiveListIndex(index) {\r\n this.activeOptionListIndex = index;\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"closeOptionsOverlay\",\r\n \"hideOverlayBackdrop\",\r\n ]),\r\n close: function () {\r\n this.hideOverlayBackdrop();\r\n this.closeOptionsOverlay();\r\n },\r\n optionListChangeHandler: function (item, newIndex) {\r\n this.activeOptionListIndex = newIndex;\r\n },\r\n deleteItemHandler: function (item) {\r\n this.currentDeleteItem = item;\r\n this.isDeleting = true;\r\n },\r\n deleteCancelHandler: function () {\r\n this.currentDeleteItem = null;\r\n this.isDeleting = false;\r\n },\r\n deleteConfirmHandler: function () {\r\n\r\n this.currentOptionListItems.splice(this.currentOptionListItems.indexOf(this.currentDeleteItem), 1);\r\n\r\n if (this.currentOptionListItems.length === 0) {\r\n let index = this.overlayItems.indexOf(this.currentOptionList);\r\n console.log(\"index\", index)\r\n //if list empty, remove it\r\n this.overlayItems.splice(index, 1);\r\n this.activeOptionListIndex = 0;\r\n }\r\n\r\n // deleted item is the current option\r\n if (this.currentDeleteItem.isActive) {\r\n if (this.currentOptionListItems) {\r\n window.open(this.currentOptionListItems.href);\r\n }\r\n } else {\r\n //TODO: do something?\r\n }\r\n\r\n if (this.currentDeleteItem.variantCode) {\r\n\r\n let currentSaved = Cookies.get(CookiePrefix + this.currentProductId);\r\n console.log(\"DELETE | cookie before\", currentSaved);\r\n\r\n if (currentSaved) {\r\n currentSaved = currentSaved.replace(this.currentDeleteItem.variantCode, '');\r\n currentSaved = currentSaved.replace('||', '|');\r\n Cookies.set(CookiePrefix + this.currentProductId, currentSaved, { expires: 60 });\r\n\r\n console.log(\"DELETE | cookie after\", Cookies.get(CookiePrefix + this.currentProductId))\r\n }\r\n }\r\n\r\n this.listKey++;\r\n this.currentDeleteItem = null;\r\n this.isDeleting = false;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"options-overlay\" :class=\"{ 'is-active': isOpen && currentOptionList }\" v-on:keydown.esc=\"close\"\r\n tabindex=\"0\">\r\n\r\n <button class=\"options-overlay__close\" v-on:click=\"close\">\r\n <svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-close\"></use>\r\n </svg>\r\n </button>\r\n\r\n <tabs-bar inline-template v-if=\"overlayItems && overlayItems.length > 1\"\r\n :tab-click-handler=\"optionListChangeHandler\" :active-index=\"activeOptionListIndex\" :items=\"overlayItems\">\r\n <nav class=\"tabs-bar\">\r\n <div class=\"tabs-bar__inner\">\r\n <button class=\"tabs-bar__button\" v-for=\"(item, index) in items\" :key=\"index\"\r\n :class=\"{ 'is-active': index === activeIndex }\" v-on:click=\"tabClickHandler(item, index)\" v-cloak>\r\n <span>{{ item.name }}</span>\r\n </button>\r\n </div>\r\n </nav>\r\n </tabs-bar>\r\n\r\n <div class=\"options-overlay__inner\">\r\n\r\n <ul class=\"options-overlay__list\" v-if=\"currentOptionListItems && currentOptionListItems.length > 0\"\r\n :key=\"listKey\" :class=\"{ 'is-editable': currentOptionList.isEditable }\">\r\n <li v-for=\"item in currentOptionListItems\" :key=\"item.name + '_' + item.id\"\r\n class=\"options-overlay__list-item\"\r\n :class=\"{ 'is-active': item.isActive, 'is-deleting': (isDeleting && currentDeleteItem.variantCode === item.variantCode) }\">\r\n\r\n <a class=\"options-overlay__button\" :href=\"item.href\">\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-angle-arrow\"></use>\r\n </svg>\r\n <span>{{ item.name }}</span>\r\n <img :src=\"item.image.src\" :alt=\"item.name\">\r\n </a>\r\n\r\n <button class=\"options-overlay__list-item__delete\" v-on:click=\"deleteItemHandler(item)\"\r\n v-if=\"currentOptionList.isEditable && (isMobile || !isDeleting || isDeleting && currentDeleteItem.variantCode === item.variantCode)\">\r\n <svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-close\"></use>\r\n </svg>\r\n </button>\r\n\r\n <div class=\"options-overlay__list-item__confirmation\"\r\n v-if=\"isDeleting && currentDeleteItem.variantCode === item.variantCode\">\r\n <p>{{ systemText.variantDeleteHeadline }}</p>\r\n <button v-on:click=\"deleteConfirmHandler\">{{ systemText.variantDeleteConfirm }}</button>\r\n <button v-on:click=\"deleteCancelHandler\">{{ systemText.variantDeleteCancel }}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./options-overlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./options-overlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./options-overlay.vue?vue&type=template&id=33673c1d&\"\nimport script from \"./options-overlay.vue?vue&type=script&lang=js&\"\nexport * from \"./options-overlay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('33673c1d')) {\n api.createRecord('33673c1d', component.options)\n } else {\n api.reload('33673c1d', component.options)\n }\n module.hot.accept(\"./options-overlay.vue?vue&type=template&id=33673c1d&\", function () {\n api.rerender('33673c1d', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/options-overlay/options-overlay.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"material-group-info-overlay\",\n class: { \"is-active\": _vm.overlayData && _vm.isOpen },\n attrs: { tabindex: \"0\" },\n },\n [\n _c(\n \"button\",\n {\n staticClass: \"material-group-info-overlay__close\",\n on: { click: _vm.close },\n },\n [\n _vm.isMobile\n ? _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-close\" },\n }),\n ]\n )\n : _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"/dist/svg/symbols.svg#svg-left\" },\n }),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _vm.overlayData\n ? _c(\n \"div\",\n { ref: \"inner\", staticClass: \"material-group-info-overlay__inner\" },\n [\n _c(\"h3\", [_vm._v(_vm._s(_vm.overlayData.headline))]),\n _vm._v(\" \"),\n _vm.overlayData.bodyText\n ? _c(\"p\", [_vm._v(_vm._s(_vm.overlayData.bodyText))])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.overlayData.properties &&\n _vm.overlayData.properties.length > 0\n ? _c(\n \"dl\",\n _vm._l(_vm.overlayData.properties, function (item, index) {\n return _c(\"span\", { key: index + \"_\" + item.name }, [\n _c(\"dt\", [_vm._v(_vm._s(item.name))]),\n _vm._v(\" \"),\n _c(\"dd\", [_vm._v(_vm._s(item.value))]),\n ])\n }),\n 0\n )\n : _vm._e(),\n ]\n )\n : _vm._e(),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\n import { mapState, mapActions } from \"vuex\";\r\n import { rInterval } from \"../../../../basics/js/utils\";\r\n\r\n export default {\r\n name: \"material-group-info-overlay\",\r\n data() {\r\n return {\r\n intervalClear:-1\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n windowW: state => state.windowW,\r\n isMobile: state => state.isMobile,\r\n bodyFixed: state => state.bodyFixed,\r\n isOpen: state => state.reconfigurator.materialGroupInfoOverlayOpen,\r\n overlayData: state => state.reconfigurator.materialGroupInfoOverlayData\r\n }),\r\n },\r\n watch: {\r\n materialGroupInfoOverlayData(newVal) {\r\n if ( newVal ) {\r\n\t\t this.intervalClear = rInterval(this.imageLoadListener.bind(this), 100).clear;\r\n }\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"closeMaterialGroupInfoOverlay\",\r\n \"hideOverlayBackdrop\",\r\n ]),\r\n close: function() {\r\n this.closeMaterialGroupInfoOverlay();\r\n },\r\n }\r\n };\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"material-group-info-overlay\" :class=\"{'is-active': overlayData && isOpen}\" tabindex=\"0\">\r\n \r\n <button class=\"material-group-info-overlay__close\" v-on:click=\"close\">\r\n <svg viewbox=\"0 0 100 100\" class=\"svg-icon\" v-if=\"isMobile\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-close\"></use>\r\n </svg>\r\n <svg viewbox=\"0 0 100 100\" class=\"svg-icon\" v-else>\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-left\"></use>\r\n </svg>\r\n </button>\r\n \r\n <div class=\"material-group-info-overlay__inner\" ref=\"inner\" v-if=\"overlayData\">\r\n <h3>{{overlayData.headline}}</h3>\r\n <p v-if=\"overlayData.bodyText\">{{overlayData.bodyText}}</p>\r\n <dl v-if=\"overlayData.properties && overlayData.properties.length > 0\">\r\n <span v-for=\"(item,index) in overlayData.properties\" :key=\"index+'_'+item.name\">\r\n <dt>{{item.name}}</dt>\r\n <dd>{{item.value}}</dd>\r\n </span>\r\n </dl>\r\n </div>\r\n \r\n </div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./material-group-info-overlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./material-group-info-overlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./material-group-info-overlay.vue?vue&type=template&id=7c7359b6&\"\nimport script from \"./material-group-info-overlay.vue?vue&type=script&lang=js&\"\nexport * from \"./material-group-info-overlay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7c7359b6')) {\n api.createRecord('7c7359b6', component.options)\n } else {\n api.reload('7c7359b6', component.options)\n }\n module.hot.accept(\"./material-group-info-overlay.vue?vue&type=template&id=7c7359b6&\", function () {\n api.rerender('7c7359b6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/material-group-info-overlay/material-group-info-overlay.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"configure-panels\",\n class: { \"is-loading\": _vm.variantLoading },\n },\n [\n _vm.stepData && !_vm.stepData.optionGroup\n ? _c(\"div\", { staticClass: \"configure-panels__inner\" }, [\n _c(\"h4\", { staticClass: \"configure-panels__headline\" }, [\n _vm._v(\"\\n Data error\\n \"),\n ]),\n _vm._v(\" \"),\n _vm.stepData.error\n ? _c(\"pre\", { staticClass: \"configure-panels__error\" }, [\n _vm._v(\n \" \" + _vm._s(_vm.stepData.error) + \"\\n \"\n ),\n ])\n : _c(\"pre\", { staticClass: \"configure-panels__error\" }, [\n _vm._v(\n \" \" +\n _vm._s(JSON.stringify(_vm.stepData, null, 6)) +\n \"\\n \"\n ),\n ]),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.stepData &&\n _vm.stepData.optionGroup &&\n !_vm.stepLoading &&\n _vm.showModelSelector\n ? _c(\n \"div\",\n { staticClass: \"configure-panels__inner\" },\n [\n _vm.stepData &&\n _vm.stepData.optionGroup &&\n _vm.stepData.optionGroup.label\n ? _c(\n \"h4\",\n {\n staticClass: \"configure-panels__headline\",\n class: { \"is-bordered\": _vm.headlineIsSticky },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.stepData.optionGroup.label.toLowerCase()) +\n \"\\n \"\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.stepData.optionGroup\n ? _c(\"div\", {\n staticClass: \"configure-panels__bodytext\",\n domProps: {\n innerHTML: _vm._s(_vm.stepData.optionGroup.description),\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"model-selector\", {\n attrs: {\n items: _vm.stepData.optionGroup.options.default[0].items,\n label: _vm.stepData.optionGroup.label,\n \"feature-id\": _vm.stepData.optionGroup.id,\n },\n }),\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.stepData &&\n _vm.stepData.optionGroup &&\n !_vm.stepLoading &&\n _vm.showMaterialSelector\n ? _c(\"div\", { staticClass: \"configure-panels__inner\" }, [\n _vm.stepData &&\n _vm.stepData.optionGroup &&\n _vm.stepData.optionGroup.label\n ? _c(\n \"h4\",\n {\n staticClass: \"configure-panels__headline\",\n class: { \"is-bordered\": _vm.headlineIsSticky },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.stepData.optionGroup.label.toLowerCase()) +\n \"\\n \"\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.stepData.optionGroup\n ? _c(\"div\", {\n staticClass: \"configure-panels__bodytext\",\n domProps: {\n innerHTML: _vm._s(_vm.stepData.optionGroup.description),\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"configure-panels__controls\" }, [\n _c(\n \"div\",\n { staticClass: \"configure-panels__controls__top\" },\n [\n !_vm.isSearchView && !_vm.isFiltersView\n ? _c(\n \"button\",\n {\n staticClass: \"control-button for-search\",\n on: { click: _vm.searchClickHandler },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-search\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.isSearchView && !_vm.isFiltersView\n ? _c(\n \"button\",\n {\n staticClass: \"control-button for-filters\",\n on: { click: _vm.filtersClickHandler },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-filter-sliders\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isSearchView || _vm.isFiltersView\n ? _c(\n \"button\",\n {\n staticClass: \"control-button for-exit-filters\",\n on: { click: _vm.exitClickHandler },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\":\n \"/dist/svg/symbols.svg#svg-minus2\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.isSearchView && _vm.categoryTabsList.length > 1\n ? _c(\"tabs-bar\", {\n attrs: {\n \"tab-click-handler\": _vm.categoryChangeHandler,\n \"active-index\": _vm.activeCategoryIndex,\n items: _vm.categoryTabsList,\n },\n inlineTemplate: {\n render: function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"nav\",\n {\n staticClass:\n \"configure-panels__controls__category tabs-bar\",\n },\n [\n _c(\n \"div\",\n { staticClass: \"tabs-bar__inner\" },\n _vm._l(_vm.items, function (item, index) {\n return _c(\n \"button\",\n {\n key: index,\n staticClass: \"tabs-bar__button\",\n class: {\n \"is-active\":\n index === _vm.activeIndex,\n },\n on: {\n click: function ($event) {\n return _vm.tabClickHandler(\n item,\n index\n )\n },\n },\n },\n [_c(\"span\", [_vm._v(_vm._s(item.name))])]\n )\n }),\n 0\n ),\n ]\n )\n },\n staticRenderFns: [],\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n !_vm.isFiltersView &&\n (_vm.isSearchView ||\n _vm.categoryTabsList.length === 1),\n expression:\n \"!isFiltersView && (isSearchView || categoryTabsList.length === 1)\",\n },\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.searchString,\n expression: \"searchString\",\n },\n ],\n ref: \"searchInput\",\n staticClass: \"configure-panels__controls__search\",\n attrs: { type: \"text\", placeholder: \"Search\" },\n domProps: { value: _vm.searchString },\n on: {\n focus: _vm.searchFocusHandler,\n input: function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.searchString = $event.target.value\n },\n },\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.isFiltersView &&\n _vm.categoryTabsList.length === 1,\n expression:\n \"isFiltersView && categoryTabsList.length === 1\",\n },\n ],\n staticClass: \"configure-panels__controls__label\",\n },\n [_vm._v(\"Filter\")]\n ),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"configure-panels__controls__filters\",\n class: {\n \"is-active\":\n _vm.isFiltersView && _vm.searchString.length === 0,\n },\n },\n [\n _c(\"tabs-bar\", {\n attrs: {\n \"tab-click-handler\": _vm.subcategoryChangeHandler,\n \"active-index\": _vm.activeSubCategoryIndex,\n items: _vm.subCategoryTabsList,\n },\n inlineTemplate: {\n render: function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"nav\",\n {\n staticClass:\n \"configure-panels__controls__subcategory tabs-bar\",\n },\n [\n _c(\n \"div\",\n { staticClass: \"tabs-bar__inner\" },\n _vm._l(_vm.items, function (item, index) {\n return _c(\n \"button\",\n {\n key: index,\n staticClass: \"tabs-bar__button\",\n class: {\n \"is-active\": index === _vm.activeIndex,\n },\n on: {\n click: function ($event) {\n return _vm.tabClickHandler(item, index)\n },\n },\n },\n [_c(\"span\", [_vm._v(_vm._s(item.name))])]\n )\n }),\n 0\n ),\n ]\n )\n },\n staticRenderFns: [],\n },\n }),\n _vm._v(\" \"),\n _vm.extractedColorList && _vm.extractedColorList.size > 0\n ? _c(\n \"div\",\n {\n staticClass: \"filter-section\",\n class: { \"is-active\": _vm.activeColorFilter },\n },\n [\n _c(\n \"ul\",\n _vm._l(\n _vm.extractedColorList,\n function (item, index) {\n return _c(\"li\", { key: \"color\" + index }, [\n _c(\n \"button\",\n {\n staticClass: \"filter-button\",\n class: {\n \"is-active\":\n item === _vm.activeColorFilter,\n },\n on: {\n click: function () {\n return _vm.colorFilterChosen(item)\n },\n },\n },\n [\n _c(\"em\", {\n style: {\n backgroundColor: _vm.colorMap[item],\n },\n }),\n _c(\"span\", [_vm._v(_vm._s(item))]),\n ]\n ),\n ])\n }\n ),\n 0\n ),\n ]\n )\n : _vm._e(),\n ],\n 1\n ),\n ]),\n _vm._v(\" \"),\n (_vm.searchString.length >= _vm.searchStringMinLength ||\n _vm.activeColorFilter ||\n _vm.activeSubCategoryType) &&\n _vm.activeItems\n ? _c(\n \"div\",\n {\n staticClass: \"configure-panels__result\",\n class: { \"is-searching\": _vm.isSearchView },\n },\n [\n _vm.activeItems.length > 0\n ? _c(\"swatch-selector\", {\n key:\n _vm.activeSubCategoryType +\n \"_\" +\n _vm.activeColorFilter +\n \"_\" +\n _vm.searchString,\n attrs: {\n \"initial-selected-swatch\": \"\",\n \"initial-expanded\": true,\n items: _vm.activeItems,\n \"feature-id\": _vm.stepData.optionGroup.id,\n },\n })\n : _c(\"h5\", { staticClass: \"no-results\" }, [\n _vm._v(_vm._s(_vm.systemText.noResultsText)),\n ]),\n ],\n 1\n )\n : _c(\n \"div\",\n {\n staticClass: \"configure-panels__result\",\n class: { \"is-searching\": _vm.isSearchView },\n },\n _vm._l(\n _vm.stepData.optionGroup.options[_vm.activeCategoryType],\n function (group, index) {\n return _c(\"swatch-selector\", {\n key: \"group_\" + index + \"_\" + group.name,\n attrs: {\n \"initial-selected-swatch\": \"\",\n \"initial-expanded\": false,\n \"initial-rows\": _vm.isMobile ? 1 : 2,\n \"row-size\": 4,\n \"lazy-loading\": true,\n \"has-info\": true,\n headline: group.name,\n \"body-text\": group.description,\n items: group.items,\n properties: group.properties,\n \"feature-id\": _vm.stepData.optionGroup.id,\n },\n })\n }\n ),\n 1\n ),\n ])\n : _vm._e(),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"swatch-selector\", style: \"--row-size: \" + _vm.rowSize },\n [\n _c(\"h5\", { staticClass: \"swatch-selector__headline\" }, [\n _c(\"span\", [_vm._v(_vm._s(_vm.headline))]),\n _vm._v(\" \"),\n _vm.hasInfo\n ? _c(\n \"button\",\n {\n staticClass: \"tooltip-button\",\n on: { click: _vm.infoClickHandler },\n },\n [\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-question\",\n },\n }),\n ]\n ),\n ]\n )\n : _vm._e(),\n ]),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { key: _vm.updateKey, staticClass: \"swatch-selector__list\" },\n [\n _vm._l(_vm.loopableItems, function (item) {\n return _c(\n \"li\",\n {\n key: item.value + item.index,\n staticClass: \"swatch-selector__list-item\",\n },\n [\n _c(\n \"button\",\n {\n staticClass: \"swatch-selector__button\",\n class: { \"is-active\": _vm.isItemActive(item.id) },\n on: {\n click: function ($event) {\n return _vm.selectSwatch(item)\n },\n },\n },\n [\n _c(\"div\", [\n _vm.lazyLoading\n ? _c(\"img\", {\n attrs: { \"data-src\": item.image, alt: item.value },\n })\n : _c(\"img\", {\n attrs: { src: item.image, alt: item.value },\n }),\n ]),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.value))]),\n ]\n ),\n ]\n )\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n { ref: \"expandItem\", staticClass: \"swatch-selector__expand-item\" },\n [\n _c(\n \"button\",\n {\n ref: \"expandButton\",\n staticClass: \"swatch-selector__button\",\n on: { click: _vm.expandClickHandler },\n },\n [_vm._v(\"+ \" + _vm._s(_vm.remainingItemsCount))]\n ),\n ]\n ),\n ],\n 2\n ),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport { mapState, mapActions } from \"vuex\";\r\nimport { inView } from \"../../../../basics/js/methods/inView/inView\";\r\nimport { rInterval } from \"../../../../basics/js/utils\";\r\n\r\nexport default {\r\n name: 'swatch-selector',\r\n props: {\r\n\t\tinitialSelectedSwatch: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\trowSize: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 4,\r\n\t\t},\r\n\t\tinitialRows: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 1,\r\n\t\t},\r\n\t\thasInfo: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\tlazyLoading: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\theadline: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tbodyText: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\tproperties: {\r\n\t\t\ttype: Array,\r\n\t\t\trequired: false,\r\n\t\t},\r\n\t\titems: {\r\n\t\t\ttype: Array,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\tinitialExpanded: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tfeatureId: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true\r\n\t\t}\r\n\t},\r\n data() {\r\n return {\r\n isLoaded: false,\r\n\t\t\texpanded: false,\r\n\t\t\texpandLoopIndex: 0,\r\n\t\t\tloopableItems: [],\r\n\t\t\tremainingItemsCount: 0,\r\n\t\t\tshownItemsCount: 0,\r\n\t\t\titemCount: 0,\r\n\t\t\tupdateKey: 0\r\n };\r\n },\r\n\tcomputed: {\r\n\t\t...mapState({\r\n\t\t\tcurrentVariantFeatures: state => state.reconfigurator.currentVariantFeatures,\r\n\t\t\tproductId: state => state.reconfigurator.currentProductId,\r\n\t\t\tcurrentStep: state => state.reconfigurator.currentStep,\r\n\t\t}),\r\n\t\tselectedSwatch() {\r\n\t\t\treturn this.initialSelectedSwatch || '';\r\n\t\t}\r\n\t},\r\n methods: {\r\n\t\t...mapActions([\r\n \"openMaterialGroupInfoOverlay\",\r\n\t\t\t\"showOverlayBackdrop\",\r\n\t\t\t\"updateProductFeature\"\r\n\t\t]),\r\n selectSwatch(item) {\r\n\t\t\tconsole.log('selectSwatch', item.id, item.cylindoFeatureValue); \r\n\t\t\tthis.updateProductFeature({id: this.featureId, item:item});\t\t\r\n\t\t},\r\n\t\texpandClickHandler() {\r\n\t\t\tthis.$refs.expandItem.classList.remove('is-shown');\r\n\t\t\tthis.loopableItems = this.items;\r\n\r\n\t\t\t// Ready items for animation\r\n\t\t\tthis.loopableItems.forEach(item => {\r\n\t\t\t\tthis.expandLoopIndex++;\t\t\t\t\r\n\t\t\t});\r\n\t\t\t// setTimeout(()=>{\r\n\t\t\t// \tthis.loopableItems.forEach(item => {\r\n\t\t\t// \t});\r\n\t\t\t// \tconsole.log(\"this.loopableItems\",this.loopableItems)\r\n\t\t\t// }, 500);\r\n\t\t\tthis.expandLoopIndex = 0;\r\n\t\t\tthis.expanded = true;\r\n\t\t\tthis.updateKey++;\r\n\r\n\t\t\tsetTimeout( this.loadImages, 1000);\r\n\r\n\t\t},\r\n\t\tsetVisibleItems() {\r\n\t\t\tthis.loopableItems.forEach((item, index) => {\r\n\t\t\t\titem.initialVisible = index > (this.itemCount - this.remainingItemsCount) ? false : true;\r\n\t\t\t});\r\n\t\t},\r\n\t\tloadImages() {\r\n\t\t\tthis.itemsInDom = this.$el.querySelectorAll('.swatch-selector__list-item');\r\n\t\t\tthis.itemsInDom.forEach(item => {\r\n\t\t\t\tif (!item.classList.contains('is-loaded')) {\r\n\t\t\t\t\tconst imageEl = item.querySelector('img');\r\n\t\t\t\t\tif ( imageEl.dataset.src ) {\r\n\t\t\t\t\t\tlet imageObject = new Image();\r\n\t\t\t\t\t\timageObject.onload = () => {\r\n\t\t\t\t\t\t\titem.classList.add('is-loaded');\r\n\t\t\t\t\t\t\timageEl.src = imageEl.dataset.src;\r\n\t\t\t\t\t\t\timageEl.removeAttribute('data-src');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\timageObject.src = imageEl.dataset.src;\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tinfoClickHandler() {\r\n\t\t\tthis.openMaterialGroupInfoOverlay({\r\n\t\t\t\theadline: this.headline, \r\n\t\t\t\tbodyText: this.bodyText, \r\n\t\t\t\tproperties: this.properties\r\n\t\t\t});\r\n\t\t},\r\n\t\tisItemActive(value) {\r\n\t\t\tif ( this.currentVariantFeatures ) {\r\n\r\n\t\t\t\tif ( this.currentVariantFeatures[this.featureId] === value ) console.log('isItemActive found!', this.currentVariantFeatures[this.featureId], value)\r\n\t\t\t\treturn this.currentVariantFeatures[this.featureId] === value;\r\n\t\t\t} \r\n\t\t\treturn false;\r\n\t\t}\r\n },\r\n\tbeforeMount() {\r\n\t\tthis.itemCount = this.items.length;\r\n\t\t\r\n\t\tif ( this.initialExpanded || this.itemCount <= (this.rowSize * this.initialRows)) {\r\n\t\t\tthis.loopableItems = this.items;\r\n\t\t\t\r\n\t\t\tthis.expanded = true;\r\n\t\t\tthis.remainingItemsCount = 0;\r\n\t\t\tthis.shownItemsCount = this.itemCount;\r\n\t\t\t\r\n\t\t} else {\r\n\t\t\tthis.loopableItems = this.items.slice(0,(this.rowSize * this.initialRows) - 1);\r\n\t\t\tthis.shownItemsCount = this.loopableItems.length;\r\n\t\t\tthis.remainingItemsCount = Math.max(0, this.itemCount - this.shownItemsCount);\r\n\t\t\tthis.shownItemsCount = this.itemCount - this.remainingItemsCount;\r\n\t\t}\r\n\r\n\t\tthis.loopableItems.forEach((item, index) => {\r\n\t\t\titem.initialVisible = index >= this.shownItemsCount ? this.expanded : true;\r\n\t\t\titem.index = item.id;\r\n\t\t});\r\n\t},\r\n mounted() {\r\n\t\tthis.isLoaded = true;\r\n\r\n\t\tif (!this.expanded && this.$refs.expandButton ) {\r\n\t\t\tif (this.remainingItemsCount > 0) {\r\n\t\t\t\tthis.$refs.expandItem.classList.add('is-shown');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinView({\r\n\t\t\tel: this.$el,\r\n\t\t\tthreshold: .1,\r\n\t\t\tratio: .1,\r\n\t\t\tcallback: (inView) => {\r\n\t\t\t\tif (inView) {\r\n\t\t\t\t\tthis.loadImages();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"swatch-selector\" :style=\"`--row-size: ${rowSize}`\">\r\n\t\t<h5 class=\"swatch-selector__headline\">\r\n\t\t\t<span>{{headline}}</span> \r\n\t\t\t<button v-if=\"hasInfo\" class=\"tooltip-button\" v-on:click=\"infoClickHandler\">\r\n\t\t\t\t<svg viewBox=\"0 0 100 100\" class=\"svg-icon\">\r\n\t\t\t\t\t<use xlink:href=\"/dist/svg/symbols.svg#svg-question\"></use>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t</h5>\r\n\t\t<ul class=\"swatch-selector__list\" :key=\"updateKey\">\r\n\t\t\t<li\r\n\t\t\t\tv-for=\"item in loopableItems\"\r\n\t\t\t\t:key=\"item.value+item.index\"\r\n\t\t\t\tclass=\"swatch-selector__list-item\">\r\n\t\t\t\t<button class=\"swatch-selector__button\" @click=\"selectSwatch(item)\" :class=\"{'is-active': isItemActive(item.id)}\">\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t<img :data-src=\"item.image\" :alt=\"item.value\" v-if=\"lazyLoading\">\r\n\t\t\t\t\t\t<img :src=\"item.image\" :alt=\"item.value\" v-else>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span>{{ item.value }}</span>\r\n\t\t\t\t</button>\r\n\t\t\t</li>\r\n\t\t\t<li class=\"swatch-selector__expand-item\" ref=\"expandItem\">\r\n\t\t\t\t<button class=\"swatch-selector__button\" ref=\"expandButton\" @click=\"expandClickHandler\">+ {{remainingItemsCount}}</button>\r\n\t\t\t</li>\r\n\t\t</ul>\r\n\t</div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./swatch-selector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./swatch-selector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./swatch-selector.vue?vue&type=template&id=736de90a&\"\nimport script from \"./swatch-selector.vue?vue&type=script&lang=js&\"\nexport * from \"./swatch-selector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('736de90a')) {\n api.createRecord('736de90a', component.options)\n } else {\n api.reload('736de90a', component.options)\n }\n module.hot.accept(\"./swatch-selector.vue?vue&type=template&id=736de90a&\", function () {\n api.rerender('736de90a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/swatch-selector/swatch-selector.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"model-selector\" }, [\n _c(\n \"ul\",\n { staticClass: \"model-selector__list\" },\n _vm._l(_vm.items, function (item) {\n return _c(\n \"li\",\n { key: item.id, staticClass: \"model-selector__list-item\" },\n [\n _c(\n \"button\",\n {\n staticClass: \"model-selector__button\",\n class: { \"is-active\": _vm.isItemActive(item.id) },\n on: {\n click: function ($event) {\n return _vm.selectModel(item)\n },\n },\n },\n [\n item.image\n ? _c(\"img\", {\n attrs: { src: item.image, alt: item.imageAlt },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n staticClass: \"svg-icon\",\n attrs: { viewBox: \"0 0 100 100\" },\n },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-angle-arrow\",\n },\n }),\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.name || item.value))]),\n ]\n ),\n ]\n )\n }),\n 0\n ),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\n import { mapState, mapActions } from \"vuex\";\r\n \r\n export default {\r\n name: \"model-selector\",\r\n props: {\r\n label: {\r\n type: String,\r\n },\r\n items: {\r\n type: Array,\r\n required: true\r\n },\r\n featureId: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n currentVariantFeatures: state => state.reconfigurator.currentVariantFeatures,\r\n productId: state => state.reconfigurator.currentProductId,\r\n currentStep: state => state.reconfigurator.currentStep,\r\n }), \r\n },\r\n methods: {\r\n ...mapActions([\r\n \"updateProductFeature\"\r\n ]),\r\n selectModel(item) {\r\n this.updateProductFeature({id: this.featureId, item:item});\r\n },\r\n isItemActive(value) {\r\n return this.currentVariantFeatures ? this.currentVariantFeatures[this.featureId] === value : false;\r\n }\r\n }\r\n };\r\n</script>\r\n\r\n\r\n<template>\r\n <div class=\"model-selector\"> \r\n <ul class=\"model-selector__list\">\r\n\t\t\t<li\r\n\t\t\t\tv-for=\"item in items\"\r\n\t\t\t\t:key=\"item.id\"\r\n\t\t\t\tclass=\"model-selector__list-item\">\r\n\t\t\t\t<button class=\"model-selector__button\" v-on:click=\"selectModel(item)\" :class=\"{'is-active': isItemActive(item.id)}\">\r\n\t\t\t\t\t<img v-if=\"item.image\" :src=\"item.image\" :alt=\"item.imageAlt\">\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-angle-arrow\"></use>\r\n </svg>\r\n\t\t\t\t\t<span>{{ item.name || item.value }}</span>\t\t\t\t\t\r\n\t\t\t\t</button>\r\n\t\t\t</li>\r\n </ul>\r\n </div>\r\n</template>","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./model-selector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./model-selector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./model-selector.vue?vue&type=template&id=a633480e&\"\nimport script from \"./model-selector.vue?vue&type=script&lang=js&\"\nexport * from \"./model-selector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('a633480e')) {\n api.createRecord('a633480e', component.options)\n } else {\n api.reload('a633480e', component.options)\n }\n module.hot.accept(\"./model-selector.vue?vue&type=template&id=a633480e&\", function () {\n api.rerender('a633480e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/model-selector/model-selector.vue\"\nexport default component.exports","<script>\r\nimport { mapState, mapActions } from \"vuex\";\r\nimport { rInterval } from \"./../../../../basics/js/utils\";\r\n\r\nimport { OptionsType, ControlsMode } from \"../constants\"\r\nimport { RECONFIGURATOR_GETSTEP_ASYNC, RECONFIGURATOR_GETVARIANT_ASYNC } from \"../../../../basics/js/store/static\";\r\nimport TabsBar from \"../../../experience/tabs-bar/tabs-bar\"\r\n\r\nimport SwatchSelector from \"../swatch-selector/swatch-selector.vue\"\r\nimport ModelSelector from \"../model-selector/model-selector.vue\"\r\n\r\nexport default {\r\n name: \"configure-panels\",\r\n components: {\r\n SwatchSelector,\r\n ModelSelector,\r\n TabsBar,\r\n },\r\n props: {\r\n systemText: {\r\n type: Object,\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n searchStringMinLength: 2,\r\n\r\n activeCategoryType: OptionsType.DEFAULT,\r\n activeCategoryIndex: 0,\r\n\r\n activeSubCategoryIndex: 0,\r\n activeSubCategoryType: null,\r\n\r\n activeColorFilter: null,\r\n\r\n subCategoryTabsList: [],\r\n\r\n\r\n controlsMode: ControlsMode.DEFAULT,\r\n allItems: [],\r\n activeItems: [],\r\n searchString: '',\r\n\r\n headlineIsSticky: false\r\n };\r\n },\r\n watch: {\r\n stepData(newStepData) {\r\n if ( newStepData && newStepData.optionGroup && newStepData.optionGroup.options ) {\r\n this.updateAllItems(newStepData);\r\n\r\n if ( this.stepData.optionGroup.options[this.activeCategoryType]) {\r\n this.updateActiveCategoryItems(newStepData);\r\n }\r\n }\r\n },\r\n activeCategoryType(newActiveCategoryType) {\r\n if ( this.stepData && this.stepData.optionGroup && this.stepData.optionGroup.options ) {\r\n const groups = this.stepData.optionGroup.options[newActiveCategoryType] || [];\r\n const items = [];\r\n const types = new Set();\r\n\r\n groups.map(group => {\r\n group.items.map(item => {\r\n items.push(item);\r\n if ( item.type ) {\r\n let t = item.type.toLowerCase();\r\n t = t.charAt(0).toUpperCase() +t.slice(1);\r\n types.add(t);\r\n }\r\n });\r\n });\r\n\r\n this.activeItems = items;\r\n\r\n if ( types.size > 0 ) {\r\n let tabs = [{name: this.systemText.allTypesText, id: 0}];\r\n let index = 0;\r\n types.forEach(item=>{\r\n tabs.push({name: item.charAt(0).toUpperCase() + item.slice(1), id: index+1});\r\n index++;\r\n });\r\n if ( tabs.length > 2 ) {\r\n this.subCategoryTabsList = tabs;\r\n } else {\r\n this.subCategoryTabsList = [];\r\n }\r\n } else {\r\n this.subCategoryTabsList = [];\r\n }\r\n }\r\n },\r\n searchString(newSearchString) {\r\n this.activeColorFilter = null;\r\n this.activeSubCategoryType = null;\r\n this.activeSubCategoryIndex = 0;\r\n\r\n console.log(\"searchString\", newSearchString)\r\n if ( this.stepData && this.stepData.optionGroup && this.stepData.optionGroup.options && newSearchString.length >= this.searchStringMinLength ) {\r\n const items = [];\r\n this.allItems.map(item => {\r\n if ( item.value.toLowerCase().indexOf(newSearchString.toLowerCase()) > -1 ) {\r\n items.push(item);\r\n }\r\n });\r\n\r\n console.log(\"searchString, items\", items.length);\r\n this.activeItems = items;\r\n }\r\n },\r\n activeColorFilter(newActiveColorFilter) {\r\n console.log(\"activeColorFilter\", newActiveColorFilter)\r\n\r\n if ( newActiveColorFilter && newActiveColorFilter.length > 0 ) {\r\n console.log(\"activeColorFilter parse\")\r\n const items1 = [];\r\n this.allItems.map(item1 => {\r\n if ( item1.color && item1.color.toLowerCase() === newActiveColorFilter.toLowerCase() ) {\r\n items1.push(item1);\r\n }\r\n });\r\n const items2 = [];\r\n if ( this.activeSubCategoryType ) {\r\n items1.map(item2 => {\r\n if ( item2.type && item2.type.toLowerCase() === this.activeSubCategoryType.toLowerCase() ) items2.push(item2);\r\n });\r\n }\r\n console.log(\"activeColorFilter parse done\", items1,items2)\r\n this.activeItems = this.activeSubCategoryType ? items2 : items1;\r\n }\r\n },\r\n activeSubCategoryType(newActiveSubCategoryType) {\r\n console.log(\"activeSubCategoryType\", newActiveSubCategoryType)\r\n\r\n if ( !this.allItems || this.allItems.length === 0 ) return false;\r\n\r\n else if ( newActiveSubCategoryType && newActiveSubCategoryType.length > 0 ) {\r\n console.log(\"activeSubCategoryType parse\")\r\n const items1 = [];\r\n this.allItems.map(item1 => {\r\n if ( item1.type && item1.type.toLowerCase() === newActiveSubCategoryType.toLowerCase() ) {\r\n items1.push(item1);\r\n }\r\n });\r\n const items2 = [];\r\n if ( this.activeColorFilter ) {\r\n items1.map(item2 => {\r\n if ( item2.color && item2.color.toLowerCase() === this.activeColorFilter.toLowerCase() ) items2.push(item2);\r\n });\r\n }\r\n console.log(\"activeSubCategoryType parse done\", items1,items2)\r\n\r\n this.activeItems = this.activeColorFilter ? items2 : items1;\r\n } else {\r\n //activeSubCategoryType is null\r\n const items = [];\r\n if ( this.activeColorFilter ) {\r\n this.allItems.map(item => {\r\n if ( item.color && item.color.toLowerCase() === this.activeColorFilter.toLowerCase() ) items.push(item);\r\n });\r\n }\r\n console.log(\"activeSubCategoryType parse done\", items)\r\n\r\n this.activeItems = this.activeColorFilter ? items : this.allItems;\r\n }\r\n }\r\n },\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n bodyFixed: state => state.bodyFixed,\r\n isConfiguring: state => state.reconfigurator.reconfiguratorOpen,\r\n stepData: state => state.reconfigurator[RECONFIGURATOR_GETSTEP_ASYNC.stateKey],\r\n stepLoading: state => state.reconfigurator[RECONFIGURATOR_GETSTEP_ASYNC.loadingKey],\r\n variantLoading: state => state.reconfigurator[RECONFIGURATOR_GETVARIANT_ASYNC.loadingKey],\r\n }),\r\n showModelSelector() {\r\n if ( !this.stepData || !this.stepData.optionGroup || !this.stepData.optionGroup.groupType ) return false;\r\n return this.stepData.optionGroup.groupType.toLowerCase() === \"radio\" || this.stepData.optionGroup.groupType.toLowerCase() === \"unknown\"\r\n },\r\n showMaterialSelector() {\r\n if ( !this.stepData || !this.stepData.optionGroup || !this.stepData.optionGroup.groupType ) return false;\r\n return this.stepData.optionGroup.groupType.toLowerCase() === \"upholstery\"\r\n },\r\n categoryTabsList() {\r\n if ( this.stepData && this.stepData.optionGroup && this.stepData.optionGroup.options ) {\r\n const options = this.stepData.optionGroup.options;\r\n let lists = [];\r\n\r\n if ( options.default ) {\r\n if ( options.special ) {\r\n lists.push({name: this.systemText.specialOptionsText, id:0});\r\n lists.push({name:this.systemText.defaultOptionsText, id:1});\r\n } else {\r\n lists.push({name:this.systemText.defaultOptionsText, id:0});\r\n }\r\n }\r\n return lists;\r\n }\r\n return null;\r\n },\r\n isDefaultView() {\r\n return this.controlsMode === ControlsMode.DEFAULT;\r\n },\r\n isSearchView() {\r\n return this.controlsMode === ControlsMode.SEARCH;\r\n },\r\n isFiltersView() {\r\n return this.controlsMode === ControlsMode.FILTERS;\r\n },\r\n extractedColorList() {\r\n if ( this.allItems.length ) {\r\n const colors = new Set();\r\n this.allItems.map(item => {\r\n if ( item.color ) colors.add(item.color);\r\n });\r\n return colors;\r\n } else {\r\n return [];\r\n }\r\n },\r\n colorMap() {\r\n return {\r\n 'Brown': '#976F38',\r\n 'Black': '#282828',\r\n 'Purple': '#CDC9D9',\r\n 'Yellow': '#FFF19F',\r\n 'Red': '#CB4242',\r\n 'Sand': '#F9F8F2',\r\n 'Grey': '#BFBFBF',\r\n 'Orange': '#DA6E00',\r\n 'Green': '#549F3D',\r\n 'Nature': '#E4E4DC',\r\n 'Blue': '#A9B5D6',\r\n 'Rose': '#FFC0CB',\r\n 'White': '#FFFFFF',\r\n }\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"hideOverlayBackdrop\",\r\n ]),\r\n categoryChangeHandler: function (item) {\r\n this.activeCategoryIndex = item.id;\r\n if ( this.activeCategoryIndex === 0 ) this.activeCategoryType = OptionsType.SPECIAL\r\n if ( this.activeCategoryIndex === 1 ) this.activeCategoryType = OptionsType.DEFAULT\r\n\r\n this.searchString = '';\r\n this.activeColorFilter = null;\r\n this.activeSubCategoryIndex = 0;\r\n this.activeSubCategoryType = null;\r\n },\r\n subcategoryChangeHandler: function (item) {\r\n this.activeSubCategoryIndex = item.id;\r\n if ( this.activeSubCategoryIndex === 0 ) this.activeSubCategoryType = null;\r\n else this.activeSubCategoryType = item.name;\r\n },\r\n filtersClickHandler: function () {\r\n this.searchString = '';\r\n this.activeColorFilter = null;\r\n\r\n //TODO: filter\r\n if ( this.controlsMode === ControlsMode.FILTERS) {\r\n this.controlsMode = ControlsMode.DEFAULT;\r\n } else {\r\n this.controlsMode = ControlsMode.FILTERS;\r\n }\r\n },\r\n searchClickHandler: function () {\r\n this.controlsMode = ControlsMode.SEARCH;\r\n\r\n setTimeout(()=>{\r\n console.log(\"this.$refs.searchInput\",this.$refs.searchInput);\r\n this.$refs.searchInput.focus();\r\n }, 100);\r\n },\r\n searchFocusHandler: function() {\r\n this.searchString = '';\r\n this.controlsMode = ControlsMode.SEARCH;\r\n\r\n this.activeColorFilter = null;\r\n this.activeSubCategoryType = null;\r\n this.activeSubCategoryIndex = 0;\r\n },\r\n exitClickHandler: function () {\r\n this.controlsMode = ControlsMode.DEFAULT;\r\n\r\n this.searchString = \"\";\r\n this.activeColorFilter = null;\r\n this.activeSubCategoryType = null;\r\n this.activeSubCategoryIndex = 0;\r\n },\r\n colorFilterChosen: function(color) {\r\n if ( this.activeColorFilter === color ) {\r\n this.activeColorFilter = null;\r\n } else {\r\n this.activeColorFilter = color;\r\n }\r\n },\r\n updateAllItems: function(data) {\r\n if ( data && data.optionGroup && data.optionGroup.options ) {\r\n const groups = data.optionGroup.options[OptionsType.DEFAULT] || [];\r\n const items = [];\r\n const types = new Set();\r\n groups.map(group => {\r\n group.items.map(item => {\r\n items.push(item);\r\n if ( item.type ) {\r\n let t = item.type.toLowerCase();\r\n t = t.charAt(0).toUpperCase() +t.slice(1);\r\n types.add(t);\r\n }\r\n });\r\n });\r\n this.allItems = items;\r\n if ( types.size > 0 ) {\r\n let tabs = [{name: this.systemText.allTypesText, id: 0}];\r\n let index = 0;\r\n types.forEach(item=>{\r\n tabs.push({name: item, id: index+1});\r\n index++;\r\n });\r\n if ( tabs.length > 2 ) {\r\n this.subCategoryTabsList = tabs;\r\n } else {\r\n this.subCategoryTabsList = [];\r\n }\r\n } else {\r\n this.subCategoryTabsList = [];\r\n }\r\n\r\n if ( data.optionGroup.options[OptionsType.SPECIAL] ) {\r\n this.activeCategoryType = OptionsType.SPECIAL;\r\n }\r\n }\r\n },\r\n updateActiveCategoryItems: function(data) {\r\n if ( data && data.optionGroup && data.optionGroup.options ) {\r\n const groups = data.optionGroup.options[this.activeCategoryType] || [];\r\n const items = [];\r\n const types = new Set();\r\n groups.map(group => {\r\n group.items.map(item => {\r\n items.push(item);\r\n if ( item.type ) {\r\n let t = item.type.toLowerCase();\r\n t = t.charAt(0).toUpperCase() +t.slice(1);\r\n types.add(t);\r\n }\r\n });\r\n });\r\n this.activeItems = items;\r\n\r\n if ( types.size > 0 ) {\r\n let tabs = [{name: this.systemText.allTypesText, id: 0}];\r\n let index = 0;\r\n types.forEach(item=>{\r\n tabs.push({name: item, id: index+1});\r\n index++;\r\n });\r\n if ( tabs.length > 2 ) {\r\n this.subCategoryTabsList = tabs;\r\n } else {\r\n this.subCategoryTabsList = [];\r\n }\r\n } else {\r\n this.subCategoryTabsList = [];\r\n }\r\n }\r\n },\r\n panelsScrollHandler: function() {\r\n if ( this.$el.scrollTop > 20 ) {\r\n this.headlineIsSticky = true;\r\n } else {\r\n this.headlineIsSticky = false;\r\n }\r\n }\r\n },\r\n mounted: function() {\r\n if ( this.stepData ){\r\n this.updateAllItems(this.stepData);\r\n this.updateActiveCategoryItems(this.stepData);\r\n }\r\n rInterval(this.panelsScrollHandler, 100);\r\n }\r\n\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"configure-panels\" :class=\"{'is-loading': variantLoading}\">\r\n\r\n <div class=\"configure-panels__inner\" v-if=\"stepData && !stepData.optionGroup\">\r\n <h4 class=\"configure-panels__headline\">\r\n Data error\r\n </h4>\r\n <pre class=\"configure-panels__error\" v-if=\"stepData.error\">\r\n {{stepData.error}}\r\n </pre>\r\n <pre class=\"configure-panels__error\" v-else>\r\n {{JSON.stringify(stepData, null, 6)}}\r\n </pre>\r\n </div>\r\n\r\n <div class=\"configure-panels__inner\" v-if=\"stepData && stepData.optionGroup && !stepLoading && showModelSelector\">\r\n\r\n <h4 class=\"configure-panels__headline\" v-if=\"stepData && stepData.optionGroup && stepData.optionGroup.label\" :class=\"{'is-bordered': headlineIsSticky}\">\r\n {{stepData.optionGroup.label.toLowerCase()}}\r\n </h4>\r\n\r\n <div class=\"configure-panels__bodytext\" v-if=\"stepData.optionGroup\" v-html=\"stepData.optionGroup.description\"></div>\r\n\r\n <model-selector\r\n :items=\"stepData.optionGroup.options.default[0].items\"\r\n :label=\"stepData.optionGroup.label\"\r\n :feature-id=\"stepData.optionGroup.id\">\r\n </model-selector>\r\n </div>\r\n\r\n\r\n <div class=\"configure-panels__inner\" v-if=\"stepData && stepData.optionGroup && !stepLoading && showMaterialSelector\">\r\n\r\n <h4 class=\"configure-panels__headline\" v-if=\"stepData && stepData.optionGroup && stepData.optionGroup.label\" :class=\"{'is-bordered': headlineIsSticky}\">\r\n {{stepData.optionGroup.label.toLowerCase()}}\r\n </h4>\r\n <div class=\"configure-panels__bodytext\" v-if=\"stepData.optionGroup\" v-html=\"stepData.optionGroup.description\"></div>\r\n\r\n\r\n <div class=\"configure-panels__controls\">\r\n\r\n <div class=\"configure-panels__controls__top\">\r\n\r\n\r\n <button class=\"control-button for-search\" v-on:click=\"searchClickHandler\" v-if=\"!isSearchView && !isFiltersView\">\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-search\"></use>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"control-button for-filters\" v-on:click=\"filtersClickHandler\" v-if=\"!isSearchView && !isFiltersView\">\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-filter-sliders\"></use>\r\n </svg>\r\n </button>\r\n <button class=\"control-button for-exit-filters\" v-on:click=\"exitClickHandler\" v-if=\"isSearchView || isFiltersView\">\r\n <svg viewBox=\"0 0 100 100\" class=\"svg-icon\">\r\n <use xlink:href=\"/dist/svg/symbols.svg#svg-minus2\"></use>\r\n </svg>\r\n </button>\r\n\r\n <tabs-bar inline-template :tab-click-handler=\"categoryChangeHandler\" :active-index=\"activeCategoryIndex\" :items=\"categoryTabsList\" v-if=\"!isSearchView && categoryTabsList.length > 1\">\r\n <nav class=\"configure-panels__controls__category tabs-bar\">\r\n <div class=\"tabs-bar__inner\">\r\n <button class=\"tabs-bar__button\" v-for=\"(item, index) in items\" :key=\"index\" :class=\"{'is-active': index === activeIndex}\" v-on:click=\"tabClickHandler(item,index)\" v-cloak>\r\n <span>{{item.name}}</span>\r\n </button>\r\n </div>\r\n </nav>\r\n </tabs-bar>\r\n\r\n <input class=\"configure-panels__controls__search\" v-show=\"!isFiltersView && (isSearchView || categoryTabsList.length === 1)\" type=\"text\" placeholder=\"Search\" v-model=\"searchString\" ref=\"searchInput\" v-on:focus=\"searchFocusHandler\"/>\r\n <div class=\"configure-panels__controls__label\" v-show=\"isFiltersView && categoryTabsList.length === 1\">Filter</div>\r\n </div>\r\n\r\n <div class=\"configure-panels__controls__filters\" :class=\"{'is-active': isFiltersView && searchString.length === 0}\">\r\n\r\n <tabs-bar inline-template :tab-click-handler=\"subcategoryChangeHandler\" :active-index=\"activeSubCategoryIndex\" :items=\"subCategoryTabsList\">\r\n <nav class=\"configure-panels__controls__subcategory tabs-bar\">\r\n <div class=\"tabs-bar__inner\">\r\n <button class=\"tabs-bar__button\" v-for=\"(item, index) in items\" :key=\"index\" :class=\"{'is-active': index === activeIndex}\" v-on:click=\"tabClickHandler(item,index)\" v-cloak>\r\n <span>{{item.name}}</span>\r\n </button>\r\n </div>\r\n </nav>\r\n </tabs-bar>\r\n\r\n <div class=\"filter-section\" :class=\"{'is-active': activeColorFilter}\" v-if=\"extractedColorList && extractedColorList.size > 0\">\r\n <ul>\r\n <li v-for=\"(item,index) in extractedColorList\" :key=\"'color'+index\">\r\n <button class=\"filter-button\" :class=\"{'is-active': item === activeColorFilter}\" v-on:click=\"()=>colorFilterChosen(item)\"><em :style=\"{backgroundColor: colorMap[item]}\"></em><span>{{item}}</span></button>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"configure-panels__result\" v-if=\"(searchString.length >= searchStringMinLength || activeColorFilter || activeSubCategoryType ) && activeItems\" :class=\"{'is-searching': isSearchView}\">\r\n <swatch-selector\r\n v-if=\"activeItems.length > 0\"\r\n :key=\"activeSubCategoryType + '_' + activeColorFilter + '_'+searchString\"\r\n :initial-selected-swatch=\"''\"\r\n :initial-expanded=\"true\"\r\n :items=\"activeItems\"\r\n :feature-id=\"stepData.optionGroup.id\">\r\n </swatch-selector>\r\n <h5 class=\"no-results\" v-else>{{systemText.noResultsText}}</h5>\r\n </div>\r\n\r\n <div class=\"configure-panels__result\" v-else :class=\"{'is-searching': isSearchView}\">\r\n <swatch-selector\r\n v-for=\"(group,index) in stepData.optionGroup.options[activeCategoryType]\"\r\n :initial-selected-swatch=\"''\"\r\n :initial-expanded=\"false\"\r\n :initial-rows=\"isMobile ? 1 : 2\"\r\n :row-size=\"4\"\r\n :lazy-loading=\"true\"\r\n :has-info=\"true\"\r\n :key=\"'group_'+index+'_'+group.name\"\r\n :headline=\"group.name\"\r\n :body-text=\"group.description\"\r\n :items=\"group.items\"\r\n :properties=\"group.properties\"\r\n :feature-id=\"stepData.optionGroup.id\">\r\n </swatch-selector>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n</template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./configure-panels.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./configure-panels.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./configure-panels.vue?vue&type=template&id=182b3c59&\"\nimport script from \"./configure-panels.vue?vue&type=script&lang=js&\"\nexport * from \"./configure-panels.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('182b3c59')) {\n api.createRecord('182b3c59', component.options)\n } else {\n api.reload('182b3c59', component.options)\n }\n module.hot.accept(\"./configure-panels.vue?vue&type=template&id=182b3c59&\", function () {\n api.rerender('182b3c59', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/configure-panels/configure-panels.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"quantity-selector\" }, [\n _c(\"div\", { staticClass: \"quantity-selector__inner\" }, [\n _c(\"div\", { staticClass: \"quantity-selector__inputs\" }, [\n _c(\n \"button\",\n {\n staticClass: \"quantity-selector__input__minus\",\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.handleClick($event, \"minus\")\n },\n },\n },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-quantity-minus\",\n },\n }),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"quantity-selector__input__plus\",\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.handleClick($event, \"plus\")\n },\n },\n },\n [\n _c(\n \"svg\",\n { staticClass: \"svg-icon\", attrs: { viewbox: \"0 0 100 100\" } },\n [\n _c(\"use\", {\n attrs: {\n \"xlink:href\": \"/dist/svg/symbols.svg#svg-quantity-plus\",\n },\n }),\n ]\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"quantity-selector__input__field\" }, [\n _vm.colliAmount && _vm.colliText\n ? _c(\"p\", [_vm._v(_vm._s(_vm.colliText))])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.quantityValue,\n expression: \"quantityValue\",\n },\n ],\n ref: \"quantityInput\",\n staticClass: \"quantity-input\",\n attrs: { type: \"text\", maxlength: \"3\", disabled: \"\" },\n domProps: { value: _vm.quantityValue },\n on: {\n input: function ($event) {\n if ($event.target.composing) {\n return\n }\n _vm.quantityValue = $event.target.value\n },\n },\n }),\n ]),\n ]),\n ]),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","<script>\r\nimport debounce from 'lodash/debounce';\r\n\r\nexport default {\r\n\tname: 'quantity-mobile',\r\n\tprops: {\r\n\t\tcolliAmount: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 0,\r\n\t\t},\r\n\t\tcolliProduct: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false,\r\n\t\t},\r\n\t\tcolliText: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: null,\r\n\t\t},\r\n\t\tquantity: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 1\r\n\t\t},\r\n\t\tminimumOrderQuantity: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 1\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tcolliTotal: 1,\r\n\t\t\tquantityValue: this.colliProduct ? (this.colliAmount < this.minimumOrderQuantity ? this.minimumOrderQuantity : this.colliAmount) : (this.quantity > 1 ? this.quantity : (this.minimumOrderQuantity || this.quantity || 1)),\r\n\t\t\tisLoaded: false,\r\n\t\t\tquantityStep: this.colliProduct ? this.colliAmount : 1,\r\n\t\t\tquantityValueBeforeChange: this.quantity > 1 ? this.quantity : this.colliProduct ? this.colliAmount : 1\r\n\t\t};\r\n\t},\r\n\twatch: {\r\n\t\tquantityValue() {\r\n\t\t\tif (this.quantityValue && this.quantityValue.toString().length > 0 && +this.quantityValue % this.quantityStep !== 0) {\r\n\t\t\t\t// COMMENT: When deleting charaters in the input\r\n\t\t\t\t// Emit event to parent to disabled button or stuff\r\n\t\t\t\tthis.$emit('emit-quantity-update', true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.$emit('emit-quantity-invalid', false);\r\n\t\t\t}\r\n\t\t},\r\n\t\tquantity() {\r\n\t\t\tthis.quantityValue = this.quantity;\r\n\t\t}\r\n\t},\r\n\tmounted() {\r\n\t\tthis.quantityInput = this.$refs.quantityInput[0] ? this.$refs.quantityInput[0] : this.$refs.quantityInput;\r\n\r\n\t\tthis.setColliItemsCount();\r\n\t\tthis.setupInputKeyEvents();\r\n\r\n\t\tthis.isLoaded = true;\r\n\t},\r\n\tmethods: {\r\n\r\n\t\tsetupInputKeyEvents() {\r\n\t\t\t// COMMENT: Keydown prevents the unwanted charecters from showing in the input\r\n\t\t\tthis.quantityInput.addEventListener('keydown', e => {\r\n\t\t\t\tconst characterCode = e.which || e.charCode || e.keyCode;\r\n\t\t\t\tif (this.isValidKey(characterCode)) {\r\n\t\t\t\t\t// COMMENT: Passthrough to keyup-event, which sets the value\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// COMMENT: Keyup sets the global \"quantity\" of which the minus/plus can calculate upon\r\n\t\t\tthis.quantityInput.addEventListener('keyup', debounce(e => {\r\n\t\t\t\tconst characterCode = e.which || e.charCode || e.keyCode;\r\n\t\t\t\tif (this.isValidKey(characterCode)) {\r\n\t\t\t\t\tthis.quantityValue = this.quantityInput.value;\r\n\t\t\t\t\tthis.setColliItemsCount();\r\n\t\t\t\t\tthis.emitQuantityUpdate();\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}, 1000));\r\n\t\t},\r\n\t\thandleClick(e, clickType) {\r\n\t\t\tif (clickType === 'plus') {\r\n\t\t\t\tthis.quantityValue = this.quantityValue + this.quantityStep;\r\n\t\t\t} else {\r\n\t\t\t\tthis.quantityValue = this.quantityValue - this.quantityStep;\r\n\t\t\t\tif (this.quantityValue < 1) {\r\n\t\t\t\t\tthis.quantityValue = this.quantityStep;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.minimumOrderQuantity && this.quantityValue < this.minimumOrderQuantity) {\r\n\t\t\t\tthis.quantityValue = this.minimumOrderQuantity\r\n\t\t\t}\r\n\t\t\tthis.setColliItemsCount();\r\n\t\t\tthis.emitQuantityUpdate(clickType);\r\n\t\t},\r\n\t\tsetColliItemsCount() {\r\n\t\t\tif (this.colliAmount > 0 && this.colliProduct) {\r\n\t\t\t\tif (this.quantityValue % this.quantityStep === 0) {\r\n\t\t\t\t\tthis.colliTotal = this.quantityValue / this.colliAmount;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.colliTotal = (this.quantityValue / this.colliAmount).toFixed(1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\temitQuantityUpdate(clickType) {\r\n\t\t\tthis.quantityValue = this.minimumOrderQuantity && this.minimumOrderQuantity > this.quantityValue\r\n\t\t\t\t? this.minimumOrderQuantity\r\n\t\t\t\t: this.quantityValue\r\n\r\n\t\t\tconst quantity = this.quantityValue ? + this.quantityValue : this.quantityStep;\r\n\r\n\t\t\tif (quantity % this.quantityStep !== 0) {\r\n\t\t\t\tthis.quantityValue = quantity < this.quantityStep ? this.quantityStep : Math.ceil(quantity / this.quantityStep) * this.quantityStep\r\n\t\t\t\tthis.setColliItemsCount();\r\n\t\t\t}\r\n\t\t\tconst quantityChange = this.quantityValue - this.quantityValueBeforeChange\r\n\t\t\tconst quantityChangeAbsolute = Math.abs(quantityChange)\r\n\t\t\tthis.quantityValueBeforeChange = quantity;\r\n\r\n\t\t\tclickType = clickType || (quantityChange > 0 ? 'plus' : 'minus')\r\n\r\n\t\t\t// NOTE: update no matter what as opposed to quantity component, therefore commented out\r\n\t\t\t// if (quantityChange)\r\n\t\t\tthis.$emit('emit-quantity-update', { \"quantity\": this.quantityValue, \"quantityChange\": quantityChangeAbsolute, \"actionType\": clickType });\r\n\t\t},\r\n\t\tisValidKey(characterCode) {\r\n\t\t\tif (\r\n\t\t\t\tcharacterCode > 46 && characterCode < 58 || // top keyboard 0-9 and forward backspace(46)\r\n\t\t\t\tcharacterCode > 95 && characterCode < 107 || // numpad 0-9\r\n\t\t\t\tcharacterCode === 8 || // backspace\r\n\t\t\t\tcharacterCode === 13 || // enter\r\n\t\t\t\tcharacterCode === 27 // esc\r\n\t\t\t) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"quantity-selector\">\r\n\t\t<div class=\"quantity-selector__inner\">\r\n\t\t\t<div class=\"quantity-selector__inputs\">\r\n\t\t\t\t<button class=\"quantity-selector__input__minus\" v-on:click.prevent.stop=\"handleClick($event, 'minus')\">\r\n\t\t\t\t\t<svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n\t\t\t\t\t\t<use xlink:href=\"/dist/svg/symbols.svg#svg-quantity-minus\"></use>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button class=\"quantity-selector__input__plus\" v-on:click.prevent.stop=\"handleClick($event, 'plus')\">\r\n\t\t\t\t\t<svg viewbox=\"0 0 100 100\" class=\"svg-icon\">\r\n\t\t\t\t\t\t<use xlink:href=\"/dist/svg/symbols.svg#svg-quantity-plus\"></use>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<div class=\"quantity-selector__input__field\">\r\n\t\t\t\t\t<p v-if=\"colliAmount && colliText\">{{ colliText }}</p>\r\n\t\t\t\t\t<input ref=\"quantityInput\" type=\"text\" v-model=\"quantityValue\" maxlength=\"3\" class=\"quantity-input\"\r\n\t\t\t\t\t\tdisabled>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./quantity-mobile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./quantity-mobile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./quantity-mobile.vue?vue&type=template&id=434eeb23&\"\nimport script from \"./quantity-mobile.vue?vue&type=script&lang=js&\"\nexport * from \"./quantity-mobile.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Code\\\\dept_muuto_forntend\\\\master\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('434eeb23')) {\n api.createRecord('434eeb23', component.options)\n } else {\n api.reload('434eeb23', component.options)\n }\n module.hot.accept(\"./quantity-mobile.vue?vue&type=template&id=434eeb23&\", function () {\n api.rerender('434eeb23', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/reconfigurator/partials/quantity-mobile/quantity-mobile.vue\"\nexport default component.exports","import { mapState } from \"vuex\";\r\nimport { rInterval } from \"./../../basics/js/utils\";\r\n\r\nimport UspSpot from \"./../usp-spot/usp-spot\";\r\n\r\nexport default {\r\n name: 'usp-spot-banner',\r\n components: {\r\n UspSpot\r\n },\r\n\tprops: {\r\n\t\theadline: {\r\n\t\t\ttype: String\r\n\t\t}\r\n\t},\r\n data() {\r\n return {\r\n spotEls: null,\r\n spotCount: 0,\r\n spotsScrollWidth: 0,\r\n spotsScrollPos: 0,\r\n activeSpotIndex: 0,\r\n };\r\n },\r\n\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n windowW: state => state.windowW,\r\n })\r\n },\r\n watch: {\r\n isMobile() {\r\n this.activeSpotIndex = 0;\r\n },\r\n },\r\n methods: {\r\n spotsScrollHandler: function () {\r\n if ( this.isMobile ) {\r\n this.spotsScrollWidth = this.$refs.spots.scrollWidth;\r\n this.spotsScrollPos = this.$refs.spots.scrollLeft;\r\n let pct = (this.spotsScrollPos + this.windowW/2) / (this.spotsScrollWidth);\r\n this.activeSpotIndex = Math.floor(this.spotCount * pct);\r\n }\r\n },\r\n prevClickHandler: function () {\r\n let newIndex = this.activeSpotIndex > 0 ? this.activeSpotIndex - 1 : 0;\r\n this.spotEls[newIndex].scrollIntoView({behavior: 'smooth', block: \"nearest\"});\r\n },\r\n nextClickHandler: function () {\r\n let newIndex = this.activeSpotIndex < this.spotCount-1 ? this.activeSpotIndex + 1 : this.spotCount-1;\r\n this.spotEls[newIndex].scrollIntoView({behavior: 'smooth', block: \"nearest\"});\r\n }\r\n },\r\n mounted: function () {\r\n this.spotEls = this.$refs.spots.querySelectorAll('.usp-spot, .inspiration-tile');\r\n this.spotCount = this.spotEls.length;\r\n\r\n rInterval(this.spotsScrollHandler, 100);\r\n },\r\n\r\n}\r\n","import Accordion from \"./accordion/accordion\";\r\nimport AccordionGroup from \"./accordion/accordion-group\";\r\nimport AccordionFlow from \"./accordion-flow/accordion-flow\";\r\nimport AccountMenu from \"./account-menu/account-menu\";\r\nimport AddonsBlock from \"./addons-overlay/addons-block\";\r\nimport AddonsOverlay from \"./addons-overlay/addons-overlay\";\r\nimport BuySection from \"./buy-section/buy-section\";\r\nimport Cart from \"./cart/cart\";\r\nimport CartImportLink from \"./cart/cart-import-link\";\r\nimport CategoryTile from \"./category-tile/category-tile\";\r\nimport CategoryTileRaw from \"./category-tile/category-tile-raw\";\r\nimport Checkout from \"./checkout/checkout\";\r\nimport CheckoutOriginal from \"./checkout/checkout-original\";\r\nimport CheckoutBlock from \"./checkout-block/checkout-block\";\r\nimport ClaimFlow from \"./claim-flow/claim-flow\";\r\nimport Configurator from \"./configurator/configurator\";\r\nimport CountrySelector from \"./country-selector/country-selector\";\r\nimport UserTypeSelector from \"./user-type-selector/user-type-selector\";\r\nimport CustomDatepicker from \"./date-picker/date-picker\";\r\nimport CylindoOverlay from \"./cylindo-overlay/cylindo-overlay\";\r\nimport DashboardHeader from \"./dashboard-header/dashboard-header\";\r\nimport DataTableLabel from \"./data-table/data-table-label\";\r\nimport Dashboard from \"./dashboard/dashboard\";\r\nimport FeedbackButton from \"./feedback-button/feedback-button\";\r\nimport FeedbackButtonExampleWrapper from \"./feedback-button/feedback-button-example-wrapper\";\r\nimport FileUpload from \"./file-upload/file-upload\";\r\nimport FileUploadContainer from \"./file-upload-field/file-upload-container\";\r\nimport FileUploadField from \"./file-upload-field/file-upload-field\";\r\nimport FormPassword from \"./form-elements/templates/form-password\";\r\nimport Gateway from \"./gateway/gateway\";\r\nimport GuidedTour from \"./guided-tour/guided-tour\";\r\nimport GuidedTourController from \"./guided-tour/guided-tour-controller\";\r\nimport HeaderLogo from \"./header-logo/header-logo\";\r\nimport Hero from \"./hero/hero\";\r\nimport MainMenu from \"./main-menu/main-menu\";\r\nimport MainFooter from \"./main-footer/main-footer\";\r\nimport { Modal } from \"./modal\";\r\nimport MiniCart from \"./cart/mini-cart\";\r\nimport NewsLetter from \"./news-letter/news-letter\";\r\nimport NewsletterNonSleek from \"./newsletter-non-sleek/newsletter\";\r\nimport { NotificationPanelWrapper, NotificationPanelExamplesWrapper } from \"./notification-panel\";\r\nimport OrderOverview from \"./order-overview/order-overview\";\r\nimport OrderSummaryOriginal from \"./order-summary/order-summary-original\";\r\nimport OrderSummary from \"./order-summary/order-summary\";\r\nimport OverlayBackdrop from \"./overlay-backdrop/overlay-backdrop\";\r\nimport Pdp from \"./pdp/pdp\";\r\nimport PreviewTiles from \"./preview-tiles/preview-tiles\";\r\nimport ProductVisualization from \"./product-visualization/product-visualization\";\r\nimport ProductListFilter from \"./product-list-filter/product-list-filter\";\r\nimport TileFilter from \"./product-filter/tile-filter\";\r\nimport PageHeader from \"./page-header/page-header\";\r\nimport ProductTile from \"./product-tile/product-tile\";\r\nimport ProductFilter from \"./product-filter/product-filter\";\r\nimport InspirationTile from \"./inspiration-tile/inspiration-tile\";\r\nimport Receipt from \"./receipt/receipt\";\r\nimport FilterTabs from \"./filter-tabs/filter-tabs\";\r\nimport RoomExplorer from \"./room-explorer/room-explorer\";\r\nimport RoomExplorerOverlay from \"./room-explorer/room-explorer-overlay\";\r\nimport RoomExplorerProduct from \"./room-explorer/room-explorer-product\";\r\nimport Room from \"./room-explorer/room\";\r\nimport Expandable from \"./expandable/expandable\";\r\nimport RequestConfiguration from \"./configurator/request-configuration\";\r\n\r\nimport Recommendation from \"./recommendation/recommendation\";\r\nimport Onlineshops from \"./online-shops/onlineshops\";\r\nimport SearchOverlay from \"./search-overlay/search-overlay\";\r\nimport Slider from \"./slider/slider\";\r\nimport SliderV2 from \"./slider-v2/slider-v2\";\r\nimport MosaicSlider from \"./mosaic-slider/mosaic-slider\";\r\nimport MosaicSliderOverlay from \"./mosaic-slider/mosaic-slider-overlay\";\r\nimport StoreLocator from \"./store-locator/store-locator\";\r\nimport TextToInput from \"./text-to-input/text-to-input\";\r\nimport VariationDropdown from \"./variation-dropdown/variation-dropdown\";\r\nimport ViewingAs from \"./viewing-as/viewing-as\";\r\nimport VideoPlayerVimeo from \"./video-player/video-player-vimeo\";\r\n\r\nimport TileList from \"./tile-list/tile-list\";\r\nimport TableComponent from \"./table-component/table-component\";\r\n\r\nimport StickyGallery from \"./sticky-gallery/sticky-gallery\";\r\nimport StickyScroll from \"./sticky-scroll/sticky-scroll\";\r\nimport MegaLinks from \"./mega-links/mega-links\";\r\nimport VideoPlayerGlobal from \"./video-player/video-player-global\";\r\nimport SlidingPresentation from \"./sliding-presentation/sliding-presentation\";\r\n\r\nimport ProductLineExamples from \"./product-line/product-line-examples\";\r\nimport StoresNavigation from \"./stores-navigation/stores-navigation\";\r\nimport ToolboxHero from \"./toolbox-hero/toolbox-hero\";\r\nimport Toolbox from \"./toolbox-hero/toolbox\";\r\n\r\nimport ExperienceScroll from \"./experience/experience-scroll\";\r\nimport AnimatedHero from \"./experience/animated-hero/animated-hero\";\r\nimport IntroductionBlock from \"./experience/introduction-block/introduction-block\";\r\nimport DesignExplorer from \"./experience/design-explorer/design-explorer\";\r\nimport PropertyExplorer from \"./experience/property-explorer/property-explorer\";\r\nimport MaterialExplorer from \"./experience/material-explorer/material-explorer\";\r\nimport ModelExplorer from \"./experience/model-explorer/model-explorer\";\r\nimport ArBanner from \"./experience/ar-banner/ar-banner\";\r\nimport InspirationGallery from \"./experience/inspiration-gallery/inspiration-gallery\";\r\nimport InspirationSlider from \"./experience/inspiration-slider/inspiration-slider\";\r\nimport MaterialOverlay from \"./experience/material-overlay/material-overlay\";\r\nimport ExplanationOverlay from \"./experience/explanation-overlay/explanation-overlay\";\r\nimport ShortcutsOverlay from \"./experience/shortcuts-overlay/shortcuts-overlay\";\r\nimport ShortcutsBar from \"./experience/shortcuts-bar/shortcuts-bar\";\r\nimport ScrollRotator from \"./experience/scroll-rotator/scroll-rotator\";\r\nimport SeriesOverview from \"./experience/series-overview/series-overview\";\r\n\r\nimport StepGuide from \"./step-guide/step-guide\";\r\nimport HeroFragmented from \"./hero-fragmented/hero-fragmented\";\r\nimport HorizontalCollapsible from \"./horizontal-collapsible/horizontal-collapsible\";\r\nimport ImageProductsButton from \"./image-products/image-products-button\";\r\nimport ImageProductsOverlay from \"./image-products/image-products-overlay\";\r\nimport Reconfigurator from \"./reconfigurator/reconfigurator\";\r\nimport Tooltip from \"./tooltip/tooltip\";\r\n\r\nimport UspSpot from \"./usp-spot/usp-spot\";\r\nimport UspSpotBanner from \"./usp-spot-banner/usp-spot-banner\";\r\nimport InspirationTileV2 from \"./inspiration-tile-v2/inspiration-tile-v2\";\r\nimport StorySlider from \"./story-slider/story-slider\";\r\n\r\nimport HeroMinimal from \"./hero-minimal/hero-minimal\";\r\nimport DataTableScroll from \"./data-table/data-table-scroll\";\r\n\r\nexport default {\r\n\tAccordion,\r\n\tAccordionGroup,\r\n\tAccordionFlow,\r\n\tAccountMenu,\r\n\tAddonsBlock,\r\n\tAddonsOverlay,\r\n\tBuySection,\r\n\tCart,\r\n\tCartImportLink,\r\n\tCategoryTile,\r\n\tCategoryTileRaw,\r\n\tCheckout,\r\n\tCheckoutOriginal,\r\n\tCheckoutBlock,\r\n\tClaimFlow,\r\n\tConfigurator,\r\n\tCountrySelector,\r\n\tUserTypeSelector,\r\n\tCylindoOverlay,\r\n\tCustomDatepicker,\r\n\tDashboard,\r\n\tDashboardHeader,\r\n\tDataTableLabel,\r\n\tExpandable,\r\n\tFeedbackButton,\r\n\tFeedbackButtonExampleWrapper,\r\n\tFileUpload,\r\n\tFileUploadContainer,\r\n\tFileUploadField,\r\n\tFormPassword,\r\n\tGuidedTour,\r\n\tGuidedTourController,\r\n\tGateway,\r\n\tHeaderLogo,\r\n\tHero,\r\n\tInspirationTile,\r\n\tMainMenu,\r\n\tMainFooter,\r\n\tNewsLetter,\r\n\tNewsletterNonSleek,\r\n\tNotificationPanelWrapper,\r\n\tNotificationPanelExamplesWrapper,\r\n\tMiniCart,\r\n\tModal,\r\n\tOrderOverview,\r\n\tOrderSummary,\r\n\tOrderSummaryOriginal,\r\n\tOverlayBackdrop,\r\n\tPageHeader,\r\n\tPdp,\r\n\tProductVisualization,\r\n\tProductListFilter,\r\n\tProductFilter,\r\n\tProductTile,\r\n\tPreviewTiles,\r\n\tReceipt,\r\n\tRecommendation,\r\n\tSearchOverlay,\r\n\tSlider,\r\n\tSliderV2,\r\n\tMosaicSlider,\r\n\tMosaicSliderOverlay,\r\n\tStoreLocator,\r\n\tTextToInput,\r\n\tTileFilter,\r\n\tTileList,\r\n\tVariationDropdown,\r\n\tViewingAs,\r\n\tVideoPlayerVimeo,\r\n\tTableComponent,\r\n\tFilterTabs,\r\n\tRequestConfiguration,\r\n\tRoomExplorer,\r\n\tRoomExplorerOverlay,\r\n\tRoomExplorerProduct,\r\n\tRoom,\r\n\tOnlineshops,\r\n\tStickyGallery,\r\n\tStickyScroll,\r\n\tMegaLinks,\r\n\tVideoPlayerGlobal,\r\n\tSlidingPresentation,\r\n\tProductLineExamples,\r\n\tStoresNavigation,\r\n\tToolboxHero,\r\n\tToolbox,\r\n\tExperienceScroll,\r\n\tAnimatedHero,\r\n\tIntroductionBlock,\r\n\tDesignExplorer,\r\n\tPropertyExplorer,\r\n\tMaterialExplorer,\r\n\tModelExplorer,\r\n\tSeriesOverview,\r\n\tInspirationGallery,\r\n\tInspirationSlider,\r\n\tMaterialOverlay,\r\n\tExplanationOverlay,\r\n\tShortcutsOverlay,\r\n\tShortcutsBar,\r\n\tArBanner,\r\n\tScrollRotator,\r\n\tStepGuide,\r\n\tHeroFragmented,\r\n\tHorizontalCollapsible,\r\n\tImageProductsButton,\r\n\tImageProductsOverlay,\r\n\tReconfigurator,\r\n\tTooltip,\r\n\tUspSpot,\r\n\tUspSpotBanner,\r\n\tInspirationTileV2,\r\n\tStorySlider,\r\n\tHeroMinimal,\r\n\tDataTableScroll,\r\n};\r\n","export default {\r\n\tname: 'receipt',\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tisProductsExpanded: false,\r\n\t\t\tisSummaryExpanded: false\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\ttoggleSummary() {\r\n\t\t\tthis.isSummaryExpanded = !this.isSummaryExpanded;\r\n\t\t},\r\n\t\ttoggleProducts() {\r\n\t\t\tthis.isProductsExpanded = !this.isProductsExpanded;\r\n\t\t}\r\n\t},\r\n};\r\n","export default {\r\n\tname: 'filter-tabs'\r\n};\r\n","import { mapState, mapActions } from \"vuex\";\r\nimport { rInterval } from \"./../../basics/js/utils\";\r\nimport Cookies from 'js-cookie'\r\n\r\nimport { ProductType, CylindoViewMode, CookiePrefix } from \"./partials/constants\";\r\nimport { RECONFIGURATOR_GETSTEP_ASYNC, RECONFIGURATOR_GETVARIANT_ASYNC, UPDATE_QUANTITY_ASYNC } from \"./../../basics/js/store/static\";\r\nimport { registerAddToCart, registerRemoveFromCart, registerViewAddon, registerCustomizer } from '../../basics/js/methods/gtmlDataLayer/registerGtmDataLayer'\r\n\r\n\r\nimport BuySectionCore from '../buy-section/buy-section-core';\r\nimport BuySection from \"../buy-section/buy-section\"\r\n\r\nimport PresentationTile from \"./partials/presentation-tile/presentation-tile.vue\"\r\nimport ZoomOverlay from \"./partials/zoom-overlay/zoom-overlay.vue\"\r\n\r\nimport VariantOptions from \"./partials/variant-options/variant-options.vue\"\r\nimport AttributeOptions from \"./partials/attribute-options/attribute-options.vue\"\r\nimport OptionsOverlay from \"./partials/options-overlay/options-overlay.vue\"\r\nimport MaterialGroupInfoOverlay from \"./partials/material-group-info-overlay/material-group-info-overlay.vue\"\r\n\r\nimport ConfigurePanels from \"./partials/configure-panels/configure-panels.vue\"\r\n\r\nimport QuantityMobile from \"./partials/quantity-mobile/quantity-mobile.vue\"\r\nimport CylindoViewer from \"./partials/cylindo-viewer/cylindo-viewer.vue\"\r\n\r\n\r\n\r\nexport default {\r\n name: \"reconfigurator\",\r\n extends: BuySectionCore,\r\n components: {\r\n QuantityMobile,\r\n BuySection,\r\n PresentationTile,\r\n VariantOptions,\r\n AttributeOptions,\r\n OptionsOverlay,\r\n ZoomOverlay,\r\n MaterialGroupInfoOverlay,\r\n CylindoViewer,\r\n ConfigurePanels\r\n },\r\n props: {\r\n menuColor: {\r\n type: String,\r\n required: false,\r\n },\r\n productNameHeadline: {\r\n type: String,\r\n required: true,\r\n },\r\n productNameSubheadline: {\r\n type: String,\r\n required: false,\r\n },\r\n productId: {\r\n type: String,\r\n required: true\r\n },\r\n cylindoSku: {\r\n type: String,\r\n required: false\r\n },\r\n cylindoFeatures: {\r\n type: Object,\r\n required: false\r\n },\r\n productType: {\r\n type: String,\r\n required: true\r\n },\r\n plannerHref: {\r\n type: String,\r\n },\r\n presentationTiles: {\r\n type: Array,\r\n required: true,\r\n },\r\n systemText: {\r\n type: Object,\r\n required: true,\r\n },\r\n variantLists: {\r\n type: Array,\r\n required: false,\r\n },\r\n variantListsInitIndex: {\r\n type: Number,\r\n required: false,\r\n },\r\n variantFallbackName:{\r\n type: String,\r\n default: '',\r\n required: false\r\n },\r\n attributeLists: {\r\n type: Array,\r\n required: false,\r\n },\r\n hasAddons: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n hasVariants: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n hasAttributes: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n variantCode: {\r\n type: String,\r\n required: true\r\n },\r\n baseUrl: {\r\n type: String,\r\n required: true\r\n },\r\n cartUrl: {\r\n type: String,\r\n default: '/cart'\r\n },\r\n startFrame: {\r\n type: Number,\r\n default: 14,\r\n },\r\n\t\tpresentationRowsDesktopLimit: {\r\n\t\t\ttype: Number,\r\n\t\t\tdefault: 3,\r\n\t\t},\r\n cylindoTexts: {\r\n type: Object,\r\n default: () => {\r\n return {\r\n dragToRotate: \"Drag to rotate\",\r\n doubleTapToZoom: \"Doubletap to zoom\",\r\n clickToZoom: \"Click to zoom\",\r\n // tapToInteract: \"Tap to interact\",\r\n messageLabel: \"Colors may vary\",\r\n messageBody: \"Please note that colors showed in this configurator is only guiding as colors may vary depending on which screen you are using (and particularly so if your screen isn’t calibrated). For Refine leather and other dyed upholsteries, natural variations can occur and is not possible to reflected in this configurator.\",\r\n messageButton: \"Yes, I got it\",\r\n tryAR: \"Try AR\"\r\n }\r\n }\r\n },\r\n cylindoCrops: {\r\n type: Array,\r\n default: ()=>{\r\n return [\r\n {\r\n frame: 25,\r\n posX: 0,\r\n posY: 0,\r\n width: 1024,\r\n height: 1024,\r\n zoom: 1,\r\n zoomLrg: 2\r\n },\r\n {\r\n frame: 17,\r\n posX: 0,\r\n posY: 0,\r\n width: 1024,\r\n height: 1024,\r\n zoom: 1,\r\n zoomLrg: 2\r\n }\r\n ]\r\n }\r\n },\r\n additionalLinks: {\r\n type: Array,\r\n required: false\r\n },\r\n minimumOrderQuantity: {\r\n type: Number,\r\n default: 1\r\n },\r\n colli: {\r\n type: Number,\r\n default: 1\r\n },\r\n productName: {\r\n type: String,\r\n default: false\r\n }\r\n },\r\n data() {\r\n return {\r\n\t\t\tuseMobileControlsSnap: true,\r\n mobileControlsInFocus: false,\r\n\r\n windowScrollAllowed: true,\r\n windowScrollTop: 0,\r\n\r\n presentationScrollTop: 0,\r\n presentationCH: 0,\r\n presentationSH: 0,\r\n presentationActiveSlideIndex: 0,\r\n presentationScrollPct: 0, //0-X (top pos of last tile)\r\n\t\t\tpresentationScrollPctAdjusted: 0, //0-1 (adjusted for presentation height)\r\n\r\n presentationTilesConstrained: [],\r\n\t\t\tpresentationTilesCount: 0,\r\n presentationGalleryTileCount: 0,\r\n presentationGalleryTileShownCount: 0,\r\n\r\n controlsScrollPct: 0,\r\n controlsSH: 0,\r\n\r\n presentationCalculatedHeight: 0,\r\n controlsCalculatedHeight: 0,\r\n controlsCalculatedHeightSaved: 0,\r\n\r\n cylindoViewMode: null,\r\n presentationTileARUrl: null,\r\n\r\n quantityStep: this.isColliRestricted ? this.colli : 1,\r\n currentQuantity: 0,\r\n\t\t\tshowQuantityTimeout: null,\r\n\r\n\t\t\tshowAddedTextTimeout: null,\r\n\t\t\tshowingAddedText: false,\r\n\r\n mobileQuantityActive: false,\r\n\r\n userIsTouching: false,\r\n\r\n isReloading: false,\r\n\r\n cylindoFeatureString: ''\r\n };\r\n },\r\n\r\n computed: {\r\n ...mapState({\r\n isMobile: state => state.isMobile,\r\n bodyFixed: state => state.bodyFixed,\r\n windowW: state => state.windowW,\r\n windowH: state => state.windowH,\r\n\r\n isConfiguring: state => state.reconfigurator.reconfiguratorOpen,\r\n\r\n cylindoAccountId: state => state.cylindoAccountId,\r\n zoomOverlayOpen: state => state.reconfigurator.zoomOverlayOpen,\r\n optionsOverlayOpen: state => state.reconfigurator.optionsOverlayOpen,\r\n\r\n stepData: state => state.reconfigurator[RECONFIGURATOR_GETSTEP_ASYNC.stateKey],\r\n stepLoading: state => state.reconfigurator[RECONFIGURATOR_GETSTEP_ASYNC.loadingKey],\r\n variantLoading: state => state.reconfigurator[RECONFIGURATOR_GETVARIANT_ASYNC.loadingKey],\r\n\r\n currentStep: state => state.reconfigurator.currentStep,\r\n totalSteps: state => state.reconfigurator.totalSteps,\r\n\r\n currentVariantFeatures: state => state.reconfigurator.currentVariantFeatures,\r\n currentCylindoFeatures: state => state.reconfigurator.currentCylindoFeatures,\r\n\r\n currentVariantCode: state => state.reconfigurator.currentVariantCode,\r\n currentProductId: state => state.reconfigurator.currentProductId,\r\n currentProductUrl: state => state.reconfigurator.currentProductUrl,\r\n currentCylindoSku: state => state.reconfigurator.currentCylindoSku,\r\n\r\n finalVariantCode: state => state.reconfigurator.finalVariantCode,\r\n finalProductId: state => state.reconfigurator.finalProductId,\r\n\r\n viewMode: state => state.reconfigurator.cylindoViewMode\r\n }),\r\n overallStyle() {\r\n return `--reconfigurator-presentation-height: ${this.presentationCalculatedHeight}; --reconfigurator-controls-height: ${this.controlsCalculatedHeight}`;\r\n },\r\n getActiveVariantName() {\r\n let foundVariant;\r\n if ( this.variantLists ) {\r\n this.variantLists.forEach(list=>{\r\n let fV = list.items.find(variant => variant.isActive);\r\n if ( fV ) foundVariant = fV;\r\n })\r\n }\r\n return foundVariant ? foundVariant.name : 'NO NAME FOUND';\r\n },\r\n showCTAs() {\r\n return this.isMobile || this.productType === ProductType.CONFIGURABLE || this.productType === ProductType.PLANNABLE || this.productType === ProductType.COMPOUND || this.hasAddons\r\n },\r\n mobileHasLeftCTA() {\r\n return this.productType === ProductType.CONFIGURABLE || this.productType === ProductType.PLANNABLE || this.productType === ProductType.COMPOUND\r\n },\r\n isMobileFocusedMode() {\r\n return this.cylindoViewMode === CylindoViewMode.MOBILE_FOCUS\r\n },\r\n presentationTileWithAnchor() {\r\n return this.presentationTiles.find(item=>item.anchor);\r\n },\r\n presentationTileWithCylindoViewer() {\r\n return this.presentationTiles.find(item=>item.isCylindo);\r\n },\r\n onlyOneVariant() {\r\n return (this.variantLists.length === 1 && this.variantLists[0].items.length === 1);\r\n }\r\n },\r\n watch: {\r\n isMobile() {\r\n // console.log(\"isMobile changed. It's now: \" + newVal);\r\n\r\n this.closeReConfigurator();\r\n this.setSectionHeights();\r\n this.toggleMobileListeners();\r\n },\r\n isConfiguring(newVal) {\r\n if ( newVal && this.isMobile ) {\r\n this.cylindoViewMode = CylindoViewMode.MOBILE_BLUR;\r\n }\r\n this.setSectionHeights();\r\n },\r\n isAddedToCart(newVal) {\r\n if ( newVal ) {\r\n //when \"Added to cart\" is visible, show quantity\r\n this.mobileQuantityActive = true;\r\n this.currentQuantity += this.quantityStep;\r\n\r\n clearTimeout(this.showQuantityTimeout);\r\n this.showQuantityTimeout = setTimeout(()=>{\r\n this.mobileQuantityActive = false;\r\n\t\t\t\t\tthis.showingAddedText = true;\r\n\t\t\t\t\tclearTimeout(this.showAddedTextTimeout);\r\n\t\t\t\t\tthis.showAddedTextTimeout = setTimeout(()=>{\r\n\t\t\t\t\t\tthis.showingAddedText = false;\r\n\t\t\t\t\t\tthis.currentQuantity = 0;\r\n\t\t\t\t\t\t// matching with is-visible animation length\r\n\t\t\t\t\t\t// matching with is-visible animation length\r\n\t\t\t\t\t\tsetTimeout(()=>this.currentQuantity = 0, 350);\r\n\t\t\t\t\t}, 1000);\r\n\r\n }, 1500);\r\n }\r\n },\r\n currentCylindoFeatures: {\r\n handler: function(newVal) {\r\n // console.log(\"currentCylindoFeatures\", newVal)\r\n this.cylindoFeatureString = this.createFeatureString(newVal);\r\n },\r\n deep: true\r\n }\r\n },\r\n methods: {\r\n ...mapActions([\r\n \"openReConfigurator\",\r\n \"closeReConfigurator\",\r\n\r\n \"openAddonsOverlay\",\r\n \"openMosaicSliderOverlay\",\r\n\r\n \"openToolTip\",\r\n \"closeToolTip\",\r\n\r\n \"setCurrentCylindoSku\",\r\n \"setCurrentProductId\",\r\n \"setCurrentVariantCode\",\r\n\r\n \"getStepData\",\r\n \"getNextStepData\",\r\n \"getPreviousStepData\"\r\n ]),\r\n setSectionHeights() {\r\n if ( this.isConfiguring ) {\r\n if ( this.cylindoViewMode === CylindoViewMode.MOBILE_FOCUS ) {\r\n this.controlsCalculatedHeight = 0;\r\n this.presentationCalculatedHeight = this.windowH;\r\n } else if ( this.cylindoViewMode === CylindoViewMode.MOBILE_BLUR ) {\r\n if ( this.windowW > 400 ) {\r\n this.presentationCalculatedHeight = Math.min(this.windowW, this.windowH/2); //in order for tablet pres to not be too tall\r\n } else {\r\n this.presentationCalculatedHeight = this.windowH * 0.33;\r\n }\r\n this.controlsCalculatedHeight = this.windowH - this.presentationCalculatedHeight;\r\n } else {\r\n this.controlsCalculatedHeight = -1;\r\n }\r\n } else {\r\n if ( this.isMobile ) {\r\n if ( this.$refs.controlsOptions && this.$refs.controlsHeader ) {\r\n this.controlsCalculatedHeight = this.$refs.controlsOptions.offsetHeight + this.$refs.controlsHeader.offsetHeight + 1; //+1 for border\r\n this.controlsCalculatedHeightSaved = this.controlsCalculatedHeight;\r\n } else {\r\n this.controlsCalculatedHeight = this.controlsCalculatedHeightSaved;\r\n }\r\n this.presentationCalculatedHeight = this.windowH - this.controlsCalculatedHeight;\r\n } else {\r\n this.presentationCalculatedHeight = -1;\r\n }\r\n }\r\n // console.log(\"UPDATE HEIGHTS\", this.isConfiguring, this.cylindoViewMode );\r\n // console.log(\"UPDATE HEIGHTS\", \"CH=\"+this.controlsCalculatedHeight, \"PH=\"+this.presentationCalculatedHeight);\r\n },\r\n getAttributeName: function(attributeIndex) {\r\n return this.attributeLists[attributeIndex].nameShort;\r\n },\r\n getActiveAttributeName: function(attributeIndex) {\r\n let foundAttr = this.attributeLists[attributeIndex].items.find(attr => attr.isActive);\r\n if ( foundAttr && foundAttr.name ) return foundAttr.name;\r\n else return 'NO NAME FOUND';\r\n },\r\n toggleMobileListeners: function (force) {\r\n if ( this.isMobile || force === true) {\r\n this.$el.addEventListener('touchstart', this.touchListenerStart);\r\n this.$el.addEventListener('touchend', this.touchListenerEnd);\r\n this.$el.addEventListener('touchcancel', this.touchListenerCancel);\r\n } else {\r\n this.$el.removeEventListener('touchstart', this.touchListenerStart);\r\n this.$el.removeEventListener('touchend', this.touchListenerEnd);\r\n this.$el.removeEventListener('touchcancel', this.touchListenerCancel);\r\n }\r\n },\r\n\r\n touchListenerStart: function () {\r\n if ( !this.optionsOverlayOpen && !this.zoomOverlayOpen ) {\r\n this.userIsTouching = true;\r\n }\r\n },\r\n touchListenerEnd: function () {\r\n if ( !this.optionsOverlayOpen && !this.zoomOverlayOpen ) {\r\n this.userIsTouching = false;\r\n this.testForWindowScrollPosition();\r\n }\r\n },\r\n touchListenerCancel: function () {\r\n if ( !this.optionsOverlayOpen && !this.zoomOverlayOpen ) {\r\n // console.log(\"touch cancel\")\r\n this.userIsTouching = false;\r\n this.testForWindowScrollPosition();\r\n }\r\n },\r\n\r\n resizeListener: function () {\r\n this.presentationCH = this.$refs.presentation.clientHeight;\r\n\r\n if ( !this.isConfiguring && this.$refs.presentation ) this.presentationSH = this.$refs.presentation.scrollHeight;\r\n\r\n if ( this.isMobile ) {\r\n this.windowScrollListener();\r\n this.presentationScrollHandler();\r\n } else {\r\n this.mobileControlsInFocus = false;\r\n\t\t\t\tthis.setSectionHeights();\r\n }\r\n\r\n },\r\n\r\n windowScrollListener: function () {\r\n this.closeToolTip();\r\n\r\n if ( this.bodyFixed ) return false;\r\n if ( !this.isMobile ) return false;\r\n if ( !this.windowScrollAllowed ) return false;\r\n if ( this.userIsTouching ) return false;\r\n\r\n // console.log(\"WIN SCROLL\")\r\n // if ( !this.$refs.controls ) return false;\r\n\r\n this.testForWindowScrollPosition();\r\n },\r\n testForWindowScrollPosition() {\r\n\r\n let scroll = window.scrollY < 0 ? 0 : window.scrollY;\r\n let cOT = this.$refs.controls.offsetTop;\r\n let thr = this.windowH * 0.75;\r\n\r\n // console.log(\"window scroll\", scroll, cOT, thr);\r\n\r\n if ( scroll > this.windowScrollTop && scroll > cOT - thr && !this.mobileControlsInFocus ) {\r\n // if scroll direction is down AND the user has scrolled 75% AND the controls are not already in focus\r\n this.focusMobileControls();\r\n } else if ( scroll < this.windowScrollTop && scroll < thr && this.mobileControlsInFocus ) {\r\n // if scroll direction is up AND the user has scrolled 75% AND the controls are not already in focus\r\n this.defocusMobileControls();\r\n }\r\n this.windowScrollTop = scroll;\r\n },\r\n presentationScrollHandler: function () {\r\n this.presentationSH = this.$refs.presentation.scrollHeight;\r\n\r\n if ( this.isConfiguring ) return false;\r\n if ( this.bodyFixed ) return false;\r\n if ( !this.isMobile ) return false;\r\n if ( !this.windowScrollAllowed ) return false;\r\n if ( this.userIsTouching ) return false;\r\n\r\n\r\n let scroll = this.$refs.presentation.scrollTop < 0 ? 0 : this.$refs.presentation.scrollTop;\r\n if ( scroll === this.presentationScrollTop ) return false;\r\n\r\n\t\t\t// calculate scrollPct based on scroll position and presentation height\r\n this.presentationScrollPct = scroll / this.presentationSH;\r\n this.presentationScrollPctAdjusted = scroll / (this.presentationSH - this.presentationCalculatedHeight);\r\n\r\n\r\n // console.log(\"real\", Math.round(this.presentationScrollPct*100)/100);\r\n\r\n\t\t\t// add 50% to scrollPct, to make sure the active slide is always the one that is most visible\r\n this.presentationScrollPct += (this.presentationCalculatedHeight/this.presentationSH)/2;\r\n\r\n\t\t\t// console.log(\"adjusted\", Math.round(this.presentationScrollPctAdjusted*100)/100);\r\n\r\n\t\t\t// calculate active slide index based on scrollPct and number of slides\r\n this.presentationActiveSlideIndex = Math.round(this.presentationScrollPct * (this.presentationTilesCount-1));\r\n\r\n\t\t\t// make sure active slide index is never higher than the number of slides\r\n\t\t\tthis.presentationActiveSlideIndex = this.presentationActiveSlideIndex > this.presentationTilesCount-1 ? this.presentationTilesCount-1 : this.presentationActiveSlideIndex;\r\n\r\n // console.log(this.presentationTilesCount, this.presentationActiveSlideIndex)\r\n\r\n\r\n\r\n\t\t\tconsole.log(\"scrolling down?\", scroll > this.presentationScrollTop)\r\n if ( scroll > this.presentationScrollTop && this.presentationScrollPctAdjusted > 1.02 ) {\r\n\t\t\t\t// if scroll direction is down AND the user has scrolled BEYOND bottom of presentation\r\n this.focusMobileControls();\r\n }\r\n\r\n\r\n\t\t\tthis.presentationScrollTop = scroll;\r\n },\r\n\r\n\r\n ctaClickHandler: function (type) {\r\n switch (type) {\r\n case 'configure':\r\n this.startConfigureClickHandler();\r\n registerCustomizer(this.productNameHeadline+this.productNameSubheadline);\r\n break;\r\n\r\n case 'addons':\r\n //open addons overlay\r\n this.openAddonsOverlay();\r\n registerViewAddon(this.productNameHeadline+this.productNameSubheadline);\r\n break;\r\n\r\n case 'anchor':\r\n //scroll to tile\r\n if ( this.$refs.presentation ) {\r\n let el = this.$refs.presentation.querySelector('#'+this.presentationTileWithAnchor.anchor);\r\n if ( el ) el.scrollIntoView({behavior: 'smooth'});\r\n }\r\n break;\r\n\r\n case 'ar':\r\n //show AR\r\n // console.log(\"presentationTileARUrl\", this.presentationTileARUrl)\r\n window.open(this.presentationTileARUrl);\r\n break;\r\n }\r\n },\r\n\r\n focusMobileControls() {\r\n\t\t\tif (!this.useMobileControlsSnap) return false;\r\n\r\n\t\t\tif (!this.mobileControlsInFocus) {\r\n this.mobileControlsInFocus = true;\r\n if ( this.isMobile ) {\r\n this.windowScrollAllowed = false;\r\n window.scrollTo({top: this.$refs.controls.offsetTop, behavior: \"smooth\"});\r\n\r\n setTimeout(()=>{\r\n window.scrollTo({top: this.$refs.controls.offsetTop, behavior: \"smooth\"});\r\n this.windowScrollAllowed = true;\r\n }, 500);\r\n }\r\n }\r\n\r\n\r\n\r\n },\r\n defocusMobileControls() {\r\n\t\t\tif (!this.useMobileControlsSnap) return false;\r\n\r\n\t\t\tif (this.mobileControlsInFocus) {\r\n this.mobileControlsInFocus = false;\r\n if ( this.isMobile ) {\r\n\r\n this.windowScrollAllowed = false;\r\n window.scrollTo({top: 0, behavior: \"smooth\"});\r\n setTimeout(()=>{\r\n window.scrollTo({top: 0, behavior: \"smooth\"});\r\n this.windowScrollAllowed = true;\r\n }, 500);\r\n }\r\n }\r\n },\r\n configuratorModeShiftHandler( mode ) {\r\n this.cylindoViewMode = mode;\r\n this.setSectionHeights();\r\n },\r\n configuratorHasARHandler( url ) {\r\n this.presentationTileARUrl = url;\r\n },\r\n\r\n\r\n registerInDataLayer(clickType, quantityChange){\r\n const product = this.product;\r\n\r\n if (clickType === 'plus') {\r\n registerAddToCart(product.name, product.variantName, product.sku, product.unitPrice, quantityChange);\r\n } else {\r\n registerRemoveFromCart(product.name, product.variantName, product.sku, product.unitPrice, quantityChange);\r\n }\r\n },\r\n\r\n\r\n onQuantityInvalid(q) {\r\n console.log(\"onQuantityInvalid\",q)\r\n // TODO: handle return value?\r\n },\r\n onQuantityUpdate({quantity, quantityChange, actionType}){ // COMMENT: Gets trigged by quantity-component's emitted custom-event\r\n\r\n\t\t\tclearTimeout(this.showQuantityTimeout);\r\n\t\t\tclearTimeout(this.showAddedTextTimeout);\r\n\r\n console.log('onQuantityUpdate', \"q=\"+quantity, \"c=\"+quantityChange, \"moq=\"+this.minimumOrderQuantity);\r\n\r\n if ( quantity && quantity > -1 ) {\r\n\t\t\t\t// TEST\r\n\t\t\t\tif ( quantity < this.minimumOrderQuantity ) {\r\n\t\t\t\t\tquantity = this.minimumOrderQuantity;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.currentQuantity = quantity;\r\n\r\n if(this.shouldQuantityTriggerUpdate) {\r\n const url = this.cartUrl;\r\n const body = {\r\n code: this.sku,\r\n quantity: quantity\r\n }\r\n this.$store.dispatch(UPDATE_QUANTITY_ASYNC.action, { url, body });\r\n }\r\n }\r\n if(this.shouldQuantityTriggerUpdate && quantity && quantity > -1) {\r\n this.registerInDataLayer(actionType, quantityChange);\r\n }\r\n // TODO: handle return value?\r\n\r\n\r\n\r\n\r\n if ( quantity === 0 ) {\r\n this.mobileQuantityActive = false;\r\n this.currentQuantity = 0;\r\n }\r\n\r\n\r\n //hide quantity, if user is not not interacting\r\n clearTimeout(this.showQuantityTimeout);\r\n\t\t\tthis.showQuantityTimeout = setTimeout(()=>{\r\n\t\t\t\tthis.mobileQuantityActive = false;\r\n\t\t\t\tthis.showingAddedText = true;\r\n\t\t\t\tclearTimeout(this.showAddedTextTimeout);\r\n\t\t\t\tthis.showAddedTextTimeout = setTimeout(()=>{\r\n\t\t\t\t\tthis.showingAddedText = false;\r\n\t\t\t\t\t// matching with is-visible animation length\r\n\t\t\t\t\tsetTimeout(()=>this.currentQuantity = 0, 350);\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, 1500);\r\n },\r\n\r\n parsePresentationTiles() {\r\n\t\t\tthis.presentationTilesCount = this.presentationTiles.length;\r\n\r\n\t\t\tlet tilesConstrained = [];\r\n let tileShownCount = 0;\r\n let tileImageGalleryCount = 0;\r\n let tileImageGalleryShownCount = 0;\r\n\r\n for (let i=0; i<this.presentationTilesCount; i++) {\r\n let tile = this.presentationTiles[i];\r\n\r\n if ( tile.isDouble ) {\r\n\t\t\t\t\t// if tile starts at odd index, add 3 to tileShownCount, otherwise add 2\r\n\t\t\t\t\ttileShownCount += (i+1)%2 === 0 ? 3 : 2;\r\n } else {\r\n tileShownCount += 1;\r\n }\r\n if ( tileShownCount <= this.presentationRowsDesktopLimit*2 ) {\r\n\t\t\t\t\ttilesConstrained.push(tile);\r\n\r\n if ( !tile.isCylindo && !tile.isContent ) {\r\n\t\t\t\t\t\ttileImageGalleryShownCount++;\r\n }\r\n }\r\n\r\n if ( !tile.isCylindo && !tile.isContent ) {\r\n\t\t\t\t\ttileImageGalleryCount++;\r\n }\r\n\r\n\t\t\t\tif ( tileShownCount === this.presentationRowsDesktopLimit*2 ) break;\r\n }\r\n\r\n\r\n this.presentationTilesConstrained = tilesConstrained;\r\n\r\n this.presentationGalleryTileCount = tileImageGalleryCount;\r\n this.presentationGalleryTileShownCount = tileImageGalleryShownCount;\r\n\r\n\t\t\t// console.log(\"out of \" +this.presentationTilesCount+\" \" +this.presentationTilesConstrained.length + \" are shown in \"+this.presentationRowsDesktopLimit + \" rows\");\r\n\r\n },\r\n\r\n startConfigureClickHandler: function () {\r\n\r\n window.scrollTo({ top: 0 }); //to ensure no overflow hidden on body visual glitches\r\n this.toggleMobileListeners(false);\r\n this.openReConfigurator();\r\n this.defocusMobileControls();\r\n\r\n this.getStepData(0);\r\n\r\n // window.addEventListener(\"beforeunload\", this.beforeUnloadHandler.bind(this), {capture: true});\r\n },\r\n cancelConfigureClickHandler: function () {\r\n this.closeReConfigurator();\r\n\r\n\r\n // window.removeEventListener(\"beforeunload\", this.beforeUnloadHandler.bind(this), {capture: true});\r\n },\r\n\r\n beforeUnloadHandler: function (event) {\r\n event.preventDefault();\r\n return event.returnValue = this.systemText.reloadText;\r\n },\r\n\r\n finishConfigureHandler: function() {\r\n\r\n let currentSaved = Cookies.get(CookiePrefix+this.finalProductId);\r\n if ( currentSaved && currentSaved.indexOf(this.finalVariantCode) === -1 ) {\r\n Cookies.set(CookiePrefix+this.finalProductId, `${currentSaved}|${this.finalVariantCode}`, { expires: 60 });\r\n } else {\r\n Cookies.set(CookiePrefix+this.finalProductId, `${this.finalVariantCode}`, { expires: 60 });\r\n }\r\n\r\n // this.closeReConfigurator();\r\n\r\n\r\n // window.removeEventListener(\"beforeunload\", this.beforeUnloadHandler.bind(this), {capture: true});\r\n //window.open(this.currentProductUrl,\"_self\");\r\n\r\n this.isReloading = true;\r\n location.href = this.currentProductUrl;\r\n },\r\n createFeatureString: function (features) {\r\n\r\n // create feature string for url, such as:\r\n // feature=SEAT:WOOD%20AND%20PLASTIC%20COMPOSITE%20GREY&feature=TEXTILE:HALLINGDAL%20702&feature=BASE:LACQUERED%20OAK%20GREY\r\n\r\n let s = '';\r\n if ( features ) {\r\n Object.entries(features).forEach(entry => {\r\n if ( entry[1] ) s += `feature=${entry[0]}:${encodeURI(entry[1].toUpperCase())}&`;\r\n });\r\n }\r\n return s;\r\n }\r\n },\r\n mounted() {\r\n if ( window ) {\r\n window.addEventListener('scroll', this.windowScrollListener);\r\n window.addEventListener('resize', this.resizeListener);\r\n\r\n setTimeout(this.setSectionHeights, 1000);\r\n }\r\n if ( this.$refs.presentation ) {\r\n rInterval(this.presentationScrollHandler, 100);\r\n }\r\n\r\n this.cylindoFeatureString = this.createFeatureString(this.cylindoFeatures);\r\n\r\n this.setCurrentCylindoSku(this.cylindoSku);\r\n this.setCurrentProductId(this.productId);\r\n this.setCurrentVariantCode(this.variantCode);\r\n\r\n this.setSectionHeights();\r\n this.toggleMobileListeners();\r\n\r\n this.parsePresentationTiles();\r\n\r\n\r\n\r\n\t\t//Auto open configurator if \"configure=true\"\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\tif (urlParams.get('configure')) this.startConfigureClickHandler();\r\n\r\n }\r\n}\r\n\r\n","import { mapActions, mapState } from 'vuex'\r\n\r\n\r\nexport default {\r\n\tname: 'tooltip',\r\n computed: {\r\n ...mapState({\r\n tooltipText: state => state.tooltipText,\r\n tooltipPosX: state => state.tooltipPosX,\r\n tooltipPosY: state => state.tooltipPosY,\r\n\t\t}), \r\n\t},\r\n data() {\r\n return {\r\n isActive: false\r\n }\r\n },\r\n watch: {\r\n tooltipText(newVal) {\r\n if ( newVal && newVal.length > 5 ) {\r\n this.isActive = true; \r\n } else {\r\n this.isActive = false; \r\n }\r\n }\r\n },\r\n methods: {\r\n ...mapActions(['closeToolTip']),\r\n clickListener(event) {\r\n if ( this.isActive ) {\r\n if ( event.target === this.$el ) {\r\n this.closeToolTip();\r\n }\r\n }\r\n },\r\n },\r\n mounted() {\r\n window.addEventListener('click', this.clickListener.bind(this))\r\n }\r\n}","export default {\r\n name: 'HeroMinimal',\r\n props: {\r\n\t\tmedia: {\r\n\t\t\ttype: Object,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\theadline: {\r\n\t\t\ttype: String,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\ttrumpet: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tbodyText: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\tbackgroundColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t\ttextColor: {\r\n\t\t\ttype: String,\r\n\t\t},\r\n\t},\r\n\tcomputed: {\r\n\t\tmoduleStyle() {\r\n\t\t\treturn (\r\n\t\t\t\t`${this.backgroundColor ? \"--hero-minimal-bg-color:\" + this.backgroundColor + \";\" : \"\"}` +\r\n\t\t\t\t`${this.textColor ? \"--hero-minimal-text-color:\" + this.textColor + \";\" : \"\"}`\r\n\t\t\t);\r\n\t\t},\r\n\t},\r\n}\r\n","import Store from '@store/store'\r\n\r\nif(location.search){\r\n \r\n const paramsListUnsorted = location.search.slice(1).split('&').map(pair => ({facet:pair.split('=')[0],value:pair.split('=')[1]}))\r\n\r\n const selectedFacets = paramsListUnsorted.reduce((selectedFacets,urlFacet) => {\r\n \r\n let existingSelectedFacet = selectedFacets.find(selectedFacet => selectedFacet.facet === urlFacet.facet)\r\n \r\n if(existingSelectedFacet){\r\n existingSelectedFacet.values.push({value:urlFacet.value})\r\n } else {\r\n selectedFacets.push({\r\n facet: urlFacet.facet,\r\n values: [{value:urlFacet.value}]\r\n })\r\n }\r\n \r\n return selectedFacets\r\n \r\n },[])\r\n \r\n Store.commit('updateSelectedFacets',selectedFacets)\r\n}\r\n\r\n","import store from '@store/store'\r\n\r\nwindow.onpopstate = function(e){\r\n\tif ( !e.state ) return false; //JPL: Null check to avoid errors\r\n\r\n\tstore.commit('updateSelectedFacets',e.state.selectedFacets ? e.state.selectedFacets : [])\r\n\tstore.commit('updateSearchTerm',e.state.searchTerm ? e.state.searchTerm : '')\r\n\r\n\tstore.dispatch(e.state.action)\r\n}\r\n","export default{\r\n ChangePriceView(url) {\r\n fetch(url).then(result=>{\r\n if(result.ok){\r\n location.reload();\r\n } \r\n }\r\n ).catch(e=>{\r\n console.error(\"ChangePriceView fetch failed\", e)\r\n }\r\n )\r\n }\r\n}","/*jslint ignore:start*/\r\nimport \"core-js\";\r\nimport \"regenerator-runtime/runtime\";\r\nimport Vue from 'vue/dist/vue.esm';\r\nimport 'whatwg-fetch';\r\nimport objectFitImages from 'object-fit-images';\r\nimport 'intersection-observer'\r\n\r\nimport store from \"./store/store\";\r\nimport { mapActions, mapState } from \"vuex\";\r\nimport PortalVue from \"portal-vue\";\r\nimport Vuelidate from \"vuelidate\";\r\n\r\nimport VueLazyload from \"vue-lazyload\";\r\nimport VueVimeoPlayer from \"vue-vimeo-player\";\r\nimport vSelect from \"vue-select\";\r\n\r\nimport components from '../../components';\r\nimport { GET_CART_QUANTITY } from './store/static';\r\n// import storelocator from '../../components/storelocator/storelocator';\r\n\r\nimport \"./methods/getUrlSearchParameters/getUrlSearchParametres\";\r\nimport \"./methods/popStateHandler/popStateHandler\";\r\n\r\nimport { rInterval } from \"./utils\";\r\n\r\n// import throttle from \"lodash/throttle\";\r\nimport \"lazysizes\";\r\n\r\nimport Gta from '../js/methods/gtmlDataLayer/GoogleTagManager'\t\r\nimport Ph from '../js/methods/PriceHelper'\t\r\n\r\n\r\nwindow.PushEvent = Gta.PushEvent;\r\nwindow.ChangePriceView = Ph.ChangePriceView;\r\n\r\nVue.mixin({\r\n\tcomputed: mapState([\"isMobile\"]),\r\n\tmethods: mapActions([\"openModal\"]),\r\n\tcomponents: {\r\n\t\tModal: components.Modal,\r\n\t},\r\n});\r\nVue.use(PortalVue);\r\nVue.use(Vuelidate);\r\nVue.use(VueLazyload);\r\nVue.use(VueVimeoPlayer);\r\n\r\nvSelect.props.components.default = () => ({\r\n\tOpenIndicator: Vue.component(\"my-component\", {\r\n\t\ttemplate: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\"><path d=\"M226 49l-98 98-98-98L0 79l128 128L256 79z\"/></svg>`,\r\n\t}),\r\n});\r\nVue.component(\"v-select\", vSelect);\r\n\r\n// todo: make it async\r\n// Vue.component(\"storelocator\", storelocator);\r\n\r\nvSelect.props.components.default = () => ({\r\n\tOpenIndicator: Vue.component(\"my-component\", {\r\n\t\ttemplate: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\"><path d=\"M226 49l-98 98-98-98L0 79l128 128L256 79z\"/></svg>`,\r\n\t}),\r\n});\r\nVue.component(\"v-select\", vSelect);\r\n\r\nconst vueApp = {\r\n\tel: \"#app\",\r\n\tstore,\r\n\tcomponents,\r\n\tdelimiters: [\"${\", \"}\"],\r\n\t// data(){ return {} },\r\n\tbeforeMount() {\r\n\t\t// COMMENT: In order for the isMobile to be set before components is using it\r\n\t\t\r\n\t\tlet isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent || navigator.vendor || (window.opera && opera.toString() === `[object Opera]`));\r\n\t\tthis.setIsIOS(isIOS);\r\n\r\n\t\tif ( isIOS ) {\r\n\t\t\tconst htmlTag = document.getElementsByTagName('html')[0];\r\n\t\t\thtmlTag.classList.add('is-ios');\r\n\t\t}\r\n\r\n\t\tif (window.matchMedia(\"(max-width: 950px)\").matches) {\r\n\t\t\t// MQ SCREEN-SM-PLUS (in css)\r\n\t\t\tthis.setIsMobile(true);\r\n\t\t}\r\n\t\twindow.onresize = () => {\r\n\r\n\t\t\tthis.setWindowH(window.innerHeight);\r\n\t\t\tthis.setWindowW(window.innerWidth);\r\n\r\n\t\t\tconst htmlTag = document.getElementsByTagName('html')[0];\r\n\t\t\thtmlTag.style = `--vh: ${window.innerHeight/100}`;\r\n\r\n\t\t\tif (window.matchMedia(\"(max-width: 950px)\").matches) {\r\n\t\t\t\tthis.setIsMobile(true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.setIsMobile(false);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t},\r\n\tmounted() {\r\n\t\t// COMMENT: Set app loaded state\r\n\t\tthis.$store.state.appLoaded = true;\r\n\t\t// COMMENT: load cartitems\r\n\t\tthis.$store.dispatch(GET_CART_QUANTITY.action);\r\n\t\t// COMMENT: Change html-tag js/no-js class, for styling purposes\r\n\t\tconst nojsElem = document.querySelector(\".no-js\");\r\n\t\tif (nojsElem) {\r\n\t\t\tnojsElem.classList.add(\"js\");\r\n\t\t\tnojsElem.classList.remove(\"no-js\");\r\n\t\t}\r\n\r\n\t\twindow.addEventListener(\"keyup\", (event) => {\r\n\t\t\tif (event.key === \"Escape\") {\r\n\t\t\t\tthis.$store.dispatch(\"userEscKeypress\");\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (!window.matchMedia(\"(max-width: 950px)\").matches) {\r\n\t\t\tthis.openProductFilters();\r\n\t\t}\r\n\t\t// form label position hack\r\n\t\tif (this.$el.querySelectorAll) {\r\n\t\t\tconst inputs = this.$el.querySelectorAll(\r\n\t\t\t\t\".form__field--text input, .search-bar__form input\"\r\n\t\t\t);\r\n\t\t\tfor (let i = 0; i < inputs.length; i++) {\r\n\t\t\t\tif (inputs[i].value.length > 0)\r\n\t\t\t\t\tinputs[i].classList.add(\"has-value\");\r\n\t\t\t\tinputs[i].addEventListener(\"blur\", (event) => {\r\n\t\t\t\t\tevent.target.classList.toggle(\r\n\t\t\t\t\t\t\"has-value\",\r\n\t\t\t\t\t\tevent.target.value.length > 0\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.$nextTick(this.secondaryInit);\r\n\r\n\t\tthis.setWindowH(window.innerHeight);\r\n\t\tthis.setWindowW(window.innerWidth);\r\n\r\n\r\n\t\tconst htmlTag = document.getElementsByTagName('html')[0];\r\n\t\thtmlTag.style = `--vh: ${window.innerHeight/100}`;\r\n\r\n\r\n rInterval(()=>{\r\n\t\t\tconst scrollY = window.scrollY;\r\n\t\t\tthis.setWindowY(scrollY);\r\n\t\t}, 50);\r\n\t},\r\n\tmethods: {\r\n\t\t...mapActions([\r\n\t\t\t\"setIsMobile\",\r\n\t\t\t\"setIsIOS\",\r\n\t\t\t\r\n\t\t\t\"setWindowH\",\r\n\t\t\t\"setWindowW\",\r\n\t\t\t\"setWindowY\",\r\n\r\n\t\t\t\"openMainSearch\",\r\n\t\t\t\"openProductFilters\",\r\n\t\t\t\"closeProductFilters\",\r\n\t\t]),\r\n\t\tsecondaryInit() {\r\n\t\t\tobjectFitImages(); // Activate \"object-fit\" css polyfill\r\n\t\t},\r\n\t},\r\n};\r\nnew Vue(vueApp);\r\n/*jslint ignore:end*/\r\n\r\n// ONLY FOR DESIGN SYSTEM SHOULD BE REMOVED\r\nconst dsApps = document.querySelectorAll(\".js--vue-app-instance\");\r\nif (dsApps) {\r\n\tdsApps.forEach((el) => {\r\n\t\tvueApp.el = el;\r\n\t\tnew Vue(vueApp);\r\n\t});\r\n}\r\n"],"sourceRoot":""}