{"version":3,"file":"Scrollable.js","names":["Scrollable","a","setters","Component","default","on","off","deepMerge","mix","AccessibilityMixin","execute","with","constructor","element","options","arguments","length","scrollStep","showArrows","initialScrollPosition","_resizable","enableMouseDrag","arrowsTop","classNames","arrows","text","arrowPrev","arrowNext","initScrollElement","initCache","appendArrows","scrollStart","scrollEnd","disabled","hidden","dragActive","selectors","itemsContainer","querySelector","arrowContainer","initState","state","initScrollPosition","setArrowsPosition","isMouseDragActive","bindEvents","updateScrollState","bind","passive","onClickPrev","onClickNext","onScrollToElement","setScrollState","startMouseDrag","stopMouseDrag","onMouseMove","afterInit","itemsContainerWidth","scrollTo","scrollLeft","data","offset","detail","offsetLeft","offsetWidth","itemsContainerScrollWidth","scrollWidth","updateArrowsVisibility","isStart","classList","remove","add","isEnd","Math","ceil","lastScrollPosition","getLastScrollPosition","position","saveScrollPosition","saveLastScrollPosition","isInstant","getScrollPosition","scroll","top","left","behavior","appendChild","getArrowsTemplate","arrowsElement","document","createElement","forEach","className","setAttribute","innerHTML","style","removeProperty","onMediaQueryChange","onResize","e","mouseDragStartX","pageX","containerScrollLeft","preventDefault","x","destroy"],"sources":["components/global/Scrollable.js"],"sourcesContent":["import Component from 'core/Component';\nimport { on, off } from 'toolbox/event';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { mix } from 'core/mixwith';\nimport AccessibilityMixin from 'mixins/Accessibility';\n\n/**\n * This is a description of the Scrollable constructor function.\n * @class\n * @classdesc This is a description of the Scrollable class.\n * @extends Component\n */\nexport default class Scrollable extends mix(Component).with(AccessibilityMixin) {\n /**\n * Constructor of the class that mainly merge the options of the components\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options options that belongs to the component\n */\n constructor(element, options = {}) {\n super(element, deepMerge({\n // used in arrow context only, move distance on arrow in pixels. 'auto' by default take the container offsetWidth\n scrollStep: 'auto',\n showArrows: true, // Simple gesture controls are required for accessibility\n initialScrollPosition: 'start',\n _resizable: true,\n enableMouseDrag: true,\n arrowsTop: null, // Arrows top position relative to container (in px). If not set, arrows are centered vertically\n classNames: {\n arrows: [],\n },\n text: {\n arrowPrev: 'Show previous items',\n arrowNext: 'Show next items',\n },\n initScrollElement: null, // element selector to which should be scrolled\n }, options));\n }\n\n /**\n * All selectors must be cached. Never cache elements that are out of the component scope\n */\n initCache() {\n this.appendArrows();\n\n this.classNames = {\n scrollStart: 'm-scrollable-prev',\n scrollEnd: 'm-scrollable-next',\n disabled: 'm-disabled',\n hidden: 'h-hidden',\n dragActive: 'm-drag-active',\n };\n\n this.selectors.itemsContainer = this.element.querySelector('[data-js-scrollable-items]');\n this.selectors.arrowContainer = this.element.querySelector('[data-js-scrollable-arrows]');\n this.selectors.arrowPrev = this.element.querySelector('[data-js-scrollable-prev]');\n this.selectors.arrowNext = this.element.querySelector('[data-js-scrollable-next]');\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n this.state.scrollStart = false;\n this.state.scrollEnd = false;\n this.initScrollPosition();\n this.setArrowsPosition();\n if (this.options.enableMouseDrag) {\n this.state.isMouseDragActive = false;\n }\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n on('scroll', this.selectors.itemsContainer, this.updateScrollState.bind(this), {\n passive: true,\n });\n if (this.options.showArrows) {\n on('click', this.selectors.arrowPrev, this.onClickPrev.bind(this));\n on('click', this.selectors.arrowNext, this.onClickNext.bind(this));\n }\n on('scrollable.scrollToElement', this.element, this.onScrollToElement.bind(this));\n on('scrollable.update', this.element, this.setScrollState.bind(this));\n\n if (this.options.enableMouseDrag) {\n on('mousedown', this.selectors.itemsContainer, this.startMouseDrag.bind(this));\n on('mouseup mouseleave', this.selectors.itemsContainer, this.stopMouseDrag.bind(this));\n on('mousemove', this.selectors.itemsContainer, this.onMouseMove.bind(this));\n }\n }\n\n /**\n * After init\n * Run any script after the component is fully initialized\n */\n afterInit() {\n this.setScrollState();\n }\n\n /**\n * Click Prev arrow\n */\n onClickPrev() {\n const scrollStep = this.options.scrollStep === 'auto' ? this.itemsContainerWidth : this.options.scrollStep;\n this.scrollTo(this.selectors.itemsContainer.scrollLeft - scrollStep);\n }\n\n /**\n * Click Next arrow\n */\n onClickNext() {\n const scrollStep = this.options.scrollStep === 'auto' ? this.itemsContainerWidth : this.options.scrollStep;\n this.scrollTo(this.selectors.itemsContainer.scrollLeft + scrollStep);\n }\n\n /**\n * Scroll to the scroll element with an optional offset\n * @param {object} data - data object\n * @param {HTMLElement} data.element - HTML element\n * @param {number} data.offset - Offset from the left in px\n */\n onScrollToElement(data) {\n const { element, offset = 0 } = data.detail;\n this.scrollTo(element.offsetLeft - offset);\n }\n\n /**\n * update the scroll state and the arrows visibility\n */\n setScrollState() {\n this.itemsContainerWidth = this.selectors.itemsContainer.offsetWidth;\n this.itemsContainerScrollWidth = this.selectors.itemsContainer.scrollWidth;\n\n this.updateArrowsVisibility();\n this.updateScrollState();\n }\n\n /**\n * Set scroll state method defines component's state\n */\n updateScrollState() {\n if (this.isStart()) {\n this.selectors.itemsContainer.classList.remove(this.classNames.scrollStart);\n if (this.selectors.arrowPrev) {\n this.selectors.arrowPrev.classList.add(this.classNames.disabled);\n this.selectors.arrowPrev.disabled = true;\n }\n this.state.scrollStart = false;\n } else {\n this.selectors.itemsContainer.classList.add(this.classNames.scrollStart);\n if (this.selectors.arrowPrev) {\n this.selectors.arrowPrev.classList.remove(this.classNames.disabled);\n this.selectors.arrowPrev.disabled = false;\n }\n this.state.scrollStart = true;\n }\n\n if (this.isEnd()) {\n this.selectors.itemsContainer.classList.remove(this.classNames.scrollEnd);\n if (this.selectors.arrowNext) {\n this.selectors.arrowNext.classList.add(this.classNames.disabled);\n this.selectors.arrowNext.disabled = true;\n }\n this.state.scrollEnd = false;\n } else {\n this.selectors.itemsContainer.classList.add(this.classNames.scrollEnd);\n if (this.selectors.arrowNext) {\n this.selectors.arrowNext.classList.remove(this.classNames.disabled);\n this.selectors.arrowNext.disabled = false;\n }\n this.state.scrollEnd = true;\n }\n }\n\n /**\n * Is scroll at start position\n * @returns {boolean} is start?\n */\n isStart() {\n return this.selectors.itemsContainer.scrollLeft === 0;\n }\n\n /**\n * Is scroll at the end\n * @returns {boolean} is end?\n */\n isEnd() {\n return Math.ceil(this.selectors.itemsContainer.scrollLeft) + this.itemsContainerWidth >= this.itemsContainerScrollWidth;\n }\n\n /**\n * Checks Scrollable options and defines initial scroll position: start (by default) or end\n */\n initScrollPosition() {\n const lastScrollPosition = this.getLastScrollPosition();\n const initScrollElement = this.options.initScrollElement && this.element.querySelector(this.options.initScrollElement);\n let position = null;\n\n if (initScrollElement) {\n position = initScrollElement.offsetLeft;\n } else {\n position = lastScrollPosition || this.options.initScrollPosition;\n }\n\n this.scrollTo(position, lastScrollPosition);\n }\n\n /**\n * Checks Scrollable options and defines initial scroll position: start (by default) or end\n */\n saveScrollPosition() {\n this.saveLastScrollPosition(this.selectors.itemsContainer.scrollLeft);\n }\n\n /**\n * Scroll to the scroll position\n * @param {String|Integer} position start | end | position\n * @param {Boolean} isInstant if true, scroll will be istant\n */\n scrollTo(position, isInstant) {\n let scrollTo;\n // In case of start, scroll to 0\n if (position === 'start') {\n scrollTo = 0;\n } else if (position === 'end') {\n // In case of end, scroll to the end of the container\n scrollTo = this.selectors.itemsContainer.scrollWidth;\n } else if (typeof position === 'number') {\n scrollTo = this.getScrollPosition(position);\n }\n\n if (scrollTo || scrollTo === 0) {\n this.selectors.itemsContainer.scroll({\n top: 0,\n left: scrollTo,\n behavior: isInstant ? 'auto' : 'smooth',\n });\n }\n }\n\n /**\n * Get the scroll position\n * @param {number} position - position of the scroll\n * @returns {number} position\n */\n getScrollPosition(position) {\n let scrollTo;\n\n if (position < 0) {\n scrollTo = 0;\n } else if (position > this.selectors.itemsContainer.scrollWidth) {\n scrollTo = this.selectors.itemsContainer.scrollWidth;\n } else {\n scrollTo = position;\n }\n\n return scrollTo;\n }\n\n /**\n * Include Arrow Navigation elements and update selectors\n */\n appendArrows() {\n if (this.options.showArrows && !this.selectors.arrowContainer) {\n this.element.appendChild(this.getArrowsTemplate());\n }\n }\n\n /**\n * Hide/show arrows based on the container and content\n */\n updateArrowsVisibility() {\n if (!this.selectors.arrowContainer) {\n return;\n }\n\n if (this.options.showArrows && this.itemsContainerScrollWidth > this.itemsContainerWidth) {\n this.selectors.arrowContainer.classList.remove(this.classNames.hidden);\n } else {\n this.selectors.arrowContainer.classList.add(this.classNames.hidden);\n }\n }\n\n /**\n * create Arrows HTMLElement\n *\n * @returns { HTMLElement } - Arrows element\n */\n getArrowsTemplate() {\n const { arrowPrev, arrowNext } = this.options.text;\n const arrowsElement = document.createElement('div');\n arrowsElement.classList.add('c-scrollable__arrows');\n [...this.options.classNames.arrows].forEach((className) => {\n arrowsElement.classList.add(className);\n });\n arrowsElement.setAttribute('data-js-scrollable-arrows', true);\n arrowsElement.innerHTML = `\n `;\n return arrowsElement;\n }\n\n /**\n * set Arrows position\n *\n */\n setArrowsPosition() {\n if (!this.options.showArrows) {\n return;\n }\n if (this.options.arrowsTop) {\n this.selectors.arrowNext.style.top = `${this.options.arrowsTop}px`;\n this.selectors.arrowPrev.style.top = `${this.options.arrowsTop}px`;\n } else if (this.selectors.arrowNext.style.top) {\n this.selectors.arrowNext.style.removeProperty('top');\n this.selectors.arrowPrev.style.removeProperty('top');\n }\n }\n\n /**\n * If breakpoint is changed (i.e. Tablet rotation or browser resize) Re-init scrollable with new options\n */\n onMediaQueryChange() {\n this.setScrollState();\n this.setArrowsPosition();\n this.updateArrowsVisibility();\n }\n\n /**\n * Handlers to onResize event\n */\n onResize() {\n this.setScrollState();\n }\n\n /**\n * Start Click & Drag mode for mouse\n * @param {Object} e event object\n */\n startMouseDrag(e) {\n this.state.isMouseDragActive = true;\n this.selectors.itemsContainer.classList.add(this.classNames.dragActive);\n\n this.state.mouseDragStartX = e.pageX - this.selectors.itemsContainer.offsetLeft;\n this.state.containerScrollLeft = this.selectors.itemsContainer.scrollLeft;\n }\n\n /**\n * Stop Click & Drag mode\n */\n stopMouseDrag() {\n this.state.isMouseDragActive = false;\n this.selectors.itemsContainer.classList.remove(this.classNames.dragActive);\n }\n\n /**\n * Mouse Move event handler for Click & Drag mode\n * @param {Object} e event object\n */\n onMouseMove(e) {\n if (!this.state.isMouseDragActive) {\n return;\n }\n\n e.preventDefault();\n const x = e.pageX - this.selectors.itemsContainer.offsetLeft;\n const scroll = (x - this.state.mouseDragStartX);\n this.selectors.itemsContainer.scrollLeft = this.state.containerScrollLeft - scroll;\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n off(this.selectors.itemsContainer);\n off('scrollable.scrollToElement', this.element);\n off('scrollable.update', this.element);\n if (this.selectors.arrowPrev && this.selectors.arrowNext) {\n off('click', this.selectors.arrowPrev);\n off('click', this.selectors.arrowNext);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}