{"version":3,"file":"js/component-perfumeProductHighlightComponent.chunk.js","mappings":"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","sources":["webpack:///./assets/common/src/scripts/base/baseComponent.ts","webpack:///./assets/common/src/scripts/components/perfumeProductHighlightComponent.ts"],"sourcesContent":["import Bean from 'bean';\nimport deepFreeze from '../utilities/freeze';\nimport CommonInterface from './commonInterface';\nexport default class BaseComponent extends CommonInterface {\n /**\n *\n * constructor\n *\n * @param {Element} element\n */\n constructor(element) {\n super();\n this._componentElement = element;\n this._componentElement.setAttribute('data-component-init', 'true');\n this._checkMessages();\n }\n /**\n * @returns {HTMLElement}\n */\n get $el() {\n return this._componentElement;\n }\n get $options() {\n const compOptions = {};\n const options = Object.assign({}, this.$el.dataset);\n const optionsEntires = Object.keys(options).filter((entry) => entry.includes('option'));\n optionsEntires.forEach((entry) => {\n const cleanEntry = BaseComponent.cleanOptionKey(entry);\n let optionValue;\n if (options[entry].includes('{') && options[entry].includes('}')) {\n optionValue = JSON.parse(options[entry].replace(/'/g, '\"'));\n }\n else {\n optionValue = BaseComponent.convertType(options[entry]);\n }\n compOptions[cleanEntry] = optionValue;\n });\n return deepFreeze(compOptions);\n }\n get COMPONENT_NAME() {\n return this.__proto__.constructor.name;\n }\n static convertType(option) {\n let optionReturn;\n switch (option) {\n case 'false':\n optionReturn = false;\n break;\n case 'true':\n optionReturn = true;\n break;\n case 'null':\n optionReturn = null;\n break;\n default:\n optionReturn = option;\n break;\n }\n return optionReturn;\n }\n static cleanOptionKey(key) {\n const str = key.replace('option', '');\n return `${str.charAt(0).toLocaleLowerCase()}${str.slice(1)}`;\n }\n /**\n *\n * $on\n *\n * @param {String} events\n * @param {Function} cb\n * @param {Element} [element = this.$el]\n * @param {Array|String|Element} [elements = null]\n */\n $on(events, cb, element = this.$el, elements = null) {\n if (!element || !events || !cb)\n return;\n if (!elements) {\n Bean.on(element, events, (e) => {\n if (e)\n e.stopPropagation();\n cb(e);\n });\n }\n else {\n Bean.on(element, events, elements, (e) => {\n if (e)\n e.stopPropagation();\n cb(e);\n });\n }\n }\n /**\n *\n * $one\n *\n * @param {String} events\n * @param {Function} cb\n * @param {Element} [element = this.$el]\n */\n $one(events, cb, element = this.$el) {\n Bean.one(element, events, cb);\n }\n /**\n *\n * $off\n *\n * @param {String} events\n * @param {Element} [element = this.$el]\n */\n $off(events, element = this.$el) {\n Bean.off(element, events);\n }\n /**\n *\n * $fire\n *\n * @param {String} events\n * @param {Element} [element = this.$el]\n */\n $fire(events, element = this.$el) {\n Bean.fire(element, events);\n }\n}\n","import { debounce } from '@utils/functions';\nimport Swiper, { A11y, Autoplay, EffectFade, Keyboard, Navigation, Pagination } from 'swiper';\nimport BaseComponent from '../base/baseComponent';\nSwiper.use([Pagination, Autoplay, A11y, EffectFade, Keyboard, Navigation]);\nexport default class PerfumeProductHighlightComponent extends BaseComponent {\n constructor(element) {\n super(element);\n let imagesLoaded = setInterval(() => {\n if (document.readyState === 'complete') {\n clearInterval(imagesLoaded);\n this.init();\n }\n }, 100);\n }\n init() {\n this.slides = this.$el.querySelectorAll('.swiper-slide');\n if (this.slides.length > 1) {\n this.initSlider();\n }\n }\n initCustomClasses(swiper, afterInit) {\n if (afterInit) {\n let stateCheck = setInterval(() => {\n clearInterval(stateCheck);\n this.$el.querySelectorAll('img:not(.lazyloaded)').forEach((el) => el.classList.add('lazyload'));\n this.$el.classList.add('initialized');\n swiper.autoplay.start();\n }, 100);\n }\n const slides = this.$el.querySelectorAll('.perfume-product-highlight-slide');\n slides.forEach((slide) => {\n slide.classList.remove('swiper-slide--custom-active');\n });\n const slidedActive = this.$el.querySelector('.swiper-slide-active');\n if (slidedActive) {\n setTimeout(() => {\n slidedActive.classList.add('swiper-slide--custom-active');\n }, 10);\n }\n }\n onSlideActive(swiper) {\n swiper.slides.forEach((element, index) => {\n if (index === swiper.activeIndex) {\n element.querySelectorAll('a').forEach(function (link) {\n link.setAttribute('tabIndex', '0');\n });\n }\n else {\n element.querySelectorAll('a').forEach(function (link) {\n link.setAttribute('tabIndex', '-1');\n });\n }\n });\n }\n beforeResize() {\n this.carousel.autoplay.running && this.carousel.autoplay.stop();\n this.$el.classList.add('resizing');\n }\n onResize(swiper) {\n this.$el.classList.remove('resizing');\n this.paginationChange(swiper);\n !this.carousel.autoplay.running && this.carousel.autoplay.start();\n }\n paginationChange(swiper) {\n const imageCaption = this.slides[swiper.realIndex].querySelector('.perfume-product-highlight-slide__caption');\n const textColumn = this.slides[swiper.realIndex].querySelector('.perfume-product-highlight-slide__text-column');\n const newTop = ((imageCaption.offsetTop + 20) / 10).toString();\n const newLeft = ((textColumn.offsetLeft + textColumn.offsetWidth / 2) / 10).toString();\n this.$el.querySelector('.swiper-pagination--bars').style.setProperty('--top', `${newTop}rem`);\n this.$el.querySelector('.swiper-pagination--bars').style.setProperty('--left', `${newLeft}rem`);\n }\n initSlider() {\n this.carousel = new Swiper(this.$el, {\n slidesPerView: 1,\n pagination: {\n el: this.$el.querySelector('.swiper-pagination'),\n clickable: true,\n },\n loop: true,\n speed: 800,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n autoplay: {\n delay: 5000,\n disableOnInteraction: false,\n },\n a11y: {\n enabled: true,\n prevSlideMessage: this.$options.prevslidemessage,\n nextSlideMessage: this.$options.nextslidemessage,\n firstSlideMessage: this.$options.firstslidemessage,\n lastSlideMessage: this.$options.lastslidemessage,\n paginationBulletMessage: this.$options.paginationbulletmessage.replace('INDEX_NUMBER', '{{index}}'),\n },\n on: {\n beforeResize: () => this.beforeResize(),\n resize: debounce((swiper) => this.onResize(swiper), 500),\n afterInit: (swiper) => this.initCustomClasses(swiper, true),\n beforeTransitionStart: () => this.initCustomClasses(),\n activeIndexChange: (swiper) => this.onSlideActive(swiper),\n slideChange: (swiper) => {\n this.paginationChange(swiper);\n },\n },\n });\n }\n}\n"],"names":["BaseComponent","constructor","element","super","this","_componentElement","setAttribute","_checkMessages","$el","$options","compOptions","options","Object","assign","dataset","keys","filter","entry","includes","forEach","cleanEntry","cleanOptionKey","optionValue","JSON","parse","replace","convertType","COMPONENT_NAME","__proto__","name","static","option","optionReturn","key","str","charAt","toLocaleLowerCase","slice","$on","events","cb","elements","e","stopPropagation","$one","$off","$fire","PerfumeProductHighlightComponent","imagesLoaded","setInterval","document","readyState","clearInterval","init","slides","querySelectorAll","length","initSlider","initCustomClasses","swiper","afterInit","stateCheck","el","classList","add","autoplay","start","slide","remove","slidedActive","querySelector","setTimeout","onSlideActive","index","activeIndex","link","beforeResize","carousel","running","stop","onResize","paginationChange","imageCaption","realIndex","textColumn","newTop","offsetTop","toString","newLeft","offsetLeft","offsetWidth","style","setProperty","slidesPerView","pagination","clickable","loop","speed","effect","fadeEffect","crossFade","delay","disableOnInteraction","a11y","enabled","prevSlideMessage","prevslidemessage","nextSlideMessage","nextslidemessage","firstSlideMessage","firstslidemessage","lastSlideMessage","lastslidemessage","paginationBulletMessage","paginationbulletmessage","on","resize","beforeTransitionStart","activeIndexChange","slideChange"],"sourceRoot":""}