{"version":3,"mappings":"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","names":["_sfc_main","AccordionItemFi","CloudImageFi","RichtextFi","breakpointMixin","catalogMixin","_a","approvals","_b","approval","media","icons","o","_hoisted_1","_hoisted_4","_hoisted_6","_hoisted_7","$options","_createBlock","_component_accordion_item_fi","_createTextVNode","_toDisplayString","_ctx","_createElementVNode","_openBlock","_createElementBlock","_hoisted_2","_createVNode","_component_richtext_fi","_createCommentVNode","_hoisted_3","_hoisted_5","_withCtx","_Fragment","_renderList","item","_hoisted_8","icon","_component_cloud_image_fi","ArrowIcon","CarouselFi","CarouselSlideFi","mapGetters","sliderWidth","splideSlides","sum","el","idx","findClosestIndex","arr","targetValue","acc","current","index","currentDifference","minDifference","splideSlideEdgesRight","sliderEdgeRight","splide","_hoisted_9","$data","_normalizeClass","args","_component_arrow_icon","$props","_component_carousel_fi","_component_carousel_slide_fi","ButtonFi","GridColumnsFi","IconFi","AssemblyInstructionsMediaSliderFi","eventHubMixin","withMedia","assemblyMedia","_c","document","isOpen","_component_grid_columns_fi","_component_button_fi","_component_icon_fi","_component_assembly_instructions_media_slider_fi","VideoPlayerFi","mediaItem","_component_video_player_fi","TabNavigationFi","DocumentDownloadItemsFi","catalogApprovals","catalogDocuments","isChild","childIds","children","id","childData","a","sortedChildren","b","groups","catalogDocument","group","sortedGroups","tab","_cache","$event","_component_tab_navigation_fi","_createSlots","_component_document_download_items_fi","SsrCloudImageFi","regularItemTypes","videoId","imageUrl","_component_ssr_cloud_image_fi","CatalogSliderItemFi","DialogModalFi","catalogTextListMixin","artNr","productName","carouselThumbnails","settings","length","_component_catalog_slider_item_fi","_component_dialog_modal_fi","importFileSaver","__vitePreload","LoadingIndicatorWrapper","url","response","FileSaver","fileName","_component_loading_indicator_wrapper","ProductTeasersFi","fields","ProductId","_component_product_teasers_fi"],"ignoreList":[],"sources":["../../src/components/catalog-accordions/accordion-application-authorisation/AccordionApplicationAuthorisationFi.vue","../../src/components/catalog-accordions/accordion-assembly-instructions/assembly-instructions-media-slider/AssemblyInstructionsMediaSliderFi.vue","../../src/components/catalog-accordions/accordion-assembly-instructions/AccordionAssemblyInstructionsFi.vue","../../src/components/catalog-accordions/accordion-benefits-description/AccordionBenefitsDescriptionFi.vue","../../src/components/catalog-accordions/accordion-document-downloads/AccordionDocumentDownloadsFi.vue","../../src/components/catalog-slider-fi/CatalogSliderItemFi.vue","../../src/components/catalog-slider-fi/CatalogSliderFi.vue","../../src/components/product-detail/media-download-dialog-fi/MediaDownloadDialogFi.vue","../../src/components/product-items-slider-fi/ProductItemsSliderFi.vue"],"sourcesContent":["<template>\n <accordion-item-fi\n v-if=\"hasTextList || approvals || icons\"\n class=\"accordion-application-authorisation-fi\"\n header-tag=\"h3\"\n ignore-others\n scroll-to\n >\n <template #header>\n {{ $dict.get('product-Catalog.Accordions.Application-And-Authorisation') }}\n </template>\n <template #content>\n <div class=\"accordion-application-authorisation-fi__content\">\n <div\n v-if=\"textListValue(textList, 'KAT_ANWENDUNG_GEN')\"\n class=\"accordion-application-authorisation-fi__column accordion-application-authorisation-fi--application\"\n >\n <richtext-fi\n class=\"accordion-application-authorisation-fi__text\"\n :html-content=\"{ value: textListValue(textList, 'KAT_ANWENDUNG_GEN') }\"\n />\n </div>\n <div\n v-if=\"textListValue(textList, 'KAT_BAUSTOFF_GEN')\"\n class=\"accordion-application-authorisation-fi__column accordion-application-authorisation-fi--material\"\n >\n <richtext-fi\n class=\"accordion-application-authorisation-fi__text\"\n :html-content=\"{ value: textListValue(textList, 'KAT_BAUSTOFF_GEN') }\"\n />\n <!-- eslint-disable vue/no-v-html -->\n <span\n class=\"accordion-application-authorisation-fi__material-disclaimer\"\n v-html=\"materialDisclaimer\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </div>\n <div\n v-if=\"approvals\"\n class=\"accordion-application-authorisation-fi__column accordion-application-authorisation-fi--approval\"\n >\n <div class=\"accordion-application-authorisation-fi__text\">\n <div class=\"h10\">\n {{ $dict.get('product-Catalog.Accordions.Authorisation') }}\n </div>\n\n <richtext-fi>\n <ul>\n <li\n v-for=\"item in approvals\"\n :key=\"item\"\n >\n {{ item }}\n </li>\n </ul>\n </richtext-fi>\n </div>\n </div>\n <div\n v-if=\"icons\"\n class=\"accordion-application-authorisation-fi__column accordion-application-authorisation-fi--icons\"\n >\n <div\n v-for=\"icon in icons\"\n :key=\"icon.Url\"\n class=\"accordion-application-authorisation-fi__icon\"\n >\n <cloud-image-fi\n :src=\"icon.Url\"\n :alt=\"icon.Label\"\n height=\"45\"\n params=\"func=bound\"\n do-not-replace-url\n />\n </div>\n </div>\n </div>\n </template>\n </accordion-item-fi>\n</template>\n\n<script>\nimport { AccordionItemFi, CloudImageFi, RichtextFi } from 'atoms';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport catalogMixin from 'mixins/catalogMixin';\n\nexport default {\n name: 'AccordionApplicationAuthorisationFi',\n components: {\n AccordionItemFi,\n CloudImageFi,\n RichtextFi,\n },\n mixins: [breakpointMixin, catalogMixin],\n props: {\n catalogData: {\n type: Object,\n default: () => ({}),\n },\n },\n computed: {\n textList() {\n return this.catalogData?.TextList;\n },\n hasTextList() {\n return (\n this.textListValue(this.textList, 'KAT_ANWENDUNG_GEN') ||\n this.textListValue(this.textList, 'KAT_BAUSTOFF_GEN')\n );\n },\n materialDisclaimer() {\n return this.$dict\n .get('product-Catalog.Block-Labels.Application-and-Permission.Materials-Disclaimer', [\n this.$fischer.pages.downloadCenter().url,\n ])\n .replace('{url}', this.$fischer.pages.downloadCenter().url);\n },\n approvals() {\n const approvals = [];\n\n if (this.catalogData?.Documents?.Approvals) {\n this.catalogData.Documents.Approvals.forEach((approval) => {\n if (approval.nr) {\n approvals.push(approval.nr);\n }\n });\n\n if (approvals.length) {\n return approvals;\n }\n }\n\n return null;\n },\n icons() {\n const media = this.catalogData?.Media;\n if (!media) {\n return null;\n }\n\n const icons = media.filter(\n (o) => o.OutputType === 'PR' && (o.Type === 'Icon' || o.Type === 'Logo'),\n );\n\n if (!icons.length) {\n return null;\n }\n\n return icons;\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './accordion-application-authorisation-fi.scss';\n</style>\n","<template>\n <div class=\"assembly-instructions-media-slider-fi\">\n <div class=\"assembly-instructions-media-slider-fi__slider-controls\">\n <div\n v-if=\"isLG\"\n :set=\"\n (sliders = {\n forwardDisabled: isFirstSlide,\n backDisabled: isLastSlide,\n })\n \"\n class=\"assembly-instructions-media-slider-fi__slider-arrows\"\n >\n <template v-if=\"isSlider\">\n <span\n :class=\"{\n 'assembly-instructions-media-slider-fi__slider-prev': true,\n 'assembly-instructions-media-slider-fi__slider--inactive': sliders.forwardDisabled,\n }\"\n :aria-disabled=\"sliders.forwardDisabled\"\n role=\"button\"\n @click=\"prevSlide\"\n >\n <arrow-icon />\n </span>\n <span\n :class=\"{\n 'assembly-instructions-media-slider-fi__slider-next': true,\n 'assembly-instructions-media-slider-fi__slider--inactive': sliders.backDisabled,\n }\"\n :aria-disabled=\"sliders.backDisabled\"\n role=\"button\"\n @click=\"nextSlide\"\n >\n <arrow-icon />\n </span>\n </template>\n </div>\n <div\n v-else\n class=\"assembly-instructions-media-slider-fi__indication\"\n >\n <span class=\"assembly-instructions-media-slider-fi__indication--current\">\n {{ visibleCount }}\n </span>\n <span class=\"assembly-instructions-media-slider-fi__indication--total\">\n / {{ mediaItems.length }}\n </span>\n </div>\n </div>\n\n <carousel-fi\n v-if=\"mediaItems.length\"\n ref=\"carousel\"\n v-intersect.once=\"onIntersect\"\n class=\"assembly-instructions-media-slider-fi__slider\"\n :settings=\"sliderSettings\"\n no-arrows\n @after-change=\"onAfterChange\"\n >\n <carousel-slide-fi\n v-for=\"(media, index) in mediaItems\"\n :key=\"media.Url\"\n class=\"fi-relative\"\n >\n <span class=\"assembly-instructions-media-slider-fi__badge\">\n {{ index + 1 }}\n </span>\n <cloud-image-fi\n :src=\"media.Url\"\n :alt=\"media.label\"\n :sizes=\"{\n xxs: { h: 115 },\n xs: { h: 115 },\n sm: { h: 125 },\n md: { h: 142 },\n lg: { h: 142 },\n xl: { h: 142 },\n }\"\n params=\"func=bound\"\n do-not-replace-url\n />\n </carousel-slide-fi>\n </carousel-fi>\n </div>\n</template>\n\n<script>\nimport { ArrowIcon, CarouselFi, CarouselSlideFi, CloudImageFi } from 'atoms';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'AssemblyInstructionsMediaSliderFi',\n components: {\n ArrowIcon,\n CarouselFi,\n CarouselSlideFi,\n CloudImageFi,\n },\n mixins: [breakpointMixin],\n props: {\n mediaItems: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n isSlider: false,\n isFirstSlide: true,\n isLastSlide: false,\n visibleCount: 1,\n visibleItems: 1,\n slideGapInPixels: 24,\n };\n },\n computed: {\n ...mapGetters({\n windowDimensions: 'layout/getWindowDimensions',\n }),\n sliderSettings() {\n return {\n drag: this.isSlider,\n autoWidth: true,\n rewind: false,\n pagination: false,\n perPage: this.visibleItems,\n perMove: 1, // OR 'this.visibleItems' to scroll all visible items away\n gap: this.slideGapInPixels,\n };\n },\n },\n watch: {\n windowDimensions: {\n deep: true,\n handler() {\n this.determineVisibleItems(this.$refs.carousel?.$el?.offsetWidth);\n },\n },\n },\n methods: {\n onIntersect() {\n this.determineVisibleItems(this.$refs.carousel?.$el?.offsetWidth);\n },\n determineVisibleItems(sliderWidth) {\n if (!sliderWidth) {\n return;\n }\n\n const splideSlides = this.$refs.carousel.$refs.carousel.splide.Components.Elements.slides;\n\n let sum = 0;\n splideSlides.every((el, idx) => {\n sum += el.offsetWidth;\n if (idx < splideSlides.length - 1) {\n sum += this.slideGapInPixels;\n }\n\n this.isSlider = sum > sliderWidth;\n this.visibleItems = idx;\n\n return !this.isSlider;\n });\n\n if (!this.isLG) {\n this.updateCurrentItemCount();\n }\n },\n updateCurrentItemCount() {\n const findClosestIndex = (arr, targetValue) => {\n return arr.reduce((acc, current, index) => {\n const currentDifference = Math.abs(current - targetValue);\n const minDifference = Math.abs(arr[acc] - targetValue);\n\n return currentDifference < minDifference ? index : acc;\n }, 0);\n };\n\n const splideSlides = this.$refs.carousel.$refs.carousel.splide.Components.Elements.slides;\n const splideSlideEdgesRight = splideSlides.map((el) => el.getBoundingClientRect().right);\n const sliderEdgeRight = this.$refs.carousel.$el.getBoundingClientRect().right;\n\n this.visibleCount = findClosestIndex(splideSlideEdgesRight, sliderEdgeRight) + 1;\n },\n nextSlide() {\n if (this.$refs.carousel) {\n this.$refs.carousel.next();\n }\n },\n prevSlide() {\n if (this.$refs.carousel) {\n this.$refs.carousel.prev();\n }\n },\n onAfterChange() {\n const splide = this.$refs.carousel.$refs.carousel.splide;\n this.isFirstSlide = splide?.index === 0;\n this.isLastSlide = splide?.index + this.visibleItems === this.mediaItems.length;\n this.updateCurrentItemCount();\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './assembly-instructions-media-slider-fi';\n</style>\n","<template>\n <accordion-item-fi\n v-if=\"hasTextList || assemblyMedia || instructionPdf\"\n ref=\"accordionItem\"\n class=\"accordion-assembly-instructions-fi\"\n header-tag=\"h3\"\n ignore-others\n scroll-to\n @accordion-item-toggle=\"triggerResize\"\n >\n <template #header>\n <template v-if=\"!isFite\">\n {{ $dict.get('product-Catalog.Accordions.Assembly-Instructions') }}\n </template>\n <template v-else>\n {{ $dict.get('product-Catalog.Accordions.Assembly-Instructions-Fite') }}\n </template>\n </template>\n <template #content>\n <grid-columns-fi\n :columns=\"12\"\n grid-class=\"lg:fi-grid-cols-10\"\n >\n <div class=\"accordion-assembly-instructions-fi__text-container\">\n <richtext-fi\n v-if=\"textListValue(textList, 'KAT_FUNKTION')\"\n class=\"accordion-assembly-instructions-fi__text\"\n :html-content=\"{ value: textListValue(textList, 'KAT_FUNKTION') }\"\n />\n </div>\n\n <div\n v-if=\"instructionPdf?.Url\"\n class=\"accordion-assembly-instructions-fi__download\"\n >\n <button-fi\n :href=\"instructionPdf.Url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"accordion-assembly-instructions-fi__download-button button-fi__primary button-fi--small\"\n natural-events\n @click=\"handleDownload\"\n >\n <icon-fi icon=\"download\" />\n <template v-if=\"!isFite\">\n {{ $dict.get('product-Catalog.Accordions.Assembly-Instructions-PDF-Button') }}\n </template>\n <template v-else>\n {{ $dict.get('product-Catalog.Accordions.Assembly-Instructions-PDF-Button-Fite') }}\n </template>\n </button-fi>\n </div>\n </grid-columns-fi>\n\n <div\n v-if=\"assemblyMedia\"\n class=\"accordion-assembly-instructions-fi__assembly-media\"\n >\n <div\n v-for=\"(item, index) in assemblyMedia\"\n :key=\"item.Name\"\n class=\"accordion-assembly-instructions-fi__assembly-media--group\"\n >\n <div\n v-if=\"assemblyMediaTitle(item)\"\n class=\"accordion-assembly-instructions-fi__assembly-media-title\"\n >\n {{ assemblyMediaTitle(item) }}\n </div>\n\n <assembly-instructions-media-slider-fi\n :media-items=\"item.media\"\n :class=\"{\n 'accordion-assembly-instructions-fi__assembly-media-slider': true,\n 'accordion-assembly-instructions-fi__assembly-media-slider--no-media-title':\n !assemblyMediaTitle(item) && index !== 0,\n }\"\n />\n </div>\n </div>\n </template>\n </accordion-item-fi>\n</template>\n\n<script>\nimport { AccordionItemFi, ButtonFi, IconFi, RichtextFi } from 'atoms';\nimport AssemblyInstructionsMediaSliderFi from 'components/catalog-accordions/accordion-assembly-instructions/assembly-instructions-media-slider/AssemblyInstructionsMediaSliderFi';\nimport GridColumnsFi from 'components/grid-fi/GridColumnsFi';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport catalogMixin from 'mixins/catalogMixin';\n\nimport eventHubMixin from '@/mixins/eventHubMixin.vue';\n\nexport default {\n name: 'AccordionAssemblyInstructionsFi',\n components: {\n AccordionItemFi,\n ButtonFi,\n GridColumnsFi,\n IconFi,\n RichtextFi,\n AssemblyInstructionsMediaSliderFi,\n },\n mixins: [breakpointMixin, catalogMixin, eventHubMixin],\n props: {\n catalogData: {\n type: Object,\n default: () => ({}),\n },\n },\n computed: {\n textList() {\n return this.catalogData?.TextList;\n },\n hasTextList() {\n return this.textListValue(this.textList, 'KAT_FUNKTION');\n },\n assemblyMedia() {\n if (!this.catalogData?.AssemblyMedia) {\n return null;\n }\n\n const withMedia = this.catalogData.AssemblyMedia.filter(\n (assemblyMedia) => assemblyMedia.media?.length,\n );\n\n return withMedia.length ? withMedia : null;\n },\n instructionPdf() {\n return this.catalogData?.Documents?.AdditionalDocuments?.find(\n (document) => document.Type === 'Installation Instructions',\n );\n },\n },\n methods: {\n triggerResize(isOpen) {\n if (IS_SSR || !isOpen) {\n return;\n }\n\n window.dispatchEvent(new Event('resize'));\n },\n assemblyMediaTitle(item) {\n if (!item) {\n return;\n }\n return this.textListValue(item.media[0].TextList, 'KAT_NEU_PRODBILD');\n },\n handleDownload() {\n this.sendEvent('custom', {}, 'download', {\n link: this.instructionPdf.Url,\n name: 'Installation Instructions',\n });\n },\n openAccordion() {\n this.$refs.accordionItem.toggleAccordion(0);\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './accordion-assembly-instructions-fi.scss';\n</style>\n","<template>\n <accordion-item-fi\n v-if=\"hasTextList || videoFields\"\n :class=\"{\n 'accordion-benefits-description-fi': true,\n 'accordion-benefits-description-fi--is-detail-page': isDetailPage,\n }\"\n header-tag=\"h3\"\n ignore-others\n scroll-to\n >\n <template #header>\n <template v-if=\"isFite\">\n {{ $dict.get('product-Catalog.Accordions.Product-Description') }}\n </template>\n <template v-else>\n {{ $dict.get('product-Catalog.Accordions.Benefits-And-Description') }}\n </template>\n </template>\n <template #content>\n <grid-columns-fi\n :columns=\"12\"\n grid-class=\"lg:fi-grid-cols-10\"\n >\n <div\n :class=\"{\n 'fi-col-span-12 md:fi-col-span-8 md:fi-pr-24 lg:fi-col-span-6': videoFields,\n 'fi-col-span-12 lg:fi-col-span-10': !videoFields,\n }\"\n >\n <div\n v-if=\"isDetailPage && !isFite\"\n class=\"accordion-benefits-description-fi__text accordion-benefits-description-fi__text--claim\"\n >\n {{ textListValue(textList, 'DOKBSTMARKCLAIM') }}\n </div>\n\n <richtext-fi\n v-if=\"textListValue(textList, 'KAT_VORTEILNUTZEN')\"\n :class=\"{\n 'accordion-benefits-description-fi__text': true,\n 'accordion-benefits-description-fi__text--no-spacings': isDetailPage,\n }\"\n :html-content=\"{ value: textListValue(textList, 'KAT_VORTEILNUTZEN') }\"\n />\n\n <richtext-fi\n v-if=\"textListValue(textList, 'DOKBSTMARKDESCR') && isDetailPage\"\n :class=\"{\n 'accordion-benefits-description-fi__text': true,\n }\"\n :html-content=\"{ value: textListValue(textList, 'DOKBSTMARKDESCR') }\"\n />\n\n <div\n v-if=\"!isSM && videoFields\"\n class=\"accordion-benefits-description-fi__video fi-mt-48\"\n >\n <video-player-fi\n :fields=\"videoFields\"\n :overlay-breakpoints=\"overlayBreakpoints\"\n :unlimited=\"585\"\n :aspect-ratio=\"16 / 9\"\n do-not-replace-url\n no-youku-player\n />\n </div>\n\n <richtext-fi\n v-if=\"textListValue(textList, 'EIGENSCHAFTENGEN')\"\n class=\"accordion-benefits-description-fi__text\"\n :html-content=\"{ value: textListValue(textList, 'EIGENSCHAFTENGEN') }\"\n />\n </div>\n\n <div\n v-if=\"isSM && videoFields\"\n class=\"accordion-benefits-description-fi__video fi-col-span-12 md:fi-col-span-4\"\n >\n <video-player-fi\n :fields=\"videoFields\"\n :overlay-breakpoints=\"overlayBreakpoints\"\n :unlimited=\"585\"\n :aspect-ratio=\"16 / 9\"\n do-not-replace-url\n no-youku-player\n />\n </div>\n </grid-columns-fi>\n </template>\n </accordion-item-fi>\n</template>\n\n<script>\nimport { AccordionItemFi, RichtextFi } from 'atoms';\nimport GridColumnsFi from 'components/grid-fi/GridColumnsFi';\nimport VideoPlayerFi from 'components/video-player-fi/VideoPlayerFi';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport catalogMixin from 'mixins/catalogMixin';\n\nexport default {\n name: 'AccordionBenefitsDescriptionFi',\n components: {\n GridColumnsFi,\n RichtextFi,\n AccordionItemFi,\n VideoPlayerFi,\n },\n mixins: [breakpointMixin, catalogMixin],\n props: {\n catalogData: {\n type: Object,\n default: () => ({}),\n },\n isDetailPage: {\n type: Boolean,\n default: false,\n },\n },\n computed: {\n overlayBreakpoints() {\n return [\n {\n mediaWidth: 320,\n imageWidth: 443,\n },\n {\n mediaWidth: 480,\n imageWidth: 731,\n },\n {\n mediaWidth: 768,\n imageWidth: 963,\n },\n {\n mediaWidth: 1024,\n imageWidth: 428,\n },\n ];\n },\n textList() {\n return this.catalogData?.TextList;\n },\n hasTextList() {\n return (\n this.textListValue(this.textList, 'KAT_VORTEILNUTZEN') ||\n this.textListValue(this.textList, 'EIGENSCHAFTENGEN') ||\n (this.isFite && this.textListValue(this.textList, 'DOKBSTMARKDESCR'))\n );\n },\n videoFields() {\n if (this.catalogData?.Media?.length) {\n const item = this.catalogData.Media.find(\n (mediaItem) => mediaItem.videoId && mediaItem.Type === 'Video' && mediaItem.Url,\n );\n\n if (item) {\n return {\n videoYoutubeLink: {\n value: {\n href: `https://www.youtube.com/watch?v=${item.videoId}`,\n url: `https://www.youtube.com/watch?v=${item.videoId}`,\n text: 'Youtube Video',\n altTitle: 'Youtube Video',\n },\n },\n image: {\n value: {\n src: item.Url,\n alt: 'Youtube Video',\n },\n },\n };\n }\n }\n\n return null;\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './accordion-benefits-description-fi.scss';\n</style>\n","<template>\n <accordion-item-fi\n v-if=\"approvals\"\n ref=\"accordionItem\"\n :class=\"{\n 'accordion-document-downloads-fi': true,\n 'accordion-document-downloads-fi--no-hierarchy': !enableGroupedListView,\n }\"\n header-tag=\"h3\"\n ignore-others\n scroll-to\n @accordion-item-toggle=\"accordionToggled = !accordionToggled\"\n >\n <template #header>\n {{ $dict.get('product-Catalog.Accordions.Document-Downloads.Label') }}\n </template>\n <template #content=\"{ isOpen }\">\n <grid-columns-fi\n :columns=\"12\"\n grid-class=\"lg:fi-grid-cols-10\"\n >\n <div class=\"fi-col-span-12 lg:fi-col-span-10\">\n <template v-if=\"enableCategoryTabs\">\n <tab-navigation-fi\n :tab-navigation=\"tabNavigation\"\n :refresh-tabs=\"accordionToggled\"\n :is-slider=\"true\"\n :line-hidden=\"true\"\n :init-id=\"initTab\"\n >\n <template\n v-for=\"item in tabNavigation\"\n :key=\"item.id\"\n #[getTabName(item.id)]\n >\n <div class=\"accordion-document-downloads-fi__approval-list\">\n <document-download-items-fi\n :documents=\"item.documents\"\n :is-focusable=\"isOpen\"\n theme=\"category-tabs\"\n />\n </div>\n </template>\n </tab-navigation-fi>\n </template>\n <!-- XXX Remove after the product data and it's interface has been updated. Unwrap tab navigation above -->\n <template v-else>\n <div class=\"accordion-document-downloads-fi__approval-list\">\n <document-download-items-fi\n :documents=\"approvals\"\n :is-focusable=\"isOpen\"\n />\n </div>\n </template>\n </div>\n </grid-columns-fi>\n </template>\n </accordion-item-fi>\n</template>\n\n<script>\nimport { AccordionItemFi } from 'atoms';\nimport DocumentDownloadItemsFi from 'components/document-download/DocumentDownloadItemsFi';\nimport GridColumnsFi from 'components/grid-fi/GridColumnsFi';\nimport TabNavigationFi from 'components/tab-navigation-fi/TabNavigationFi';\n\nexport default {\n name: 'AccordionDocumentDownloadsFi',\n components: {\n GridColumnsFi,\n AccordionItemFi,\n TabNavigationFi,\n DocumentDownloadItemsFi,\n },\n inject: ['fields'],\n props: {\n catalogData: {\n type: Object,\n default: () => ({}),\n },\n tabHash: {\n type: String,\n default: null,\n },\n },\n data() {\n return {\n accordionToggled: false,\n initTab: 0,\n };\n },\n computed: {\n enableCategoryTabs() {\n return this.fields?.enableDocumentTabs?.value;\n },\n enableGroupedListView() {\n return Boolean(this.fields.enableGroupedListView?.value);\n },\n approvals() {\n if (!this.catalogData?.Documents) {\n return null;\n }\n\n let approvals = [];\n\n const catalogApprovals = this.catalogData.Documents.Approvals;\n const catalogDocuments = this.catalogData.Documents.AdditionalDocuments;\n\n if (catalogApprovals) {\n approvals.push(...catalogApprovals);\n }\n if (catalogDocuments) {\n approvals.push(...catalogDocuments);\n }\n\n if (!approvals.length) {\n return null;\n }\n\n if (this.enableGroupedListView) {\n const isChild = new Set();\n approvals = approvals.map((approval) => {\n const childIds = approval.ChildDocumentIds;\n\n if (childIds && childIds.length > 0) {\n const children = [];\n\n childIds.forEach((id) => {\n const childData = approvals.find((a) => a.DocumentId === id && a.ParentDocumentId);\n\n if (childData) {\n children.push(childData);\n isChild.add(id);\n }\n });\n\n const sortedChildren = children.sort(\n (a, b) => new Date(b.ValidFrom) - new Date(a.ValidFrom),\n );\n\n return {\n ...approval,\n Subitems: sortedChildren,\n };\n } else {\n return approval;\n }\n });\n\n return approvals.filter((a) => !isChild.has(a.DocumentId));\n }\n return approvals;\n },\n tabNavigation() {\n const groups = {};\n let id = 0;\n this.approvals.forEach((catalogDocument) => {\n const group =\n catalogDocument.Group?.Value || this.$dict.get('product-Catalog.No-Document-Group');\n\n if (groups[group]) {\n groups[group].documents.push(catalogDocument);\n return;\n }\n\n groups[group] = {\n id,\n text: group,\n documents: [catalogDocument],\n rank: catalogDocument.Group?.GroupRank,\n type: catalogDocument.Type,\n };\n id += 1;\n });\n const sortedGroups = Object.values(groups).sort((a, b) => a.rank - b.rank);\n sortedGroups.forEach((group) =>\n group.documents.sort((a, b) => a.DocumentRank - b.DocumentRank),\n );\n return sortedGroups;\n },\n },\n methods: {\n getTabName(id) {\n return `tab-content-${id}`;\n },\n openAccordion() {\n if (this.tabHash) {\n let tab = null;\n if (this.tabHash === 'etas-and-dops') {\n tab = this.tabNavigation.find(\n (el) =>\n el.type === 'ETA - European Technical Assessment' ||\n el.type === 'DOP - Declaration of Performance',\n );\n } else if (this.tabHash === 'safety-data-sheets') {\n tab = this.tabNavigation.find((el) => el.type === 'Safety Datasheet');\n } else if (this.tabHash === 'sustainability') {\n tab = this.tabNavigation.find((el) => el.type === 'Environmental Product Declaration');\n }\n this.initTab = tab?.id || 0;\n }\n\n this.$refs.accordionItem.toggleAccordion(0);\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './accordion-document-downloads-fi-unscoped.scss';\n</style>\n\n<style lang=\"scss\" scoped>\n@import './accordion-document-downloads-fi.scss';\n</style>\n","<template>\n <div\n :class=\"{\n 'catalog-slider-item-fi': true,\n 'catalog-slider-item-fi--is-thumbnail': isThumbnail,\n }\"\n @click=\"onZoom\"\n >\n <video-player-fi\n v-if=\"item.videoId\"\n ref=\"video\"\n :fields=\"getYoutubeVideoFields(item.videoId, item.Url)\"\n :show-hide-delay=\"1000\"\n :reset-video=\"slideChanged\"\n :aspect-ratio=\"16 / 9\"\n :overlay-breakpoints=\"breakpoints\"\n :unlimited=\"unlimited\"\n :unlimited-height=\"unlimitedHeight\"\n :small-play-button=\"isThumbnail\"\n :is-thumbnail=\"isThumbnail\"\n preview-params=\"func=crop&org_if_sml=0\"\n do-not-replace-url\n no-youku-player\n />\n <div\n v-else\n class=\"catalog-slider-item-fi__image-container\"\n data-test=\"catalog-slider-item-image-container\"\n >\n <div\n v-if=\"zoomable\"\n class=\"catalog-slider-item-fi__zoom fi-hidden md:fi-block\"\n >\n <icon-fi icon=\"zoom-in\" />\n {{ $dict.get('product-Catalog.Zoom') }}\n </div>\n <div\n :class=\"{\n 'catalog-slider-item-fi__image-wrapper': true,\n 'catalog-slider-item-fi__image-wrapper--product-picture':\n !isThumbnail && isProductPicture,\n }\"\n >\n <ssr-cloud-image-fi\n class=\"thumbnail-slider-item-fi__image\"\n :src=\"item.Url\"\n :params=\"cloudImageParams\"\n :trim=\"item.Type === 'Product Category Picture' || item.Type === 'Product Picture'\"\n :breakpoints=\"breakpoints\"\n :unlimited=\"unlimited\"\n :unlimited-height=\"unlimitedHeight\"\n :alt=\"\n isProductPicture && itemName ? `${item.altText}: "${itemName}"` : item.altText\n \"\n :eager=\"eager\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { IconFi, SsrCloudImageFi } from 'atoms';\nimport VideoPlayerFi from 'components/video-player-fi/VideoPlayerFi';\n\nexport default {\n name: 'CatalogSliderItemFi',\n components: {\n VideoPlayerFi,\n IconFi,\n SsrCloudImageFi,\n },\n props: {\n item: {\n type: Object,\n default: () => ({}),\n },\n isThumbnail: {\n type: Boolean,\n default: false,\n },\n slideChanged: {\n type: Boolean,\n default: false,\n },\n itemName: {\n type: String,\n default: null,\n },\n zoomable: Boolean,\n isZoom: Boolean,\n eager: Boolean,\n },\n emits: ['zoom'],\n computed: {\n isProductPicture() {\n const regularItemTypes =\n this.item.Type === 'Product Category Picture' ||\n this.item.Type === 'Product Picture' ||\n this.item.Type === 'Packaging';\n return this.isFite\n ? regularItemTypes || this.item.Type === 'Application Picture'\n : regularItemTypes;\n },\n cloudImageParams() {\n return this.isProductPicture\n ? 'func=fit&bg_colour=fff&org_if_sml=0'\n : 'func=crop&org_if_sml=0';\n },\n paddingMd() {\n return this.isProductPicture ? 2 * 60 : 0;\n },\n paddingLg() {\n return this.isProductPicture ? 2 * 80 : 0;\n },\n breakpoints() {\n if (this.isThumbnail) {\n return [\n {\n mediaWidth: 480,\n imageWidth: 444 / 3,\n imageHeight: (444 / 3 / 16) * 9,\n },\n {\n mediaWidth: 767,\n imageWidth: 731 / 3,\n imageHeight: (731 / 3 / 16) * 9,\n },\n {\n mediaWidth: 768,\n imageWidth: 708 / 3,\n imageHeight: (708 / 3 / 16) * 9,\n },\n {\n mediaWidth: 1023,\n imageWidth: 963 / 3,\n imageHeight: (963 / 3 / 16) * 9,\n },\n {\n mediaWidth: 1440,\n imageWidth: 534 / 3,\n imageHeight: (534 / 3 / 16) * 9,\n },\n ];\n }\n if (this.isZoom) {\n return [\n {\n mediaWidth: 1440,\n imageWidth: 1380 - this.paddingLg,\n imageHeight: (1380 / 16) * 9,\n },\n ];\n }\n return [\n {\n mediaWidth: 480,\n imageWidth: 444,\n imageHeight: (444 / 16) * 9,\n },\n {\n mediaWidth: 767,\n imageWidth: 731,\n imageHeight: (731 / 16) * 9,\n },\n {\n mediaWidth: 768,\n imageWidth: 708,\n imageHeight: (708 / 16) * 9,\n },\n {\n mediaWidth: 1023,\n imageWidth: 963 - this.paddingMd,\n imageHeight: (963 / 16) * 9,\n },\n {\n mediaWidth: 1440,\n imageWidth: 534 - this.paddingLg,\n imageHeight: (534 / 16) * 9,\n },\n ];\n },\n unlimited() {\n if (this.isThumbnail) {\n return 798 / 3;\n }\n if (this.isZoom) {\n return 1860 - this.paddingLg;\n }\n return 798 - this.paddingLg;\n },\n unlimitedHeight() {\n if (this.isThumbnail) {\n return ((798 / 3) * 9) / 16;\n }\n if (this.isZoom) {\n return (1860 * 9) / 16;\n }\n return (798 * 9) / 16;\n },\n },\n methods: {\n onSwipe() {\n if (this.$refs.video?.isPlaying) {\n this.$refs.video.videoEnded();\n }\n },\n onZoom() {\n if (this.zoomable) {\n this.$emit('zoom');\n }\n },\n getYoutubeVideoFields(videoId, imageUrl) {\n return {\n videoYoutubeLink: {\n value: {\n href: `https://www.youtube.com/watch?v=${videoId}`,\n url: `https://www.youtube.com/watch?v=${videoId}`,\n text: 'Youtube Video',\n altTitle: 'Youtube Video',\n },\n },\n image: {\n value: {\n src: imageUrl,\n alt: 'Youtube Video',\n },\n },\n };\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './catalog-slider-item-fi.scss';\n</style>\n","<template>\n <div class=\"catalog-slider-fi\">\n <div\n :key=\"refreshCount\"\n :class=\"{\n 'catalog-slider-fi__container': true,\n 'catalog-slider-fi__container--visible': true,\n 'catalog-slider-fi__container--single-slide': thumbnails.length === 1,\n 'catalog-slider-fi__container--duo-slide': thumbnails.length === 2,\n }\"\n >\n <carousel-fi\n ref=\"carousel\"\n class=\"catalog-slider-fi__carousel\"\n :settings=\"!isMD ? mainSettings : mainSettingsMD\"\n :items=\"thumbnails\"\n :no-arrows=\"!isMD\"\n :thumbnail-carousel-ref=\"thumbnailCarouselRef\"\n theme=\"catalog-slider\"\n @swipe=\"notifySwipeToCatalogSlides\"\n >\n <carousel-slide-fi\n v-for=\"(item, index) in thumbnails\"\n :key=\"index\"\n theme=\"catalog-slider\"\n >\n <catalog-slider-item-fi\n ref=\"catalogItem\"\n :item=\"item\"\n :item-name=\"itemName\"\n :zoomable=\"isZoomable && !item.videoId\"\n :eager=\"index === 0\"\n @zoom=\"openZoom\"\n />\n </carousel-slide-fi>\n </carousel-fi>\n\n <div class=\"catalog-slider-fi__thumbnail-wrapper\">\n <carousel-fi\n ref=\"thumbnails\"\n class=\"catalog-slider-fi__carousel catalog-slider-fi__carousel--thumbnail\"\n :settings=\"thumbnailSettings\"\n theme=\"catalog-slider-thumbnail\"\n no-arrows\n >\n <carousel-slide-fi\n v-for=\"(item, index) in carouselThumbnails\"\n :key=\"index\"\n theme=\"catalog-slider-thumbnail\"\n >\n <catalog-slider-item-fi\n :item=\"item\"\n :is-thumbnail=\"true\"\n :eager=\"index === 0\"\n />\n </carousel-slide-fi>\n </carousel-fi>\n </div>\n </div>\n <dialog-modal-fi\n v-if=\"isZoomable\"\n ref=\"zoom\"\n class=\"catalog-slider-fi__carousel-zoom\"\n lazy\n full-screen\n @close=\"destroyZoom\"\n >\n <template #header>\n <div class=\"catalog-slider-fi__carousel-zoom__header\">\n <div class=\"catalog-slider-fi__carousel-zoom__header__subtitle\">{{ headerSubtitle }}</div>\n <div class=\"catalog-slider-fi__carousel-zoom__header__title\">{{ headerTitle }}</div>\n </div>\n </template>\n <template #body>\n <div class=\"catalog-slider-fi__carousel-zoom-wrapper\">\n <carousel-fi\n ref=\"carouselZoom\"\n class=\"catalog-slider-fi__carousel catalog-slider-fi__carousel-zoom\"\n :settings=\"{ ...(!isMD ? mainSettings : mainSettingsMD), autoHeight: true }\"\n :items=\"thumbnails\"\n :no-arrows=\"!isMD\"\n theme=\"catalog-slider\"\n @swipe=\"notifySwipeToZoomCatalogSlides\"\n >\n <carousel-slide-fi\n v-for=\"(item, index) in thumbnails\"\n :key=\"index\"\n theme=\"catalog-slider\"\n >\n <catalog-slider-item-fi\n ref=\"zoomCatalogItem\"\n :item=\"item\"\n :item-name=\"itemName\"\n is-zoom\n />\n </carousel-slide-fi>\n </carousel-fi>\n </div>\n\n <div class=\"catalog-slider-fi__thumbnail-wrapper catalog-slider-fi__zoom-thumbnail-wrapper\">\n <carousel-fi\n ref=\"thumbnailsZoom\"\n :class=\"{\n 'catalog-slider-fi__carousel': true,\n 'catalog-slider-fi__carousel--thumbnail': true,\n 'catalog-slider-fi__carousel--thumbnail-zoom': true,\n 'catalog-slider-fi__carousel--single': carouselThumbnails.length === 1,\n }\"\n :settings=\"thumbnailSettingsZoom\"\n theme=\"catalog-slider-thumbnail\"\n no-arrows\n >\n <carousel-slide-fi\n v-for=\"(item, index) in carouselThumbnails\"\n :key=\"index\"\n theme=\"catalog-slider-thumbnail\"\n >\n <catalog-slider-item-fi\n :item=\"item\"\n :is-thumbnail=\"true\"\n />\n </carousel-slide-fi>\n </carousel-fi>\n </div>\n </template>\n </dialog-modal-fi>\n </div>\n</template>\n\n<script>\nimport { CarouselFi, CarouselSlideFi, DialogModalFi } from 'atoms';\nimport CatalogSliderItemFi from 'components/catalog-slider-fi/CatalogSliderItemFi';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport catalogMixin from 'mixins/catalogMixin';\nimport catalogTextListMixin from 'mixins/catalogTextListMixin';\n\nexport default {\n name: 'CatalogSliderFi',\n components: {\n CarouselFi,\n CarouselSlideFi,\n CatalogSliderItemFi,\n DialogModalFi,\n },\n mixins: [catalogMixin, catalogTextListMixin, breakpointMixin],\n inject: ['fields'],\n props: {\n catalogData: {\n type: Object,\n default: null,\n },\n itemName: {\n type: String,\n default: null,\n },\n },\n data() {\n return {\n thumbnailCarouselRef: null,\n // Type changes do not work in breakpoint settings\n mainSettings: {\n rewind: true,\n pagination: true,\n gap: '24px',\n },\n mainSettingsMD: {\n rewind: true,\n pagination: true, // we have pagination here too and just hide it to be consistent when re-hydrating\n type: 'fade',\n gap: '24px',\n },\n refreshCount: 0,\n isMounted: false,\n };\n },\n computed: {\n isZoomable() {\n return this.isMD && this.fields.enableZoom?.value;\n },\n thumbnails() {\n return this.getFamilyThumbnails(this.catalogData);\n },\n headerSubtitle() {\n const artNr = this.catalogData?.ProductId && Number(this.catalogData.ProductId);\n if (artNr) {\n return `${this.$dict.get('product-List.Table.Article-Number')} ${artNr}`;\n }\n return this.textListValue(this.catalogData.TextList, 'KAT_POS');\n },\n headerTitle() {\n const productName = this.textListValue(this.catalogData?.TextList, 'ECOMLANG');\n if (productName) {\n return productName;\n }\n return this.textListValue(this.catalogData.TextList, 'BEZEICHNUNG');\n },\n carouselThumbnails() {\n if (this.isMounted || this.thumbnails.length < 3) {\n return this.thumbnails;\n }\n // center first item\n const carouselThumbnails = this.thumbnails.slice();\n carouselThumbnails.unshift(carouselThumbnails.pop());\n return carouselThumbnails;\n },\n thumbnailSettings() {\n const settings = {\n type: 'loop',\n isNavigation: true,\n perPage: 3,\n perMove: 1,\n focus: 'center',\n gap: IS_SSR ? undefined : '24px',\n };\n\n const { length } = this.thumbnails;\n if (length < 3) {\n if (length === 1) {\n settings.padding = {\n right: '33.33%',\n left: '33.33%',\n };\n settings.gap = '100%';\n } else {\n settings.gap = '33.33%';\n }\n settings.perPage = length;\n settings.focus = 0;\n }\n\n return settings;\n },\n thumbnailSettingsZoom() {\n return {\n ...this.thumbnailSettings,\n type: 'slide',\n padding: undefined,\n autoWidth: true,\n rewind: false,\n focus: this.carouselThumbnails.length > 4 ? 'center' : 0,\n };\n },\n },\n watch: {\n isMD() {\n this.refresh();\n },\n thumbnails() {\n this.refresh(); // this should only happen in the showroom\n },\n },\n mounted() {\n this.isMounted = true;\n if (!this.$refs.carousel || !this.$refs.thumbnails) {\n return;\n }\n\n this.syncCarousels();\n setTimeout(() => this.$refs.thumbnails.refresh(), 500); // this is unfortunately required for the youtube-icon to show up\n },\n methods: {\n notifySwipeToCatalogSlides(index) {\n this.$refs.catalogItem.forEach((item) => item.onSwipe(index));\n },\n notifySwipeToZoomCatalogSlides(index) {\n this.$refs.zoomCatalogItem.forEach((item) => item.onSwipe(index));\n },\n async destroyZoom() {\n setTimeout(() => (this.$refs.zoom.hasBeenOpened = false), 300);\n },\n async openZoom() {\n this.$refs.zoom.open();\n await this.$nextTick();\n this.$refs.carouselZoom.$refs.carousel.sync(this.$refs.thumbnailsZoom.$refs.carousel.splide);\n this.$refs.carouselZoom.go(this.$refs.carousel.getIndex());\n },\n syncCarousels() {\n this.thumbnailCarouselRef = this.$refs.thumbnails;\n this.$refs.carousel.$refs.carousel.sync(this.$refs.thumbnails.$refs.carousel.splide);\n },\n async refresh() {\n this.refreshCount += 1;\n await this.$nextTick();\n this.syncCarousels();\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './catalog-slider-fi-unscoped';\n</style>\n\n<style scoped lang=\"scss\">\n@import './catalog-slider-fi';\n</style>\n","<template>\n <dialog-modal-fi\n ref=\"dialog\"\n class=\"media-download-dialog-fi modal-fi--content-width-sm modal-fi--action-buttons modal-fi--mobile-fullscreen\"\n lazy\n @before-close=\"beforeClose\"\n >\n <template #header>\n <richtext-fi\n v-if=\"fields.mediaDownloadDialogText\"\n class=\"media-download-dialog-fi__text\"\n :html-content=\"fields.mediaDownloadDialogText\"\n />\n </template>\n <template #footer>\n <div class=\"media-download-dialog-fi__button\">\n <loading-indicator-wrapper\n :loading=\"isLoading\"\n variant=\"spinnerLocal\"\n spinoff=\"in-relative-centered\"\n >\n <a\n download\n :disabled=\"isLoading\"\n class=\"button-fi__tertiary--large button-fi--icon button-fi__xs-streched\"\n @click=\"downloadMedia(mediaDownloadLink)\"\n >\n <icon-fi icon=\"download\" />\n {{ fields.mediaDownloadDialogButton?.value }}\n </a>\n </loading-indicator-wrapper>\n </div>\n </template>\n </dialog-modal-fi>\n</template>\n\n<script>\nimport { DialogModalFi, IconFi, LoadingIndicatorWrapper, RichtextFi } from 'atoms';\n\nimport eventHubMixin from '@/mixins/eventHubMixin.vue';\n// dynamic import because static import is not SSR compatible\nconst importFileSaver = () => import('file-saver');\n\nexport default {\n name: 'MediaDownloadDialogFi',\n components: {\n DialogModalFi,\n IconFi,\n LoadingIndicatorWrapper,\n RichtextFi,\n },\n mixins: [eventHubMixin],\n props: {\n fields: {\n type: Object,\n default: () => ({}),\n },\n mediaDownloadLink: {\n type: String,\n default: null,\n },\n fileName: {\n type: String,\n default: '',\n },\n },\n data() {\n return {\n isLoading: false,\n timer: null,\n attempts: 0,\n };\n },\n methods: {\n show() {\n this.$refs.dialog.open();\n },\n beforeClose() {\n this.isLoading = false;\n if (this.timer) {\n this.clearTimer();\n }\n },\n close() {\n this.$refs.dialog.close();\n },\n async downloadMedia(url) {\n if (IS_SSR) {\n return;\n }\n\n this.isLoading = true;\n this.sendEvent('custom', {}, 'download', {\n link: url,\n name: this.fileName,\n });\n const [response, FileSaver] = await Promise.all([fetch(url), importFileSaver()]);\n\n if (response?.status === 200) {\n this.isLoading = false;\n\n const fileName = `media-${this.fileName.replace(/\\s+/g, '-')}.zip`;\n FileSaver.default.saveAs(await response.blob(), fileName);\n } else {\n this.timoutAndTryAgain();\n }\n },\n timoutAndTryAgain() {\n if (this.attempts < 9) {\n this.timer = setTimeout(() => {\n this.attempts += 1;\n this.downloadMedia(this.mediaDownloadLink);\n }, 1000);\n } else {\n this.handleErrorNotification();\n }\n },\n clearTimer() {\n clearTimeout(this.timer);\n this.timer = null;\n this.attempts = 0;\n },\n handleErrorNotification() {\n this.isLoading = false;\n this.close();\n\n this.$store.dispatch('notifications/openToastNotification', {\n message: this.fields.mediaDownloadDialogErrorText,\n type: 'error',\n icon: 'alert-triangle',\n persist: true,\n });\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './media-download-dialog-fi';\n</style>\n","<template>\n <div class=\"product-items-slider-fi\">\n <product-teasers-fi\n :custom-fields=\"customFields\"\n :light=\"isLight\"\n is-guided-recommandation\n />\n </div>\n</template>\n\n<script>\nimport ProductTeasersFi from 'pages/product-teasers-fi/ProductTeasersFi';\n\nexport default {\n name: 'ProductItemsSliderFi',\n components: {\n ProductTeasersFi,\n },\n props: {\n productItems: {\n type: Array,\n default: () => [],\n },\n sliderHeadline: {\n type: String,\n default: '',\n },\n isFamily: {\n type: Boolean,\n default: false,\n },\n isLight: {\n type: Boolean,\n default: false,\n },\n },\n computed: {\n customFields() {\n const fields = {\n headline: { value: this.sliderHeadline },\n hideContent: { value: true },\n };\n\n if (this.isFamily) {\n fields.familyList = this.productListValue;\n } else {\n fields.productList = this.productListValue;\n }\n\n return fields;\n },\n productListValue() {\n return { value: this.productItems?.map(({ ProductId }) => ProductId).join('|') };\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import './product-items-slider-fi';\n</style>\n"],"file":"assets/ProductItemsSliderFi-CBYv53Gl.js"}