{"version":3,"sources":["webpack:///./src/project/product/product-details/ProductDetailsBidTile.vue?a39e","webpack:///./src/project/product/nextdelivery/NextDelivery.vue?2b4c","webpack:///./src/project/product/nextdelivery/NextDelivery.vue","webpack:///./src/project/product/nextdelivery/NextDelivery.vue?ef00","webpack:///./src/project/product/nextdelivery/NextDelivery.vue?f2d7","webpack:///./node_modules/core-js/internals/string-pad.js","webpack:///./src/project/product/product-details/ProductDetailsRecommendations.vue?8bc4","webpack:///./src/project/product/product-details/BrandCategoriesLinks.vue?0396","webpack:///./src/project/product/product-details/BrandCategoriesLinks.vue","webpack:///./src/project/product/product-details/BrandCategoriesLinks.vue?1a3b","webpack:///./src/project/product/product-details/BrandCategoriesLinks.vue?fd1d","webpack:///./src/project/video/ProductVideoRender.vue?08cf","webpack:///./src/project/product/product-details/ProductDetailsReasonsToBuy.vue?e274","webpack:///./node_modules/core-js/modules/es.string.pad-start.js","webpack:///./src/project/form/Dropdown.vue?1ec5","webpack:///./src/project/form/Dropdown.vue","webpack:///./src/project/form/Dropdown.vue?1c07","webpack:///./src/project/form/Dropdown.vue?e61e","webpack:///./src/project/product/product-details/ProductDetailsRelatedModels.vue?3118","webpack:///./node_modules/core-js/modules/es.array.flat-map.js","webpack:///./src/project/product/product-tile/ProductRelationSearchControl.vue?e44c","webpack:///./src/project/product/product-tile/ProductRelationSearchControl.vue","webpack:///./src/project/modals/overlays/ProductAccessoriesCategoryOverlay.service.ts","webpack:///./src/project/product/product-tile/ProductRelationSearchControl.vue?f756","webpack:///./src/project/product/product-tile/ProductRelationSearchControl.vue?604c","webpack:///./node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack:///./src/core/ui-components/tabs/Tab.vue?2562","webpack:///./src/core/ui-components/tabs/Tab.vue","webpack:///./src/core/ui-components/tabs/Tab.vue?57b9","webpack:///./src/core/ui-components/tabs/Tab.vue?7f28","webpack:///./src/project/app/client-pages/product-details/ProductDetailsPage.vue?62ee","webpack:///./src/project/product/product-details/ProductDetails.vue?d03c","webpack:///./src/project/product/services/productDelivery.service.ts","webpack:///./src/project/product/product-details/ProductDetailsSlider.vue?c396","webpack:///./src/project/product/product-details/ProductDetailsSlider.vue","webpack:///./src/project/product/product-details/ProductDetailsSlider.vue?5106","webpack:///./src/project/product/product-details/ProductDetailsSlider.vue?0589","webpack:///./src/project/product/product-details/ProductDetailsSpecifications.vue?c20c","webpack:///./src/project/product/product-details/ProductDetailsSpecifications.vue","webpack:///./src/project/product/product-details/ProductDetailsSpecifications.vue?5343","webpack:///./src/project/product/product-details/ProductDetailsSpecifications.vue?5ad7","webpack:///./src/project/product/product-details/ProductDetailsRelatedModels.vue?fa35","webpack:///./src/project/product/product-details/ProductDetailsRelatedModels.vue","webpack:///./src/project/product/product-details/ProductDetailsRelatedModels.vue?048d","webpack:///./src/project/product/product-details/ProductDetailsRelatedModels.vue?512a","webpack:///./src/project/product/product-details/ProductDetailsReasonsToBuy.vue?4f24","webpack:///./src/project/product/product-details/ProductDetailsReasonsToBuy.vue","webpack:///./src/project/product/product-details/ProductDetailsReasonsToBuy.vue?1a5c","webpack:///./src/project/product/product-details/ProductDetailsReasonsToBuy.vue?95c7","webpack:///./src/project/product/product-details/ProductDetailsCart.vue?2378","webpack:///./src/project/product/product-details/ProductDetailsCart.vue","webpack:///./src/project/product/product-details/ProductDetailsCart.vue?6ad4","webpack:///./src/project/product/product-details/ProductDetailsCart.vue?02ab","webpack:///./src/project/product/product-details/ProductDetailsRelations.vue?2272","webpack:///./src/project/product/product-details/ProductDetailsRelations.vue","webpack:///./src/project/product/product-details/ProductDetailsRelations.vue?808f","webpack:///./src/project/product/product-details/ProductDetailsRelations.vue?ff20","webpack:///./src/project/product/product-details/ProductDetailsPartnerLogos.vue?e25c","webpack:///./src/core/formatters/emailAsHtml.service.ts","webpack:///./src/project/product/product-details/ProductDetailsPartnerLogos.vue","webpack:///./src/project/product/product-details/ProductDetailsPartnerLogos.vue?536d","webpack:///./src/project/product/product-details/ProductDetailsPartnerLogos.vue?5651","webpack:///./src/project/product/product-details/ProductDetailsRecommendations.vue?815e","webpack:///./src/project/product/product-details/ProductDetailsRecommendations.vue","webpack:///./src/project/product/product-details/ProductDetailsRecommendations.vue?2a47","webpack:///./src/project/product/product-details/ProductDetailsRecommendations.vue?fc82","webpack:///./src/project/modals/overlays/productFeedbackOverlay.service.ts","webpack:///./src/project/product/product-details/ProductDetailsBidTile.vue?7715","webpack:///./src/project/product/product-details/ProductDetailsBidTile.vue","webpack:///./src/project/product/product-details/ProductDetailsBidTile.vue?4438","webpack:///./src/project/product/product-details/ProductDetailsBidTile.vue?18e3","webpack:///./src/project/product/product-details/ProductDetailsSeries.vue?b10b","webpack:///./src/project/product/product-details/ProductDetailsSeries.vue","webpack:///./src/project/product/product-details/ProductDetailsSeries.vue?e8e8","webpack:///./src/project/product/product-details/ProductDetailsSeries.vue?025a","webpack:///./src/project/product/product-details/ProductDetailsSeriesTable.vue?34e5","webpack:///./src/project/product/services/stockFetchByPost.service.ts","webpack:///./src/project/product/product-details/ProductDetailsSeriesTable.vue","webpack:///./src/project/product/product-details/ProductDetailsSeriesTable.vue?da72","webpack:///./src/project/product/product-details/ProductDetailsSeriesTable.vue?aa75","webpack:///./src/project/app/client-pages/rack-configurator/RackStartEditButton.vue?4d74","webpack:///./src/project/app/client-pages/rack-configurator/rackStartEditModal.service.ts","webpack:///./src/project/app/client-pages/rack-configurator/RackStartEditButton.vue","webpack:///./src/project/app/client-pages/rack-configurator/RackStartEditButton.vue?b642","webpack:///./src/project/app/client-pages/rack-configurator/RackStartEditButton.vue?3ed2","webpack:///./src/project/product/product-details/AdnuntiusProductDetailsBannerBlock.vue?475c","webpack:///./src/project/product/product-details/AdnuntiusProductDetailsBannerBlock.vue","webpack:///./src/project/product/product-details/AdnuntiusProductDetailsBannerBlock.vue?78bf","webpack:///./src/project/product/product-details/AdnuntiusProductDetailsBannerBlock.vue?7cc0","webpack:///./src/project/product/product-details/ProductDetails.vue","webpack:///./src/project/product/product-details/ProductDetails.vue?de8a","webpack:///./src/project/product/product-details/ProductDetails.vue?fb98","webpack:///./src/project/app/client-pages/product-details/productDetailsUrl.service.ts","webpack:///./src/project/app/client-pages/product-details/ProductDetailsPage.vue","webpack:///./src/project/app/client-pages/product-details/ProductDetailsPage.vue?7554","webpack:///./src/project/app/client-pages/product-details/ProductDetailsPage.vue?0be2","webpack:///./src/project/product/product-details/ProductDetailsSlider.vue?df02","webpack:///./src/core/ui-components/SmartHeadline.vue","webpack:///./src/core/ui-components/SmartHeadline.vue?38f1","webpack:///./src/core/ui-components/SmartHeadline.vue?2c08","webpack:///./src/core/ui-components/tabs/Tabs.vue?3edd","webpack:///./src/core/ui-components/tabs/Tabs.vue","webpack:///./src/core/ui-components/tabs/Tabs.vue?e940","webpack:///./src/core/ui-components/tabs/Tabs.vue?35b9","webpack:///./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack:///./src/project/modals/overlays/ProductDetailsMediaOverlay.service.ts","webpack:///./src/project/product/product-details/ProductDetailsSeries.vue?9264","webpack:///./src/project/form/Dropdown.vue?0ba8","webpack:///./src/project/product/product-details/ProductDetailsImageVideo.vue?be51","webpack:///./src/project/product/product-details/ProductDetailsImageVideo.vue","webpack:///./src/project/product/product-details/ProductDetailsImageVideo.vue?db1a","webpack:///./src/project/product/product-details/ProductDetailsImageVideo.vue?4fd8","webpack:///./src/project/product/product-details/ProductDetails.vue?403d","webpack:///./src/project/product/product-details/ProductDetailsRelations.vue?adc1","webpack:///./src/project/video/ProductVideoRender.vue?80c4","webpack:///./src/project/video/ProductNativeVideo.vue?8951","webpack:///./src/project/video/ProductNativeVideo.vue","webpack:///./src/project/video/ProductNativeVideo.vue?7681","webpack:///./src/project/video/ProductNativeVideo.vue?ea9f","webpack:///./src/project/video/ProductVimeoVideo.vue?f9b3","webpack:///./src/project/video/ProductVimeoVideo.vue","webpack:///./src/project/video/ProductVimeoVideo.vue?7342","webpack:///./src/project/video/ProductVimeoVideo.vue?a1fa","webpack:///./src/project/video/ProductYoutubeVideo.vue?9c52","webpack:///./src/project/video/ProductYoutubeVideo.vue","webpack:///./src/project/video/constants.ts","webpack:///./src/project/video/ProductYoutubeVideo.vue?ed6c","webpack:///./src/project/video/ProductYoutubeVideo.vue?af96","webpack:///./src/project/video/ProductVideoRender.vue","webpack:///./src/project/video/ProductVideoRender.vue?4235","webpack:///./src/project/video/ProductVideoRender.vue?69fe","webpack:///./src/core/http/contentApi.service.ts"],"names":["render","_vm","this","_h","$createElement","_c","_self","visible","totalSeconds","staticClass","class","mode","attrs","_v","_s","$dictionary","get","hours","minutes","seconds","_e","staticRenderFns","nextDelivery","getNextDelivery","itemIds","result","secondsUntilNextDelivery","setInterval","updateCountDown","numHours","Math","floor","numMinutes","numSeconds","toString","padStart","required","type","String","component","uncurryThis","toLength","$repeat","requireObjectCoercible","repeat","stringSlice","slice","ceil","createMethod","IS_END","$this","maxLength","fillString","fillLen","stringFiller","S","intMaxLength","stringLength","length","fillStr","undefined","module","exports","start","end","loading","brandLinks","labelHeading","_l","brand","key","url","displayName","brandLinksData","categoryDisplayNames","Map","brandName","brandSearchPages","categoryIds","navigation","categories","names","Object","keys","forEach","categoryId","set","brandLinksFiltered","cat","firstCategoryId","concat","uniqueCategories","filter","e","i","a","indexOf","loadCategoryNamesByIds","map","link","index","name","links","activeBrandCategory","c","endsWith","newBrandName","oldBrandName","loadBrandLinks","loadCategoryNames","immediate","$","$padStart","WEBKIT_BUG","target","proto","forced","arguments","dropdownActive","_b","iconIsAfter","buttonClass","on","handleClick","$attrs","icon","_t","directives","rawName","value","expression","style","closeDropdown","$event","positionStyle","rect","$el","getBoundingClientRect","parentRect","parentElement","parentParentRect","minWidth","width","top","abs","direction","positionRight","setPositionStyle","$emit","openDropdown","default","Boolean","flattenIntoArray","aCallable","toObject","lengthOfArrayLike","arraySpeciesCreate","flatMap","callbackfn","A","O","sourceLen","ProductRelationType","searchResult","categoryFacet","values","totalProducts","clickShowCategoryFilter","getProductsResult","hasMorePages","handleNextPage","options","showModal","componentAttrs","placement","usePanelWrapper","closeOnRouteChange","closeOnBreakpointChange","AbstractModalService","accessoriesPageSize","searching","fromNumber","toNumber","v","selected","products","isSearching","relationType","allowSearch","setSearching","similarAlternatives","product","productId","getCategoryIds","exactAlternatives","accessories","freeze","HttpCancelError","show","facetValues","resetPaging","search","addToUnscopables","active","hash","getHash","setHash","details","wid","trackPage","hasActiveCampaign","isNew","subLine","arg","campaign","campaignIconUrl","rewriteCampaignIconUrl","description","getClassificationCodeDictionary","mpn","itemId","ean","scopedSlots","_u","fn","proxy","oem","isUserLoggedIn","productSeries","hasProductSeries","hasBids","hasQuantityDiscounts","loaded","stockLoaded","data","stockData","simpleData","isLimitedItem","pricesLoaded","priceData","trackAddToBasketChange","myAccountBidsPage","bidsData","ref","productImpression","productClick","bid","bidIndex","partnerLogos","hasUserLoggedInBefore","productTextsTranslated","toggleDescriptionTranslation","labelForTranslateDescription","gotoDescription","bullet","domProps","specifications","gotoSpecifications","isStaff","preventDefault","openReportOverlay","apply","conditions","condition","conditionIndex","productGuideBrands","productBaseLabelValues","productDetailsPage","shortDescription","slot","documents","document","documentIndex","uri","thumbnailUrl","extension","languages","lang","languageNameByLanguageCode","reasonsToBuy","productSchemaJson","productSchemaQuestionJson","ProductDeliveryCodes","Local","Remote","InComing","stock","isLocal","some","x","locationType","isRemote","isIncoming","stockType","productDeliveryCode","Error","brandLogos","imageLoaded","imageMode","brandUrl","assetCount","renderMainSlider","sliderOptions","showOverlay","mainSliderActive","prevButtonSelector","nextButtonSelector","image","imageIndex","productName","video","fallbackImage","isMobile","sliderThumnailOptions","THUMBNAIL_SLIDES_PER_VIEW","isBot","uaIsPrerender","uaIsBot","overlayActive","padding","activeAspectRatio","toFixed","paddingTop","productImages","productVideos","aspectRatio","activeBpDef","find","bpDef","isBreakpointActive","showThumbNails","$refs","thumbs","speed","initialSlide","slidesPerView","slidesPerGroup","loop","loopedSlides","loopFillGroupWithBlank","watchSlidesVisibility","watchOverflow","setWrapperSize","pagination","el","clickable","nextEl","prevEl","grabCursor","allowTouchMove","breakpoints","720","simulateTouch","swiper","spaceBetween","height","keyboard","enabled","onlyInViewPort","slider","$swiper","activeIndex","images","videoes","BRAND","imageDimensions","brandLogoUrl125px","img","Image","src","onload","categoryFallbackImage","categoryFallbackImageMap","item","isDefaultFallback","Number","components","ProductDetailsImageVideo","$reactiveRefs","labelSpecifications","spec","specIdx","label","feature","featureIdx","getUnit","unit","join","readmore","open","close","translate","getWithNamedValues","exists","metaData","Array","ReadMore","relatedModelGroups","group","groupIdx","model","modelIdx","brandSeries","relation","relationIdx","path","productGuideSpecificGuidePage","query","series","modelName","relations","overflow","hasFetchedFullSection","getRelatedModelsSection","isLoadingSection","relatedModelsLoaded","fetched","settings","relatedModels","push","relatedModelsSection","section","models","splice","getRelatedModels","SpinnerOverlay","reason","title","imageUrl","bodyText","isLoggedIn","isServiceAvailable","isPriceAvailable","formattedPrice","$optionalProperty","price","discount","quantity","amount","cultureFormatted","suggestedRetailPrice","$permission","canPlaceOrder","showLoginOverlay","AddToBasket","discounts","trackLogInToViewPricesClick","hasAccessories","hasExactAlternatives","hasSimilarAlternatives","tabsChanged","tabsInit","getMessage","activeTab","labelAccessoriesText","handleRelationLoaded","$route","msgOrLabel","bodyTextKey","tabName","trackProductDetailsTabChange","Tabs","Tab","CondensedProductList","ProductRecommendationsBlock","ProductAccessoriesSearchControl","subtitle","partner","partnerIndex","renderedPixelUrl","visiblePixelUrl","viewPixelUrl","clickPixelUrl","click","imageCssClass","formatEmailAsHtml","regex","RegExp","rawTextString","formattedTextString","replace","isTall","isSquare","AdnuntiusPixels","recommendationsResult","changed","idx","content","headline","trackingListName","useListView","productBackgroundColor","relationsType","recommendationsBlockContent","recommendations","recommendationsProductDataPromises","getProductData","Promise","all","sort","b","indexA","indexB","recommend","categoryIdFilterPositiveList","categoryIdFilterNegativeList","displayedAtLocation","displayLocation","intervalDays","interval","popularityType","popularity","productCount","recommendationType","allowFillIfNecessary","brandId","hasImages","stockFilter","showFeedProducts","error","recommendation","isNaN","k","getRecommendationsContent","productDetailsUrl","nativeOn","bidNo","showMenu","isERPServiceAvailable","cancellationCallbacks","encodeURI","alternatives","isExternalProductGuide","Complete","ErpNotAvailable","NoErpResponseYet","NotLoggedIn","getPriceData","getStockData","trackImpression","now","before","request","requestData","cancel","promise","stockInformation","force","constructTrackingProduct","deltaQuantity","bus","emit","trackProductQuantityChange","stockInfo","trackingState","getTrackingState","Function","ProductTileBid","ProductTileCart","seriesItem","seriesIndex","refInFor","handleCloseInDropdown","handleClickInDropdown","alternativeSeriesDisplayName","getSelectedSeriesValue","alternativeSeries","alternativeSeriesIndex","alternativeOption","alternativeOptionIndex","productDetailsUrlTarget","handleClickProductSeriesItem","getStockByItemId","seriesValue","seriesOptionIndex","isActiveByWid","getProductUrlByWid","handleClickSeries","isSelectedByWid","getDisplayValue","displayValue","getItemIdByWid","getStockByWid","handleClickSeriesInvalidOption","labelForUnavailableCombination","alternativeSeriesFacetId","alternativeSeriesClearOnClose","resetStockData","productSeriesProducts","getStockItem","s","clickedSeriesValue","productUrl","getProductByWid","hasUrl","isNotCurrentUrl","router","currentRoute","isValidUrl","trackClickProductLink","selectedSeries","stockArray","m","p","isSelected","facetId","toLowerCase","combinationNames","dropDowns","facetDisplayName","n","cIndex","selectedSeriesItem","desiredSeriesOption","selectedSeriesFacetIdLowercased","obj","objWithFacets","facetKey","isAlternativeKey","alternativeItems","firstAlternativeSeriesFacetId","alternativeSeriesGroupedByFacetId","reduce","acc","dropdown0","dropdown1","desiredSeriesDropdown","d","$nextTick","trackClickSeriesDropdown","variant","pushToDataLayer","event","variantAttribute","seriesClassificationId","variantValue","isActive","productAlternative","externalProductLinkTarget","Dropdown","ProductTileStock","tableData","tableClasses","row","rowIndex","cell","cellIndex","tag","cancelKey","stockProductsByPost","stocks","stockByItemId","AbstractBulkFetch","generateTableData","rows","columns","tableRowsData","tableHeaderRow","colorValue","formatImageUrl","ImageSizePlaceholderValues","W172","allCellClasses","lengthValue","getProductForSerieType","firstRowIndex","colorIndex","descriptionCell","cellsToMoveToBack","cellsToMoveToFront","lengthVariant","colorVariant","handleClickOnRackEdit","rack","rackProduct","configurations","wide","isRackConfigurable","rackConfiguratorPage","loadUsersConfigurations","response","trackEvent","$router","RackProductId","actionValue","action","adnuntiusTrackingData","adContentBlockViewModel","contentLoadError","init","getAdContent","finally","personalization","productDetailBanner","contactKey","getContactKey","customerKey","getCustomerKey","currentUrl","fullPath","lineItemId","creativeId","parentBlockAlias","ImageTextVideoBlock","conditionsLoaded","bidsLoaded","productSeriesLoaded","canPunchOut","hasLoggedInBefore","languageTargetString","getLanguageCode","isFeatureEnabled","GoogleTranslatePdp","buttonTarget","translateDescription","siteInfo","languageCode","translation","scrollToElement","readMoreDescription","translatedDescription","longDescription","translatedBulletPoints","bulletPoints","canViewBids","campaigns","showCampaignIcon","getProductClassificationCodeDictionary","conditionCode","getProductDeliveryCodeDictionary","MY_ACCOUNT_BIDS","priceOrStockLoaded","updateMetaData","productBids","pageUrl","warn","getContent","createTrackingProduct","bullets","faqs","frequentlyAskedQuestions","mainFeatureBulletsMarkup","labelValues","mainFeaturesCount","labelQuestionKey","questionLabelMainFeature","labelKeyAnswerPrefix","answerPrefixLabelMainFeature","labelKeyAnswerPostfix","answerPostfixLabelMainFeature","schemaBase","schema","mainEntity","acceptedAnswer","text","faq","question","answer","schemaImages","sku","logo","brandLogoUrl250px","review","gtin8","gtin13","gtin","conditionType","offers","window","location","href","priceCurrency","currency","invariantCultureFormatted","itemCondition","availability","schemaAvailability","seller","schemaType","status","stockStatus","W1400","defaultImageUrl","category","breadCrumb","stockStatusLabel","displayNameAndItemId","categoryValues","breadcrumbs","catIndex","titleLabelKey","titleLabel","titleLabelTranslated","titleKeys","seoTitles","titleKeysTranslated","getWithNamedValuesUntilString","descriptionLabelKey","descriptionLabel","descriptionLabelTranslated","descriptionKey","seoDescription","descriptionKeyTranslated","setTitle","setDescription","setCanonicalUrl","canonical","setOpenGraphImage","expectedProductUrl","setPrerenderRedirectUrlsIfLocationIsWrong","blocking","limitDocuments","LimitProductSheetToStaff","hasProductSheet","doc","assetType","ProductSheet","id","pph","productGroup","split","shift","getConditions","getBidsData","getProductDetailsPage","getPartnerLogos","loadProductSeries","cancelOutstandingXHRRequests","current","previous","BrandProductGuideBanner","AdnuntiusProductDetailsBannerBlock","RackStartEditButton","NextDelivery","ProductDetailsSeries","ProductDetailsSeriesTable","ProductListTracker","ProductDetailsSlider","ProductDetailsSpecifications","ProductDetailsRelatedModels","ProductDetailsReasonsToBuy","ProductDetailsCart","ProductDetailsRelations","ProductDetailsRecommendations","SmartParagraph","ProductTileFavorite","ProductDetailsPartnerLogos","CopyText","ProductDetailsBidTile","BrandCategoriesLinks","productDetailsRegEx","getProductWidFromUrl","match","matchingRegEx","hasTrackedPage","setup","to","from","trackProductDetailsPage","productWid","setBreadcrumb","logMessage","handleErrorCodes","alternativeUrls","setHreflang","ProductDetails","beforeRouteEnter","next","h","$props","h1","styleAsH1","level","$slots","validator","includes","headerClass","tab","toggle","contentClass","tabs","$children","$options","userAgent","test","ProductDetailsMediaOverlayService","videos","contentAutoScroll","contentMaxHeight","disableBodyScroll","showCloseButton","productMediaSize","mediaMode","imageName","isFirst","W200","W700","W300","ResponsiveProductImage","VideoRender","cssClasses","videoUrl","screenMode","allowControls","startVideo","iconWidth","iconHeight","fullscreenMode","videoPlayMount","playOptions","controls","autoplay","videoMount","posterOptions","background","youtubeUrl","videoImage","youtubeRegex","videoId","imageResolution","VideoType","supportedSizes","videoType","Vimeo","Youtube","Native","videoWrapper","visibleState","isScrolledIntoView","parent","closest","isVisible","bottom","left","right","valuesToCheck","every","val","NativeVideo","VimeoVideo","YoutubeVideo","ContentApiService","relativeUrl","getPage","ensureCulture","getPageParallel","jsonContent","isPreview","contentHost"],"mappings":"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","file":"js/chunk-615a0b4c.25eb38ea.js","sourcesContent":["import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsBidTile.vue?vue&type=style&index=0&id=99bc5192&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsBidTile.vue?vue&type=style&index=0&id=99bc5192&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible && _vm.totalSeconds > 0)?_c('div',{staticClass:\"bg-gray-400 text-15 font-medium\",class:{'xl:text-15': _vm.mode == 'product', 'xl:text-12': _vm.mode == 'basket'}},[_c('div',{staticClass:\"flex justify-center lg:justify-end items-center py-10 px-20\"},[_c('div',{staticClass:\"mr-10\"},[_c('CIcon',{attrs:{\"name\":\"truck\",\"width\":\"28\",\"height\":\"28\",\"original\":true}})],1),_c('div',{staticClass:\"mr-15 text-11 leading-normal\",class:{'xl:text-15': _vm.mode == 'product', 'xl:text-11': _vm.mode == 'basket'}},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.TimeToNextShipment'))+\" \")]),_c('div',{staticClass:\"flex bg-white rounded-lg ml-5 py-5 px-10 text-green-500\"},[_c('div',{staticClass:\"mr-5\"},[_vm._v(\" \"+_vm._s(_vm.hours)+\" \")]),_c('div',{staticClass:\"hidden xl:inline\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.HoursFull'))+\" \")]),_c('div',{staticClass:\"inline xl:hidden\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.HoursShort'))+\" \")])]),_c('div',{staticClass:\"flex bg-white rounded-lg ml-5 py-5 px-10 text-green-500\"},[_c('div',{staticClass:\"mr-5\"},[_vm._v(\" \"+_vm._s(_vm.minutes)+\" \")]),_c('div',{staticClass:\"hidden xl:inline\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.MinutesFull'))+\" \")]),_c('div',{staticClass:\"inline xl:hidden\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.MinutesShort'))+\" \")])]),_c('div',{staticClass:\"flex bg-white rounded-lg ml-5 py-5 pr-10 text-green-500\"},[_c('div',{staticClass:\"w-34 pr-5 text-right\"},[_vm._v(\" \"+_vm._s(_vm.seconds)+\" \")]),_c('div',{staticClass:\"hidden xl:inline\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.SecondsFull'))+\" \")]),_c('div',{staticClass:\"inline xl:hidden\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.NextDelivery.SecondsShort'))+\" \")])])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport Api from '@/project/http/Api.service';\r\n\r\n@Component\r\nexport default class NextDelivery extends Vue {\r\n @Prop({ required: true })\r\n itemIds!: string[];\r\n\r\n @Prop({ required: false, type: String })\r\n mode!: 'product' | 'basket';\r\n\r\n visible: boolean = false;\r\n hours: string = '';\r\n minutes: string = '';\r\n seconds: string = '';\r\n\r\n totalSeconds: number = 0;\r\n\r\n async mounted() {\r\n const result = await Api.nextDelivery.getNextDelivery(this.itemIds);\r\n if (result.secondsUntilNextDelivery) {\r\n this.visible = true;\r\n\r\n this.totalSeconds = result.secondsUntilNextDelivery;\r\n\r\n setInterval(() => {\r\n this.totalSeconds--;\r\n this.updateCountDown();\r\n }, 1000);\r\n\r\n this.updateCountDown();\r\n }\r\n }\r\n\r\n updateCountDown() {\r\n const numHours = Math.floor(this.totalSeconds / 60 / 60);\r\n const numMinutes = Math.floor((this.totalSeconds / 60) - (numHours * 60));\r\n const numSeconds = Math.floor((this.totalSeconds) - (numHours * 60 * 60) - (numMinutes * 60));\r\n\r\n this.hours = numHours.toString().padStart(2, '0');\r\n this.minutes = numMinutes.toString().padStart(2, '0');\r\n this.seconds = numSeconds.toString().padStart(2, '0');\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NextDelivery.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NextDelivery.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NextDelivery.vue?vue&type=template&id=1756bc61&\"\nimport script from \"./NextDelivery.vue?vue&type=script&lang=ts&\"\nexport * from \"./NextDelivery.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRecommendations.vue?vue&type=style&index=0&id=3a92b2e6&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRecommendations.vue?vue&type=style&index=0&id=3a92b2e6&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.loading && _vm.brandLinks && _vm.brandLinks.length > 0)?_c('div',{staticClass:\"bg-white p-20 pb-5 text-13\"},[_c('h3',{staticClass:\"font-medium text-16 mb-15\"},[_vm._v(\" \"+_vm._s(_vm.labelHeading)+\" \")]),_vm._l((_vm.brandLinks),function(brand){return _c('CultureAwareRouterLink',{key:brand.url,staticClass:\"theme-text-linkcolor underline hover:no-underline mr-40 mb-15\",attrs:{\"to\":brand.url}},[_vm._v(\" \"+_vm._s(brand.displayName)+\" \")])})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component, Watch } from 'vue-property-decorator';\r\nimport Api from '@/project/http/Api.service';\r\nimport { BrandSearchPages } from '@/project/http/controllers/brandController';\r\nimport dictionaryService from '@/core/translation/dictionary.service';\r\n\r\n@Component\r\nexport default class BrandCategoriesLinks extends Vue {\r\n @Prop()\r\n brandName!: string | null;\r\n\r\n @Prop()\r\n activeBrandCategory!: string;\r\n\r\n loading: boolean = true;\r\n brandLinksData: BrandSearchPages | null = null;\r\n categoryDisplayNames = new Map();\r\n\r\n async loadBrandLinks() {\r\n if (this.brandName) {\r\n this.brandLinksData = await Api.brand.brandSearchPages(this.brandName);\r\n } else {\r\n this.brandLinksData = null;\r\n }\r\n }\r\n\r\n async loadCategoryNamesByIds(categoryIds: string[]) {\r\n const categories = await Api.navigation.categories(categoryIds);\r\n if (categories?.names) {\r\n Object.keys(categories.names).forEach((categoryId) => {\r\n this.categoryDisplayNames.set(categoryId, categories.names[categoryId]);\r\n });\r\n }\r\n }\r\n\r\n async loadCategoryNames() {\r\n let categories: string[] = [];\r\n if (this.brandLinksFiltered?.length) {\r\n this.brandLinksFiltered.forEach(cat => {\r\n if (cat.displayName) {\r\n const firstCategoryId = cat.categoryIds[0];\r\n this.categoryDisplayNames.set(firstCategoryId, cat.displayName);\r\n } else {\r\n categories = categories.concat(cat.categoryIds);\r\n }\r\n });\r\n }\r\n if (categories.length) {\r\n const uniqueCategories = categories.filter((e, i, a) => a.indexOf(e) === i);\r\n await this.loadCategoryNamesByIds(uniqueCategories);\r\n }\r\n }\r\n\r\n get brandLinks() {\r\n return (!this.loading && this.brandLinksFiltered?.map(link => {\r\n if (!link.categoryIds?.length) return null;\r\n const index = link.categoryIds[0].toString();\r\n const name = this.categoryDisplayNames.get(index);\r\n return {\r\n ...link,\r\n displayName: name\r\n };\r\n })) || null;\r\n }\r\n\r\n get brandLinksFiltered() {\r\n if (this.brandLinksData?.links && this.brandLinksData.links.length > 0) {\r\n return (this.activeBrandCategory ? this.brandLinksData.links.filter(c => !c.url.endsWith(this.activeBrandCategory)) : this.brandLinksData.links);\r\n }\r\n return null;\r\n }\r\n\r\n get labelHeading():string {\r\n return dictionaryService.get(this.activeBrandCategory ? 'Brand.BrandOverview.BrandCategories.OtherCategories' : 'Brand.BrandOverview.BrandCategories', [this.brandLinksData?.brandName || '']);\r\n }\r\n\r\n @Watch('brandName', { immediate: true })\r\n async onBrandNameChange(newBrandName: string, oldBrandName: string) {\r\n this.loading = true;\r\n await this.loadBrandLinks();\r\n await this.loadCategoryNames();\r\n this.loading = false;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BrandCategoriesLinks.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BrandCategoriesLinks.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./BrandCategoriesLinks.vue?vue&type=template&id=1575be9a&\"\nimport script from \"./BrandCategoriesLinks.vue?vue&type=script&lang=ts&\"\nexport * from \"./BrandCategoriesLinks.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=style&index=0&id=145baeaa&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=style&index=0&id=145baeaa&lang=less&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsReasonsToBuy.vue?vue&type=style&index=0&id=b6ea20c8&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsReasonsToBuy.vue?vue&type=style&index=0&id=b6ea20c8&lang=less&scoped=true&\"","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dropdown\",class:{'c-dropdown__active': _vm.dropdownActive }},[_c('button',_vm._b({staticClass:\"c-dropdown--button\",class:[{ 'c-dropdown--icon-after' : _vm.iconIsAfter}, _vm.buttonClass],attrs:{\"type\":\"button\"},on:{\"click\":_vm.handleClick}},'button',_vm.$attrs,false),[(_vm.hasIconBefore)?_c('CIcon',{staticClass:\"select-none pointer-events-none\",attrs:{\"name\":_vm.icon}}):_vm._e(),_c('span',{staticClass:\"c-dropdown--text select-none pointer-events-none\"},[_vm._t(\"default\")],2),(_vm.hasIconAfter)?_c('CIcon',{staticClass:\"select-none pointer-events-none\",attrs:{\"name\":_vm.icon}}):_vm._e()],1),_c('transition',{attrs:{\"appear\":\"\",\"enter-active-class\":\"animated dropdownSlideIn u-anim-dur-200\",\"leave-active-class\":\"animated dropdownSlideOut u-anim-dur-200\"}},[(_vm.dropdownActive)?_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.closeDropdown),expression:\"closeDropdown\"}],staticClass:\"c-dropdown--dropdown bg-white\",style:(_vm.positionStyle)},[_c('button',{staticClass:\"c-dropdown--active-head h-36 lg:h-40 w-full pr-20 flex items-stretch\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.closeDropdown}},[_c('span',{staticClass:\"c-dropdown--active-head-text flex-grow flex items-center text-left select-none pointer-events-none\"},[_vm._t(\"activeHead\")],2),_c('CIcon',{staticClass:\"my-auto select-none pointer-events-none\",attrs:{\"name\":\"close\",\"width\":\"12\",\"height\":\"12\"}})],1),_vm._t(\"dropdown\",null,{\"closeDropdown\":_vm.closeDropdown})],2):_vm._e()]),(_vm.dropdownActive)?_c('transition',{attrs:{\"appear\":\"\",\"enter-active-class\":\"animated fadeIn u-anim-dur-200\",\"leave-active-class\":\"animated fadeOut u-anim-dur-200\"}},[_c('div',{staticClass:\"c-dropdown--shadow\",on:{\"click\":function($event){return _vm.closeDropdown()}}})]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport IDropdown from '@/project/form/IDropdown';\r\n\r\n@Component\r\nexport default class Dropdown extends Vue implements IDropdown {\r\n @Prop({ type: String, required: false })\r\n buttonClass!: string;\r\n\r\n @Prop({ type: String, required: false, default: '' })\r\n icon!: string;\r\n\r\n @Prop({ type: Boolean, required: false, default: false })\r\n iconIsAfter!: boolean;\r\n\r\n @Prop({ type: Boolean, required: false, default: false })\r\n positionRight!: boolean;\r\n\r\n dropdownActive: boolean = false;\r\n\r\n positionStyle: Partial | null = null;\r\n setPositionStyle() {\r\n const rect = this.$el.getBoundingClientRect();\r\n const parentRect = this.$el.parentElement!.getBoundingClientRect();\r\n const parentParentRect = this.$el.parentElement!.parentElement!.getBoundingClientRect();\r\n const minWidth = `${parentParentRect.width * 0.6}px`;\r\n const top = Math.abs(parentRect.top - rect.top);\r\n\r\n const direction = this.positionRight ? 'right' : 'left';\r\n\r\n this.positionStyle = {\r\n top: top + 'px',\r\n [direction]: '0',\r\n minWidth\r\n };\r\n }\r\n\r\n openDropdown() {\r\n this.setPositionStyle();\r\n this.dropdownActive = true;\r\n }\r\n\r\n closeDropdown() {\r\n this.dropdownActive = false;\r\n this.$emit('close');\r\n }\r\n\r\n get hasIconBefore(): boolean {\r\n return this.icon !== '' && !this.iconIsAfter;\r\n }\r\n\r\n get hasIconAfter(): boolean {\r\n return this.icon !== '' && this.iconIsAfter;\r\n }\r\n\r\n handleClick() {\r\n this.$emit('click');\r\n\r\n if (!this.dropdownActive) {\r\n this.openDropdown();\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dropdown.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dropdown.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Dropdown.vue?vue&type=template&id=7551ad1c&scoped=true&\"\nimport script from \"./Dropdown.vue?vue&type=script&lang=ts&\"\nexport * from \"./Dropdown.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Dropdown.vue?vue&type=style&index=0&id=7551ad1c&lang=less&scoped=true&\"\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 \"7551ad1c\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelatedModels.vue?vue&type=style&index=0&id=cadafdea&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelatedModels.vue?vue&type=style&index=0&id=cadafdea&lang=less&scoped=true&\"","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.searchResult && _vm.searchResult.categoryFacet.values.length > 1)?_c('div',{staticClass:\"lg:flex mb-10\"},[_c('div',{staticClass:\"lg:h-40 lg:flex items-center lg:pb-2\"},[_c('span',{staticClass:\"text-13 lg:text-14 font-bold\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Relations.FilterCategories.FilterSummary', [_vm.searchResult.totalProducts.toString(), _vm.searchResult.categoryFacet.values.length.toString()]))+\" \")])]),_c('CallToAction',{staticClass:\"cta--link cta-icon--16 mr-auto\",attrs:{\"text\":_vm.$dictionary.get('Product.Relations.FilterCategories'),\"icon\":\"filters\"},on:{\"click\":_vm.clickShowCategoryFilter}})],1):_vm._e(),_vm._t(\"default\",null,{\"products\":_vm.getProductsResult}),(_vm.searchResult && _vm.searchResult.hasMorePages)?_c('div',{staticClass:\"flex\"},[_c('CallToAction',{staticClass:\"cta--link cta-icon--16 mx-auto\",attrs:{\"text\":_vm.$dictionary.get('Product.Relations.ShowMore'),\"icon\":\"plus-big\"},on:{\"click\":_vm.handleNextPage}})],1):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop, Watch } from 'vue-property-decorator';\r\nimport Api from '@/project/http/Api.service';\r\nimport {\r\n ReferencedProductsViewModel, FacetValueViewObject\r\n} from '@/types/apiServerContract';\r\nimport { HttpCancelError } from '@/core/http/HttpCancelError';\r\nimport ProductAccessoriesCategoryOverlayService\r\n from '@/project/modals/overlays/ProductAccessoriesCategoryOverlay.service';\r\nexport enum ProductRelationType {\r\n 'accessories' = 'accessories',\r\n 'exactAlternatives' = 'exactAlternatives',\r\n 'similarAlternatives' = 'similarAlternatives',\r\n}\r\nconst accessoriesPageSize = 5;\r\n@Component\r\nexport default class ProductAccessoriesSearchControl extends Vue {\r\n @Prop({ type: String, required: true })\r\n productId!: string;\r\n\r\n @Prop({ type: Boolean, default: true })\r\n allowSearch!: boolean;\r\n\r\n @Prop({ type: String, default: ProductRelationType.accessories })\r\n relationType!: string;\r\n\r\n searchResult: ReferencedProductsViewModel | null = null;\r\n searching = false;\r\n fromNumber: number = 0;\r\n toNumber: number = accessoriesPageSize;\r\n\r\n getCategoryIds(): string[] {\r\n return (this.searchResult?.categoryFacet.values.filter(v => v.selected) ?? [])?.flatMap(v => v.keys);\r\n }\r\n\r\n get getProductsResult() {\r\n return this.searchResult?.products || [];\r\n }\r\n\r\n setSearching(isSearching: boolean) {\r\n this.searching = isSearching;\r\n if (!isSearching) {\r\n this.$emit('loaded', this.relationType);\r\n }\r\n }\r\n\r\n async search() {\r\n if (!this.allowSearch || this.searching) return;\r\n\r\n this.setSearching(true);\r\n try {\r\n const result = this.relationType === ProductRelationType.similarAlternatives\r\n ? await Api.product.similarAlternatives(this.productId, this.getCategoryIds(), this.fromNumber, this.toNumber)\r\n : this.relationType === ProductRelationType.exactAlternatives ? await Api.product.exactAlternatives(this.productId, this.getCategoryIds(), this.fromNumber, this.toNumber)\r\n : await Api.product.accessories(this.productId, this.getCategoryIds(), this.fromNumber, this.toNumber);\r\n this.searchResult = Object.freeze(result);\r\n\r\n this.setSearching(false);\r\n } catch (error) {\r\n if (error instanceof HttpCancelError) {\r\n // Ok - cancelled by newer request\r\n } else {\r\n this.setSearching(false);\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n async clickShowCategoryFilter() {\r\n const facetValues = await ProductAccessoriesCategoryOverlayService.show(this.searchResult?.categoryFacet.values || []) as FacetValueViewObject[];\r\n if (this.searchResult && facetValues) {\r\n this.resetPaging(); // always reset paging, facetValues will be undefined if modal is canceled\r\n this.searchResult.categoryFacet.values = facetValues;\r\n this.search();\r\n }\r\n }\r\n\r\n handleNextPage() {\r\n this.toNumber = this.toNumber + accessoriesPageSize;\r\n this.search();\r\n }\r\n\r\n resetPaging() {\r\n this.fromNumber = 0;\r\n this.toNumber = accessoriesPageSize;\r\n }\r\n\r\n @Watch('allowSearch')\r\n onAllowSearchChange() {\r\n if (this.allowSearch) {\r\n this.search();\r\n }\r\n }\r\n\r\n @Watch('productId', {\r\n immediate: true\r\n })\r\n onProductIdChange() {\r\n this.search();\r\n }\r\n\r\n mounted() {\r\n this.resetPaging();\r\n this.search();\r\n }\r\n}\r\n","import { AbstractModalService } from '@/core/modals/AbstractModalService';\r\nimport { ModalOptions } from '@/core/modals/ModalState';\r\nimport { FacetValueViewObject } from '@/types/apiServerContract';\r\n\r\nclass ProductAccessoriesCategroyOverlayService extends AbstractModalService {\r\n public show(\r\n categories: FacetValueViewObject[] | null,\r\n options?: Partial\r\n ) {\r\n return this.showModal({\r\n component: () => import(\r\n /* webpackPrefetch: true */\r\n '@/project/product/product-tile/ProductAccessoriesCategoryOverlay.vue'),\r\n componentAttrs: {\r\n categories\r\n },\r\n options: {\r\n placement: 'center',\r\n usePanelWrapper: false,\r\n closeOnRouteChange: true,\r\n closeOnBreakpointChange: true,\r\n ...options\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default new ProductAccessoriesCategroyOverlayService();\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductRelationSearchControl.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductRelationSearchControl.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductRelationSearchControl.vue?vue&type=template&id=3f283850&\"\nimport script from \"./ProductRelationSearchControl.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductRelationSearchControl.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.keepAlive)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}]},[_vm._t(\"default\")],2):(_vm.active)?_c('div',[_vm._t(\"default\")],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport ITab from './ITab';\r\nimport urlHelperService from '@/core/urlHelper.service';\r\n\r\n@Component({\r\n name: 'Tab'\r\n})\r\nexport default class Tab extends Vue implements ITab {\r\n @Prop({ type: String, required: true }) name!: string;\r\n @Prop({ type: String }) hash!: string;\r\n @Prop({ type: Boolean, default: false }) selected!: boolean;\r\n @Prop({ type: Boolean, default: false }) keepAlive!: boolean;\r\n\r\n active: boolean = this.selected;\r\n\r\n toggle(active: boolean) {\r\n this.active = active;\r\n\r\n if (active && this.hash) {\r\n if (urlHelperService.getHash() !== this.hash) {\r\n urlHelperService.setHash(this.hash);\r\n }\r\n }\r\n }\r\n\r\n get isActive() {\r\n return this.active;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Tab.vue?vue&type=template&id=57332680&\"\nimport script from \"./Tab.vue?vue&type=script&lang=ts&\"\nexport * from \"./Tab.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.details)?_c('ProductDetails',{key:_vm.details.wid,attrs:{\"details\":_vm.details},on:{\"productComplete\":_vm.trackPage}}):(_vm.loading)?_c('div',{staticClass:\"flex-1 relative w-full h-full\"},[_c('SpinnerOverlay',{attrs:{\"show\":\"\",\"delay\":200}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.details)?_c('article',{key:_vm.details.wid,staticClass:\"flex flex-col\"},[_c('div',{staticClass:\"bg-white\"},[_c('div',{staticClass:\"o-container only-md:px-0\"},[_c('section',{staticClass:\"md:mb-20 md:pt-30 md:pb-20 md:px-20 bg-white\"},[_c('div',{staticClass:\"flex flex-col md:flex-row mb-20 md:mb-0\"},[_c('div',{staticClass:\"w-full md:p-0 md:pr-20 md:w-1/2\"},[_c('h1',{staticClass:\"text-18 p-20 font-medium pb-15 block md:hidden\"},[_vm._v(\" \"+_vm._s(_vm.details.displayName)+\" \")]),_c('ProductDetailsSlider',{staticClass:\"p-10 md:p-0\",attrs:{\"details\":_vm.details,\"aspect-ratio\":3/2}})],1),_c('div',{staticClass:\"product-details w-full md:pl-20 md:w-1/2\"},[_c('div',{staticClass:\"flex flex-col p-20 md:p-0 md:mb-15\"},[(_vm.hasActiveCampaign || _vm.details.isNew || _vm.details.subLine)?_c('section',{staticClass:\"flex flex-row mb-20\"},[(_vm.details.subLine)?_c('div',{directives:[{name:\"line-clamp\",rawName:\"v-line-clamp:16\",value:(1),expression:\"1\",arg:\"16\"}],staticClass:\"text-12 pt-4 pr-10\"},[_vm._v(\" \"+_vm._s(_vm.details.subLine)+\" \")]):_vm._e(),(_vm.hasActiveCampaign)?_vm._l((_vm.details.campaigns),function(campaign,index){return _c('CultureAwareRouterLink',{key:index,staticClass:\"flex flex-row items-center bg-yellow-600 px-10 py-2 text-12 text-white font-medium mr-10\",attrs:{\"to\":(\"/campaigns/\" + (campaign.campaignCode))}},[(campaign.showCampaignIcon)?[_c('span',{staticClass:\"mr-10\"},[(!campaign.campaignIconUrl)?_c('CIcon',{attrs:{\"name\":\"tilbud\",\"original\":false,\"width\":\"15\",\"height\":\"15\"}}):_c('div',{staticClass:\"campaign-image\"},[_c('img',{directives:[{name:\"on-error\",rawName:\"v-on-error\"}],attrs:{\"src\":_vm.rewriteCampaignIconUrl(campaign.campaignIconUrl),\"alt\":\"campaign-icon\"}})])],1),_c('span',[_vm._v(\" \"+_vm._s(campaign.description)+\" \")])]:_vm._e()],2)}):_vm._e(),(_vm.details.isNew)?_c('div',{staticClass:\"flex flex-row items-center bg-blue-500 oprema:bg-opremablue-500 px-10 py-2 text-12 text-white font-medium mr-10\"},[_c('CIcon',{attrs:{\"name\":\"newproduct\",\"original\":false,\"width\":\"15\",\"height\":\"15\"}}),_c('span',{staticClass:\"ml-10\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Campaign.NewProduct'))+\" \")])],1):_vm._e()],2):_vm._e(),_c('h1',{staticClass:\"text-18 md:text-34 mb-15 hidden md:block\"},[_vm._v(\" \"+_vm._s(_vm.details.displayName)+\" \")]),(_vm.details.conditionCode)?_c('div',{staticClass:\"p-20 text-13 font-medium bg-blue-400 mb-20\"},[_vm._v(\" \"+_vm._s(_vm.getClassificationCodeDictionary(true))+\" \")]):_vm._e(),_c('div',{staticClass:\"flex flex-wrap\"},[_c('div',{staticClass:\"flex-grow flex-shrink-0 w-full lg:w-2/3\"},[(_vm.mpn)?_c('p',{staticClass:\"flex flex-row items-center text-13 mt-5 relative overflow-hidden\"},[_c('b',{staticClass:\"w-1/3 min-w-min-content md:w-3/12 font-semi-bold\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Info.MPN'))+\" \")]),_c('CopyText',{staticClass:\"w-2/3 md:w-9/12 flex-grow ml-5\"},[_c('span',{staticClass:\"copy-text\"},[_vm._v(_vm._s(_vm.mpn))])])],1):_vm._e(),(_vm.itemId)?_c('p',{staticClass:\"flex flex-row items-center text-13 relative overflow-hidden\"},[_c('b',{staticClass:\"w-1/3 min-w-min-content md:w-3/12 font-semi-bold\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Info.ItemNumber'))+\" \")]),_c('CopyText',{staticClass:\"w-2/3 md:w-9/12 flex-grow ml-5\"},[_c('span',{staticClass:\"copy-text\"},[_vm._v(_vm._s(_vm.itemId))])])],1):_vm._e(),(_vm.details.ean)?_c('p',{staticClass:\"flex flex-row items-center text-13 mt-5\"},[_c('b',{staticClass:\"w-1/3 min-w-min-content md:w-3/12 font-semi-bold\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.EAN'))+\" \")]),_c('span',{staticClass:\"w-2/3 md:w-9/12 flex-grow ml-10\"},[_vm._v(\" \"+_vm._s(_vm.details.ean)+\" \")])]):_vm._e(),(_vm.details.oem)?_c('ReadMore',{staticClass:\"mb-20\",attrs:{\"min-height\":65,\"with-fade\":true,\"button-class\":\"w-full theme-text-linkcolor\"},scopedSlots:_vm._u([{key:\"expand\",fn:function(){return [_c('div',{staticClass:\"flex\"},[_c('div',{staticClass:\"w-1/3 md:w-3/12\"}),_c('div',{staticClass:\"w-2/3 md:w-9/12 flex-grow ml-10\"},[_c('CIcon',{attrs:{\"name\":\"arrow-down\",\"width\":\"12\"}}),_c('span',{staticClass:\"sr-only\"},[_vm._v(_vm._s(_vm.$dictionary.get('Generic.ReadMore')))])],1)])]},proxy:true},{key:\"collapse\",fn:function(){return [_c('div',{staticClass:\"flex\"},[_c('div',{staticClass:\"w-1/3 md:w-3/12\"}),_c('div',{staticClass:\"w-2/3 md:w-9/12 flex-grow ml-10\"},[_c('CIcon',{attrs:{\"name\":\"arrow-up\",\"width\":\"12\"}})],1)])]},proxy:true}],null,false,3086445666)},[_c('p',{staticClass:\"flex flex-row items-center text-13 mt-5\"},[_c('b',{staticClass:\"w-1/3 md:w-3/12 min-w-min-content self-start font-semi-bold\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Info.OemNumber'))+\" \")]),_c('span',{staticClass:\"w-2/3 md:w-9/12 flex-grow ml-10\"},[_c('span',{staticClass:\"whitespace-normal break-all\"},[_vm._v(_vm._s(_vm.details.oem))])])])]):_vm._e()],1),_c('div',{staticClass:\"flex flex-shrink-0 self-end lg:w-1/3 leading-normal\"},[(_vm.showFavorite)?_c('ProductTileFavorite',{staticClass:\"flex items-center justify-end lg:ml-auto\",attrs:{\"product\":_vm.details,\"is-logged-in\":_vm.isUserLoggedIn}},[_c('span',{staticClass:\"text-13\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.AddToFavorite'))+\" \")])]):_vm._e()],1)])]),(_vm.productSeries && _vm.hasProductSeries)?_c('ProductDetailsSeries',{attrs:{\"mpn\":_vm.details.mpn,\"item-id\":_vm.details.itemId,\"series\":_vm.productSeries,\"product-series\":_vm.details.productSeries}}):_vm._e(),(_vm.isUserLoggedIn)?_c('NextDelivery',{attrs:{\"mode\":\"product\",\"item-ids\":[_vm.details.itemId]}}):_vm._e(),_c('div',{staticClass:\"bg-gray-300 text-13 leading-large\",class:{ 'mb-15 md:mb-30': !_vm.hasBids, 'mb-15': _vm.hasBids }},[(_vm.hasQuantityDiscounts)?_c('div',{staticClass:\"flex flex-row w-full justify-end\"},[(_vm.hasQuantityDiscounts)?_c('div',{staticClass:\"bg-blue-450 text-11 py-4 px-10 text-white font-medium flex items-center\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Discount.Details.Title'))+\" \")]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"p-20\",class:{ 'pt-10': _vm.hasQuantityDiscounts }},[_c('div',{staticClass:\"flex flex-col md:flex-row min-h-90 lg:min-h-100\"},[_c('div',{staticClass:\"w-full md:w-1/2 flex mr-10\"},[_c('div',{staticClass:\"flex flex-row md:flex-col lg:flex-row mb-15 md:mb-0\"},[(_vm.stockLoaded)?_c('p',{staticClass:\"mr-15 font-semi-bold md:mb-5\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.StockLevel'))+\" \")]):_vm._e(),_c('ProductTileStock',{attrs:{\"item-id\":_vm.details.itemId,\"stock\":{ loaded: _vm.stockLoaded, data: _vm.stockData, simpleData: null },\"is-limited-item\":_vm.isLimitedItem,\"is-logged-in\":_vm.isUserLoggedIn,\"show-detailed-stock\":\"\"}})],1)]),_c('RackStartEditButton',{staticClass:\"flex items-end justify-center mt-20 md:mt-0 mr-5\",attrs:{\"product\":_vm.details}}),_c('ProductDetailsCart',{staticClass:\"flex flex-1 flex-col justify-center mt-20 md:mt-0\",attrs:{\"wid\":_vm.details.wid,\"price\":{ loaded: _vm.pricesLoaded, data: _vm.priceData },\"is-logged-in\":_vm.isUserLoggedIn},on:{\"addToBasketChange\":_vm.trackAddToBasketChange}})],1)])]),(_vm.hasBids)?_c('div',{staticClass:\"text-13 mb-15 md:mb-30 leading-large\"},[_c('div',{staticClass:\"bg-blue-500 oprema:bg-opremablue-500 text-white px-15 py-10 flex items-center\"},[_c('CIcon',{staticClass:\"mr-5\",attrs:{\"name\":\"bid\",\"height\":\"1.3rem\",\"width\":\"1.3rem\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Bids.Available'))+\" \"),_c('div',{staticClass:\"flex-1 text-right\"},[_c('CultureAwareRouterLink',{staticClass:\"text-white underline hover:no-underline\",attrs:{\"to\":{ name: _vm.myAccountBidsPage }}},[_c('CIcon',{staticClass:\"sm:hidden\",attrs:{\"name\":\"arrow-right\",\"width\":\"15\",\"height\":\"15\",\"aria-hidden\":\"true\"}}),_c('span',{staticClass:\"hidden sm:block\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Bids.SeeAll'))+\" \")])],1)],1)],1),_c('ProductListTracker',{attrs:{\"products\":_vm.bidsData,\"list-name\":\"bids\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar productImpression = ref.productImpression;\nvar productClick = ref.productClick;\nreturn _vm._l((_vm.bidsData),function(bid,bidIndex){return _c('ProductDetailsBidTile',{key:bidIndex,staticClass:\"bg-gray-300 mb-10\",attrs:{\"product\":bid,\"product-click\":productClick},on:{\"productImpression\":productImpression}})})}}],null,false,1522747274)})],1):_vm._e(),(_vm.partnerLogos && _vm.partnerLogos.length > 0 && !_vm.hasUserLoggedInBefore)?_c('ProductDetailsPartnerLogos',{staticClass:\"min-h-120 md:min-h-125 mb-20\",attrs:{\"partners\":_vm.partnerLogos}}):_vm._e(),(_vm.description)?_c('div',{staticClass:\"pim-text mb-20 px-20 pb-5 md:p-0\"},[(_vm.isTranslationEnabled)?_c('button',{staticClass:\"c-product-details--translate theme-text-linkcolor\",class:_vm.productTextsTranslated && 'c-product-details--translate--active',attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleDescriptionTranslation}},[_c('CIcon',{attrs:{\"name\":\"g-translate\"}}),_c('span',{staticClass:\"c-product-details--translate-text\"},[_vm._v(_vm._s(_vm.labelForTranslateDescription))])],1):_vm._e(),_c('SmartParagraph',{attrs:{\"content\":_vm.description,\"max-characters\":500,\"as-html\":\"\"}},[_c('a',{staticClass:\"cursor-pointer bg-white theme-text-linkcolor no-underline hover:underline\",attrs:{\"href\":\"#description\"},on:{\"click\":_vm.gotoDescription}},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ReadFullDescription'))+\" \")])])],1):_vm._e(),(_vm.bulletPoints)?_c('div',{staticClass:\"ml-35 md:ml-20 mb-20\"},[_c('ul',{staticClass:\"list-disc\"},_vm._l((_vm.bulletPoints),function(bullet,index){return _c('li',{key:index},[_c('p',{domProps:{\"innerHTML\":_vm._s(bullet)}})])}),0)]):_vm._e(),_c('div',{staticClass:\"flex items-center justify-between px-20 md:p-0\"},[(_vm.details.specifications.length > 0)?_c('a',{staticClass:\"theme-text-linkcolor underline cursor-pointer\",attrs:{\"href\":\"#specifications\"},on:{\"click\":_vm.gotoSpecifications}},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Specifications.Navigate'))+\" \"),_c('CIcon',{staticClass:\"w-10 h-10\",attrs:{\"name\":\"arrow-down\"}})],1):_vm._e(),(_vm.isUserLoggedIn && _vm.isStaff)?_c('a',{staticClass:\"theme-text-linkcolor underline cursor-pointer justify-self-end\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openReportOverlay.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Report.ReportMistake'))+\" \"),_c('CIcon',{staticClass:\"w-10 h-10\",attrs:{\"name\":\"arrow-right\"}})],1):_vm._e()])],1)]),(_vm.conditions.length > 0)?_c('article',{staticClass:\"mt-20\",attrs:{\"data-nosnippet\":\"\"}},[_c('h2',{staticClass:\"text-16 md:text-24 font-medium pb-20 only-md:px-20\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Conditions'))+\" \")]),_c('ProductListTracker',{attrs:{\"products\":_vm.conditions,\"list-name\":\"conditions\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar productImpression = ref.productImpression;\nvar productClick = ref.productClick;\nreturn _vm._l((_vm.conditions),function(condition,conditionIndex){return _c('div',{key:conditionIndex,staticClass:\"pb-15\"},[_c('ProductTile',{staticClass:\"bg-gray-300\",attrs:{\"product\":condition,\"nested\":\"\",\"product-click\":productClick},on:{\"productImpression\":productImpression}})],1)})}}],null,false,1558168479)})],1):_vm._e()])])]),_c('div',[_c('div',{staticClass:\"o-container only-md:px-0\"},[_c('BrandProductGuideBanner',{staticClass:\"mt-20\",attrs:{\"guide-brands\":_vm.details.productGuideBrands}}),_c('section',{staticClass:\"flex flex-col mt-20\"},[_c('ProductDetailsRelations',{staticClass:\"mb-20\",attrs:{\"product\":_vm.details,\"data-nosnippet\":\"\"}}),_c('ProductDetailsRelatedModels',{staticClass:\"mb-20\",attrs:{\"item-id\":_vm.details.itemId,\"data-nosnippet\":\"\"}}),(_vm.details.specifications.length > 0)?_c('ProductDetailsSpecifications',{ref:\"specifications\",staticClass:\"mb-20\",attrs:{\"meta-data\":_vm.productBaseLabelValues,\"specifications\":_vm.details.specifications}}):_vm._e(),(_vm.hasProductSeries && _vm.productSeries)?_c('ProductDetailsSeriesTable',{staticClass:\"mb-20\",attrs:{\"mpn\":_vm.details.mpn,\"series\":_vm.productSeries}}):_vm._e(),(_vm.productDetailsPage)?_c('ProductDetailsRecommendations',{staticClass:\"mb-20\",attrs:{\"product-id\":_vm.details.wid,\"product-details-page\":_vm.productDetailsPage,\"data-nosnippet\":\"\"}}):_vm._e(),_c('AdnuntiusProductDetailsBannerBlock',{attrs:{\"product\":_vm.details}}),(_vm.description)?_c('article',{ref:\"description\",staticClass:\"mb-20\",attrs:{\"id\":\"description\"}},[_c('h2',{staticClass:\"text-16 md:text-24 pb-20 only-md:px-20\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Description'))+\" \")]),_c('ReadMore',{ref:\"readMoreDescription\",staticClass:\"bg-white\",attrs:{\"min-height\":300,\"animation-time\":150,\"button-class\":\"w-full\",\"with-fade\":\"\"}},[_c('div',{staticClass:\"flex flex-col flex-wrap p-20\"},[_c('h3',{staticClass:\"font-medium text-16\"},[_vm._v(\" \"+_vm._s(_vm.shortDescription)+\" \")]),_c('p',{staticClass:\"pim-text mt-15\",domProps:{\"innerHTML\":_vm._s(_vm.description)}})]),_c('div',{attrs:{\"slot\":\"collapse\"},slot:\"collapse\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"minus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowLess'))+\" \")],1)]),_c('div',{attrs:{\"slot\":\"expand\"},slot:\"expand\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"plus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")],1)])])],1):_vm._e(),(_vm.documents.length)?_c('article',{staticClass:\"mb-20\"},[_c('h2',{staticClass:\"text-16 md:text-24 pb-20 only-md:px-20\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Description.Documents'))+\" \")]),_c('ReadMore',{staticClass:\"flex flex-col flex-wrap truncate bg-white p-20\",attrs:{\"min-items\":5,\"animation-time\":150,\"button-class\":\"w-full\",\"with-fade\":\"\"}},[_vm._l((_vm.documents),function(document,documentIndex){return _c('div',{key:documentIndex,staticClass:\"py-15\"},[_c('a',{staticClass:\"flex flex-row items-center mb-10\",attrs:{\"href\":document.uri,\"target\":\"_blank\",\"download\":\"\"}},[(!document.thumbnailUrl)?_c('CIcon',{attrs:{\"name\":\"pdf\",\"height\":\"32\",\"width\":\"32\"}}):_c('div',{staticClass:\"product-details-pdf\"},[_c('img',{attrs:{\"src\":document.thumbnailUrl,\"alt\":document.extension}})]),_c('p',{staticClass:\"ml-15 capitalize theme-text-linkcolor\"},[_c('span',{staticClass:\"underline\"},[_vm._v(\" \"+_vm._s(document.name)+\" \"),(document.languages.length > 0)?_c('span',[_c('span',[_vm._v(\"(\")]),_vm._l((document.languages),function(lang,index){return [_c('span',{key:lang},[_vm._v(_vm._s(_vm.$dictionary.languageNameByLanguageCode(lang))),(index < document.languages.length - 1)?[_vm._v(\", \")]:_vm._e()],2)]}),_c('span',[_vm._v(\")\")])],2):_vm._e()]),_c('span',{staticClass:\"text-gray-800 ml-15\"},[_vm._v(\" \"+_vm._s(document.description)+\" \")])])],1)])}),_c('div',{attrs:{\"slot\":\"collapse\"},slot:\"collapse\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"minus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowLess'))+\" \")],1)]),_c('div',{attrs:{\"slot\":\"expand\"},slot:\"expand\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"plus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")],1)])],2)],1):_vm._e(),(_vm.details.reasonsToBuy.length > 0)?_c('ProductDetailsReasonsToBuy',{staticClass:\"mb-20\",attrs:{\"reasons-to-buy\":_vm.details.reasonsToBuy}}):_vm._e(),_c('p',{staticClass:\"text-13 mb-20 whitespace-pre-wrap only-md:px-20\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.IsOriginIceCat'))+\" \")])],1),_c('BrandCategoriesLinks',{attrs:{\"brand-name\":_vm.details.brand}})],1)]),(_vm.productSchemaJson)?_c('script',{attrs:{\"type\":\"application/ld+json\"},domProps:{\"innerHTML\":_vm._s(_vm.productSchemaJson)}}):_vm._e(),(_vm.productSchemaQuestionJson)?_c('script',{attrs:{\"type\":\"application/ld+json\"},domProps:{\"innerHTML\":_vm._s(_vm.productSchemaQuestionJson)}}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { StockInformationViewObject, StockLocationTypeViewObject } from '@/types/apiServerContract';\r\nimport dictionaryService from '@/core/translation/dictionary.service';\r\n\r\nconst ProductDeliveryCodes = new Map(\r\n [\r\n [StockLocationTypeViewObject.Local, 'Product.Delivery.Local'],\r\n [StockLocationTypeViewObject.Remote, 'Product.Delivery.Remote'],\r\n [StockLocationTypeViewObject.InComing, 'Product.Delivery.InComing']\r\n ]\r\n);\r\n\r\nclass ProductDeliveryService {\r\n public getProductDeliveryCodeDictionary(stock: readonly StockInformationViewObject[]): string | null {\r\n if (!stock || stock.length === 0) return null;\r\n\r\n const isLocal = stock.some(x => x.locationType === StockLocationTypeViewObject.Local);\r\n const isRemote = stock.some(x => x.locationType === StockLocationTypeViewObject.Remote);\r\n const isIncoming = stock.some(x => x.locationType === StockLocationTypeViewObject.InComing);\r\n\r\n if (!isLocal && !isRemote && !isIncoming) {\r\n return null;\r\n }\r\n\r\n const stockType = isLocal ? StockLocationTypeViewObject.Local : isRemote ? StockLocationTypeViewObject.Remote : isIncoming ? StockLocationTypeViewObject.InComing : null;\r\n if (stockType == null) {\r\n return null;\r\n }\r\n\r\n const productDeliveryCode = ProductDeliveryCodes.get(stockType);\r\n if (!productDeliveryCode) { throw new Error(`Unknown delivery for stock type ${stockType}!`); }\r\n\r\n return dictionaryService.get(productDeliveryCode);\r\n }\r\n}\r\n\r\nexport default new ProductDeliveryService();\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"relative h-0 block mb-10 md:mb-0\",style:(_vm.style)},[_c('div',{staticClass:\"aspect-ratio-container\"},[(_vm.details && _vm.details.brandLogos && _vm.imageLoaded)?_c('CultureAwareRouterLink',{staticClass:\"brandlogo\",class:{'brandlogo--wide' : _vm.imageMode === 'wide', 'brandlogo--square' : _vm.imageMode === 'square', 'brandlogo--tall' : _vm.imageMode === 'tall'},attrs:{\"to\":_vm.details.brandUrl}},[_c('img',{attrs:{\"srcset\":((_vm.details.brandLogos.brandLogoUrl125px) + \" 1x, \" + (_vm.details.brandLogos.brandLogoUrl250px) + \" 2x\"),\"alt\":_vm.details.brand}})]):_vm._e(),(_vm.assetCount > 0 && _vm.renderMainSlider && _vm.sliderOptions)?_c('Swiper',{ref:\"slider\",staticClass:\"w-full h-full\",attrs:{\"options\":_vm.sliderOptions},on:{\"click\":_vm.showOverlay,\"ready\":function($event){_vm.mainSliderActive = true}},scopedSlots:_vm._u([{key:\"button-prev\",fn:function(){return [_c('button',{staticClass:\"custom-swiper-button-prev md:invisible md:pointer-events-none\",class:_vm.prevButtonSelector,attrs:{\"type\":\"button\",\"aria-label\":_vm.$dictionary.get('Generic.Prev')}},[_c('CIcon',{attrs:{\"name\":\"arrow-thin-left\",\"width\":\"25\",\"height\":\"25\"}})],1)]},proxy:true},{key:\"button-next\",fn:function(){return [_c('button',{staticClass:\"custom-swiper-button-next md:invisible md:pointer-events-none\",class:_vm.nextButtonSelector,attrs:{\"type\":\"button\",\"aria-label\":_vm.$dictionary.get('Generic.Next')}},[_c('CIcon',{attrs:{\"name\":\"arrow-thin-right\",\"width\":\"25\",\"height\":\"25\"}})],1)]},proxy:true},{key:\"pagination\",fn:function(){return [_c('div',{staticClass:\"swiper-pagination md:hidden md:pointer-events-none\"})]},proxy:true}],null,false,3816044621)},[_vm._l((_vm.productImages),function(image,imageIndex){return _c('SwiperSlide',{key:image.uri,staticClass:\"cursor-pointer\",attrs:{\"data-nosnippet\":imageIndex !== 0}},[_c('div',{staticClass:\"w-full h-full relative p-10\"},[_c('ProductDetailsImageVideo',{attrs:{\"title\":\"View fullscreen\",\"url\":image.uri,\"image-name\":_vm.productName,\"media-mode\":\"pdp\",\"is-first\":imageIndex === 0}})],1)])}),_vm._l((_vm.productVideos),function(video){return _c('SwiperSlide',{key:video.uri,staticClass:\"cursor-pointer\"},[_c('div',{staticClass:\"w-full h-full relative p-10\"},[_c('ProductDetailsImageVideo',{attrs:{\"url\":video.uri,\"is-video\":\"\",\"media-mode\":\"pdp\"}})],1)])})],2):(_vm.fallbackImage)?_c('div',{staticClass:\"flex justify-center items-center w-full h-full bg-gray-400\"},[_c('img',{staticClass:\"fallback-image\",attrs:{\"alt\":\"category fallback image\",\"src\":_vm.fallbackImage.uri}})]):_vm._e()],1)]),(!_vm.isMobile)?_c('div',[(_vm.showThumbNails)?_c('div',{staticClass:\"product-thumbnail-carousel mb-10 mt-10\"},[_c('Swiper',{ref:\"thumbs\",staticClass:\"carousel mx-auto\",attrs:{\"options\":_vm.sliderThumnailOptions},on:{\"ready\":function($event){_vm.renderMainSlider = true}}},[_vm._l((_vm.productImages),function(image){return _c('SwiperSlide',{key:image.uri,staticClass:\"carousel-thumb cursor-pointer w-full h-full px-10\"},[_c('ProductDetailsImageVideo',{attrs:{\"url\":image.uri,\"image-name\":_vm.productName,\"media-mode\":\"thumbnail\"}})],1)}),_vm._l((_vm.productVideos),function(video){return _c('SwiperSlide',{key:video.uri,staticClass:\"carousel-thumb cursor-pointer relative w-full h-full outline-none px-10\"},[_c('div',{staticClass:\"absolute inset-0 z-2 cursor-pointer\"}),_c('ProductDetailsImageVideo',{attrs:{\"url\":video.uri,\"media-mode\":\"thumbnail\",\"is-video\":\"\"}})],1)})],2),_c('button',{staticClass:\"custom-swiper-button-prev\",class:_vm.prevButtonSelector,attrs:{\"type\":\"button\"}},[_c('CIcon',{attrs:{\"name\":\"arrow-left\",\"width\":\"25\",\"height\":\"25\"}})],1),_c('button',{staticClass:\"custom-swiper-button-next\",class:_vm.nextButtonSelector,attrs:{\"type\":\"button\"}},[_c('CIcon',{attrs:{\"name\":\"arrow-right\",\"width\":\"25\",\"height\":\"25\"}})],1)],1):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component } from 'vue-property-decorator';\r\nimport {\r\n ProductDetailsViewModel,\r\n ImageViewObject,\r\n VideoViewObject,\r\n CategoryFallbackViewObject\r\n} from '@/types/apiServerContract';\r\nimport breakpointsState from '@/core/responsive/breakpoints/breakpointsState.observable';\r\nimport ProductDetailsImageVideo from './ProductDetailsImageVideo.vue';\r\nimport { PageName } from '@/router/routes/constants';\r\nimport { MAX_SM } from '@/core/config/breakpointConfig';\r\nimport productDetailsMediaOverlayService from '@/project/modals/overlays/ProductDetailsMediaOverlay.service';\r\nimport botService from '@/project/site/bot.service';\r\n\r\nconst THUMBNAIL_SLIDES_PER_VIEW = 3;\r\nconst isBot: boolean = !!((botService.uaIsPrerender() || botService.uaIsBot()));\r\n\r\n@Component({\r\n components: { ProductDetailsImageVideo },\r\n $reactiveRefs: ['slider', 'thumbs']\r\n})\r\nexport default class ProductDetailsSlider extends Vue {\r\n @Prop({ required: true }) details!: ProductDetailsViewModel;\r\n\r\n /* Can take a single aspectratio number, or an object with a number pr. breakpoint. If a 'default' is provided is will be used when no breakpoint is active:\r\n {\r\n xs: 16/9,\r\n min-sm,max-md: 4/3\r\n default: 1/2\r\n }\r\n */\r\n @Prop({ type: [Number, Object], default: 16 / 9 })\r\n aspectRatio!: number | { [breakpoint: string]: number};\r\n\r\n // Slider\r\n renderMainSlider: boolean = false;\r\n mainSliderActive: boolean = false;\r\n overlayActive: boolean = false;\r\n\r\n get style(): object {\r\n const padding = `${(100 / this.activeAspectRatio).toFixed(2)}%`;\r\n return { paddingTop: padding };\r\n }\r\n\r\n get productName() {\r\n return this.details.displayName + ' - ' + this.details.wid;\r\n }\r\n\r\n get assetCount(): number {\r\n return (this.productImages.length + this.productVideos.length);\r\n }\r\n\r\n get activeAspectRatio(): number {\r\n if (typeof this.aspectRatio === 'number') {\r\n return this.aspectRatio;\r\n }\r\n\r\n // Else - object with aspect-ratio pr. breakpoint-def.\r\n\r\n // Find first active breakpoint-def\r\n const activeBpDef = Object.keys(this.aspectRatio).find(bpDef => breakpointsState.isBreakpointActive(bpDef));\r\n // Use active or default\r\n const result = activeBpDef ? this.aspectRatio[activeBpDef] : this.aspectRatio.default;\r\n if (!result) {\r\n throw new Error('Provide a breakpoint-definition for all cases or a default');\r\n }\r\n return result;\r\n }\r\n\r\n get prevButtonSelector() {\r\n return 'custom-swiper-button-prev-' + this.details.wid;\r\n }\r\n\r\n get nextButtonSelector() {\r\n return 'custom-swiper-button-next-' + this.details.wid;\r\n }\r\n\r\n get isMobile() {\r\n return breakpointsState.isBreakpointActive(MAX_SM);\r\n }\r\n\r\n get showThumbNails() {\r\n return !this.isMobile && this.assetCount > 1;\r\n }\r\n\r\n get sliderOptions() {\r\n if (this.showThumbNails && !this.$refs.thumbs) {\r\n return null;\r\n }\r\n\r\n return ({\r\n speed: 1,\r\n initialSlide: 0,\r\n slidesPerView: 1,\r\n slidesPerGroup: 1,\r\n loop: false,\r\n loopedSlides: 1,\r\n loopFillGroupWithBlank: false,\r\n watchSlidesVisibility: true,\r\n watchOverflow: true,\r\n setWrapperSize: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true\r\n },\r\n navigation: {\r\n nextEl: '.' + this.nextButtonSelector,\r\n prevEl: '.' + this.prevButtonSelector\r\n },\r\n grabCursor: true,\r\n allowTouchMove: true,\r\n breakpoints: {\r\n 720: {\r\n grabCursor: false,\r\n allowTouchMove: false,\r\n simulateTouch: false\r\n }\r\n },\r\n thumbs: {\r\n swiper: this.showThumbNails && this.$refs.thumbs && this.$refs.thumbs.$el.swiper\r\n }\r\n });\r\n };\r\n\r\n get sliderThumnailOptions() {\r\n return {\r\n initialSlide: 0,\r\n slidesPerView: THUMBNAIL_SLIDES_PER_VIEW,\r\n slidesPerGroup: 1,\r\n spaceBetween: 10,\r\n grabCursor: true,\r\n loop: false,\r\n loopFillGroupWithBlank: false,\r\n watchSlidesVisibility: true,\r\n watchOverflow: true,\r\n setWrapperSize: true,\r\n navigation: {\r\n nextEl: '.' + this.nextButtonSelector,\r\n prevEl: '.' + this.prevButtonSelector\r\n },\r\n height: '140px',\r\n keyboard: {\r\n enabled: true,\r\n onlyInViewPort: true\r\n }\r\n };\r\n }\r\n\r\n $refs!: Vue['$refs'] & {\r\n slider: any, // todo: typesafety\r\n thumbs: any\r\n };\r\n\r\n showOverlay() {\r\n if (this.isMobile) return;\r\n\r\n const index = this.$refs.slider.$swiper.activeIndex;\r\n\r\n productDetailsMediaOverlayService.show(\r\n this.productImages,\r\n this.productVideos,\r\n this.details.brandLogos,\r\n this.details.brand,\r\n this.details.brandUrl,\r\n 16 / 9,\r\n this.productName,\r\n this.$refs.slider,\r\n index);\r\n }\r\n\r\n get productImages(): ImageViewObject[] {\r\n return this.details?.images ?? [];\r\n }\r\n\r\n get productVideos(): VideoViewObject[] {\r\n return this.details?.videoes ?? [];\r\n }\r\n\r\n get brandPage() {\r\n return PageName.BRAND;\r\n }\r\n\r\n created() {\r\n if (this.details.brandLogos) {\r\n // Unfortunately we don't receive image dimensions on the brandLogo object\r\n // Therefore we load a new image based on the uri to get the dimensions when the image has loaded\r\n this.imageDimensions(this.details.brandLogos.brandLogoUrl125px);\r\n }\r\n\r\n // Always render it if thumbnails isnt needed\r\n this.renderMainSlider = !this.showThumbNails;\r\n }\r\n\r\n imageMode: 'wide' | 'tall' | 'square' = 'wide';\r\n imageLoaded: boolean = isBot; // if bot, set imageLoaded = true, else false and let it trigger when images are loaded\r\n\r\n imageDimensions(url) {\r\n const img = new Image();\r\n\r\n img.src = url;\r\n\r\n img.onload = () => {\r\n if (img.width === img.height) {\r\n this.imageMode = 'square';\r\n } else if (img.width > img.height) {\r\n this.imageMode = 'wide';\r\n } else {\r\n this.imageMode = 'tall';\r\n }\r\n\r\n this.imageLoaded = true;\r\n };\r\n }\r\n\r\n get fallbackImage(): CategoryFallbackViewObject | ImageViewObject | null {\r\n let categoryFallbackImage: CategoryFallbackViewObject | null = null;\r\n if (this.details.categoryFallbackImageMap) {\r\n Object.keys(this.details.categoryFallbackImageMap).forEach((index, key) => {\r\n const item = this.details.categoryFallbackImageMap[index];\r\n if (!categoryFallbackImage && item.isDefaultFallback) {\r\n categoryFallbackImage = item;\r\n }\r\n });\r\n }\r\n // Return categoryFallbackImageMap or old categoryFallbackImage (for legacy only) or null\r\n return categoryFallbackImage || this.details?.categoryFallbackImage || null;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSlider.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSlider.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsSlider.vue?vue&type=template&id=a74bdf38&scoped=true&\"\nimport script from \"./ProductDetailsSlider.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsSlider.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsSlider.vue?vue&type=style&index=0&id=a74bdf38&lang=less&scoped=true&\"\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 \"a74bdf38\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('article',{attrs:{\"id\":\"specifications\"}},[_c('h2',{staticClass:\"text-16 md:text-24 pb-20 only-md:px-20\"},[_vm._v(\" \"+_vm._s(_vm.labelSpecifications)+\" \")]),_c('ReadMore',{ref:\"readmore\",staticClass:\"bg-white pt-20 px-10 pb-5\",attrs:{\"min-height\":300,\"animation-time\":150,\"button-class\":\"w-full\",\"with-fade\":\"\"}},[_vm._l((_vm.specifications),function(spec,specIdx){return _c('div',{key:specIdx,staticClass:\"flex flex-col mb-20 md:flex-row\"},[_c('h3',{staticClass:\"text-14 only-md:px-10 w-full md:w-1/5 md:text-16 font-medium md:pt-9 md:pb-0 pb-15\"},[_vm._v(\" \"+_vm._s(spec.displayName || _vm.$dictionary.get(spec.label))+\" \")]),_c('div',{staticClass:\"w-full\"},_vm._l((spec.features),function(feature,featureIdx){return _c('div',{key:featureIdx,staticClass:\"flex flex-col mb-5 md:flex-row last:mb-0\"},[_c('h4',{staticClass:\"w-full md:w-1/5 px-10 pt-10 md:p-10 md:py-7 md:mr-5 font-semi-bold bg-gray-300 text-13\"},[_vm._v(\" \"+_vm._s(feature.displayName || _vm.$dictionary.get(feature.label))+\" \")]),_c('div',{staticClass:\"w-auto flex-1 px-10 pt-5 pb-10 md:p-10 md:py-7 bg-gray-300 text-13\"},[_c('CultureAwareRouterLink',{class:{ 'theme-text-linkcolor underline hover:no-underline focus:no-underline': !!feature.url },attrs:{\"to\":feature.url}},[(feature.value)?_c('p',[_vm._v(\" \"+_vm._s(feature.value)+\" \"+_vm._s(_vm.getUnit(feature.unit))+\" \")]):_vm._e(),(feature.values && feature.values.length)?_c('p',[_vm._v(\" \"+_vm._s(feature.values.join(', '))+\" \")]):_vm._e()])],1)])}),0)])}),_c('div',{attrs:{\"slot\":\"collapse\"},slot:\"collapse\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"minus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowLess'))+\" \")],1)]),_c('div',{attrs:{\"slot\":\"expand\"},slot:\"expand\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"plus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")],1)])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { SpecificationViewObject } from '@/types/apiServerContract';\r\nimport dictionaryService, { NamedLabelArgument } from '@/core/translation/dictionary.service';\r\n\r\nimport ReadMore from '@/core/ui-components/ReadMore.vue';\r\n\r\n@Component({\r\n components: { ReadMore }\r\n})\r\nexport default class ProductDetailsSpecifications extends Vue {\r\n @Prop({ required: true, type: Array })\r\n specifications!: SpecificationViewObject[];\r\n\r\n @Prop({ required: false, type: Object, default: {} })\r\n metaData!: NamedLabelArgument;\r\n\r\n open() {\r\n this.$refs.readmore.open();\r\n }\r\n\r\n close() {\r\n this.$refs.readmore.close();\r\n }\r\n\r\n getUnit(unit: string) {\r\n return dictionaryService.translate(unit);\r\n }\r\n\r\n get labelSpecifications(): string | null {\r\n return dictionaryService.getWithNamedValues(\r\n dictionaryService.exists('Product.Details.Specifications.SpecificationsFor') && this.metaData?.product ? 'Product.Details.Specifications.SpecificationsFor' : 'Product.Details.Specifications',\r\n this.metaData\r\n );\r\n }\r\n\r\n $refs!: {\r\n readmore: ReadMore;\r\n };\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSpecifications.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSpecifications.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsSpecifications.vue?vue&type=template&id=fbbe9bee&\"\nimport script from \"./ProductDetailsSpecifications.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsSpecifications.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.relatedModelGroups.length > 0)?_c('article',{attrs:{\"id\":\"compatibility\"}},[_c('h2',{staticClass:\"text-16 md:text-24 pb-20 only-md:px-20\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ModelRelations'))+\" \")]),_c('ReadMore',{staticClass:\"bg-white px-10 py-5\",attrs:{\"min-height\":200,\"animation-time\":200,\"animation-time-mod\":0,\"button-class\":\"w-full\",\"with-fade\":\"\"}},[_vm._l((_vm.relatedModelGroups),function(group,groupIdx){return _c('div',{key:groupIdx},[_c('h3',{staticClass:\"text-14 only-md:px-10 md:text-16 font-medium py-15\"},[_vm._v(\" \"+_vm._s(group.brandName)+\" \")]),_vm._l((group.relatedModels),function(model,modelIdx){return _c('div',{key:modelIdx,staticClass:\"flex flex-col mb-10 md:flex-row text-13\"},[_c('h4',{staticClass:\"w-full md:w-1/5 px-10 pt-20 md:p-10 md:mr-10 font-semi-bold bg-gray-300\"},[_vm._v(\" \"+_vm._s(model.brandSeries)+\" \")]),_c('div',{staticClass:\"flex-1 px-10 pt-5 pb-20 md:p-10 bg-gray-300 leading-large\"},[_vm._l((model.relations),function(relation,relationIdx){return [_c('CultureAwareRouterLink',{key:relationIdx,staticClass:\"theme-text-linkcolor hover:underline leading-none\",attrs:{\"to\":{\n path: _vm.productGuideSpecificGuidePage,\n query: {\n 'pg-mode': 'step-by-step',\n brand: group.brandName,\n series: model.brandSeries,\n model: relation.modelName\n }\n }}},[_vm._v(\" \"+_vm._s(relation.modelName)+\" \")]),(relationIdx < model.relations.length - 1)?_c('span',{key:(relationIdx + \"-komma\"),staticClass:\"pr-2\"},[_vm._v(\", \")]):_vm._e()]}),(model.overflow && !_vm.hasFetchedFullSection(group.brandName, model.brandSeries))?_c('div',{staticClass:\"section-fetch-button cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\",on:{\"click\":function($event){return _vm.getRelatedModelsSection(group.brandName, model.brandSeries)}}},[(_vm.isLoadingSection(group.brandName, model.brandSeries))?_c('div',[_c('spinner-overlay',{attrs:{\"show\":\"\",\"delay\":0}}),_c('span',{staticClass:\"invisible pointer-events-none\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")])],1):[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"plus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")]],2):_vm._e()],2)])})],2)}),_c('div',{attrs:{\"slot\":\"collapse\"},slot:\"collapse\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"minus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowLess'))+\" \")],1)]),_c('div',{attrs:{\"slot\":\"expand\"},slot:\"expand\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"plus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")],1)])],2)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport { RelatedModelsGroupViewObject } from '@/types/apiServerContract';\r\n\r\nimport ReadMore from '@/core/ui-components/ReadMore.vue';\r\nimport serverContextService from '@/core/serverContext.service';\r\nimport Api from '@/project/http/Api.service';\r\nimport SpinnerOverlay from '@/project/spinners/SpinnerOverlay.vue';\r\n\r\n@Component({\r\n components: { ReadMore, SpinnerOverlay }\r\n})\r\nexport default class ProductDetailsRelatedModels extends Vue {\r\n @Prop({ required: true, type: String })\r\n itemId!: string;\r\n\r\n relatedModelGroups: readonly RelatedModelsGroupViewObject[] = [];\r\n relatedModelsLoaded: boolean = false;\r\n\r\n fetched: string[] = [];\r\n loading: string[] = [];\r\n\r\n hasFetchedFullSection(brandName: string, brandSeries: string) {\r\n const key = `${brandName}-${brandSeries}`;\r\n return this.fetched.indexOf(key) >= 0;\r\n }\r\n\r\n isLoadingSection(brandName: string, brandSeries: string) {\r\n const key = `${brandName}-${brandSeries}`;\r\n return this.loading.indexOf(key) >= 0;\r\n }\r\n\r\n get productGuideSpecificGuidePage() {\r\n return serverContextService?.settings?.productGuideSpecificGuidePage;\r\n }\r\n\r\n async getRelatedModels() {\r\n try {\r\n const result = await Api.product.relatedModels(this.itemId);\r\n this.relatedModelGroups = Object.freeze(result.relatedModelGroups);\r\n } catch {\r\n } finally {\r\n this.relatedModelsLoaded = true;\r\n }\r\n }\r\n\r\n async getRelatedModelsSection(brandName: string, brandSeries: string) {\r\n const key = `${brandName}-${brandSeries}`;\r\n if (this.fetched.indexOf(key) >= 0) { return; }\r\n\r\n this.loading.push(key);\r\n\r\n try {\r\n const result = await Api.product.relatedModelsSection(this.itemId, brandName, brandSeries);\r\n const section = this.relatedModelGroups.find(x => x.brandName === brandName);\r\n if (section) {\r\n const models = section.relatedModels.find(x => x.brandSeries === brandSeries);\r\n if (models) {\r\n models.relations = result;\r\n }\r\n }\r\n\r\n this.relatedModelGroups = Object.freeze([...this.relatedModelGroups]);\r\n this.fetched.push(key);\r\n } finally {\r\n this.relatedModelsLoaded = true;\r\n this.loading.splice(this.loading.indexOf(key));\r\n }\r\n }\r\n\r\n created() {\r\n this.getRelatedModels();\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelatedModels.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelatedModels.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsRelatedModels.vue?vue&type=template&id=cadafdea&scoped=true&\"\nimport script from \"./ProductDetailsRelatedModels.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsRelatedModels.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsRelatedModels.vue?vue&type=style&index=0&id=cadafdea&lang=less&scoped=true&\"\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 \"cadafdea\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('article',{staticClass:\"flex flex-col\"},[_c('h2',{staticClass:\"text-16 md:text-24 font-medium pb-20 only-xs:px-20\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ReasonsToBuy'))+\" \")]),_c('read-more',{staticClass:\"bg-white pt-20 px-20\",attrs:{\"min-items\":2,\"animation-time\":150,\"button-class\":\"w-full\",\"with-fade\":\"\"}},[_vm._l((_vm.reasonsToBuy),function(reason){return _c('section',{key:reason.title,staticClass:\"flex flex-col items-center md:items-start md:flex-row mb-30\"},[_c('div',{staticClass:\"reasons-to-buy-image flex-shrink-0 order-2 md:order-1 mt-5\"},[_c('img',{directives:[{name:\"on-error\",rawName:\"v-on-error\"}],attrs:{\"src\":reason.imageUrl,\"alt\":reason.title}})]),_c('div',{staticClass:\"flex flex-col md:ml-15 lg:w-1/3 lg:ml-20 order-1 md:order-2\"},[_c('h2',{staticClass:\"xs:text-15 md:text-20 font-medium\"},[_vm._v(\" \"+_vm._s(reason.title)+\" \")]),_c('p',{staticClass:\"text-12 md:text-13\",domProps:{\"innerHTML\":_vm._s(reason.bodyText)}})])])}),_c('div',{attrs:{\"slot\":\"collapse\"},slot:\"collapse\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"minus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowLess'))+\" \")],1)]),_c('div',{attrs:{\"slot\":\"expand\"},slot:\"expand\"},[_c('div',{staticClass:\"cursor-pointer font-medium text-15 bg-white theme-text-linkcolor p-12 flex items-center justify-center\"},[_c('CIcon',{staticClass:\"mr-10\",attrs:{\"height\":\"16\",\"width\":\"16\",\"name\":\"plus-big\"}}),_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.ShowMore'))+\" \")],1)])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport { ReasonToBuyViewObject } from '@/types/apiServerContract';\r\n\r\nimport ReadMore from '@/core/ui-components/ReadMore.vue';\r\n\r\n@Component({\r\n components: { ReadMore }\r\n})\r\nexport default class ProductDetailsReasonsToBuy extends Vue {\r\n @Prop({ required: true, type: Array }) reasonsToBuy!: ReasonToBuyViewObject[];\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsReasonsToBuy.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsReasonsToBuy.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsReasonsToBuy.vue?vue&type=template&id=b6ea20c8&scoped=true&\"\nimport script from \"./ProductDetailsReasonsToBuy.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsReasonsToBuy.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsReasonsToBuy.vue?vue&type=style&index=0&id=b6ea20c8&lang=less&scoped=true&\"\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 \"b6ea20c8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.loaded)?_c('div',{staticClass:\"relative h-full my-20 md:m-0\"},[_c('spinner-overlay',{staticClass:\"bg-transparent\",attrs:{\"show\":true}})],1):(!_vm.isLoggedIn)?_c('div',{staticClass:\"w-full h-full flex justify-center md:justify-end items-center\"},[_c('call-to-action',{staticClass:\"cta--green add-to-basket--button\",on:{\"click\":_vm.showLoginOverlay}},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Price.NotLoggedIn'))+\" \")])],1):(!_vm.isServiceAvailable && !_vm.isPriceAvailable)?_c('div',{staticClass:\"flex flex-col h-full items-center justify-center md:justify-start md:items-end w-full\"},[_c('div',{staticClass:\"flex flex-col justify-center items-center lg:justify-end mb-10\"},[_c('div',{staticClass:\"text-gray-900 text-12 md:text-11 lg:text-12 font-medium whitespace-pre-line\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Cart.PriceUnavailable.Details'))+\" \"),_c('v-popover',{staticClass:\"inline-block align-bottom\",attrs:{\"trigger\":\"click\",\"auto-hide\":\"\",\"offset\":\"10\",\"placement\":\"top\"},scopedSlots:_vm._u([{key:\"popover\",fn:function(){return [_c('div',{staticClass:\"font-bold text-12 pb-10\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Cart.PriceUnavailable.Popup.Title'))+\" \")]),_c('div',{staticClass:\"text-12\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Cart.PriceUnavailable.Popup.Content'))+\" \")])]},proxy:true}])},[_c('span',{staticClass:\"underline cursor-pointer\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Cart.PriceUnavailable.Info'))+\" \")])])],1)]),(_vm.$permission.canPlaceOrder())?_c('add-to-basket',{attrs:{\"style-mode\":\"detailed\",\"product-wid\":_vm.wid,\"allow-delete\":\"\"},on:{\"change-quantity\":function($event){return _vm.$emit('addToBasketChange', $event)}}}):_vm._e()],1):(_vm.isServiceAvailable && (!_vm.isPriceAvailable || !_vm.formattedPrice))?_c('p',{staticClass:\"w-full h-full text-16 font-medium flex justify-center items-center\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Cart.ServiceUnavailable'))+\" \")]):_c('div',{staticClass:\"flex flex-col h-full w-full items-center justify-center md:justify-start md:items-end w-full\"},[(!_vm.hasQuantityDiscounts)?_c('p',{staticClass:\"flex flex-row justify-center md:justify-end text-18 md:text-24 items-center\"},[_c('span',{staticClass:\"text-gray-700 line-through mr-10 md:mr-0 lg:mr-10 text-16\"},[_vm._v(\" \"+_vm._s(_vm.$optionalProperty.get(_vm.price, \"data\", \"previousPrice\", \"cultureFormatted\"))+\" \")]),_c('span',{staticClass:\"text-black font-bold uppercase\"},[_vm._v(\" \"+_vm._s(_vm.$optionalProperty.get(_vm.price, \"data\", \"price\", \"cultureFormatted\"))+\" \")])]):(_vm.hasQuantityDiscounts)?_c('div',{staticClass:\"flex flex-col justify-center md:justify-end items-end\"},[_c('p',[_c('span',{staticClass:\"text-13 md:text-12 lg:text-13 font-medium mr-10\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Discount.Details.Units'))+\" \")]),_c('span',{staticClass:\"text-black font-bold uppercase text-18 lg:text-24 whitespace-no-wrap\"},[_vm._v(\" \"+_vm._s(_vm.$optionalProperty.get(_vm.price, \"data\", \"price\", \"cultureFormatted\"))+\" \")])]),_vm._l((_vm.price.data.discounts),function(discount,index){return _c('p',{key:index},[_c('span',{staticClass:\"text-13 md:text-12 lg:text-13 font-medium mr-10\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Discount.Details.FromUnits', [discount.quantity.toString()]))+\" \")]),_c('span',{staticClass:\"text-black font-bold uppercase text-15 lg:text-22 whitespace-no-wrap\"},[_vm._v(\" \"+_vm._s(discount.amount.cultureFormatted)+\" \")])])})],2):_vm._e(),_c('p',{staticClass:\"flex flex-row justify-center ml-10 md:justify-end md:ml-0 text-13 font-medium\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Cart.ExVat'))+\" \")]),(_vm.suggestedRetailPrice)?_c('div',{staticClass:\"flex justify-center md:items-end md:justify-end w-full mt-3\"},[_c('p',{staticClass:\"text-12 md:text-13\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Cart.SuggestedRetailPrice'))+\" \"+_vm._s(_vm.suggestedRetailPrice.cultureFormatted)+\" \")])]):_vm._e(),(_vm.$permission.canPlaceOrder())?_c('add-to-basket',{staticClass:\"mt-10\",attrs:{\"style-mode\":\"detailed\",\"product-wid\":_vm.wid,\"allow-delete\":\"\"},on:{\"change-quantity\":function($event){return _vm.$emit('addToBasketChange', $event)}}}):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component } from 'vue-property-decorator';\r\nimport { PriceDetailedDataExtended } from '@/project/product/services/detailedPriceFetch.service';\r\nimport SpinnerOverlay from '@/project/spinners/SpinnerOverlay.vue';\r\n\r\nimport loginFormOverlayService from '@/project/modals/overlays/LoginFormOverlay.service';\r\nimport gtmService from '@/project/tracking/gtm/GTM.service';\r\nconst AddToBasket = () => import(/* webpackChunkName: 'auth-feature' */'@/project/basket/AddToBasket.vue');\r\n\r\n@Component({\r\n components: { AddToBasket, SpinnerOverlay }\r\n})\r\nexport default class ProductDetailsCart extends Vue {\r\n @Prop({ required: true, type: String }) wid!: string;\r\n @Prop({ required: true }) price!: { loaded: boolean, data: PriceDetailedDataExtended };\r\n @Prop({ required: false, default: false }) isLoggedIn!: boolean;\r\n\r\n get loaded(): boolean {\r\n return this.price?.loaded;\r\n }\r\n\r\n get isServiceAvailable(): boolean {\r\n return this.price.data?.isServiceAvailable ?? false;\r\n }\r\n\r\n get isPriceAvailable(): boolean {\r\n return this.price.data !== null && this.price.data.price !== null;\r\n }\r\n\r\n get hasQuantityDiscounts() {\r\n return this.price.data && this.price.data.discounts && this.price.data?.discounts.length > 0;\r\n }\r\n\r\n get suggestedRetailPrice() {\r\n return this.price.data?.suggestedRetailPrice.cultureFormatted && this.price.data?.suggestedRetailPrice;\r\n }\r\n\r\n get formattedPrice() {\r\n return this.price.data?.price?.cultureFormatted;\r\n }\r\n\r\n showLoginOverlay() {\r\n gtmService.trackLogInToViewPricesClick();\r\n loginFormOverlayService.show('login');\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsCart.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsCart.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsCart.vue?vue&type=template&id=4c8417fd&\"\nimport script from \"./ProductDetailsCart.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsCart.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.product.hasAccessories || _vm.product.hasExactAlternatives || _vm.product.hasSimilarAlternatives)?_c('div',{staticClass:\"product-menu\"},[[_c('Tabs',{attrs:{\"header-class\":\"ml-20 md:ml-0 mb-15\",\"content-class\":\"ml-20 md:ml-0\"},on:{\"changed\":_vm.tabsChanged,\"init\":_vm.tabsInit},scopedSlots:_vm._u([{key:\"header\",fn:function(ref){\nvar title = ref.title;\nreturn [_c('span',[_vm._v(\" \"+_vm._s(_vm.getMessage(title))+\" \")])]}}],null,false,2468502914)},[(_vm.product.hasAccessories)?_c('Tab',{attrs:{\"name\":\"ProductAccessoriesRecommended\",\"selected\":_vm.activeTab === 'ProductAccessoriesRecommended',\"keep-alive\":\"\"}},[(_vm.labelAccessoriesText)?_c('p',{staticClass:\"text-13 lg:text-14 mb-15\"},[_vm._v(\" \"+_vm._s(_vm.labelAccessoriesText)+\" \")]):_vm._e(),_c('ProductAccessoriesSearchControl',{attrs:{\"product-id\":_vm.product.wid},on:{\"loaded\":_vm.handleRelationLoaded},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar products = ref.products;\nreturn [_c('CondensedProductList',{attrs:{\"products\":products,\"list-view-page-size\":undefined,\"tracking-list-name\":(\"relations-\" + (_vm.$route.name) + \"-accessories\"),\"product-bg-color\":\"white\"}})]}}],null,false,4006031976)})],1):_vm._e(),(_vm.product.hasExactAlternatives || _vm.product.hasSimilarAlternatives)?_c('Tab',{attrs:{\"name\":'Product.Relations.ProductAlternatives',\"selected\":_vm.activeTab === 'Product.Relations.ProductAlternatives',\"keep-alive\":\"\"}},[(_vm.product.hasExactAlternatives)?_c('div',[_c('div',{staticClass:\"text-13 lg:text-14 font-bold mb-5\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Relations.ProductRelatedProductExact'))+\" \")]),_c('ProductAccessoriesSearchControl',{attrs:{\"product-id\":_vm.product.wid,\"relation-type\":_vm.ProductRelationType.exactAlternatives},on:{\"loaded\":_vm.handleRelationLoaded},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar products = ref.products;\nreturn [_c('CondensedProductList',{attrs:{\"products\":products,\"tracking-list-name\":(\"relations-\" + (_vm.$route.name) + \"-\" + (_vm.ProductRelationType.exactAlternatives)),\"product-bg-color\":\"white\"}})]}}],null,false,2946361592)})],1):_vm._e(),(_vm.product.hasSimilarAlternatives)?_c('div',[_c('div',{staticClass:\"text-13 lg:text-14 font-bold mb-5\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Relations.ProductRelatedProductSimilar'))+\" \")]),_c('ProductAccessoriesSearchControl',{attrs:{\"product-id\":_vm.product.wid,\"relation-type\":_vm.ProductRelationType.similarAlternatives},on:{\"loaded\":_vm.handleRelationLoaded},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar products = ref.products;\nreturn [_c('CondensedProductList',{attrs:{\"products\":products,\"tracking-list-name\":(\"relations-\" + (_vm.$route.name) + \"-\" + (_vm.ProductRelationType.similarAlternatives)),\"product-bg-color\":\"white\"}})]}}],null,false,115321074)})],1):_vm._e()]):_vm._e()],1)]],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component } from 'vue-property-decorator';\r\nimport CondensedProductList from '@/project/product/condensed/CondensedProductList.vue';\r\n\r\nimport ProductRecommendationsBlock from '@/project/app/blocks/ProductRecommendationsBlock.vue';\r\nimport ProductAccessoriesSearchControl, { ProductRelationType } from '@/project/product/product-tile/ProductRelationSearchControl.vue';\r\nimport dictionaryService from '@/core/translation/dictionary.service';\r\nimport { ProductDetailsViewModel } from '@/types/apiServerContract';\r\nimport Tabs from '@/core/ui-components/tabs/Tabs.vue';\r\nimport Tab from '@/core/ui-components/tabs/Tab.vue';\r\nimport SpinnerOverlay from '@/project/spinners/SpinnerOverlay.vue';\r\nimport gtmService from '@/project/tracking/gtm/GTM.service';\r\n\r\n@Component({\r\n components: { Tabs, Tab, SpinnerOverlay, CondensedProductList, ProductRecommendationsBlock, ProductAccessoriesSearchControl }\r\n})\r\nexport default class ProductDetailsRelations extends Vue {\r\n @Prop({ required: true }) product!: ProductDetailsViewModel;\r\n\r\n loaded: boolean = false;\r\n activeTab: string = '';\r\n\r\n getMessage(msgOrLabel: string): string {\r\n if (dictionaryService.exists(msgOrLabel)) {\r\n return dictionaryService.get(msgOrLabel);\r\n }\r\n return msgOrLabel;\r\n }\r\n\r\n get labelAccessoriesText(): string | null {\r\n const bodyTextKey = 'Product.Relations.ProductAccessoriesRecommended.BodyText';\r\n return dictionaryService.exists(bodyTextKey) ? dictionaryService.get(bodyTextKey) : null;\r\n }\r\n\r\n handleRelationLoaded(relationType: string) {\r\n this.loaded = true;\r\n }\r\n\r\n tabsChanged(tabName: string) {\r\n this.activeTab = tabName;\r\n gtmService.trackProductDetailsTabChange(tabName);\r\n }\r\n\r\n tabsInit(tabName) {\r\n this.activeTab = tabName;\r\n }\r\n\r\n get ProductRelationType() {\r\n return ProductRelationType;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelations.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelations.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsRelations.vue?vue&type=template&id=031f138d&scoped=true&\"\nimport script from \"./ProductDetailsRelations.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsRelations.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsRelations.vue?vue&type=style&index=0&id=031f138d&lang=less&scoped=true&\"\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 \"031f138d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isUserLoggedIn)?_c('article',{staticClass:\"bg-gray-300 px-20 py-20\"},[_c('h2',{staticClass:\"font-semi-bold text-16 mb-8\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.Details.Partners.Title'))+\" \")]),_c('p',{staticClass:\"text-13\",domProps:{\"innerHTML\":_vm._s(_vm.subtitle)}}),_c('div',{staticClass:\"flex flex-wrap items-center h-full mt-5\"},_vm._l((_vm.partners),function(partner,partnerIndex){return _c('div',{key:partnerIndex,staticClass:\"mr-20 mt-10 last:mr-0\"},[_c('AdnuntiusPixels',{staticClass:\"mx-10 first:ml-0 last:mr-0\",attrs:{\"rendered-url\":partner.renderedPixelUrl,\"visible-url\":partner.visiblePixelUrl,\"view-url\":partner.viewPixelUrl,\"click-url\":partner.clickPixelUrl,\"always-visible\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar click = ref.click;\nreturn [_c('a',{attrs:{\"href\":partner.url,\"target\":\"_blank\"},on:{\"click\":click}},[_c('img',{class:_vm.imageCssClass(partner),attrs:{\"src\":partner.image.url,\"alt\":partner.name}}),_c('span',{staticClass:\"sr-only\"},[_vm._v(_vm._s(_vm.$dictionary.get('BrandHero.BrandLogo.SeeAllProductsFrom'))+\" \"+_vm._s(partner.name))])])]}}],null,true)})],1)}),0)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// If label contains email, format it as email a-tag\r\nexport default function formatEmailAsHtml(label: string) {\r\n const regex = new RegExp('([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+[a-zA-Z0-9_-]+)', 'ig');\r\n const rawTextString = label;\r\n\r\n const formattedTextString = rawTextString.replace(regex, '$1');\r\n\r\n return formattedTextString;\r\n}\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport { PartnerLogoViewModel } from '@/types/apiServerContract';\r\nimport AdnuntiusPixels from '@/project/tracking/adnuntius/AdnuntiusPixels.vue';\r\nimport authService from '@/core/auth/auth.service';\r\nimport dictionaryService from '@/core/translation/dictionary.service';\r\nimport formatEmailAsHtml from '@/core/formatters/emailAsHtml.service';\r\n\r\n@Component({\r\n components: { AdnuntiusPixels }\r\n})\r\nexport default class ProductDetailsPartnerLogos extends Vue {\r\n @Prop({ required: true, type: Array })\r\n partners!: readonly PartnerLogoViewModel[];\r\n\r\n imageCssClass(partner: PartnerLogoViewModel) : string {\r\n const isTall = partner.image.width < partner.image.height;\r\n const isSquare = partner.image.width === partner.image.height;\r\n\r\n return isTall || isSquare ? 'max-h-35' : 'w-full max-w-135';\r\n }\r\n\r\n get isUserLoggedIn(): boolean {\r\n return authService.isLoggedIn();\r\n }\r\n\r\n get subtitle() {\r\n return formatEmailAsHtml(dictionaryService.get('Product.Details.Partners.Subtitle'));\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsPartnerLogos.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsPartnerLogos.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsPartnerLogos.vue?vue&type=template&id=43086d55&\"\nimport script from \"./ProductDetailsPartnerLogos.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsPartnerLogos.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loaded && _vm.recommendationsResult.length > 0)?_c('article',{staticClass:\"product-menu\"},[_c('Tabs',{attrs:{\"header-class\":\"ml-20 md:ml-0 md:mb-15 pb-10 mb-5 md:pb-0 overflow-x-auto overflow-y-hidden flex-no-wrap\",\"content-class\":\"ml-20 md:ml-0\"},on:{\"changed\":_vm.changed},scopedSlots:_vm._u([{key:\"header\",fn:function(ref){\nvar title = ref.title;\nreturn [_c('span',{staticClass:\"inline-block whitespace-no-wrap\"},[_vm._v(\" \"+_vm._s(title)+\" \")])]}}],null,false,1815710595)},_vm._l((_vm.recommendationsResult),function(result,idx){return _c('Tab',{key:idx,attrs:{\"name\":result.content.headline,\"keep-alive\":\"\"}},[_c('CondensedProductList',{attrs:{\"products\":result.products,\"tracking-list-name\":_vm.trackingListName(result.content),\"use-swiper\":!result.content.useListView,\"product-bg-color\":result.content.productBackgroundColor}})],1)}),1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component } from 'vue-property-decorator';\r\nimport CondensedProductList from '@/project/product/condensed/CondensedProductList.vue';\r\nimport Tabs from '@/core/ui-components/tabs/Tabs.vue';\r\nimport Tab from '@/core/ui-components/tabs/Tab.vue';\r\nimport loggingService from '@/core/logging.service';\r\nimport { ProductDetailsPageViewModel, ProductRecommendationsBlockViewModel } from '@/types/contentServerContract';\r\nimport { ProductRecommendationType, ProductTileViewObject } from '@/types/apiServerContract';\r\nimport Api from '@/project/http/Api.service';\r\nimport GTMService from '@/project/tracking/gtm/GTM.service';\r\n\r\ninterface RecommendationsResult {\r\n content: ProductRecommendationsBlockViewModel,\r\n products: ProductTileViewObject[]\r\n}\r\n\r\n@Component({\r\n components: { Tabs, Tab, CondensedProductList }\r\n})\r\nexport default class ProductDetailsRecommendations extends Vue {\r\n @Prop({ required: true, type: String })\r\n productId!: string;\r\n\r\n @Prop()\r\n productDetailsPage!: ProductDetailsPageViewModel;\r\n\r\n recommendationsResult: RecommendationsResult[] = [];\r\n loaded: boolean = false;\r\n\r\n changed(relationsType: string) {\r\n GTMService.trackProductDetailsTabChange(relationsType);\r\n }\r\n\r\n async getRecommendationsContent() {\r\n try {\r\n const result = this.productDetailsPage;\r\n const recommendationsBlockContent = result.recommendations.map(x => x.content as ProductRecommendationsBlockViewModel);\r\n const recommendationsProductDataPromises = recommendationsBlockContent.map(x => this.getProductData(x));\r\n\r\n await Promise.all(recommendationsProductDataPromises);\r\n\r\n this.recommendationsResult.sort((a, b) => {\r\n const indexA = recommendationsBlockContent.indexOf(a.content);\r\n const indexB = recommendationsBlockContent.indexOf(b.content);\r\n return indexA - indexB;\r\n });\r\n } catch (e) {\r\n // No content - ignored\r\n } finally {\r\n this.loaded = true;\r\n }\r\n }\r\n\r\n async getProductData(content: ProductRecommendationsBlockViewModel): Promise {\r\n try {\r\n const result = await Api.recommendations.recommend({\r\n categoryIdFilterPositiveList: content.categoryIdFilterPositiveList,\r\n categoryIdFilterNegativeList: content.categoryIdFilterNegativeList,\r\n displayedAtLocation: content.displayLocation,\r\n intervalDays: content.interval,\r\n popularityType: content.popularity,\r\n categoryId: content.categoryId,\r\n productId: this.productId,\r\n productCount: content.productCount,\r\n recommendationType: content.type,\r\n allowFillIfNecessary: content.allowFillIfNecessary,\r\n brandId: content.brandId,\r\n hasImages: content.hasImages,\r\n stockFilter: content.stockFilter,\r\n showFeedProducts: content.showFeedProducts\r\n });\r\n\r\n if (result?.products?.length > 0) {\r\n this.recommendationsResult.push({\r\n content: content,\r\n products: result.products\r\n });\r\n }\r\n } catch (e) {\r\n loggingService.error(e);\r\n }\r\n }\r\n\r\n trackingListName(recommendation: ProductRecommendationsBlockViewModel):string {\r\n const key = Object.keys(ProductRecommendationType).filter((v) => isNaN(Number(v))).find(k => ProductRecommendationType[k] === recommendation.type) || 'recommendation';\r\n // format: recommendation/relation - page type - recommendation type\r\n return `recommendations-${this.$route.name}-${key}`;\r\n }\r\n\r\n created() {\r\n this.getRecommendationsContent();\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRecommendations.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRecommendations.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsRecommendations.vue?vue&type=template&id=3a92b2e6&scoped=true&\"\nimport script from \"./ProductDetailsRecommendations.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsRecommendations.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsRecommendations.vue?vue&type=style&index=0&id=3a92b2e6&lang=less&scoped=true&\"\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 \"3a92b2e6\",\n null\n \n)\n\nexport default component.exports","import { AbstractModalService } from '@/core/modals/AbstractModalService';\r\n\r\nimport { ModalOptions } from '@/core/modals/ModalState';\r\nimport { ProductDetailsViewModel } from '@/types/apiServerContract';\r\n\r\nclass ProductFeedbackOverlayService extends AbstractModalService {\r\n public show(product: ProductDetailsViewModel, options?: Partial) {\r\n return this.showModal({\r\n component: () => import(\r\n '@/project/product/product-details/ProductFeedbackOverlay.vue'),\r\n componentAttrs: {\r\n product\r\n },\r\n options\r\n });\r\n }\r\n}\r\n\r\nexport default new ProductFeedbackOverlayService();\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.product)?_c('div',{staticClass:\"product-details-bid-tile bg-gray-300 mb-10 last:mb-0 p-15\"},[_c('div',{staticClass:\"flex flex-col flex-1 mb-20 md:mb-0\"},[_c('CultureAwareRouterLink',{staticClass:\"product-title hover:underline\",attrs:{\"to\":_vm.productDetailsUrl},nativeOn:{\"click\":function($event){return _vm.productClick()}}},[_c('div',{directives:[{name:\"line-clamp\",rawName:\"v-line-clamp:16\",value:(3),expression:\"3\",arg:\"16\"}],staticClass:\"xs:text-13 lg:text-14 font-bold text-black mb-15\"},[_c('span',{staticClass:\"block\"},[_vm._v(\" \"+_vm._s(_vm.bid.description + ' - ' + _vm.bid.bidNo)+\" \")])])]),_c('ProductTileBid',{attrs:{\"bid\":_vm.bid,\"is-bid-on-pdp\":\"\"}})],1),_c('ProductTileCart',{staticClass:\"product-cart vertical flex flex-row md:flex-col h-full\",attrs:{\"mode\":\"horizontal\",\"product\":_vm.product,\"bid\":_vm.bid,\"price\":{ loaded: _vm.pricesLoaded, data: _vm.priceData },\"is-logged-in\":_vm.isUserLoggedIn,\"is-bid-on-pdp\":true,\"product-click\":function () {}},on:{\"add-to-basket-change\":_vm.trackAddToBasketChange}})],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\n\r\nimport { BidViewObject, ProductTileViewObject, StockInformationViewObject } from '@/types/apiServerContract';\r\nimport { TrackingProductAndElement } from '@/project/tracking/gtm/types';\r\n\r\nimport simplePriceFetchService, { PriceSimpleDataExtended } from '@/project/product/services/simplePriceFetch.service';\r\nimport stockFetchService from '@/project/product/services/stockFetch.service';\r\nimport GTMService, { ProductTrackingState, TrackingProduct } from '@/project/tracking/gtm/GTM.service';\r\nimport authService from '@/core/auth/auth.service';\r\nimport serverContextService from '@/core/serverContext.service';\r\n\r\nimport ProductTileBid from '@/project/product/product-tile/ProductTileBid.vue';\r\nimport ProductTileCart from '@/project/product/product-tile/ProductTileCart.vue';\r\nimport bus from '@/core/bus';\r\nimport { ProductTrackerProcessBatchKey } from '@/project/tracking/gtm/ProductListTracker.vue';\r\n\r\n@Component({\r\n components: {\r\n ProductTileBid,\r\n ProductTileCart\r\n }\r\n})\r\nexport default class ProductDetailsBidTile extends Vue {\r\n @Prop({ required: true }) product!: ProductTileViewObject;\r\n @Prop({ required: true, type: Function }) productClick!: (product: TrackingProduct) => void;\r\n\r\n priceData: PriceSimpleDataExtended | null = null;\r\n stockData: readonly StockInformationViewObject[] | null = null;\r\n bidsData: readonly ProductTileViewObject[] | null = null;\r\n showMenu: boolean = false;\r\n isERPServiceAvailable = true;\r\n\r\n pricesLoaded: boolean = false;\r\n stockLoaded: boolean = false;\r\n\r\n cancellationCallbacks: (() => void)[] = [];\r\n\r\n get bid(): BidViewObject | null | undefined {\r\n return this.product.bid;\r\n }\r\n\r\n get productDetailsUrl() {\r\n return encodeURI(this.product.url);\r\n }\r\n\r\n get hasBids() {\r\n return this.bidsData && this.bidsData.length > 0;\r\n }\r\n\r\n get hasAlternatives() {\r\n return this.product.alternatives.length > 0;\r\n }\r\n\r\n get hasAccessories() {\r\n return this.product.accessories.length > 0;\r\n }\r\n\r\n get isUserLoggedIn(): boolean {\r\n return authService.isLoggedIn();\r\n }\r\n\r\n get isExternalProductGuide() {\r\n return serverContextService.isExternalProductGuide;\r\n }\r\n\r\n get getTrackingState(): ProductTrackingState {\r\n if (!this.isUserLoggedIn) {\r\n return ProductTrackingState.NotLoggedIn;\r\n }\r\n\r\n if (!this.pricesLoaded || !this.stockLoaded) {\r\n return ProductTrackingState.NoErpResponseYet;\r\n }\r\n\r\n return this.isERPServiceAvailable ? ProductTrackingState.Complete : ProductTrackingState.ErpNotAvailable;\r\n }\r\n\r\n created() {\r\n this.getPriceData();\r\n this.getStockData();\r\n }\r\n\r\n mounted() {\r\n this.trackImpression(true);\r\n }\r\n\r\n async toggleMenu() {\r\n this.showMenu = !this.showMenu;\r\n }\r\n\r\n @Watch('isUserLoggedIn')\r\n onLoginStateChange(now: boolean, before: boolean) {\r\n if (now && !before) {\r\n this.getPriceData();\r\n this.getStockData();\r\n }\r\n }\r\n\r\n async getPriceData() {\r\n if (this.isExternalProductGuide) {\r\n this.pricesLoaded = true;\r\n return;\r\n }\r\n\r\n this.pricesLoaded = false;\r\n\r\n try {\r\n if (!this.isUserLoggedIn) {\r\n return;\r\n }\r\n\r\n const request = simplePriceFetchService.requestData(this.product.itemId);\r\n\r\n this.cancellationCallbacks.push(request.cancel);\r\n\r\n const result = await request.promise;\r\n\r\n this.priceData = Object.freeze(result);\r\n this.isERPServiceAvailable = this.isERPServiceAvailable && result.isServiceAvailable;\r\n } catch {\r\n } finally {\r\n this.pricesLoaded = true;\r\n this.trackImpression();\r\n }\r\n }\r\n\r\n async getStockData() {\r\n this.stockLoaded = false;\r\n\r\n try {\r\n const request = stockFetchService.requestData(this.product.itemId);\r\n\r\n this.cancellationCallbacks.push(request.cancel);\r\n\r\n const result = await request.promise;\r\n\r\n this.stockData = Object.freeze(result.stockInformation);\r\n this.isERPServiceAvailable = this.isERPServiceAvailable && result.isServiceAvailable;\r\n } catch {\r\n } finally {\r\n this.stockLoaded = true;\r\n this.trackImpression();\r\n }\r\n }\r\n\r\n trackImpression(force: boolean = false): void {\r\n if ((!force && (!this.pricesLoaded || !this.stockLoaded)) || this.isExternalProductGuide) {\r\n return;\r\n }\r\n\r\n this.$emit('productImpression', { product: this.constructTrackingProduct(), el: this.$el } as TrackingProductAndElement);\r\n }\r\n\r\n trackAddToBasketChange(deltaQuantity: number) {\r\n bus.emit(ProductTrackerProcessBatchKey);\r\n GTMService.trackProductQuantityChange(this.constructTrackingProduct(), deltaQuantity, `bids-${this.$route.name}-bid`);\r\n }\r\n\r\n constructTrackingProduct(): TrackingProduct {\r\n return {\r\n ...this.product,\r\n price: this.priceData?.amount,\r\n stockInfo: this.stockData,\r\n trackingState: this.getTrackingState\r\n };\r\n }\r\n\r\n rawProductClick() {\r\n this.productClick(this.constructTrackingProduct());\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsBidTile.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsBidTile.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsBidTile.vue?vue&type=template&id=99bc5192&scoped=true&\"\nimport script from \"./ProductDetailsBidTile.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsBidTile.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsBidTile.vue?vue&type=style&index=0&id=99bc5192&lang=less&scoped=true&\"\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 \"99bc5192\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.productSeries && _vm.series)?_c('div',{key:_vm.mpn,staticClass:\"mx-10 md:mx-0\"},[_c('div',{staticClass:\"flex flex-wrap -mx-10\"},_vm._l((_vm.series.dropDowns),function(seriesItem,seriesIndex){return _c('div',{key:seriesIndex,staticClass:\"mb-20 px-10 w-full lg:w-1/2\"},[_c('Dropdown',{ref:(\"dropdown\" + seriesIndex),refInFor:true,attrs:{\"icon-is-after\":true,\"position-right\":(seriesIndex + 1) % 2 === 0,\"icon\":\"arrow-down\",\"button-class\":\"cta-icon--16 w-full\"},on:{\"close\":_vm.handleCloseInDropdown,\"click\":function($event){return _vm.handleClickInDropdown(seriesItem)}},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('div',[_c('span',{staticClass:\"font-bold\"},[_vm._v(\" \"+_vm._s(seriesItem.displayName)+\": \")]),(_vm.alternativeSeriesDisplayName)?_c('span',[_vm._v(\" \"+_vm._s(_vm.alternativeSeriesDisplayName)+\" \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.getSelectedSeriesValue(seriesItem))+\" \")])])]},proxy:true},{key:\"activeHead\",fn:function(){return [_c('span',{staticClass:\"font-bold\"},[_vm._v(\" \"+_vm._s(seriesItem.displayName)+\" \")]),(_vm.alternativeSeriesDisplayName)?_c('span',{staticClass:\"pl-3\"},[_vm._v(\" \"+_vm._s(_vm.alternativeSeriesDisplayName)+\" \")]):_vm._e()]},proxy:true},{key:\"dropdown\",fn:function(){return [(_vm.alternativeSeries && _vm.alternativeSeriesIndex === seriesIndex)?_c('ul',{staticClass:\"relative z-1\"},_vm._l((_vm.alternativeSeries),function(alternativeOption,alternativeOptionIndex){return _c('li',{key:alternativeOption.product.wid},[_c('CultureAwareRouterLink',{staticClass:\"flex px-20 py-10 c-product-series__item\",class:{\n 'c-product-series__item-even': alternativeOptionIndex % 2 === 0\n },attrs:{\"to\":_vm.productDetailsUrl(alternativeOption.product),\"target\":_vm.productDetailsUrlTarget},nativeOn:{\"click\":function($event){return _vm.handleClickProductSeriesItem(seriesItem, alternativeOption)}}},[_c('div',{staticClass:\"w-1/3 xl:w-2/5 mr-auto text-left mb-2 leading-normal\"},[_vm._v(\" \"+_vm._s(alternativeOption.displayName)+\" \")]),_c('ProductTileStock',{staticClass:\"w-2/3 xl:w-3/5 ml-auto\",attrs:{\"number-of-stock-labels\":1,\"align-right\":true,\"allow-stock-popover\":false,\"item-id\":alternativeOption.product.itemId,\"stock\":{ loaded: _vm.stockLoaded, simpleData: _vm.getStockByItemId(alternativeOption.product.itemId), data: null },\"is-logged-in\":_vm.isUserLoggedIn,\"ignore-notify-me\":\"\"}})],1)],1)}),0):_c('ul',{staticClass:\"relative z-1\"},_vm._l((seriesItem.values),function(seriesValue,seriesOptionIndex){return _c('li',{key:seriesOptionIndex},[(_vm.isActiveByWid(seriesValue.wid))?_c('CultureAwareRouterLink',{staticClass:\"flex px-20 py-10 c-product-series__item\",class:{\n 'c-product-series__item-disabled': !_vm.isActiveByWid(seriesValue.wid),\n 'c-product-series__item-even': seriesOptionIndex % 2 === 0\n },attrs:{\"to\":_vm.getProductUrlByWid(seriesValue.wid),\"target\":_vm.productDetailsUrlTarget},nativeOn:{\"click\":function($event){return _vm.handleClickSeries(seriesValue, seriesOptionIndex, seriesItem)}}},[_c('div',{staticClass:\"w-1/3 xl:w-2/5 mr-auto text-left mb-2 leading-normal\",class:{\n 'text-gray-700': !_vm.isActiveByWid(seriesValue.wid),\n 'font-bold': _vm.isSelectedByWid(seriesValue.wid)\n }},[_vm._v(\" \"+_vm._s(_vm.getDisplayValue(seriesValue.displayValue))+\" \")]),(_vm.getItemIdByWid(seriesValue.wid))?_c('ProductTileStock',{staticClass:\"w-2/3 xl:w-3/5 ml-auto\",attrs:{\"number-of-stock-labels\":1,\"align-right\":true,\"allow-stock-popover\":false,\"item-id\":_vm.getItemIdByWid(seriesValue.wid),\"stock\":{ loaded: _vm.stockLoaded, simpleData: _vm.getStockByWid(seriesValue.wid), data: null },\"is-logged-in\":_vm.isUserLoggedIn,\"ignore-notify-me\":\"\"}}):_vm._e()],1):_c('button',{staticClass:\"flex px-20 py-10 w-full c-product-series__item\",class:{\n 'c-product-series__item-disabled': !_vm.isActiveByWid(seriesValue.wid),\n 'c-product-series__item-even': seriesOptionIndex % 2 === 0\n },attrs:{\"type\":\"button\"},on:{\"click\":function () { return _vm.handleClickSeriesInvalidOption(seriesItem, seriesValue, seriesIndex); }}},[_c('div',{staticClass:\"mr-auto text-left mb-2 leading-normal\",class:{\n 'text-gray-700': !_vm.isActiveByWid(seriesValue.wid),\n 'font-bold': _vm.isSelectedByWid(seriesValue.wid)\n }},[_vm._v(\" \"+_vm._s(_vm.getDisplayValue(seriesValue.displayValue))+\" \")]),_c('div',{staticClass:\"ml-auto text-gray-700 text-13 mt-2 leading-normal text-right\"},[_vm._v(\" \"+_vm._s(_vm.labelForUnavailableCombination(seriesItem))+\" \")])])],1)}),0)]},proxy:true}],null,true)})],1)}),0)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component } from 'vue-property-decorator';\r\nimport {\r\n ProductSeriesDropDownValueViewObject,\r\n ProductSeriesDropDownViewObject,\r\n ProductSeriesProductViewObject\r\n} from '@/types/apiServerContract';\r\nimport { softRedirect } from '@/core/redirect.service';\r\nimport { router } from '@/router/index';\r\nimport stockFetchService, { StockViewObjectExtended } from '@/project/product/services/stockFetch.service';\r\nimport ProductTileStock from '@/project/product/product-tile/ProductTileStock.vue';\r\nimport authService from '@/core/auth/auth.service';\r\nimport dictionaryService from '@/core/translation/dictionary.service';\r\nimport Dropdown from '@/project/form/Dropdown.vue';\r\nimport serverContextService from '@/core/serverContext.service';\r\nimport IDropdown from '@/project/form/IDropdown';\r\nimport GTMBasics from '@/project/tracking/gtm/GTM.basics';\r\nimport { ProductSeriesObject, ProductSeriesFacetObject } from '@/project/product/product-details/product-series';\r\n\r\ninterface AlternativeSeriesObject {\r\n displayName: string;\r\n facetId?: string;\r\n product: ProductSeriesProductViewObject;\r\n}\r\n\r\n@Component({\r\n components: { Dropdown, ProductTileStock }\r\n})\r\nexport default class ProductDetailsSeries extends Vue {\r\n // @Prop({ required: true, type: String }) wid!: string;\r\n // @Prop({ required: true, type: String }) itemId!: string;\r\n @Prop({ required: true, type: String }) mpn!: string;\r\n @Prop({ required: true, type: String }) productSeries!: string;\r\n @Prop({ required: true, type: Object }) series!: ProductSeriesObject;\r\n stockData: StockViewObjectExtended[] = [];\r\n // loaded: boolean = false;\r\n stockLoaded: boolean = false;\r\n isERPServiceAvailable = true;\r\n\r\n alternativeSeries: null | AlternativeSeriesObject[] = null;\r\n alternativeSeriesIndex: null | number = null;\r\n alternativeSeriesDisplayName: null | string = null;\r\n alternativeSeriesFacetId: null | string = null;\r\n alternativeSeriesClearOnClose: boolean = false;\r\n\r\n cancellationCallbacks: (() => void)[] = [];\r\n $refs!: Vue['$refs'] & {\r\n dropdown0?: IDropdown,\r\n dropdown1?: IDropdown,\r\n dropdown2?: IDropdown,\r\n dropdown3?: IDropdown\r\n }\r\n\r\n mounted() {\r\n this.getStockData();\r\n }\r\n\r\n resetStockData() {\r\n this.stockData = [];\r\n }\r\n\r\n async getStockData() {\r\n this.stockLoaded = false;\r\n this.resetStockData();\r\n try {\r\n // eslint-disable-next-line\r\n this.series?.productSeriesProducts.map(product => {\r\n if (product.itemId) {\r\n this.getStockItem(product.itemId);\r\n }\r\n });\r\n } catch {\r\n } finally {\r\n this.stockLoaded = true;\r\n }\r\n }\r\n\r\n async getStockItem(itemId: string) {\r\n const request = stockFetchService.requestData(itemId);\r\n this.cancellationCallbacks.push(request.cancel);\r\n const result = await request.promise;\r\n if (!this.stockData.find(s => s && s.itemId === itemId)) {\r\n this.stockData.push(Object.freeze(result));\r\n }\r\n\r\n this.isERPServiceAvailable = this.isERPServiceAvailable && (result?.isServiceAvailable ?? false);\r\n }\r\n\r\n handleClickSeries(clickedSeriesValue: ProductSeriesDropDownValueViewObject, seriesIndex: number, seriesItem: ProductSeriesFacetObject) {\r\n const productUrl = this.getProductByWid(clickedSeriesValue.wid)?.productUrl || '';\r\n const hasUrl = productUrl.length > 0;\r\n const isNotCurrentUrl = productUrl !== router.currentRoute.path;\r\n const isValidUrl = hasUrl && isNotCurrentUrl;\r\n this.trackClickProductLink(seriesItem, clickedSeriesValue);\r\n if (isValidUrl) {\r\n seriesItem.selectedSeries = clickedSeriesValue;\r\n softRedirect(productUrl);\r\n }\r\n }\r\n\r\n getStockByItemId(itemId: string) {\r\n const stockArray = this.stockData.filter(s => itemId && s.itemId === itemId).map(m => m.stockInformation);\r\n return stockArray.length ? stockArray[0] : [];\r\n }\r\n\r\n getStockByWid(wid: string) {\r\n const itemId = this.getItemIdByWid(wid);\r\n return itemId ? this.getStockByItemId(itemId) : null;\r\n }\r\n\r\n get isUserLoggedIn(): boolean {\r\n return authService.isLoggedIn();\r\n }\r\n\r\n getSelectedSeriesValue(seriesItem: ProductSeriesDropDownViewObject): string | null {\r\n return this.series.productSeriesProducts.find(p => p.isSelected)?.facetValues[seriesItem.facetId.toLowerCase()].displayValue;\r\n }\r\n\r\n getDisplayValue(value: string): string {\r\n return dictionaryService.translate(value);\r\n }\r\n\r\n labelForUnavailableCombination(seriesItem): string {\r\n const combinationNames = this.series?.dropDowns.filter(v => v.displayName !== seriesItem.facetDisplayName).map(s => s.selectedSeries?.displayValue);\r\n if (combinationNames) {\r\n return dictionaryService.get('Product.Series.NotAvailable', [combinationNames.map((n, cIndex) => {\r\n const c = dictionaryService.translate(n || '');\r\n if (cIndex === (combinationNames.length - 2)) {\r\n return dictionaryService.get('Product.Series.NotAvailablePluralisation', [c]);\r\n } else if (cIndex === (combinationNames.length - 1)) {\r\n return c;\r\n } else {\r\n return `${c}, `;\r\n }\r\n }).join('')]);\r\n }\r\n return '';\r\n }\r\n\r\n handleClickSeriesInvalidOption(selectedSeriesItem:ProductSeriesDropDownViewObject, desiredSeriesOption: ProductSeriesDropDownValueViewObject, index: number) {\r\n const selectedSeriesFacetIdLowercased = selectedSeriesItem.facetId.toLowerCase(); // Using to lowercase for some json reason\r\n const products = this.series?.productSeriesProducts.filter(p => {\r\n const obj = Object.keys(p.facetValues);\r\n const objWithFacets = obj.filter((facetId) => {\r\n return desiredSeriesOption.displayValue === p.facetValues[facetId].displayValue;\r\n });\r\n return objWithFacets.length;\r\n });\r\n const alternativeSeries: AlternativeSeriesObject[][] = [];\r\n if (products.length) {\r\n products.forEach(p => {\r\n const keys = Object.keys(p.facetValues);\r\n keys.forEach((facetKey) => {\r\n const isAlternativeKey = facetKey !== selectedSeriesFacetIdLowercased;\r\n if (isAlternativeKey) {\r\n const alternativeItems: AlternativeSeriesObject[] = [];\r\n alternativeItems.push({\r\n product: p,\r\n displayName: p.facetValues[facetKey.toLowerCase()].displayValue,\r\n facetId: facetKey\r\n });\r\n this.getStockItem(p.itemId);\r\n alternativeSeries.push(alternativeItems);\r\n }\r\n });\r\n });\r\n }\r\n let firstAlternativeSeriesFacetId: string = '';\r\n const alternativeSeriesGroupedByFacetId = alternativeSeries.reduce((acc, item) => {\r\n const facetId = item[0].facetId || '';\r\n if (!firstAlternativeSeriesFacetId) {\r\n firstAlternativeSeriesFacetId = facetId;\r\n }\r\n if (!acc[facetId]) {\r\n acc[facetId] = [];\r\n }\r\n acc[facetId].push(item[0]);\r\n return acc;\r\n }, {});\r\n if (index === 0) {\r\n this.alternativeSeriesIndex = 1;\r\n this.$refs.dropdown0![0]!.closeDropdown();\r\n this.$refs.dropdown1![0]!.openDropdown();\r\n } else {\r\n this.alternativeSeriesIndex = 0;\r\n this.$refs.dropdown1![0]!.closeDropdown();\r\n this.$refs.dropdown0![0]!.openDropdown();\r\n }\r\n this.alternativeSeries = alternativeSeriesGroupedByFacetId[firstAlternativeSeriesFacetId.toLowerCase()];\r\n const desiredSeriesDropdown = this.series.dropDowns.find(d => d.facetId === firstAlternativeSeriesFacetId);\r\n this.alternativeSeriesDisplayName = dictionaryService.translate(desiredSeriesDropdown?.displayName ?? '');\r\n this.alternativeSeriesFacetId = firstAlternativeSeriesFacetId.toLowerCase();\r\n\r\n this.trackClickProductLink(selectedSeriesItem, { facetDisplayName: this.getDisplayValue(desiredSeriesOption.displayValue), facetId: selectedSeriesFacetIdLowercased });\r\n this.$nextTick(() => {\r\n this.alternativeSeriesClearOnClose = true;\r\n });\r\n }\r\n\r\n handleCloseInDropdown() {\r\n if (this.alternativeSeriesClearOnClose) {\r\n this.alternativeSeries = null;\r\n this.alternativeSeriesFacetId = null;\r\n this.alternativeSeriesDisplayName = null;\r\n this.alternativeSeriesIndex = null;\r\n this.alternativeSeriesClearOnClose = false;\r\n }\r\n }\r\n\r\n handleClickInDropdown(seriesItem: ProductSeriesDropDownViewObject) {\r\n this.trackClickSeriesDropdown(seriesItem);\r\n }\r\n\r\n handleClickProductSeriesItem(seriesItem: ProductSeriesDropDownViewObject, variant) {\r\n this.trackClickProductLink(seriesItem, variant);\r\n }\r\n\r\n trackClickSeriesDropdown(seriesItem: ProductSeriesDropDownViewObject) {\r\n GTMBasics.pushToDataLayer({\r\n event: 'variant.open',\r\n variantAttribute: seriesItem.displayName, // English display name TODO: English\r\n seriesClassificationId: seriesItem.facetId // ID of the product series classification\r\n });\r\n }\r\n\r\n trackClickProductLink(seriesItem, variant) {\r\n GTMBasics.pushToDataLayer({\r\n event: 'variant.click',\r\n variantAttribute: seriesItem.facetDisplayName || seriesItem.displayValue, // English display name TODO: English\r\n variantValue: variant.facetDisplayName || variant.displayValue || variant.displayName, // English display name TODO: English\r\n seriesClassificationId: seriesItem.facetId // ID of the product series classification\r\n });\r\n }\r\n\r\n getProductByWid(wid: string): ProductSeriesProductViewObject | null {\r\n return this.series.productSeriesProducts.find(p => p.wid === wid) || null;\r\n }\r\n\r\n isActiveByWid(wid: string): boolean {\r\n return !!this.getProductByWid(wid)?.isActive;\r\n }\r\n\r\n isSelectedByWid(wid: string): boolean {\r\n return !!this.getProductByWid(wid)?.isSelected;\r\n }\r\n\r\n getItemIdByWid(wid: string): string | null {\r\n return this.getProductByWid(wid)?.itemId || null;\r\n }\r\n\r\n getProductUrlByWid(wid: string): string | null {\r\n return this.getProductByWid(wid)?.productUrl || null;\r\n }\r\n\r\n productDetailsUrl(productAlternative) {\r\n const product:{ itemId: string, url?: string, mpn?: string } = {\r\n itemId: productAlternative.itemId,\r\n url: productAlternative.productUrl\r\n };\r\n return serverContextService.productUrl(product);\r\n }\r\n\r\n get productDetailsUrlTarget() {\r\n return serverContextService.externalProductLinkTarget;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSeries.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSeries.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsSeries.vue?vue&type=template&id=7487d9ab&\"\nimport script from \"./ProductDetailsSeries.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsSeries.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetailsSeries.vue?vue&type=style&index=0&lang=less&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.series && _vm.tableData)?_c('div',{key:_vm.mpn,staticClass:\"mx-10 md:mx-0\"},[_c('h2',{staticClass:\"text-16 md:text-24 pb-10 only-md:px-20 font-regular\"},[_vm._v(\" \"+_vm._s(_vm.$dictionary.get('Product.SeriesTable.Title', [_vm.mpn]))+\" \")]),(_vm.tableData)?_c('div',{staticClass:\"bg-white pt-20 px-10 pb-10\"},[_c('div',{staticClass:\"overflow-x-auto max-w-full\"},[_c('table',{class:_vm.tableClasses},_vm._l((_vm.tableData),function(row,rowIndex){return _c('tr',{key:rowIndex,staticClass:\"no-zebra-table\"},[_vm._l((row),function(cell,cellIndex){return [_c(cell.tag || 'td',{key:cellIndex,tag:\"component\",class:cell.class},[(cell.img)?_c('div',{staticClass:\"flex justify-center\"},[_c('img',{directives:[{name:\"on-error\",rawName:\"v-on-error\"}],staticClass:\"w-50 h-40\",attrs:{\"src\":cell.img,\"alt\":\"Product image\"}})]):_vm._e(),_vm._v(\" \"+_vm._s(cell.content)+\" \"),(cell.product)?_c('div',{staticClass:\"flex\"},[_c('ProductTileStock',{staticClass:\"mt-3\",attrs:{\"number-of-stock-labels\":1,\"align-right\":false,\"show-text\":false,\"allow-stock-popover\":false,\"item-id\":cell.product.itemId,\"stock\":{ loaded: _vm.stockLoaded, simpleData: _vm.getStockByItemId(cell.product.itemId), data: null },\"is-logged-in\":_vm.isUserLoggedIn,\"ignore-notify-me\":\"\"}}),(cell.product)?_c('CultureAwareRouterLink',{class:{'underline theme-text-linkcolor': !cell.product.isSelected},attrs:{\"to\":cell.product.isSelected ? null : cell.product.productUrl}},[_vm._v(\" \"+_vm._s(cell.product.mpn)+\" \")]):_vm._e()],1):_vm._e()])]})],2)}),0)])]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Api from '@/project/http/Api.service';\r\nimport AbstractBulkFetch from '@/core/bulk-fetch/AbstractBulkFetch';\r\nimport { StockViewObject } from '@/types/apiServerContract';\r\nimport { keyBy } from 'lodash';\r\n\r\nexport interface StockViewObjectExtended extends StockViewObject {\r\n isServiceAvailable: boolean;\r\n}\r\n\r\nclass StockFetchByPostService extends AbstractBulkFetch {\r\n async apiCall(itemIds: string[], cancelKey: string): Promise<{ [key: string]: StockViewObjectExtended }> {\r\n const result = await Api.stock.stockProductsByPost(itemIds, cancelKey);\r\n const stocks = result.stockByItemId.map(stock => ({\r\n ...stock,\r\n isServiceAvailable: result.isServiceAvailable\r\n }) as StockViewObjectExtended);\r\n return keyBy(stocks, 'itemId');\r\n }\r\n}\r\n\r\nexport default new StockFetchByPostService('Stock', 100, true, true);\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop, Component } from 'vue-property-decorator';\r\nimport {\r\n ProductSeriesDropDownValueViewObject,\r\n ProductSeriesDropDownViewObject,\r\n ProductSeriesProductViewObject\r\n} from '@/types/apiServerContract';\r\nimport ProductTileStock from '@/project/product/product-tile/ProductTileStock.vue';\r\nimport authService from '@/core/auth/auth.service';\r\nimport serverContextService from '@/core/serverContext.service';\r\nimport GTMBasics from '@/project/tracking/gtm/GTM.basics';\r\nimport responsiveProductImageService from '@/project/product/image/responsiveProductImage.service';\r\nimport { ProductSeriesObject } from '@/project/product/product-details/product-series';\r\nimport stockFetchByPostService from '@/project/product/services/stockFetchByPost.service';\r\n\r\ninterface tableCell {\r\n tag?: string;\r\n content?: string;\r\n img?: string;\r\n class?: string;\r\n product?: ProductSeriesProductViewObject;\r\n}\r\n\r\n@Component({\r\n components: { ProductTileStock }\r\n})\r\nexport default class ProductDetailsSeriesTable extends Vue {\r\n @Prop({ required: true, type: String }) mpn!: string;\r\n @Prop({ required: true, type: Object }) series!: ProductSeriesObject;\r\n stockData: StockViewObjectExtended[] = [];\r\n loaded: boolean = false;\r\n stockLoaded: boolean = false;\r\n isERPServiceAvailable = true;\r\n tableData: tableCell[][] | null = null;\r\n\r\n cancellationCallbacks: (() => void)[] = [];\r\n\r\n mounted() {\r\n this.generateTableData();\r\n this.getStockData();\r\n }\r\n\r\n get tableClasses() {\r\n if (this.series?.dropDowns.length < 2) {\r\n return 'w-auto';\r\n }\r\n return {\r\n 'w-auto': this.series?.dropDowns[1]?.values?.length < 5,\r\n 'min-w-1/3': this.series?.dropDowns[1]?.values?.length < 3,\r\n 'min-w-2/3': this.series?.dropDowns[1]?.values?.length > 3 && this.series?.dropDowns[1]?.values?.length < 5\r\n };\r\n }\r\n\r\n generateTableData() {\r\n if (!this.series?.dropDowns?.length) {\r\n return;\r\n }\r\n\r\n let rows: ProductSeriesDropDownViewObject, columns: ProductSeriesDropDownViewObject;\r\n\r\n // If there's only one dropdown (1 dimension),\r\n // we add another one to make table calculation easier.\r\n if (this.series.dropDowns.length === 1) {\r\n rows = this.series.dropDowns[0];\r\n columns = { displayName: '', facetId: '', values: [{ wid: '', displayValue: '' }] };\r\n } else {\r\n rows = this.series.dropDowns[0];\r\n columns = this.series.dropDowns[1];\r\n }\r\n\r\n // Make the table data\r\n const tableRowsData: tableCell[][] = [];\r\n\r\n // Table header first\r\n const tableHeaderRow: tableCell[] = [];\r\n tableHeaderRow.push({\r\n tag: 'th',\r\n content: this.series?.dropDowns[0].displayName,\r\n class: 'text-left font-medium'\r\n });\r\n\r\n columns.values.forEach((colorValue) => {\r\n const product = this.series?.productSeriesProducts.find(p => {\r\n return Object.keys(p.facetValues).find(key => p.facetValues[key].displayValue === colorValue.displayValue);\r\n });\r\n\r\n let img: string | undefined = product?.imageUrl;\r\n if (img) {\r\n img = responsiveProductImageService.formatImageUrl(img, responsiveProductImageService.ImageSizePlaceholderValues.W172);\r\n }\r\n const cell = {\r\n tag: 'th',\r\n content: colorValue.displayValue,\r\n img,\r\n class: 'text-left font-medium text-center'\r\n };\r\n tableHeaderRow.push(cell);\r\n });\r\n tableRowsData.push(tableHeaderRow);\r\n\r\n // Now the table body with the products\r\n const allCellClasses: string[] = ['px-10 pt-5 pb-10 md:p-10 md:py-7 border-2 border-white'];\r\n rows.values.forEach(lengthValue => {\r\n const row: tableCell[] = [{\r\n tag: 'th',\r\n content: this.$dictionary.translate(lengthValue.displayValue),\r\n class: ['text-left font-medium whitespace-no-wrap bg-gray-300', ...allCellClasses].join(' ')\r\n }];\r\n\r\n columns.values.forEach((colorValue) => {\r\n const product = this.getProductForSerieType(lengthValue, colorValue);\r\n const cell = {\r\n tag: 'td',\r\n product: product,\r\n class: [product?.isSelected ? 'font-semi-bold' : '', 'bg-gray-300 whitespace-no-wrap', ...allCellClasses].join(' ')\r\n };\r\n row.push(cell);\r\n });\r\n tableRowsData.push(row);\r\n });\r\n\r\n // First col should be selected product. Run through all products and find the selected one and save it for later\r\n let firstRowIndex: number = 0;\r\n rows.values.forEach(lengthValue => {\r\n columns.values.forEach((colorValue, colorIndex) => {\r\n const product = this.getProductForSerieType(lengthValue, colorValue);\r\n if (product?.wid === colorValue.wid && lengthValue.wid === product?.wid) {\r\n firstRowIndex = colorIndex;\r\n }\r\n });\r\n });\r\n\r\n // Move selected product col as first col, and insert every product after this\r\n tableRowsData.forEach((row, rowIndex) => {\r\n const descriptionCell = row.slice(0, 1);\r\n const cellsToMoveToBack = row.slice(1, firstRowIndex + 1);\r\n const cellsToMoveToFront = row.slice(firstRowIndex + 1);\r\n tableRowsData[rowIndex] = [...descriptionCell.concat(cellsToMoveToFront).concat(cellsToMoveToBack)];\r\n });\r\n\r\n // Save table data\r\n this.tableData = tableRowsData;\r\n }\r\n\r\n getProductForSerieType(lengthVariant: ProductSeriesDropDownValueViewObject, colorVariant: ProductSeriesDropDownValueViewObject) {\r\n const product = this.series?.productSeriesProducts.find(p => {\r\n if (colorVariant.displayValue === '') {\r\n // If there is only one variant, there is only one dimension in the table.\r\n return p.wid === lengthVariant.wid;\r\n }\r\n\r\n const keys = Object.keys(p.facetValues);\r\n return (p.facetValues[keys[0]].displayValue === colorVariant?.displayValue ||\r\n p.facetValues[keys[1]].displayValue === colorVariant?.displayValue) &&\r\n (p.facetValues[keys[0]].displayValue === lengthVariant?.displayValue ||\r\n p.facetValues[keys[1]].displayValue === lengthVariant?.displayValue);\r\n });\r\n return product;\r\n }\r\n\r\n resetStockData() {\r\n this.stockData = [];\r\n }\r\n\r\n getStockData() {\r\n this.stockLoaded = false;\r\n this.resetStockData();\r\n try {\r\n if (this.series.productSeriesProducts) {\r\n this.series.productSeriesProducts.forEach(product => this.getStockItem(product.itemId));\r\n }\r\n } catch {\r\n } finally {\r\n this.stockLoaded = true;\r\n }\r\n }\r\n\r\n async getStockItem(itemId: string) {\r\n const request = stockFetchByPostService.requestData(itemId);\r\n this.cancellationCallbacks.push(request.cancel);\r\n const result = await request.promise;\r\n if (!this.stockData.find(s => s && s.itemId === itemId)) {\r\n this.stockData.push(Object.freeze(result));\r\n }\r\n\r\n this.isERPServiceAvailable = this.isERPServiceAvailable && (result?.isServiceAvailable ?? false);\r\n }\r\n\r\n getStockByItemId(itemId: string) {\r\n const stockArray = this.stockData.filter(s => itemId && s.itemId === itemId).map(m => m.stockInformation);\r\n return stockArray.length ? stockArray[0] : [];\r\n }\r\n\r\n get isUserLoggedIn(): boolean {\r\n return authService.isLoggedIn();\r\n }\r\n\r\n trackClickProductLink(seriesItem, variant) {\r\n GTMBasics.pushToDataLayer({\r\n event: 'variant.click',\r\n variantAttribute: seriesItem.facetDisplayName || seriesItem.displayValue, // English display name TODO: English\r\n variantValue: variant.facetDisplayName || variant.displayValue || variant.displayName, // English display name TODO: English\r\n seriesClassificationId: seriesItem.facetId // ID of the product series classification\r\n });\r\n }\r\n\r\n productDetailsUrl(productAlternative) {\r\n const product:{ itemId: string, url?: string, mpn?: string } = {\r\n itemId: productAlternative.itemId,\r\n url: productAlternative.productUrl\r\n };\r\n return serverContextService.productUrl(product);\r\n }\r\n\r\n get productDetailsUrlTarget() {\r\n return serverContextService.externalProductLinkTarget;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSeriesTable.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSeriesTable.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsSeriesTable.vue?vue&type=template&id=06bcd9f0&\"\nimport script from \"./ProductDetailsSeriesTable.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsSeriesTable.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showRackEditButton)?_c('div',[_c('CallToAction',{attrs:{\"text\":_vm.$dictionary.get('RackConfigurator.ProductDetails.Button'),\"icon\":\"edit\"},on:{\"click\":_vm.handleClickOnRackEdit}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AbstractModalService } from '@/core/modals/AbstractModalService';\r\nimport { ProductDetailsViewModel, RackConfigurationViewObject } from '@/types/apiServerContract';\r\n\r\nclass RackAddAccessoriesModalService extends AbstractModalService {\r\n public async show(rack: { rackProduct: ProductDetailsViewModel, configurations?: RackConfigurationViewObject[] }): Promise {\r\n return this.showModal({\r\n component: () => import('./RackStartEditModal.vue'),\r\n componentAttrs: {\r\n rackProduct: rack.rackProduct,\r\n configurations: rack.configurations\r\n },\r\n options: {\r\n wide: true,\r\n placement: 'center'\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default new RackAddAccessoriesModalService();\r\n","\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport { ProductDetailsViewModel, RackConfigurationViewObject } from '@/types/apiServerContract';\r\nimport rackStartEditModalService from '@/project/app/client-pages/rack-configurator/rackStartEditModal.service';\r\nimport Api from '@/project/http/Api.service';\r\nimport serverContextService from '@/core/serverContext.service';\r\nimport authService from '@/core/auth/auth.service';\r\nimport { UrlQueryKey } from '@/core/urlQueryKey';\r\nimport GTMBasics from '@/project/tracking/gtm/GTM.basics';\r\n\r\n@Component({})\r\nexport default class RackStartEditButton extends Vue {\r\n @Prop({ required: true }) product!: ProductDetailsViewModel;\r\n configurations: RackConfigurationViewObject[] | null = null;\r\n\r\n get showRackEditButton(): boolean {\r\n return !!this.product?.isRackConfigurable && !!serverContextService.settings?.rackConfiguratorPage;\r\n }\r\n\r\n get isUserLoggedIn(): boolean {\r\n return authService.isLoggedIn();\r\n }\r\n\r\n async handleClickOnRackEdit() {\r\n if (this.isUserLoggedIn) {\r\n try {\r\n const response = await Api.rack.loadUsersConfigurations(this.product.wid);\r\n this.configurations = (response?.configurations?.length ?? 0) === 0 ? null : response.configurations;\r\n } catch {\r\n }\r\n }\r\n if (this.configurations) {\r\n rackStartEditModalService.show({ rackProduct: this.product, configurations: this.configurations });\r\n this.trackEvent('showModal');\r\n } else {\r\n this.trackEvent('configure');\r\n this.$router.push(`${serverContextService.settings?.rackConfiguratorPage || ''}?${UrlQueryKey.RackProductId}=${this.product.wid}`);\r\n }\r\n }\r\n\r\n trackEvent(actionValue: string) {\r\n GTMBasics.pushToDataLayer({\r\n event: 'rack.config',\r\n action: 'pdp.linkClick',\r\n actionValue: actionValue\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RackStartEditButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RackStartEditButton.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./RackStartEditButton.vue?vue&type=template&id=63ac4149&\"\nimport script from \"./RackStartEditButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./RackStartEditButton.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AdnuntiusPixels',{attrs:{\"rendered-url\":_vm.renderedPixelUrl,\"visible-url\":_vm.visiblePixelUrl,\"view-url\":_vm.viewPixelUrl,\"click-url\":_vm.clickPixelUrl,\"tracking-data\":_vm.adnuntiusTrackingData},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar click = ref.click;\nreturn [(_vm.adContentBlockViewModel)?_c('ImageTextVideoBlock',{staticClass:\"mb-20\",attrs:{\"content\":_vm.adContentBlockViewModel,\"content-load-error\":_vm.contentLoadError,\"width-on-screen\":100,\"aspect-ratio\":1200/230,\"is-first-block\":false,\"click-handler\":click}}):_vm._e()]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport { AdContentBlockViewModel, ProductDetailsViewModel } from '@/types/apiServerContract';\r\nimport { AdnuntiusTrackingData } from '@/project/tracking/adnuntius/types';\r\nimport Api from '@/project/http/Api.service';\r\nimport adnuntiusService from '@/project/personalization/adnuntius.service';\r\nimport AdnuntiusPixels from '@/project/tracking/adnuntius/AdnuntiusPixels.vue';\r\nimport ImageTextVideoBlock from '@/project/app/blocks/ImageTextVideoBlock.vue';\r\n\r\n@Component({\r\n components: { ImageTextVideoBlock, AdnuntiusPixels }\r\n})\r\nexport default class AdnuntiusProductDetailsBannerBlock extends Vue {\r\n @Prop() product!: ProductDetailsViewModel;\r\n adContentBlockViewModel: AdContentBlockViewModel | null = null;\r\n adnuntiusTrackingData: AdnuntiusTrackingData | null = null;\r\n contentLoadError = false;\r\n loaded = false;\r\n\r\n created() {\r\n this.init();\r\n }\r\n\r\n async init() {\r\n await Promise.all([this.getAdContent()]).finally(() => this.loaded = true);\r\n }\r\n\r\n async getAdContent() {\r\n try {\r\n this.adContentBlockViewModel = await Api.personalization.productDetailBanner({\r\n contactKey: adnuntiusService.getContactKey(),\r\n customerKey: adnuntiusService.getCustomerKey(),\r\n currentUrl: this.$route.fullPath,\r\n brand: this.product.brand || '',\r\n categoryIds: this.product.categoryId ? [this.product.categoryId] : [],\r\n itemId: this.product.itemId\r\n });\r\n\r\n if (this.adContentBlockViewModel.lineItemId && this.adContentBlockViewModel.creativeId) {\r\n this.adnuntiusTrackingData = {\r\n lineItemId: this.adContentBlockViewModel.lineItemId,\r\n creativeId: this.adContentBlockViewModel.creativeId,\r\n parentBlockAlias: 'productDetailsBannerBlock'\r\n };\r\n }\r\n } catch {\r\n this.contentLoadError = true;\r\n }\r\n }\r\n\r\n get renderedPixelUrl() {\r\n return this.adContentBlockViewModel?.renderedPixelUrl;\r\n }\r\n\r\n get viewPixelUrl() {\r\n return this.adContentBlockViewModel?.viewPixelUrl;\r\n }\r\n\r\n get visiblePixelUrl() {\r\n return this.adContentBlockViewModel?.visiblePixelUrl;\r\n }\r\n\r\n get clickPixelUrl() {\r\n return this.adContentBlockViewModel?.clickPixelUrl;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdnuntiusProductDetailsBannerBlock.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdnuntiusProductDetailsBannerBlock.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AdnuntiusProductDetailsBannerBlock.vue?vue&type=template&id=9cfdc68e&\"\nimport script from \"./AdnuntiusProductDetailsBannerBlock.vue?vue&type=script&lang=ts&\"\nexport * from \"./AdnuntiusProductDetailsBannerBlock.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\nimport authService from '@/core/auth/auth.service';\r\nimport {\r\n AssetType,\r\n Feature,\r\n FrequentlyAskedQuestionViewObject,\r\n PartnerLogoViewModel,\r\n ProductDetailsViewModel,\r\n ProductTileViewObject,\r\n StockInformationViewObject,\r\n TranslationResultViewModel\r\n} from '@/types/apiServerContract';\r\nimport detailedPriceFetchService, {\r\n PriceDetailedDataExtended\r\n} from '@/project/product/services/detailedPriceFetch.service';\r\nimport productConditionService from '@/project/product/services/productCondition.service';\r\nimport productDeliveryService from '@/project/product/services/productDelivery.service';\r\nimport StockFetchService from '@/project/product/services/stockFetch.service';\r\nimport Api from '@/project/http/Api.service';\r\nimport scrollService from '@/core/scroll/scroll.service';\r\nimport ProductDetailsSlider from './ProductDetailsSlider.vue';\r\nimport ProductDetailsSpecifications from './ProductDetailsSpecifications.vue';\r\nimport ProductDetailsRelatedModels from './ProductDetailsRelatedModels.vue';\r\nimport ProductDetailsReasonsToBuy from './ProductDetailsReasonsToBuy.vue';\r\nimport ProductDetailsCart from './ProductDetailsCart.vue';\r\nimport ProductDetailsRelations from './ProductDetailsRelations.vue';\r\nimport ProductTileStock from '@/project/product/product-tile/ProductTileStock.vue';\r\nimport ProductTileFavorite from '@/project/product/product-tile/ProductTileFavorite.vue';\r\nimport ReadMore from '@/core/ui-components/ReadMore.vue';\r\nimport SmartParagraph from '@/core/ui-components/SmartParagraph.vue';\r\nimport productBidsFetchService from '@/project/product/services/productBidsFetch.service';\r\nimport GTMService, { ProductTrackingState, TrackingProduct } from '@/project/tracking/gtm/GTM.service';\r\nimport ProductListTracker from '@/project/tracking/gtm/ProductListTracker.vue';\r\nimport dictionaryService, { NamedLabelArgument } from '@/core/translation/dictionary.service';\r\nimport domService from '@/core/dom/dom.service';\r\nimport adnuntiusService from '@/project/personalization/adnuntius.service';\r\nimport ProductDetailsPartnerLogos from './ProductDetailsPartnerLogos.vue';\r\nimport CopyText from '@/project/shared/CopyText.vue';\r\nimport responsiveProductImageService from '@/project/product/image/responsiveProductImage.service';\r\nimport ProductDetailsRecommendations from './ProductDetailsRecommendations.vue';\r\nimport siteService from '@/project/site/site.service';\r\nimport productFeedbackOverlayService from '@/project/modals/overlays/productFeedbackOverlay.service';\r\nimport { PageName } from '@/router/routes/constants';\r\nimport ProductDetailsBidTile from '@/project/product/product-details/ProductDetailsBidTile.vue';\r\nimport { Media, ProductDetailsPageViewModel } from '@/types/contentServerContract';\r\nimport ProductDetailsSeries from '@/project/product/product-details/ProductDetailsSeries.vue';\r\nimport ProductDetailsSeriesTable from '@/project/product/product-details/ProductDetailsSeriesTable.vue';\r\nimport BrandCategoriesLinks from '@/project/product/product-details/BrandCategoriesLinks.vue';\r\nimport botService from '@/project/site/bot.service';\r\nimport serverContext from '@/core/serverContext.service';\r\nimport contentApiService from '@/core/http/contentApi.service';\r\nimport loggingService from '@/core/logging.service';\r\nimport GTMBasics from '@/project/tracking/gtm/GTM.basics';\r\nimport campaignService from '@/project/shared/campaign.service';\r\nimport NextDelivery from '@/project/product/nextdelivery/NextDelivery.vue';\r\nimport RackStartEditButton from '@/project/app/client-pages/rack-configurator/RackStartEditButton.vue';\r\nimport AdnuntiusProductDetailsBannerBlock\r\n from '@/project/product/product-details/AdnuntiusProductDetailsBannerBlock.vue';\r\nimport { ProductSeriesObject } from '@/project/product/product-details/product-series';\r\nimport BrandProductGuideBanner\r\n from '@/project/app/blocks/productguide/StepProductGuide/Overlay/BrandProductGuideBanner.vue';\r\n\r\n@Component({\r\n components: {\r\n BrandProductGuideBanner,\r\n AdnuntiusProductDetailsBannerBlock,\r\n RackStartEditButton,\r\n NextDelivery,\r\n ProductDetailsSeries,\r\n ProductDetailsSeriesTable,\r\n ProductListTracker,\r\n ProductDetailsSlider,\r\n ProductDetailsSpecifications,\r\n ProductDetailsRelatedModels,\r\n ProductDetailsReasonsToBuy,\r\n ProductDetailsCart,\r\n ProductDetailsRelations,\r\n ProductDetailsRecommendations,\r\n ProductTileStock,\r\n ReadMore,\r\n SmartParagraph,\r\n ProductTileFavorite,\r\n ProductDetailsPartnerLogos,\r\n CopyText,\r\n ProductDetailsBidTile,\r\n BrandCategoriesLinks\r\n }\r\n})\r\nexport default class ProductDetails extends Vue {\r\n @Prop({ required: true, type: Object }) details!: ProductDetailsViewModel;\r\n\r\n priceData: PriceDetailedDataExtended | null = null;\r\n stockData: readonly StockInformationViewObject[] | null = null;\r\n conditions: readonly ProductTileViewObject[] = [];\r\n bidsData: readonly ProductTileViewObject[] = [];\r\n partnerLogos: readonly PartnerLogoViewModel[] = [];\r\n productDetailsPage: ProductDetailsPageViewModel | null = null;\r\n conditionsLoaded: boolean = false;\r\n isERPServiceAvailable = true;\r\n\r\n pricesLoaded: boolean = false;\r\n stockLoaded: boolean = false;\r\n bidsLoaded: boolean = false;\r\n productTextsTranslated: null | TranslationResultViewModel = null;\r\n\r\n productSeries: ProductSeriesObject | null = null;\r\n productSeriesLoaded: boolean = false;\r\n\r\n cancellationCallbacks: (() => void)[] = [];\r\n\r\n $refs!: {\r\n description: HTMLElement;\r\n readMoreDescription: ReadMore;\r\n specifications: ProductDetailsSpecifications;\r\n };\r\n\r\n get showFavorite(): boolean {\r\n return this.$permission.canPunchOut() === false;\r\n }\r\n\r\n get isUserLoggedIn(): boolean {\r\n return authService.isLoggedIn();\r\n }\r\n\r\n get isStaff() {\r\n return this.$permission.isStaff();\r\n }\r\n\r\n get hasUserLoggedInBefore(): boolean {\r\n return authService.hasLoggedInBefore();\r\n }\r\n\r\n get hasQuantityDiscounts() {\r\n return this.priceData && this.priceData.discounts ? this.priceData.discounts.length > 0 : false;\r\n }\r\n\r\n get labelForTranslateDescription():string {\r\n const languageTargetString = this.$dictionary.languageNameByLanguageCode(siteService.getLanguageCode()?.toLowerCase() || '');\r\n return this.productTextsTranslated\r\n ? dictionaryService.get('Product.Details.Translate.ShowOriginal')\r\n : dictionaryService.get('Product.Details.Translate', [languageTargetString]);\r\n }\r\n\r\n get isTranslationEnabled(): boolean {\r\n return serverContext.isFeatureEnabled(Feature.GoogleTranslatePdp) && this.isUserLoggedIn;\r\n }\r\n\r\n async toggleDescriptionTranslation() {\r\n GTMBasics.pushToDataLayer({\r\n event: 'button.click',\r\n buttonTarget: this.productTextsTranslated ? 'revertTranslatePdp' : 'translatePdp'\r\n });\r\n if (this.productTextsTranslated) {\r\n this.productTextsTranslated = null;\r\n } else {\r\n const translation = await Api.translate.translateDescription(this.details.wid, serverContext.siteInfo.languageCode || '');\r\n this.productTextsTranslated = translation || null;\r\n }\r\n }\r\n\r\n gotoDescription() {\r\n scrollService.scrollToElement(this.$refs.description, -100);\r\n this.$refs.readMoreDescription.open();\r\n }\r\n\r\n gotoSpecifications() {\r\n scrollService.scrollToElement(this.$refs.specifications.$el as HTMLElement, -100);\r\n this.$refs.specifications.open();\r\n }\r\n\r\n get shortDescription() {\r\n return this.details.shortDescription\r\n ? this.details.shortDescription : null;\r\n }\r\n\r\n get description() {\r\n return this.productTextsTranslated\r\n ? this.productTextsTranslated.translatedDescription : this.details.longDescription\r\n ? this.details.longDescription : null;\r\n }\r\n\r\n get bulletPoints() {\r\n return this.productTextsTranslated?.translatedBulletPoints ? this.productTextsTranslated.translatedBulletPoints.slice(0, 10) : this.details.bulletPoints ? this.details.bulletPoints.slice(0, 10) : null;\r\n }\r\n\r\n get hasBids() {\r\n return this.bidsData.length > 0 && this.$permission.canViewBids();\r\n }\r\n\r\n get hasActiveCampaign(): boolean {\r\n return this.details.campaigns.length > 0 && !!this.details.campaigns.find(c => c.showCampaignIcon);\r\n }\r\n\r\n getClassificationCodeDictionary(details: boolean = false) {\r\n return productConditionService.getProductClassificationCodeDictionary(\r\n this.details.conditionCode,\r\n details\r\n );\r\n }\r\n\r\n get hasProductSeries():boolean {\r\n return !!this.details?.productSeries;\r\n }\r\n\r\n get deliveryCodeFromStock() {\r\n return this.stockData\r\n ? productDeliveryService.getProductDeliveryCodeDictionary(this.stockData)\r\n : null;\r\n }\r\n\r\n get myAccountBidsPage() {\r\n return PageName.MY_ACCOUNT_BIDS;\r\n }\r\n\r\n async getPriceData() {\r\n this.priceData = null;\r\n\r\n if (!this.isUserLoggedIn) {\r\n this.pricesLoaded = true;\r\n return;\r\n }\r\n\r\n this.pricesLoaded = false;\r\n\r\n try {\r\n const request = detailedPriceFetchService.requestData(this.details.itemId);\r\n this.cancellationCallbacks.push(request.cancel);\r\n\r\n const result = await request.promise;\r\n this.priceData = Object.freeze(result);\r\n this.isERPServiceAvailable = this.isERPServiceAvailable && result.isServiceAvailable;\r\n } catch {\r\n } finally {\r\n this.pricesLoaded = true;\r\n this.priceOrStockLoaded();\r\n }\r\n }\r\n\r\n async getStockData() {\r\n this.stockData = null;\r\n this.stockLoaded = false;\r\n\r\n try {\r\n const request = StockFetchService.requestData(this.details.itemId);\r\n this.cancellationCallbacks.push(request.cancel);\r\n\r\n const result = await request.promise;\r\n this.stockData = Object.freeze(result.stockInformation);\r\n this.isERPServiceAvailable = this.isERPServiceAvailable && result.isServiceAvailable;\r\n } catch {\r\n } finally {\r\n this.stockLoaded = true;\r\n this.priceOrStockLoaded();\r\n this.updateMetaData();\r\n }\r\n }\r\n\r\n async getConditions() {\r\n this.conditions = [];\r\n\r\n if (this.details.conditionCode) return; // Do not fetch conditions if product itself is a condition\r\n\r\n try {\r\n const result = await Api.product.conditions(this.details.wid);\r\n this.conditions = Object.freeze(result.products);\r\n } catch {\r\n } finally {\r\n this.conditionsLoaded = true;\r\n }\r\n }\r\n\r\n async getBidsData() {\r\n this.bidsData = [];\r\n\r\n if (!this.isUserLoggedIn || !this.$permission.canViewBids()) {\r\n this.bidsLoaded = true;\r\n return;\r\n }\r\n\r\n this.bidsLoaded = false;\r\n\r\n try {\r\n const request = productBidsFetchService.requestData(this.details.wid);\r\n this.cancellationCallbacks.push(request.cancel);\r\n\r\n const result = await request.promise;\r\n this.bidsData = Object.freeze(result.productBids);\r\n } catch {\r\n } finally {\r\n this.bidsLoaded = true;\r\n }\r\n }\r\n\r\n async getProductDetailsPage() {\r\n this.productDetailsPage = null;\r\n\r\n try {\r\n const pageUrl = serverContext.settings ? `${serverContext.settings.productDetailsPage}` : null;\r\n if (!pageUrl) {\r\n loggingService.warn('Tried to fetch productDetailsPage but url is not present in server context!');\r\n return;\r\n }\r\n\r\n this.productDetailsPage = await contentApiService.getContent(pageUrl);\r\n } catch {\r\n } finally {\r\n this.updateMetaData();\r\n }\r\n }\r\n\r\n trackAddToBasketChange(deltaQuantity: number) {\r\n GTMService.trackProductQuantityChange(this.createTrackingProduct(), deltaQuantity);\r\n }\r\n\r\n get getTrackingState(): ProductTrackingState {\r\n if (!this.isUserLoggedIn) return ProductTrackingState.NotLoggedIn;\r\n if (!this.pricesLoaded || !this.stockLoaded) return ProductTrackingState.NoErpResponseYet;\r\n return this.isERPServiceAvailable ? ProductTrackingState.Complete : ProductTrackingState.ErpNotAvailable;\r\n }\r\n\r\n get productSchemaQuestionJson() {\r\n const bullets = this.details.bulletPoints || [];\r\n const faqs: FrequentlyAskedQuestionViewObject[] = this.details.frequentlyAskedQuestions || [];\r\n\r\n if (bullets.length + faqs.length < 1) return null;\r\n const mainFeatureBulletsMarkup = bullets.map(b => `
  • ${b}
  • `).join('');\r\n\r\n const labelValues = {\r\n ...this.productBaseLabelValues,\r\n mainFeaturesCount: bullets.length.toString()\r\n };\r\n const labelQuestionKey = 'Product.SEO.FAQ.Mainfeatures';\r\n const questionLabelMainFeature = dictionaryService.exists(labelQuestionKey) ? dictionaryService.getWithNamedValues(labelQuestionKey, labelValues, true) : '';\r\n const labelKeyAnswerPrefix = 'Product.SEO.FAQ.Mainfeatures.AnswerPrefix';\r\n const answerPrefixLabelMainFeature = dictionaryService.exists(labelKeyAnswerPrefix) ? dictionaryService.getWithNamedValues(labelKeyAnswerPrefix, labelValues, true) : '';\r\n const labelKeyAnswerPostfix = 'Product.SEO.FAQ.Mainfeatures.AnswerPostfix';\r\n const answerPostfixLabelMainFeature = dictionaryService.exists(labelKeyAnswerPostfix) ? dictionaryService.getWithNamedValues(labelKeyAnswerPostfix, labelValues, true) : '';\r\n\r\n const schemaBase = 'https://schema.org/';\r\n const schema: any = {\r\n '@context': schemaBase,\r\n '@type': 'FAQPage',\r\n mainEntity: []\r\n };\r\n if (bullets.length) {\r\n schema.mainEntity.push({\r\n '@type': 'Question',\r\n name: questionLabelMainFeature,\r\n acceptedAnswer: {\r\n '@type': 'Answer',\r\n text: `${answerPrefixLabelMainFeature}
      ${mainFeatureBulletsMarkup}
    ${answerPostfixLabelMainFeature}`\r\n }\r\n });\r\n }\r\n faqs.forEach((faq) => {\r\n schema.mainEntity.push({\r\n '@type': 'Question',\r\n name: faq.question,\r\n acceptedAnswer: {\r\n '@type': 'Answer',\r\n text: faq.answer\r\n }\r\n });\r\n });\r\n return schema;\r\n }\r\n\r\n get productSchemaJson() {\r\n const schemaBase = 'https://schema.org/';\r\n const schema: any = {\r\n '@context': schemaBase,\r\n '@type': 'Product',\r\n name: this.details.displayName,\r\n description: dictionaryService.get('Product.Schema.Description', [this.details.displayName]),\r\n image: this.schemaImages,\r\n sku: this.details.itemId,\r\n mpn: this.details.mpn,\r\n brand: {\r\n '@type': 'Brand',\r\n name: this.details.brand,\r\n logo: this.details.brandLogos?.brandLogoUrl250px\r\n },\r\n review: []\r\n };\r\n\r\n // Add the gtin property based on the EAN code length. EET says that the EAN can't be longer than 13 but can be shorter than it\r\n if (this.details.ean) {\r\n if (this.details.ean.length === 8) {\r\n schema.gtin8 = this.details.ean;\r\n } else if (this.details.ean.length === 13) {\r\n schema.gtin13 = this.details.ean;\r\n } else {\r\n schema.gtin = this.details.ean;\r\n }\r\n }\r\n\r\n // Only display offers if user is authenticated\r\n if (this.isUserLoggedIn) {\r\n let conditionType = schemaBase;\r\n\r\n if (this.details.conditionCode === 2) {\r\n conditionType += 'RefurbishedCondition';\r\n } else {\r\n conditionType += 'NewCondition';\r\n }\r\n\r\n schema.offers = {\r\n '@type': 'Offer',\r\n url: window.location.href,\r\n priceCurrency: this.priceData?.price.currency,\r\n price: this.priceData?.price.invariantCultureFormatted,\r\n itemCondition: conditionType,\r\n availability: this.schemaAvailability(),\r\n seller: {\r\n '@type': 'Organization',\r\n name: dictionaryService.get('Product.Schema.SellerName')\r\n }\r\n };\r\n } else {\r\n schema.offers = [];\r\n }\r\n\r\n return schema;\r\n }\r\n\r\n schemaAvailability() :string {\r\n let schemaType = 'https://schema.org/';\r\n const status = this.stockStatus();\r\n\r\n if (status === undefined) {\r\n schemaType += 'Discontinued';\r\n } else if (status === 2) {\r\n schemaType += 'Preorder';\r\n } else {\r\n schemaType += 'InStock';\r\n }\r\n\r\n return schemaType;\r\n }\r\n\r\n get schemaImages() :string[] {\r\n return this.details?.images.map((image, imageIndex) => imageIndex === 0 ? responsiveProductImageService.formatImageUrl(image.uri || '', responsiveProductImageService.ImageSizePlaceholderValues.W1400) : responsiveProductImageService.defaultImageUrl(image.uri));\r\n }\r\n\r\n priceOrStockLoaded(): void {\r\n if (!this.pricesLoaded || !this.stockLoaded) return;\r\n this.$emit('productComplete', this.createTrackingProduct());\r\n }\r\n\r\n createTrackingProduct(): TrackingProduct {\r\n return {\r\n ...this.details,\r\n price: this.priceData?.price,\r\n stockInfo: this.stockData,\r\n trackingState: this.getTrackingState\r\n };\r\n }\r\n\r\n get productBaseLabelValues(): NamedLabelArgument {\r\n const labelValues: NamedLabelArgument = {\r\n brand: this.details.brand,\r\n product: this.details.displayName,\r\n itemId: this.details.itemId,\r\n ean: this.details.ean || undefined,\r\n mpn: this.details.mpn,\r\n category: (this.details.breadCrumb.length >= 2 && this.details.breadCrumb[this.details.breadCrumb.length - 2]?.name) || undefined,\r\n subLine: this.details.subLine || undefined\r\n };\r\n return labelValues;\r\n }\r\n\r\n updateMetaData() :void {\r\n const status = this.stockStatus();\r\n let stockStatusLabel: string | null;\r\n if (botService.uaIsBot() || botService.uaIsPrerender()) {\r\n stockStatusLabel = null;\r\n } else if (status === undefined) {\r\n stockStatusLabel = dictionaryService.get('Product.SEO.Status.Discontinued');\r\n } else if (status === 2) {\r\n stockStatusLabel = dictionaryService.get('Product.SEO.Status.Preorder');\r\n } else {\r\n stockStatusLabel = dictionaryService.get('Product.SEO.Status.InStock');\r\n }\r\n\r\n const displayNameAndItemId = `${this.details.displayName}, ${this.details.itemId}`;\r\n\r\n const categoryValues = {};\r\n const breadcrumbs = this.details.breadCrumb.slice(0, this.details.breadCrumb.length - 1);\r\n breadcrumbs.map((cat, catIndex) => categoryValues[`categoryLevel${catIndex + 1}`] = cat.name);\r\n\r\n const labelValues: NamedLabelArgument = {\r\n ...this.productBaseLabelValues,\r\n status: stockStatusLabel || undefined,\r\n ...categoryValues\r\n };\r\n const titleLabelKey = 'Product.SEO.Title';\r\n const titleLabel = dictionaryService.get(titleLabelKey, [displayNameAndItemId]);\r\n const titleLabelTranslated = titleLabelKey && dictionaryService.getWithNamedValues(titleLabelKey, labelValues, true);\r\n\r\n const titleKeys = this.productDetailsPage?.seoTitles;\r\n const titleKeysTranslated = titleKeys && dictionaryService.getWithNamedValuesUntilString(titleKeys, labelValues);\r\n\r\n const descriptionLabelKey = 'Product.SEO.Description';\r\n const descriptionLabel = dictionaryService.get(descriptionLabelKey, [this.details.displayName, stockStatusLabel || '', this.details.ean || '', this.details.mpn || '']);\r\n const descriptionLabelTranslated = descriptionLabelKey && dictionaryService.getWithNamedValues(descriptionLabelKey, labelValues, true);\r\n\r\n const descriptionKey = this.productDetailsPage?.seoDescription;\r\n const descriptionKeyTranslated = descriptionKey && dictionaryService.getWithNamedValues(descriptionKey, labelValues, true, true);\r\n\r\n domService.setTitle(titleKeysTranslated || titleLabelTranslated || titleLabel);\r\n domService.setDescription(descriptionKeyTranslated || descriptionLabelTranslated || descriptionLabel);\r\n domService.setCanonicalUrl(this.details.canonical, false);\r\n domService.setOpenGraphImage(this.details?.images?.length ? { url: responsiveProductImageService.defaultImageUrl(this.details.images[0].uri), name: `${this.details.displayName}-${this.details.images[0].name}` } as Media : null);\r\n\r\n const expectedProductUrl = this.details?.canonical || null;\r\n botService.setPrerenderRedirectUrlsIfLocationIsWrong(expectedProductUrl);\r\n }\r\n\r\n stockStatus() {\r\n if (!this.stockData || this.stockData.length === 0) return;\r\n\r\n return this.stockData[0].locationType;\r\n }\r\n\r\n get isLimitedItem() {\r\n return this.details.blocking === 2; // LIMITED ITEM\r\n }\r\n\r\n get documents() {\r\n const limitDocuments = serverContext.isFeatureEnabled(Feature.LimitProductSheetToStaff) && !this.isStaff;\r\n const hasProductSheet = this.details.hasProductSheet;\r\n\r\n if (limitDocuments || !hasProductSheet) {\r\n return this.details.documents.filter(doc => doc.assetType !== AssetType.ProductSheet);\r\n }\r\n\r\n return this.details.documents;\r\n }\r\n\r\n async getPartnerLogos() {\r\n if (this.isUserLoggedIn || this.hasUserLoggedInBefore) return;\r\n\r\n const result = await Api.personalization.partnerLogos(\r\n this.details.brand ?? '',\r\n this.getClassificationCodeDictionary() ?? '',\r\n this.details.breadCrumb[0].id,\r\n this.details.mpn ?? '',\r\n this.details.itemId ?? '',\r\n this.details.pph ?? '',\r\n this.details.categoryId ?? '0',\r\n this.details.productGroup?.split(' ').shift() ?? '',\r\n this.$route.fullPath,\r\n adnuntiusService.getContactKey(),\r\n adnuntiusService.getCustomerKey());\r\n\r\n this.partnerLogos = Object.freeze(result);\r\n }\r\n\r\n get itemId(): string | null {\r\n if (serverContext.isExternalProductGuide) return null;\r\n return (this.details.mpn !== this.details.itemId && this.details.itemId) || null;\r\n }\r\n\r\n get mpn(): string | null {\r\n return this.details.mpn || null;\r\n }\r\n\r\n rewriteCampaignIconUrl(campaignIconUrl: string = ''): string {\r\n return campaignService.rewriteCampaignIconUrl(campaignIconUrl);\r\n }\r\n\r\n async loadProductSeries() {\r\n if (this.details.wid && this.hasProductSeries) {\r\n this.productSeries = null;\r\n try {\r\n const result = await Api.product.series(this.details.wid, this.details.productSeries);\r\n this.productSeries = Object.freeze(result);\r\n this.productSeries.values.map(series => {\r\n series.values.map(seriesValue => {\r\n if (seriesValue.isSelected) {\r\n series.selectedSeries = seriesValue;\r\n }\r\n });\r\n });\r\n this.getStockData();\r\n } catch {\r\n } finally {\r\n this.productSeriesLoaded = true;\r\n }\r\n }\r\n }\r\n\r\n created() {\r\n this.getPriceData();\r\n this.getStockData();\r\n this.getConditions();\r\n this.getBidsData();\r\n this.getProductDetailsPage();\r\n this.getPartnerLogos();\r\n this.loadProductSeries();\r\n }\r\n\r\n cancelOutstandingXHRRequests() {\r\n this.cancellationCallbacks.forEach(x => x && x());\r\n }\r\n\r\n destroyed() {\r\n this.cancelOutstandingXHRRequests();\r\n }\r\n\r\n @Watch('details')\r\n onDetailsChange(\r\n current: ProductDetailsViewModel,\r\n previous: ProductDetailsViewModel\r\n ) {\r\n if (current.wid !== previous?.wid) {\r\n this.getPriceData();\r\n this.getStockData();\r\n this.getConditions();\r\n this.getBidsData();\r\n }\r\n }\r\n\r\n @Watch('isUserLoggedIn')\r\n onLoginStateChange(now: boolean, before: boolean) {\r\n if (now && !before) {\r\n this.getPriceData();\r\n this.getBidsData();\r\n this.getStockData();\r\n }\r\n }\r\n\r\n openReportOverlay() {\r\n productFeedbackOverlayService.show(this.details);\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetails.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetails.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetails.vue?vue&type=template&id=2e525cb0&scoped=true&\"\nimport script from \"./ProductDetails.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetails.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductDetails.vue?vue&type=style&index=0&id=2e525cb0&lang=less&scoped=true&\"\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 \"2e525cb0\",\n null\n \n)\n\nexport default component.exports","const productDetailsRegEx = /-wid-([A-Za-z0-9]*)$/i;\r\n\r\nfunction getProductWidFromUrl(url: string): string | null {\r\n const match = url.match(productDetailsRegEx);\r\n if (match === null || match.length !== 2) return null;\r\n const productId = match[1];\r\n return productId;\r\n}\r\n\r\nfunction matchingRegEx(): RegExp {\r\n return productDetailsRegEx;\r\n}\r\n\r\nexport default {\r\n getProductWidFromUrl,\r\n matchingRegEx\r\n};\r\n","\n\n\n\n\n\n\n\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport Api from '@/project/http/Api.service';\r\nimport ProductDetails from '@/project/product/product-details/ProductDetails.vue';\r\nimport productDetailsUrlService from './productDetailsUrl.service';\r\nimport { ProductDetailsViewModel } from '@/types/apiServerContract';\r\nimport appStore from '@/core/app/app.store';\r\nimport gtmService, { ProductTrackingState, TrackingProduct } from '@/project/tracking/gtm/GTM.service';\r\nimport { Route } from 'vue-router';\r\nimport domService from '@/core/dom/dom.service';\r\nimport errorCodeService from '@/core/errorCode.service';\r\nimport { NOT_FOUND } from 'http-status-codes';\r\nimport SpinnerOverlay from '@/project/spinners/SpinnerOverlay.vue';\r\n\r\n@Component({\r\n components: { ProductDetails, SpinnerOverlay },\r\n beforeRouteEnter: (to: Route, from: Route, next) => {\r\n next();\r\n }\r\n})\r\nexport default class ProductDetailsPage extends Vue {\r\n details: ProductDetailsViewModel | null = null;\r\n hasTrackedPage = false;\r\n loading: boolean = false;\r\n\r\n created() {\r\n this.setup();\r\n }\r\n\r\n @Watch('$route')\r\n onRouteChange(to: Route, from: Route) {\r\n if (to.path === from.path) return;\r\n this.setup();\r\n }\r\n\r\n async setup() {\r\n if (!this.hasTrackedPage && this.details) {\r\n gtmService.trackProductDetailsPage({\r\n ...this.details,\r\n stockInfo: null,\r\n price: undefined,\r\n trackingState: ProductTrackingState.NoErpResponseYet\r\n });\r\n }\r\n\r\n this.hasTrackedPage = false;\r\n const productWid = productDetailsUrlService.getProductWidFromUrl(this.$route.path);\r\n if (!productWid) return; // Probably because we're leaving page...\r\n\r\n this.loading = true;\r\n\r\n try {\r\n const result = await Api.product.details(productWid);\r\n this.details = Object.freeze(result);\r\n appStore.setBreadcrumb(result.breadCrumb);\r\n } catch (error) {\r\n appStore.setBreadcrumb([]);\r\n const logMessage = `ProductDetailsPage: A page with the following 'productWid' was not found: ${productWid}`;\r\n errorCodeService.handleErrorCodes(NOT_FOUND, logMessage, productWid);\r\n } finally {\r\n this.loading = false;\r\n }\r\n\r\n if (this.details?.alternativeUrls) {\r\n domService.setHreflang(this.details?.alternativeUrls);\r\n }\r\n }\r\n\r\n trackPage(product: TrackingProduct) {\r\n // Prices and stock ready\r\n gtmService.trackProductDetailsPage(product);\r\n this.hasTrackedPage = true;\r\n }\r\n}\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsPage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsPage.vue?vue&type=template&id=5332c8c8&\"\nimport script from \"./ProductDetailsPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsPage.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSlider.vue?vue&type=style&index=0&id=a74bdf38&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSlider.vue?vue&type=style&index=0&id=a74bdf38&lang=less&scoped=true&\"","\r\nimport Vue, { CreateElement } from 'vue';\r\nimport { Component, Prop } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class SmartHeadline extends Vue {\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n })\r\n styleAsH1!: boolean;\r\n\r\n @Prop({ required: false, type: String, default: 'h2', validator: (value: string) => ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(value) })\r\n level!: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\r\n\r\n render(h: CreateElement) {\r\n const data = {\r\n ...this.$props,\r\n class: {\r\n h1: this.styleAsH1\r\n }\r\n };\r\n return h(this.level, data, this.$slots.default);\r\n }\r\n}\r\n","var render, staticRenderFns\nimport script from \"./SmartHeadline.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmartHeadline.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmartHeadline.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmartHeadline.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{staticClass:\"tab-header flex-shrink-0\"},[_c('div',{staticClass:\"flex flex-row flex-wrap\",class:_vm.headerClass},_vm._l((_vm.tabs),function(tab){return _c('button',{key:tab.name,staticClass:\"tab-button cursor-pointer\",class:{ 'active': tab.name === _vm.activeTab.name },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.toggle(tab.name)}}},[_vm._t(\"header\",function(){return [_vm._v(\" \"+_vm._s(tab.name)+\" \")]},{\"title\":tab.name,\"active\":tab.name === _vm.activeTab.name})],2)}),0)]),_vm._t(\"sub-content\"),_c('div',{staticClass:\"tab-content\",class:_vm.contentClass},[_vm._t(\"default\")],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport Tab from './Tab.vue';\r\nimport urlHelperService from '@/core/urlHelper.service';\r\nimport bus from '@/core/bus';\r\nimport { ProductTrackerProcessBatchKey } from '@/project/tracking/gtm/ProductListTracker.vue';\r\n\r\n@Component\r\nexport default class TabsContainer extends Vue {\r\n activeTab: Tab | null = null;\r\n\r\n tabs: Tab[] = []\r\n\r\n @Prop(String) headerClass!: string\r\n @Prop(String) contentClass!: string\r\n\r\n toggle(name: string) {\r\n if (this.activeTab && this.activeTab.name !== name) {\r\n this.$emit('changed', name);\r\n }\r\n\r\n for (const tab of this.tabs) {\r\n if (tab.name === name) {\r\n this.activeTab = tab;\r\n tab.toggle(true);\r\n } else {\r\n tab.toggle(false);\r\n }\r\n }\r\n bus.emit(ProductTrackerProcessBatchKey);\r\n }\r\n\r\n setup() {\r\n this.tabs = this.$children.filter(x => x.$options.name === 'Tab') as Tab[];\r\n if (this.tabs.length === 0) {\r\n return;\r\n }\r\n\r\n const hash = urlHelperService.getHash();\r\n if (hash) {\r\n const activeTab = this.tabs.find(x => x.hash === hash);\r\n if (activeTab) {\r\n this.activeTab = activeTab;\r\n activeTab.toggle(true);\r\n }\r\n }\r\n\r\n if (!this.activeTab) {\r\n for (const tab of this.tabs) {\r\n if (tab.isActive) {\r\n this.activeTab = tab;\r\n break;\r\n }\r\n }\r\n\r\n // Always show atleast 1 tab\r\n if (!this.activeTab) {\r\n const activeTab = this.tabs[0];\r\n this.activeTab = activeTab;\r\n activeTab.toggle(true);\r\n }\r\n }\r\n\r\n this.$emit('init', this.activeTab.name);\r\n }\r\n\r\n mounted() {\r\n this.setup();\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Tabs.vue?vue&type=template&id=36979eda&\"\nimport script from \"./Tabs.vue?vue&type=script&lang=ts&\"\nexport * from \"./Tabs.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","import { BrandLogoViewModel, ImageViewObject, VideoViewObject } from '@/types/apiServerContract';\r\nimport { AbstractModalService } from '@/core/modals/AbstractModalService';\r\n\r\nclass ProductDetailsMediaOverlayService extends AbstractModalService {\r\n public show(\r\n images: ImageViewObject[],\r\n videos: VideoViewObject[],\r\n brandLogos: BrandLogoViewModel | undefined,\r\n brandName: string | undefined,\r\n brandUrl: string,\r\n aspectRatio: number,\r\n productName: string,\r\n thumbs: any, // Swiper\r\n activeIndex: number) {\r\n return this.showModal({\r\n component: () => import(\r\n /* webpackPrefetch: true */\r\n '@/project/product/product-details/ProductDetailsMediaOverlay.vue'),\r\n componentAttrs: {\r\n images,\r\n videos,\r\n brandLogos,\r\n brandName,\r\n brandUrl,\r\n aspectRatio,\r\n productName,\r\n thumbs,\r\n activeIndex\r\n },\r\n options: {\r\n contentAutoScroll: false,\r\n contentMaxHeight: false,\r\n disableBodyScroll: true,\r\n placement: 'center',\r\n showCloseButton: true,\r\n usePanelWrapper: false,\r\n wide: true\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default new ProductDetailsMediaOverlayService();\r\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSeries.vue?vue&type=style&index=0&lang=less&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsSeries.vue?vue&type=style&index=0&lang=less&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dropdown.vue?vue&type=style&index=0&id=7551ad1c&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dropdown.vue?vue&type=style&index=0&id=7551ad1c&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVideo)?_c('article',{staticClass:\"w-full h-full overflow-hidden relative\"},[_c('VideoRender',{attrs:{\"video-url\":_vm.url,\"size\":_vm.productMediaSize,\"mode\":_vm.mediaMode}})],1):_c('ResponsiveProductImage',{attrs:{\"image-url\":_vm.url,\"size\":_vm.productMediaSize,\"alt\":_vm.imageName,\"is-first\":_vm.isFirst}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport ResponsiveProductImage from '@/project/product/image/ResponsiveProductImage.vue';\r\nimport VideoRender from '@/project/video/ProductVideoRender.vue';\r\nimport { XS, SM, MD, MIN_LG } from '@/core/config/breakpointConfig';\r\nimport responsiveProductImageService from '@/project/product/image/responsiveProductImage.service';\r\n\r\n@Component({\r\n components: { ResponsiveProductImage, VideoRender }\r\n})\r\nexport default class ProductDetailsImageVideo extends Vue {\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) url!: string;\r\n\r\n @Prop({\r\n type: String,\r\n validator: (value: string | undefined) => value === undefined || ['thumbnail', 'pdp', 'fullscreen'].includes(value)\r\n })\r\n mediaMode!: 'thumbnail' | 'pdp' | 'fullscreen';\r\n\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n }) isVideo!: boolean;\r\n\r\n @Prop({\r\n type: String,\r\n default: ''\r\n }) imageName!: string;\r\n\r\n @Prop({\r\n type: Boolean,\r\n default: false\r\n }) isFirst!: boolean;\r\n\r\n get productMediaSize(): string | object {\r\n switch (this.mediaMode) {\r\n case 'thumbnail':\r\n return responsiveProductImageService.ImageSizePlaceholderValues.W200;\r\n case 'pdp':\r\n return responsiveProductImageService.ImageSizePlaceholderValues.W700;\r\n case 'fullscreen':\r\n return {\r\n [XS]: responsiveProductImageService.ImageSizePlaceholderValues.W300,\r\n [SM]: responsiveProductImageService.ImageSizePlaceholderValues.W700,\r\n [MD]: responsiveProductImageService.ImageSizePlaceholderValues.W700,\r\n [MIN_LG]: responsiveProductImageService.ImageSizePlaceholderValues.W1400\r\n };\r\n }\r\n throw new Error('unknown image-mode: ' + this.mediaMode);\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsImageVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsImageVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductDetailsImageVideo.vue?vue&type=template&id=15fda8d8&\"\nimport script from \"./ProductDetailsImageVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductDetailsImageVideo.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetails.vue?vue&type=style&index=0&id=2e525cb0&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetails.vue?vue&type=style&index=0&id=2e525cb0&lang=less&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelations.vue?vue&type=style&index=0&id=031f138d&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductDetailsRelations.vue?vue&type=style&index=0&id=031f138d&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"videoWrapper\",staticClass:\"video relative\",class:_vm.cssClasses},[(_vm.isVimeoVideo)?_c('vimeo-video',{staticClass:\"outline-none\",attrs:{\"url\":_vm.videoUrl,\"mode\":_vm.screenMode,\"allow-controls\":_vm.allowControls,\"start-video\":_vm.startVideo}}):(_vm.isYoutubeVideo)?_c('youtube-video',{staticClass:\"outline-none\",attrs:{\"url\":_vm.videoUrl,\"mode\":_vm.screenMode,\"allow-controls\":_vm.allowControls,\"start-video\":_vm.startVideo}}):_c('native-video',{staticClass:\"outline-none\",attrs:{\"url\":_vm.videoUrl,\"allow-controls\":_vm.allowControls,\"start-video\":_vm.startVideo}}),(_vm.screenMode !== 'fullscreen')?_c('span',{staticClass:\"play absolute inset-0 m-auto\"},[_c('CIcon',{attrs:{\"name\":\"play\",\"width\":_vm.iconWidth,\"height\":_vm.iconHeight}}),_c('span',{staticClass:\"sr-only\"},[_vm._v(\"Play\")])],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('video',{attrs:{\"src\":_vm.url,\"preload\":\"metadata\",\"controls\":_vm.allowControls,\"autoplay\":_vm.startVideo}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\r\nimport { Vue, Prop } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component\r\n\r\nexport default class NativeVideo extends Vue {\r\n @Prop({ type: String, required: true })\r\n url!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) startVideo!: boolean;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) allowControls!: boolean;\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductNativeVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductNativeVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductNativeVideo.vue?vue&type=template&id=3d72ca58&\"\nimport script from \"./ProductNativeVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductNativeVideo.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullscreenMode),expression:\"!fullscreenMode\"}]},[_c('div',{ref:\"videoMount\"})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullscreenMode),expression:\"fullscreenMode\"}]},[_c('div',{ref:\"videoPlayMount\",staticClass:\"absolute top-0 left-0 z-1\"})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Prop, Vue } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\nimport VimeoPlayer from '@vimeo/player';\r\n\r\n@Component\r\nexport default class ProductVimeoVideo extends Vue {\r\n @Prop({ type: String, required: true })\r\n url!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) mode!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) startVideo!: boolean;\r\n\r\n $refs!: {\r\n videoMount?: HTMLElement,\r\n videoPlayMount?: HTMLElement,\r\n }\r\n\r\n mounted() {\r\n // Setup the fullscreen video mount\r\n this.$nextTick(() => {\r\n if (this.fullscreenMode) {\r\n if (this.$refs.videoPlayMount) {\r\n const playOptions = {\r\n url: this.url,\r\n controls: true,\r\n autoplay: this.startVideo\r\n };\r\n\r\n // eslint-disable-next-line no-new\r\n new VimeoPlayer(this.$refs.videoPlayMount, playOptions);\r\n }\r\n } else {\r\n if (this.$refs.videoMount) {\r\n const posterOptions = {\r\n url: this.url,\r\n controls: false,\r\n background: false,\r\n width: 165\r\n };\r\n\r\n // eslint-disable-next-line no-new\r\n new VimeoPlayer(this.$refs.videoMount, posterOptions);\r\n }\r\n }\r\n });\r\n }\r\n\r\n get fullscreenMode(): boolean {\r\n return this.mode === 'fullscreen';\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductVimeoVideo.vue?vue&type=template&id=5764f86c&\"\nimport script from \"./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.allowControls)?_c('div',[_c('iframe',{attrs:{\"src\":_vm.youtubeUrl,\"frameborder\":\"0\",\"allowfullscreen\":\"\"}})]):_c('img',{attrs:{\"src\":_vm.videoImage,\"alt\":\"\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component\r\n\r\nexport default class ProductYoutubeVideo extends Vue {\r\n @Prop({ type: String, required: true })\r\n url!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) mode!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) startVideo!: boolean;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) allowControls!: boolean;\r\n\r\n get videoId() {\r\n const youtubeRegex = /^.*((youtube\\/)|(youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#&?]*).*/;\r\n const match = this.url.match(youtubeRegex);\r\n\r\n return (match && match[8].length >= 11) ? match[8].slice(0, 11) : 'default';\r\n }\r\n\r\n // Fixes iframe same-origin issues: https://stackoverflow.com/questions/41522652/refused-to-display-url-in-a-frame-because-it-set-x-frame-options-to-sameori/49330250#49330250\r\n get youtubeUrl() {\r\n return `https://youtube.com/embed/${this.videoId}?autoplay=${this.startVideo ? 1 : 0}`;\r\n }\r\n\r\n get videoImage() : string {\r\n return `https://i.ytimg.com/vi/${this.videoId}/${this.imageResolution}.jpg`;\r\n }\r\n\r\n get imageResolution() : string {\r\n return this.mode === 'thumbnail' ? 'mqdefault' : 'maxresdefault';\r\n }\r\n}\r\n","export enum VideoType {\r\n Vimeo = 'vimeo',\r\n Youtube = 'youtu',\r\n Native = 'native'\r\n}\r\n\r\nexport const supportedSizes = ['200', '300', '700', '1400'];\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductYoutubeVideo.vue?vue&type=template&id=38f7df90&\"\nimport script from \"./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"\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\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Prop, Vue } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\nimport NativeVideo from './ProductNativeVideo.vue';\r\nimport VimeoVideo from './ProductVimeoVideo.vue';\r\nimport YoutubeVideo from './ProductYoutubeVideo.vue';\r\nimport { supportedSizes, VideoType } from './constants';\r\nimport breakpointState from '@/core/responsive/breakpoints/breakpointsState.observable';\r\nimport { XS } from '@/core/config/breakpointConfig';\r\n\r\n@Component({\r\n components: { NativeVideo, VimeoVideo, YoutubeVideo }\r\n})\r\n\r\nexport default class ProductVideoRender extends Vue {\r\n @Prop({ type: String, required: true })\r\n videoUrl!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) mode!: 'thumbnail' | 'pdp' | 'fullscreen';\r\n\r\n @Prop({\r\n type: [String, Object],\r\n required: true,\r\n validator: (value: string | object) => {\r\n const valuesToCheck = typeof value === 'string' ? [value] : Object.values(value);\r\n return valuesToCheck.every(val => supportedSizes.includes(val));\r\n }\r\n })\r\n size!: string | { [breakpoint: string]: string};\r\n\r\n get videoType(): VideoType {\r\n let videoType: VideoType;\r\n\r\n if (this.videoUrl.indexOf(VideoType.Vimeo) !== -1) {\r\n videoType = VideoType.Vimeo;\r\n } else if (this.videoUrl.indexOf(VideoType.Youtube) !== -1) {\r\n videoType = VideoType.Youtube;\r\n } else {\r\n videoType = VideoType.Native;\r\n }\r\n\r\n return videoType;\r\n }\r\n\r\n get isYoutubeVideo() {\r\n return this.videoType === VideoType.Youtube;\r\n }\r\n\r\n get isVimeoVideo() {\r\n return this.videoType === VideoType.Vimeo;\r\n }\r\n\r\n get screenMode(): string {\r\n if (this.isMobile) return 'fullscreen';\r\n\r\n switch (this.mode) {\r\n case 'thumbnail':\r\n return 'thumbnail';\r\n case 'pdp':\r\n return 'pdp';\r\n case 'fullscreen':\r\n return 'fullscreen';\r\n }\r\n throw new Error('unknown screen-mode: ' + this.mode);\r\n }\r\n\r\n get isMobile() {\r\n return breakpointState.isBreakpointActive(XS);\r\n }\r\n\r\n get cssClasses(): string {\r\n return `${this.screenMode} ${this.videoType}`;\r\n }\r\n\r\n get iconWidth(): string {\r\n return this.screenMode === 'thumbnail' ? '13' : '26';\r\n }\r\n\r\n get iconHeight(): string {\r\n return this.screenMode === 'thumbnail' ? '16' : '32';\r\n }\r\n\r\n get allowControls() {\r\n return this.screenMode === 'fullscreen' || this.isMobile;\r\n }\r\n\r\n $refs!: Vue['$refs'] & {\r\n videoWrapper: HTMLElement\r\n }\r\n\r\n autoplay: boolean | null = false;\r\n\r\n mounted() {\r\n const videoWrapper = this.$refs.videoWrapper;\r\n const visibleState = this.isScrolledIntoView(videoWrapper);\r\n this.autoplay = visibleState;\r\n }\r\n\r\n isScrolledIntoView(el: HTMLElement) {\r\n const parent = el.closest('.swiper-container');\r\n if (!parent) return false;\r\n const rect = el.getBoundingClientRect();\r\n const parentRect = parent.getBoundingClientRect();\r\n const isVisible = (rect.top >= parentRect.top) && (rect.bottom <= parentRect.bottom) && (rect.left >= parentRect.left) && (rect.right <= parentRect.right);\r\n return isVisible;\r\n }\r\n\r\n get startVideo() {\r\n return this.screenMode === 'fullscreen' && this.autoplay;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductVideoRender.vue?vue&type=template&id=145baeaa&scoped=true&\"\nimport script from \"./ProductVideoRender.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductVideoRender.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductVideoRender.vue?vue&type=style&index=0&id=145baeaa&lang=less&scoped=true&\"\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 \"145baeaa\",\n null\n \n)\n\nexport default component.exports","import { PageData } from '@/types/contentServerContract';\r\nimport httpService from '@/core/http/http.service';\r\nimport serverContext from '@/core/serverContext.service';\r\n\r\nclass ContentApiService {\r\n // Can throw a HttpCancelError Error if a new call is initiated while not done\r\n async getPage(relativeUrl: string): Promise {\r\n return httpService.getPage(this.ensureCulture(relativeUrl));\r\n }\r\n\r\n // Can NOT throw a HttpCancelError Error if a new call is initiated while not done\r\n async getPageParallel(relativeUrl: string): Promise {\r\n return httpService.getPageParallel(this.ensureCulture(relativeUrl));\r\n }\r\n\r\n // Can NOT throw a HttpCancelError Error if a new call is initiated while not done\r\n async getContent(relativeUrl: string): Promise {\r\n const result = await httpService.getPageParallel(this.ensureCulture(relativeUrl));\r\n return result.jsonContent.content as T;\r\n }\r\n\r\n ensureCulture(relativeUrl: string): string {\r\n if (serverContext.isPreview) {\r\n return `${serverContext.contentHost}${relativeUrl}&getcontent=true`;\r\n } else if (relativeUrl.includes(serverContext.siteInfo.url!)) {\r\n return `${serverContext.contentHost}${relativeUrl}`;\r\n } else {\r\n return `${serverContext.contentHost}${serverContext.siteInfo.url}${relativeUrl}`;\r\n }\r\n }\r\n}\r\n\r\nexport default new ContentApiService();\r\n"],"sourceRoot":""}