{"version":3,"sources":["global/carousel.js"],"names":["FOCUSABLE_QUERY","MAX_STD_INDICATORS","MAX_VISIBLE_INDICATORS","passiveOptions","passive","PageIndicator","_classCallCheck","this","Object","defineProperty","enumerable","writable","value","pageIdx","page","currentPage","currentPageIndex","pageCount","startVisiblePage","endVisiblePage","diff","containerElm","_this","isInitialized","requestAnimationFrame","controlElm","document","createElement","appendChild","$","window","on","_controlElm","querySelector","removeChild","undefined","Math","ceil","index","refreshPages","updatePageIndicatorClass","_this2","listElm","classList","querySelectorAll","forEach","liElm","idx","getPageClassName","cls","remove","add","className","count","_this3","pages","splice","length","push","pageIndicatorElm","innerHTML","ulElm","spanElm","toString","SnapScrollPage","onControlClick","_onControlClick","bind","onKeyDown","_onKeyDown","onPageFocusIn","_onPageFocusIn","onPageFocusOut","_onPageFocusOut","onPageMouseEnter","_onPageMouseEnter","onPageMouseLeave","_onPageMouseLeave","onScroll","_onScroll","onSwipeEnd","_onSwipeEnd","onSwipeMove","_onSwipeMove","onSwipeStart","_onSwipeStart","onWindowResize","_isSettingPageCount","_hasScrollOverflow","_this4","scrollableElm","scrollLeft","visiblePageElms","Array","from","containerWidth","getBoundingClientRect","width","pagesWidth","reduce","accumulator","currentElm","firstElementChild","parseFloat","computedStyle","paddingRight","hasScrollOverflow","dispatchEvent","CustomEvent","detail","cardElm","shouldUpdatePageIndex","arguments","pageElm","parentElement","isFocusFromKeyEvent","contains","currentDataIndex","getAttribute","currentVisibleIndex","getVisiblePageElements","findIndex","elm","setPageIndex","relatedTarget","scrolledInView","clientWidth","visiablePageElms","len","_visiablePageElms$idx","left","right","pos","pageSelector","isControlClick","_this5","controlsElm","find","addEventListener","cardClassName","_$","removeEventListener","getComputedStyle","event","direction","isScrolling","goNext","goPrevious","key","target","preventDefault","elmToFocus","focus","focusInElm","focusOutElm","_this6","isSettingPageCount","waitForScroll","scrollDirection","scrollStartX","scrollStartTime","updateControls","pendingSwipeEventDetail","after","getScrolledInView","assign","setTimeout","getScrollIndex","_event","_this7","scrollTimeout","clearTimeout","_onScrollEnd","_onScrollStart","Date","getTime","console","warn","_this8","classNames","_scrollableElm$classL","apply","swipeDirection","swipeStartPages","_controlsElm","_this9","canGoPrev","touches","calculateOverflow","_this10","allPageElms","filter","scrollMethod","isFromScroll","itemSize","scrollWidth","delay","doScroll","_this11","scrollBy","_this12","canGoNext","_scrollableElm","btnElm","removeAttribute","setAttribute"],"mappings":"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","file":"carousel.min.js","sourcesContent":["const FOCUSABLE_QUERY = 'a,button,svg,area,details,summary,iframe,object,embed,input,select,textarea,[tabindex],[contenteditable]';\r\nconst MAX_STD_INDICATORS = 3; // max visible before sizing effect\r\nconst MAX_VISIBLE_INDICATORS = 5;\r\nconst passiveOptions = { passive: true };\r\n\r\n// type Size = 'std' | 'medium' | 'small' | 'tiny' | 'micro';\r\n// type State = 'hidden' | 'current' | Size;\r\n\r\n/**\r\n * PageIndicator control class\r\n * Displays page indicators\r\n */\r\nclass PageIndicator {\r\n\tcontainerElm = null;\r\n\tcurrentPageIndex = 0;\r\n\tendVisiblePage = 0;\r\n\tisInitialized = false;\r\n\t// onIndicatorClick = null;\r\n\tpageCount = 0;\r\n\tpages = [];\r\n\tstartVisiblePage = 0;\r\n\r\n\tconstructor() {\r\n\t\t// this.onIndicatorClick = this._onIndicatorClick.bind(this);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the current page class name\r\n\t * TODO - revisit this function's logic to simplify + optimize\r\n\t *\r\n\t * @param {number} pageIdx - The page index\r\n\t * @returns {string} The page indicator class name. Posible values: 'std' | 'medium' | 'small' | 'tiny' | 'micro'\r\n\t */\r\n\tgetPageClassName(pageIdx) {\r\n\t\tconst page = pageIdx + 1;\r\n\t\tconst currentPage = this.currentPageIndex + 1;\r\n\t\tconst pageCount = this.pageCount;\r\n\r\n\t\tif (page === currentPage) {\r\n\t\t\treturn 'current';\r\n\t\t}\r\n\r\n\t\t// Everything fits, no need for sizes\r\n\t\tif (pageCount <= MAX_VISIBLE_INDICATORS) {\r\n\t\t\treturn 'std';\r\n\t\t}\r\n\r\n\t\t// outsize of the range, hidden\r\n\t\tif (page < this.startVisiblePage || page > this.endVisiblePage) {\r\n\t\t\treturn 'hidden';\r\n\t\t}\r\n\r\n\t\tif (page < currentPage) {\r\n\t\t\tif (currentPage <= MAX_STD_INDICATORS) {\r\n\t\t\t\treturn 'std';\r\n\t\t\t}\r\n\r\n\t\t\tif (page + 1 === currentPage) {\r\n\t\t\t\treturn 'std';\r\n\t\t\t}\r\n\r\n\t\t\tif (page + 2 === currentPage) {\r\n\t\t\t\treturn 'medium';\r\n\t\t\t}\r\n\r\n\t\t\tif (page + 3 === currentPage) {\r\n\t\t\t\treturn 'small';\r\n\t\t\t}\r\n\r\n\t\t\tif (page + 4 === currentPage) {\r\n\t\t\t\treturn 'tiny';\r\n\t\t\t}\r\n\r\n\t\t\treturn 'hidden';\r\n\t\t} else {\r\n\t\t\tconst diff = currentPage <= MAX_STD_INDICATORS ? MAX_STD_INDICATORS - currentPage : 0;\r\n\r\n\t\t\tif (page - diff <= currentPage) {\r\n\t\t\t\treturn 'std';\r\n\t\t\t}\r\n\r\n\t\t\tif (page - (diff + 1) === currentPage) {\r\n\t\t\t\treturn 'medium';\r\n\t\t\t}\r\n\r\n\t\t\tif (page - (diff + 2) === currentPage) {\r\n\t\t\t\treturn 'small';\r\n\t\t\t}\r\n\r\n\t\t\tif (page - (diff + 3) === currentPage) {\r\n\t\t\t\treturn 'tiny';\r\n\t\t\t}\r\n\r\n\t\t\treturn 'micro';\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the current page index\r\n\t *\r\n\t * @returns {number} The current page index\r\n\t */\r\n\tgetCurrentPageIndex() {\r\n\t\treturn this.currentPageIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * Initialized the page indicator control\r\n\t * Injects the page indicator control into the provided DOM element\r\n\t *\r\n\t * @param {HTMLElement} containerElm - The DOM element to inject the page indicator control into\r\n\t */\r\n\tinit(containerElm) {\r\n\t\tif (this.isInitialized) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// this.containerElm.dispatchEvent(new CustomEvent('scrolloverflowchange', { detail: { hasScrollOverflow }}));\r\n\r\n\t\tthis.isInitialized = true;\r\n\t\tthis.containerElm = containerElm;\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tconst controlElm = document.createElement('div');\r\n\r\n\t\t\tcontrolElm.className = 'page-indicator';\r\n\r\n\t\t\tthis.containerElm.appendChild(controlElm);\r\n\t\t});\r\n\r\n\r\n\t\t$(window).on('unload', () => {\r\n\t\t\tconst _controlElm = this.containerElm.querySelector('.page-indicator');\r\n\r\n\t\t\tif (_controlElm != null) {\r\n\t\t\t\t// $(_controlElm).find('.indicator').off('click');\r\n\r\n\t\t\t\tthis.containerElm.removeChild(_controlElm);\r\n\t\t\t\tthis.containerElm = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tthis.isInitialized = false;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Refreshed the pages\r\n\t */\r\n\trefreshPages() {\r\n\t\tconst currentPage = this.currentPageIndex + 1;\r\n\r\n\t\tthis.startVisiblePage = currentPage >= MAX_VISIBLE_INDICATORS\r\n\t\t\t? currentPage + Math.ceil(MAX_STD_INDICATORS / 2) - MAX_VISIBLE_INDICATORS\r\n\t\t\t: 1;\r\n\r\n\t\tthis.endVisiblePage = this.startVisiblePage - 1 + MAX_VISIBLE_INDICATORS;\r\n\r\n\t\tif (currentPage > MAX_STD_INDICATORS) {\r\n\t\t\tthis.endVisiblePage++;\r\n\t\t}\r\n\t}\r\n\r\n\t// /**\r\n\t// * Handles the indicator click mouseevent.\r\n\t// *\r\n\t// * @param {MouseEvent} event - The click mouseevent\r\n\t// */\r\n\t// _onIndicatorClick(event) {\r\n\t// \tconst liElm = event.target.parentElement;\r\n\r\n\t// \tif (liElm.classList.contains('active')) {\r\n\t// \t\treturn;\r\n\t// \t}\r\n\r\n\t// \tconst index = Array.prototype.indexOf.call(liElm.parentElement.children, liElm);\r\n\r\n\t// \tthis.containerElm.dispatchEvent(new CustomEvent('indicatorclick', { detail: { index }}));\r\n\t// }\r\n\r\n\t/**\r\n\t * Sets the current page index\r\n\t *\r\n\t * @param {number} index - The page index to set\r\n\t */\r\n\tsetPageIndex(index) {\r\n\t\tthis.currentPageIndex = index;\r\n\r\n\t\tthis.refreshPages();\r\n\r\n\t\tthis.updatePageIndicatorClass();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the page indicator classes\r\n\t */\r\n\tupdatePageIndicatorClass() {\r\n\t\tconst listElm = this.containerElm.querySelector('.page-indicator ul.pages');\r\n\r\n\t\tif (listElm == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst currentPage = this.currentPageIndex + 1;\r\n\r\n\t\tlistElm.classList[(this.pageCount > MAX_VISIBLE_INDICATORS && currentPage > MAX_STD_INDICATORS) ? 'add' : 'remove']('past-threshold');\r\n\r\n\t\tlistElm.querySelectorAll('li.page').forEach((liElm, idx) => {\r\n\t\t\tconst className = this.getPageClassName(idx);\r\n\r\n\t\t\tif (!liElm.classList.contains(className)) {\r\n\t\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\t\tliElm.classList.forEach((cls) => {\r\n\t\t\t\t\t\tif (cls !== 'page') {\r\n\t\t\t\t\t\t\tliElm.classList.remove(cls);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tliElm.classList.add(className);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the page indicator, creating an indicator per page\r\n\t *\r\n\t * @param {number} count - The count number of pages\r\n\t */\r\n\tsetPageCount(count) {\r\n\t\tthis.currentPageIndex = 0;\r\n\t\tthis.pageCount = count;\r\n\r\n\t\tthis.pages.splice(0, this.pages.length);\r\n\r\n\t\tfor (let idx = 1; idx <= this.pageCount; idx++) {\r\n\t\t\tthis.pages.push(idx);\r\n\t\t}\r\n\r\n\t\tthis.refreshPages();\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tconst pageIndicatorElm = this.containerElm.querySelector('.page-indicator');\r\n\r\n\t\t\tif (pageIndicatorElm == null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tpageIndicatorElm.innerHTML = '';\r\n\r\n\t\t\tif (this.pageCount === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst ulElm = document.createElement('ul');\r\n\r\n\t\t\tulElm.classList.add('pages');\r\n\r\n\t\t\tfor (let idx = 0, liElm, spanElm; idx < this.pageCount; idx++) {\r\n\t\t\t\tliElm = document.createElement('li');\r\n\t\t\t\tliElm.classList.add('page', this.getPageClassName(idx));\r\n\t\t\t\tspanElm = document.createElement('span');\r\n\t\t\t\tspanElm.innerHTML = (idx + 1).toString();\r\n\t\t\t\tspanElm.classList.add('indicator');\r\n\t\t\t\tliElm.appendChild(spanElm);\r\n\t\t\t\tulElm.appendChild(liElm);\r\n\t\t\t}\r\n\r\n\t\t\tpageIndicatorElm.appendChild(ulElm);\r\n\r\n\t\t\t// $(pageIndicatorElm).find('.indicator').on('click', this.onIndicatorClick);\r\n\t\t});\r\n\t}\r\n}\r\n\r\n/**\r\n * SnapScrollPage component class\r\n * Handles logic for pagingation, scrolling and pagingation controls\r\n */\r\nclass SnapScrollPage {\r\n\tcanGoNext = false;\r\n\tcanGoPrev = false;\r\n\tcardClassName = 'item';\r\n\tcontainerElm = null;\r\n\tcurrentPageIndex = -1;\r\n\t_hasScrollOverflow = false;\r\n\tisControlClick = false;\r\n\tisFocusFromKeyEvent = false;\r\n\tisInitialized = false;\r\n\tisScrolling = false;\r\n\t_isSettingPageCount = false;\r\n\tonControlClick = null;\r\n\tonKeyDown = null;\r\n\tonPageFocusIn = null;\r\n\tonPageFocusOut = null;\r\n\tonPageMouseEnter = null;\r\n\tonPageMouseLeave = null;\r\n\tonWindowResize = null;\r\n\tonScroll = null;\r\n\tonSwipeEnd = null;\r\n\tonSwipeMove = null;\r\n\tonSwipeStart = null;\r\n\tpageCount = 0;\r\n\tpageSelector = '';\r\n\tpendingSwipeEventDetail = null;\r\n\tscrollableElm = null;\r\n\tscrollDirection = '';\r\n\tscrollStartTime = 0;\r\n\tscrollStartX = null;\r\n\tscrollTimeout = null;\r\n\tswipeDirection = '';\r\n\tswipeStartPages = [];\r\n\twaitForScroll = false;\r\n\r\n\t/**\r\n\t * Gets the hasScrollOverflow value\r\n\t *\r\n\t * @returns {boolean} `true` if has scroll overflow, `false` if not\r\n\t */\r\n\tget hasScrollOverflow() {\r\n\t\treturn this._hasScrollOverflow;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the isSettingPageCount value\r\n\t *\r\n\t * @returns {boolean} `true` if busy setting the page count, `false` if not\r\n\t */\r\n\tget isSettingPageCount() {\r\n\t\treturn this._isSettingPageCount;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the isSettingPageCount which adds (when `true`) or removes (when `false`)\r\n\t * the css class `rendering` to the scrollable elm.\r\n\t * We do this to allow for immediate (not smooth) scroll\r\n\t *\r\n\t * @param {boolean} `true` if busy setting the page count, `false` if not\r\n\t */\r\n\tset isSettingPageCount(value) {\r\n\t\tif (value === this._isSettingPageCount) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isSettingPageCount = value;\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tif (this.scrollableElm != null) {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.scrollableElm.classList.add('rendering');\r\n\t\t\t\t\tthis.scrollableElm.scrollLeft = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.scrollableElm.classList.remove('rendering');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Tabs control class costructor\r\n\t */\r\n\tconstructor() {\r\n\t\tthis.onControlClick = this._onControlClick.bind(this);\r\n\t\tthis.onKeyDown = this._onKeyDown.bind(this);\r\n\t\tthis.onPageFocusIn = this._onPageFocusIn.bind(this);\r\n\t\tthis.onPageFocusOut = this._onPageFocusOut.bind(this);\r\n\t\tthis.onPageMouseEnter = this._onPageMouseEnter.bind(this);\r\n\t\tthis.onPageMouseLeave = this._onPageMouseLeave.bind(this);\r\n\t\tthis.onScroll = this._onScroll.bind(this);\r\n\t\tthis.onSwipeEnd = this._onSwipeEnd.bind(this);\r\n\t\tthis.onSwipeMove = this._onSwipeMove.bind(this);\r\n\t\tthis.onSwipeStart = this._onSwipeStart.bind(this);\r\n\t\tthis.onWindowResize = this._onWindowResize.bind(this);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates whether or not the scrollable elm has scroll overlow\r\n\t */\r\n\tcalculateOverflow() {\r\n\t\tif (this.scrollableElm == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst visiblePageElms = Array.from(this.scrollableElm.querySelectorAll('.scroll-snap-page.show-item'));\r\n\t\tconst containerWidth = this.scrollableElm.getBoundingClientRect().width;\r\n\t\tconst pagesWidth = visiblePageElms.reduce((accumulator, currentElm) => {\r\n\t\t\tconst computedStyle = getComputedStyle(currentElm);\r\n\t\t\tlet width = currentElm.firstElementChild.getBoundingClientRect().width || 0;\r\n\r\n\t\t\twidth += parseFloat(computedStyle.paddingRight);\r\n\r\n\t\t\treturn accumulator + width;\r\n\t\t}, 0);\r\n\t\tconst hasScrollOverflow = (pagesWidth > containerWidth);\r\n\r\n\t\t// No change, exit\r\n\t\tif (hasScrollOverflow === this._hasScrollOverflow) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._hasScrollOverflow = hasScrollOverflow;\r\n\t\tthis.scrollableElm.classList[hasScrollOverflow ? 'add' : 'remove']('has-overflow');\r\n\t\tthis.containerElm.dispatchEvent(new CustomEvent('scrolloverflowchange', { detail: { hasScrollOverflow }}));\r\n\t}\r\n\r\n\t/**\r\n\t * Focuses in / mouse enters a card element\r\n\t *\r\n\t * @param {HTMLElement} cardElm - The card element\r\n\t * @param {boolean} [shouldUpdatePageIndex] - `true` to update the page index `false` if not. Defaults to `false`\r\n\t */\r\n\tfocusInElm(cardElm, shouldUpdatePageIndex = false) {\r\n\t\tconst pageElm = cardElm.parentElement;\r\n\r\n\t\tthis.isFocusFromKeyEvent = false;\r\n\r\n\t\tif (!pageElm.classList.contains('scroll-snap-page')\r\n\t\t\t|| !pageElm.classList.contains('show-item')\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst currentDataIndex = pageElm.getAttribute('data-index');\r\n\t\tconst currentVisibleIndex = this.getVisiblePageElements()\r\n\t\t\t.findIndex((elm) => elm.getAttribute('data-index') === currentDataIndex);\r\n\r\n\t\tif (shouldUpdatePageIndex) {\r\n\t\t\tthis.setPageIndex(currentVisibleIndex);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Focuses out / mouse leaves a card element\r\n\t *\r\n\t * @param {HTMLElement} cardElm - The card element\r\n\t * @param {HTMLElement} relatedTarget - The \"focus to\" element\r\n\t */\r\n\tfocusOutElm(cardElm, relatedTarget) {\r\n\t\t// const pageElm = cardElm.parentElement;\r\n\r\n\t\t// if (!pageElm.classList.contains('scroll-snap-page')\r\n\t\t// \t|| !pageElm.classList.contains('show-item')\r\n\t\t// \t|| (relatedTarget != null && pageElm.contains(relatedTarget))\r\n\t\t// ) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\t}\r\n\r\n\t/**\r\n\t * Gets an array of element positions for the elements currently visiable and scrolled into view\r\n\t *\r\n\t * @returns {number[]} an array of element positions for the elements currently visiable and scrolled into view\r\n\t */\r\n\tgetScrolledInView() {\r\n\t\tconst scrolledInView = [];\r\n\r\n\t\tif (this.scrollableElm == null) {\r\n\t\t\treturn scrolledInView;\r\n\t\t}\r\n\r\n\t\tconst { clientWidth } = this.scrollableElm;\r\n\t\tconst visiablePageElms = this.getVisiblePageElements();\r\n\r\n\t\tfor (let idx = 0, len = visiablePageElms.length; idx < len; idx++) {\r\n\t\t\tconst { left, right } = visiablePageElms[idx].getBoundingClientRect();\r\n\t\t\tconst isInView = Math.ceil(right) >= 0 && left <= clientWidth;\r\n\r\n\t\t\tif (isInView) {\r\n\t\t\t\tconst pos = idx + 1;\r\n\r\n\t\t\t\tscrolledInView.push(pos);\r\n\t\t\t} else if (scrolledInView.length !== 0) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn scrolledInView;\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates and returns the current scroll index\r\n\t *\r\n\t * @returns {number} The current scroll index\r\n\t */\r\n\tgetScrollIndex() {\r\n\t\tconst visibleElms = this.getVisiblePageElements();\r\n\t\t// const lastIdx = visibleElms.length - 1;\r\n\t\t// const pageHalfWidth = visibleElms[0].getBoundingClientRect().width / 2;\r\n\t\tlet idx = visibleElms.findIndex((elm) => Math.ceil(elm.getBoundingClientRect().left) >= 0);\r\n\r\n\t\t// if (this.scrollableElm.scrollLeft > pageHalfWidth) {\r\n\t\t// \tif ((this.scrollableElm.getBoundingClientRect().width + this.scrollableElm.scrollLeft) >= (this.scrollableElm.scrollWidth - pageHalfWidth)) {\r\n\t\t// \t\tidx = lastIdx;\r\n\t\t// \t} else {\r\n\t\t// \t\tidx = visibleElms.findIndex((elm) => Math.ceil(elm.getBoundingClientRect().left) >= 0);\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\treturn idx;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the currently visisble page elements\r\n\t *\r\n\t * @returns {HTMLElement[]} The currently visible page elements\r\n\t */\r\n\tgetVisiblePageElements() {\r\n\t\treturn Array.from(this.scrollableElm.querySelectorAll(this.pageSelector) || []);\r\n\t}\r\n\r\n\t/**\r\n\t * Navigates to the last page, if able to\r\n\t */\r\n\tgoLast() {\r\n\t\tthis.isControlClick = true;\r\n\t\tthis.setPageIndex(this.pageCount - 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Navigates to the previous page, if able to\r\n\t */\r\n\tgoPrevious() {\r\n\t\tthis.isControlClick = true;\r\n\t\tthis.setPageIndex(this.currentPageIndex - 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Navigates to the next page, if able to\r\n\t */\r\n\tgoNext() {\r\n\t\tthis.isControlClick = true;\r\n\t\tthis.setPageIndex(this.currentPageIndex + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Navigates to a page, if able to\r\n\t *\r\n\t * @param {number} inde - The page index to navigate to\r\n\t */\r\n\tgoTo(index) {\r\n\t\tthis.isControlClick = true;\r\n\t\tthis.setPageIndex(index);\r\n\t}\r\n\r\n\t/**\r\n\t * Initialized the ScrollSnapPage control and binds to events\r\n\t *\r\n\t * @param {HTMLElement} containerElm - The component's container DOM element. Must contain an element\r\n\t * with the className `scroll-snap-page-container` which contains the scrollable contents.\r\n\t * A `pagechange` event will be dispatched on the containerElm when the page changes.\r\n\t * A 'swipe' event will be dispatched on the container elm when the scrollable container is swiped left or right\r\n\t * @param {string} [pageSelector] - query selector for getting a scroll page item. Defaults to '.scroll-snap-page.show-item'\r\n\t */\r\n\tinit(containerElm, pageSelector = '.scroll-snap-page.show-item') {\r\n\t\tif (this.isInitialized) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.containerElm = containerElm;\r\n\t\tthis.pageSelector = pageSelector;\r\n\t\tthis.scrollableElm = this.containerElm.querySelector('.scroll-snap-page-container');\r\n\r\n\t\tconst controlsElm = this.containerElm.querySelector('.scroll-snap-page-controls');\r\n\r\n\t\tif (controlsElm != null) {\r\n\t\t\t$(controlsElm).find('button').on('click', this.onControlClick);\r\n\t\t}\r\n\t\tthis.scrollableElm.addEventListener('scroll', this.onScroll, passiveOptions);\r\n\t\tthis.scrollableElm.addEventListener('touchend', this.onSwipeEnd, passiveOptions);\r\n\t\tthis.scrollableElm.addEventListener('touchmove', this.onSwipeMove, passiveOptions);\r\n\t\tthis.scrollableElm.addEventListener('touchstart', this.onSwipeStart, passiveOptions);\r\n\t\tthis.scrollableElm.addEventListener('focusin', this.onPageFocusIn, passiveOptions);\r\n\t\tthis.scrollableElm.addEventListener('focusout', this.onPageFocusOut, passiveOptions);\r\n\t\tthis.scrollableElm.addEventListener('keydown', this.onKeyDown);\r\n\r\n\t\tthis.scrollableElm.querySelectorAll(`.${this.cardClassName}`).forEach((cardElm) => {\r\n\t\t\tcardElm.addEventListener('mouseenter', this.onPageMouseEnter, passiveOptions);\r\n\t\t\tcardElm.addEventListener('mouseleave', this.onPageMouseLeave, passiveOptions);\r\n\t\t});\r\n\r\n\t\t$(window).resize(this.onWindowResize);\r\n\r\n\t\tthis.isInitialized = true;\r\n\r\n\t\t$(window).on('unload', () => {\r\n\t\t\tconst _controlsElm = this.containerElm.querySelector('.scroll-snap-page-controls');\r\n\r\n\t\t\tif (_controlsElm != null) {\r\n\t\t\t\t_$(controlsElm).find('button').off('click');\r\n\t\t\t}\r\n\t\t\tthis.scrollableElm.removeEventListener('scroll', this.onScroll);\r\n\t\t\tthis.scrollableElm.removeEventListener('focusin', this.onPageFocusIn);\r\n\t\t\tthis.scrollableElm.removeEventListener('focusout', this.onPageFocusOut);\r\n\t\t\tthis.scrollableElm.removeEventListener('keydown', this.onKeyDown);\r\n\t\t\tthis.scrollableElm.removeEventListener('touchend', this.onSwipeEnd);\r\n\t\t\tthis.scrollableElm.removeEventListener('touchmove', this.onSwipeMove);\r\n\t\t\tthis.scrollableElm.removeEventListener('touchstart', this.onSwipeStart);\r\n\r\n\t\t\tthis.scrollableElm.querySelectorAll(`.${this.cardClassName}`).forEach((cardElm) => {\r\n\t\t\t\tcardElm.removeEventListener('mouseenter', this.onPageMouseEnter);\r\n\t\t\t\tcardElm.removeEventListener('mouseleave', this.onPageMouseLeave);\r\n\t\t\t});\r\n\r\n\t\t\tthis.containerElm = undefined;\r\n\t\t\tthis.isInitialized = false;\r\n\t\t\tthis.isScrolling = false;\r\n\t\t\tthis.scrollableElm = null;\r\n\t\t\tthis.scrollTimeout = undefined;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the control button `click` mouse event\r\n\t *\r\n\t * @param {MouseEvent} event - The control button `click` mouseevent\r\n\t */\r\n\t_onControlClick(event) {\r\n\t\tconst controlElm = event.target;\r\n\t\tconst direction = controlElm.classList.contains('next') ? 1 : -1;\r\n\r\n\t\tif (this.isScrolling) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (direction === 1) {\r\n\t\t\tthis.goNext();\r\n\t\t} else {\r\n\t\t\tthis.goPrevious();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the control `keydown` keyboard event\r\n\t *\r\n\t * @param {KeyboardEvent} event - The keydown event\r\n\t */\r\n\t_onKeyDown(event) {\r\n\t\tconst { key, target } = event; // shiftKey\r\n\r\n\t\tthis.isFocusFromKeyEvent = true;\r\n\r\n\t\tif (key !== 'ArrowLeft' && key !== 'ArrowRight') {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst cardElm = target;\r\n\r\n\t\tif (!cardElm.classList.contains(this.cardClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst pageElm = cardElm.parentElement;\r\n\r\n\t\tif (!pageElm.classList.contains('scroll-snap-page')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst currentDataIndex = pageElm.getAttribute('data-index');\r\n\t\tconst visiblePageElms = this.getVisiblePageElements();\r\n\t\tconst currentVisibleIndex = visiblePageElms.findIndex((elm) => elm.getAttribute('data-index') === currentDataIndex);\r\n\t\tlet elmToFocus;\r\n\r\n\t\tswitch (key) {\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\t\tif (currentVisibleIndex === 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telmToFocus = visiblePageElms[currentVisibleIndex - 1];\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\t\tif (currentVisibleIndex === visiblePageElms.length - 1) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telmToFocus = visiblePageElms[currentVisibleIndex + 1];\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\telmToFocus.querySelector(`.${this.cardClassName}`).focus();\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the page item's `focusin` focus event\r\n\t *\r\n\t * @param {FocusEvent} event - The focusin event\r\n\t */\r\n\t_onPageFocusIn(event) {\r\n\t\tconst cardElm = event.target;\r\n\r\n\t\tif (!cardElm.classList.contains(this.cardClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.focusInElm(cardElm, this.isFocusFromKeyEvent);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the page item's `blur` focus event\r\n\t *\r\n\t * @param {FocusEvent} event - The focusout event\r\n\t */\r\n\t_onPageFocusOut(event) {\r\n\t\tconst cardElm = event.target;\r\n\r\n\t\tif (!cardElm.classList.contains(this.cardClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.focusOutElm(cardElm, event.relatedTarget);\r\n\t}\r\n\r\n\t/**\r\n\t * The page mouseenter event handler\r\n\t *\r\n\t * @param {MouseEvent} event - The mouseenter mouse event\r\n\t */\r\n\t_onPageMouseEnter(event) {\r\n\t\tconst cardElm = event.target;\r\n\r\n\t\tif (!cardElm.classList.contains(this.cardClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.focusInElm(cardElm);\r\n\t}\r\n\r\n\t/**\r\n\t * The page mouseleave event handler\r\n\t *\r\n\t * @param {MouseEvent} event - The mouseleave mouse event\r\n\t */\r\n\t_onPageMouseLeave(event) {\r\n\t\tconst cardElm = event.target;\r\n\r\n\t\tif (!cardElm.classList.contains(this.cardClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.focusOutElm(cardElm);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the (simulated) scrollend event.\r\n\t */\r\n\t_onScrollEnd() {\r\n\t\tconst isControlClick = this.isControlClick;\r\n\t\tconst isSettingPageCount = this.isSettingPageCount;\r\n\r\n\t\tthis.isControlClick = false;\r\n\t\tthis.waitForScroll = false;\r\n\t\tthis.isScrolling = false;\r\n\t\tthis.isSettingPageCount = false;\r\n\r\n\t\tthis.scrollDirection = undefined;\r\n\t\tthis.scrollStartX = undefined;\r\n\t\tthis.scrollStartTime = 0;\r\n\r\n\t\tthis.updateControls();\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tthis.scrollableElm.classList.remove('is-scrolling');\r\n\r\n\t\t\tif (this.pendingSwipeEventDetail != null) {\r\n\t\t\t\tthis.pendingSwipeEventDetail.after = this.getScrolledInView();\r\n\t\t\t\t// Dispatch the event\r\n\t\t\t\tthis.containerElm.dispatchEvent(new CustomEvent('swipe', { detail: Object.assign({}, this.pendingSwipeEventDetail)}));\r\n\t\t\t\tthis.pendingSwipeEventDetail = undefined;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Update page index with a delay to ensure accurate page index.\r\n\t\t// A race condition can cause invalid index when swiping\r\n\t\tif (!isControlClick && !isSettingPageCount) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.setPageIndex(this.getScrollIndex(), true);\r\n\t\t\t}, 100);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the scroll event.\r\n\t *\r\n\t * @param {Event} event - The scroll event\r\n\t */\r\n\t_onScroll(_event) {\r\n\t\tif (this.scrollTimeout != null) {\r\n\t\t\tclearTimeout(this.scrollTimeout);\r\n\t\t}\r\n\r\n\t\tthis.scrollTimeout = setTimeout(() => this._onScrollEnd(), 55);\r\n\r\n\t\tif (!this.isScrolling) {\r\n\t\t\tthis._onScrollStart();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.scrollStartX != null && this.scrollDirection == null && (new Date().getTime() - this.scrollStartTime) > 100) {\r\n\t\t\tthis.scrollDirection = (this.scrollableElm.scrollLeft || 0) > this.scrollStartX ? 'left' : 'right';\r\n\t\t}\r\n\r\n\t\tconsole.warn('>>>>>', this.getScrollIndex());\r\n\r\n\t\t// This is NOT coming from a control click which already calls setPageIndex, and NOT setPageCount which already calls setPageIndex\r\n\t\tif (!this.isControlClick && !this.isSettingPageCount) {\r\n\t\t\tthis.setPageIndex(this.getScrollIndex(), true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the (simulated) scrollstart event.\r\n\t */\r\n\t_onScrollStart() {\r\n\t\tthis.isScrolling = true;\r\n\t\tthis.scrollStartTime = new Date().getTime();\r\n\t\tthis.scrollStartX = this.scrollableElm.scrollLeft;\r\n\r\n\t\tconst classNames = [];\r\n\r\n\t\tif (this.canGoNext || this.canGoPrev) {\r\n\t\t\tclassNames.push('is-scrolling');\r\n\t\t}\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tthis.scrollableElm.classList.add(...classNames);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hanldes the `touchend` touch event.\r\n\t * Ensures that we have a swipe direction and seipe start pages.\r\n\t * Resets the sipe props and dispatches a swipe event.\r\n\t * If the scroll is still ocurring due to momentum, don't dispatch the event.\r\n\t * we will let the scroll event handle that.\r\n\t *\r\n\t * @param {TouchEvent} event - The touchend event\r\n\t */\r\n\t_onSwipeEnd(event) {\r\n\t\tconst direction = this.swipeDirection;\r\n\r\n\t\tthis.swipeDirection = undefined;\r\n\r\n\t\tif (direction == null || this.swipeStartPages == null) {\r\n\t\t\tthis.swipeStartPages = undefined;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst before = [...this.swipeStartPages];\r\n\r\n\t\tthis.swipeStartPages = undefined;\r\n\r\n\t\t// Delay to ensure we have the swipe end complete to get the \"after\" cards.\r\n\t\tsetTimeout(() => {\r\n\t\t\tconst after = this.getScrolledInView();\r\n\r\n\t\t\tthis.pendingSwipeEventDetail = { after, before, direction };\r\n\r\n\t\t\tif (!this.isScrolling) {\r\n\t\t\t\t// Dispatch the event\r\n\t\t\t\tthis.containerElm.dispatchEvent(new CustomEvent('swipe', { detail: Object.assign({}, this.pendingSwipeEventDetail)}));\r\n\t\t\t\tthis.pendingSwipeEventDetail = undefined;\r\n\t\t\t}\r\n\t\t}, 200);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the `touchmove` touch event - makes sure that touch has started\r\n\t * and that we have a starting x to compare to the current move x.\r\n\t * If the move x is < start x, then we are moving left, otherwise right,\r\n\t * but if the move is less than the threshode, exit (takes care of vertical\r\n\t * swipes that have slight x varition).\r\n\t *\r\n\t * @param {TouchEvent} event - The touchmove event\r\n\t */\r\n\t_onSwipeMove(_event) {\r\n\t\tif (this.swipeStartPages != null && this.scrollDirection != null && this.swipeDirection == null) {\r\n\t\t\tthis.swipeDirection = this.scrollDirection;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the `touchstart` touch event.\r\n\t * If scrolling is not available or using multiple touches, then exit\r\n\t *\r\n\t * @param {TouchEvent} event - The touchstart event\r\n\t */\r\n\t_onSwipeStart(event) {\r\n\t\tif (!this.canGoNext && !this.canGoPrev || event.touches.length !== 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.swipeStartPages = this.getScrolledInView();\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the window resize event.\r\n\t * Calls calculateOverflow()\r\n\t */\r\n\t_onWindowResize() {\r\n\t\tthis.calculateOverflow();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the page count and resets the page index to 0\r\n\t *\r\n\t * @param {number} count - The page count\r\n\t */\r\n\tsetPageCount(count) {\r\n\t\tthis.isSettingPageCount = true;\r\n\t\tthis.currentPageIndex = 0;\r\n\t\tthis.pageCount = count;\r\n\r\n\t\tconst allPageElms = Array.from(this.scrollableElm.querySelectorAll('.scroll-snap-page') || []);\r\n\r\n\t\t// Reset the page elms\r\n\t\tallPageElms.forEach((pageElm) => {\r\n\t\t\tpageElm.classList.remove('first');\r\n\t\t\tpageElm.classList.remove('last');\r\n\t\t});\r\n\r\n\t\tconst visiblePageElms = allPageElms.filter((pageElm) => pageElm.classList.contains('show-item'));\r\n\r\n\t\tif (visiblePageElms.length !== 0) {\r\n\t\t\tvisiblePageElms[0].classList.add('first');\r\n\t\t\tvisiblePageElms[visiblePageElms.length - 1].classList.add('last');\r\n\t\t}\r\n\r\n\t\t// Reset the scroll left\r\n\t\tsetTimeout(() => {\r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\tthis.currentPageIndex = 0;\r\n\t\t\t\tif (this.scrollableElm != null && this.scrollableElm.scrollLeft !== 0) {\r\n\t\t\t\t\tthis.waitForScroll = true;\r\n\t\t\t\t\tthis.scrollableElm.scrollLeft = 0;\r\n\t\t\t\t}\r\n\t\t\t\tthis.isSettingPageCount = false;\r\n\t\t\t\tthis.updateControls();\r\n\t\t\t\tthis.calculateOverflow();\r\n\t\t\t});\r\n\t\t}, 300);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the current page index\r\n\t *\r\n\t * @param {number} index - The page index to set\r\n\t * @param {boolean} [isFromScroll] - `true` if is from scroll, `false` if not. If true, skips forcing a scroll. Defaults to `false`\r\n\t */\r\n\tsetPageIndex(index, isFromScroll = false) {\r\n\t\tif (this.waitForScroll || index === this.currentPageIndex || index < 0 || index >= this.pageCount) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst pageElm = this.scrollableElm.querySelector(this.pageSelector);\r\n\r\n\t\tif (pageElm == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.isControlClick) {\r\n\t\t\tthis.waitForScroll = true;\r\n\t\t}\r\n\r\n\t\tconst direction = (index > this.currentPageIndex) ? 1 : -1;\r\n\r\n\t\tthis.currentPageIndex = index;\r\n\r\n\t\tthis.updateControls();\r\n\r\n\t\tconst scrollMethod = (isFromScroll || index === 0) ? 'scrollTo' : 'scrollBy';\r\n\t\tconst computedStyle = getComputedStyle(pageElm);\r\n\t\tconst itemSize = (pageElm.firstElementChild.clientWidth || 0) - parseFloat(computedStyle.paddingRight);\r\n\t\tlet left = scrollMethod === 'scrollTo'\r\n\t\t\t? itemSize * index\r\n\t\t\t: (direction === 1)\r\n\t\t\t\t? itemSize\r\n\t\t\t\t: -itemSize;\r\n\r\n\t\tif (scrollMethod === 'scrollTo' && left > (this.scrollableElm.scrollWidth || 0)) {\r\n\t\t\tleft = this.scrollableElm.scrollWidth || 0;\r\n\t\t}\r\n\r\n\t\t// Dispatch the events\r\n\t\tthis.containerElm.dispatchEvent(new CustomEvent('pagechange', { detail: { currentPageIndex: index, direction }}));\r\n\r\n\t\tif (!isFromScroll || index === 0) {\r\n\t\t\tconst delay = isFromScroll && index === 0 ? 100 : 0;\r\n\t\t\tconst doScroll = () => {\r\n\t\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\t\tif (this.scrollableElm != null) {\r\n\t\t\t\t\t\t// Scroll to the page\r\n\t\t\t\t\t\tif (scrollMethod === 'scrollTo') {\r\n\t\t\t\t\t\t\tthis.scrollableElm.scrollLeft = left;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.scrollableElm.scrollBy({ left });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tif (delay !== 0) {\r\n\t\t\t\tsetTimeout(doScroll, delay);\r\n\t\t\t} else {\r\n\t\t\t\tdoScroll();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the controls\r\n\t */\r\n\tupdateControls() {\r\n\t\tif (this.scrollableElm == null) {\r\n\t\t\tthis.canGoNext = this.canGoPrev = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { clientWidth, scrollLeft, scrollWidth } = this.scrollableElm;\r\n\r\n\t\tthis.canGoPrev = (this.currentPageIndex > 0);\r\n\t\tthis.canGoNext = (this.currentPageIndex < (this.pageCount - 1) && !((scrollLeft + clientWidth) >= scrollWidth));\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tthis.containerElm.querySelectorAll('.scroll-snap-page-controls button').forEach((btnElm) => {\r\n\t\t\t\tif (btnElm.classList.contains('next')) {\r\n\t\t\t\t\tif (this.canGoNext) {\r\n\t\t\t\t\t\tbtnElm.removeAttribute('disabled');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbtnElm.setAttribute('disabled', 'true');\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (btnElm.classList.contains('prev')) {\r\n\t\t\t\t\tif (this.canGoPrev) {\r\n\t\t\t\t\t\tbtnElm.removeAttribute('disabled');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbtnElm.setAttribute('disabled', 'true');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n}\r\n"]}