{"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}: &quot;${itemName}&quot;` : 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"}