{"version":3,"file":"Tabs.js","names":["Tabs","a","setters","Component","default","replaceState","on","off","trigger","mix","getHash","deepMerge","tryParseJSON","Accessibility","AnalyticsMixin","Event","mediaQuery","scrollTo","execute","with","constructor","element","options","arguments","length","scrollOffset","classNames","activeElement","hiddenElement","stickyElement","tabCssClass","tabActiveCssClass","isVertical","stickyDesktopTabItems","stickyMobileTabItems","scrollTopOffset","_resizable","initCache","selectors","tab","tabPanel","tabContent","tabElements","querySelectorAll","tabPanelElements","tabContentElements","scrollable","querySelector","tabScrollContainer","tabsWrapper","stickyLimiter","animatedIcon","initState","trim","split","initTabs","initTabPanels","tabToReopen","getTabToReopen","open","updateTabVirtualPath","state","isSticky","isStickyAllowed","is","headerHeight","afterInit","updateObserverThreshold","onResize","observer","unobserve","disconnect","tabHeight","getBoundingClientRect","height","th","window","innerHeight","heightRatio","threshold","Math","floor","IntersectionObserver","onIntersection","bind","observe","tabs","forEach","el","index","id","setAttribute","classList","contains","activeTabIndex","activeTabElement","decodeURIComponent","tabPanels","removeAttribute","activeTabPanelElement","bindEvents","onTabChange","onHashChange","onKeyDown","onUpdatePosition","event","isActionKey","indexOf","key","setTabKeyboardTrap","nodes","e","targetElement","target","matches","closest","stopPropagation","preventDefault","getAttribute","skipScrolling","close","elementTabPanel","document","getElementById","tabEnable","scrollToElement","tabPanelEnable","setTimeout","tabID","bubbles","triggerOnOpenEvents","emitOnOpenAnalyticsEvents","animateIcon","componentsToTrack","component","componentsToUpdate","scrollables","emit","sendAnalyticsOnTabChange","emitAnalyticsOnTabChange","ctaName","category","action","toLowerCase","label","extraData","event_name","cta_name","hasAttribute","updateVirtualPage","tabDisable","tabPanelDisable","stopVideoInsideTab","remove","add","offset","scroll","top","offsetTop","left","behavior","offsetLeft","video","updatePosition","style","entries","currentHeight","offsetHeight","entry","intersectionRatio","boundingClientRect","destroy","removeListener"],"sources":["components/global/Tabs.js"],"sourcesContent":["/* eslint-disable max-lines */\nimport Component from 'core/Component';\nimport { replaceState } from 'services/History';\nimport { on, off, trigger } from 'toolbox/event';\nimport { mix } from 'core/mixwith';\nimport { getHash } from 'toolbox/location';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { tryParseJSON } from 'toolbox/object';\nimport Accessibility from 'mixins/Accessibility';\nimport AnalyticsMixin from 'mixins/Analytics';\nimport { Event } from 'services/EventEmitter';\nimport { mediaQuery } from 'toolbox/mediaQuery';\nimport { scrollTo } from 'toolbox/scroll';\n\n/**\n * This is a description of the Tabs constructor function.\n * @class\n * @classdesc This is a description of the Tabs class.\n * @extends Component\n */\nexport default class Tabs extends mix(Component).with(Accessibility, AnalyticsMixin) {\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 scrollOffset: 40, // Offset from the right for the selected tab autoscroll behavior on click\n classNames: {\n activeElement: 'm-active',\n hiddenElement: 'm-hide',\n stickyElement: 'm-sticked',\n tabCssClass: '',\n tabActiveCssClass: '',\n },\n isVertical: false,\n stickyDesktopTabItems: false,\n stickyMobileTabItems: false,\n scrollTopOffset: 153, // Change the scroll offset If you have a fixed navigation bar\n _resizable: true,\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.selectors = {\n tab: '[data-js-tab]',\n tabPanel: '[data-js-tab-panel]',\n tabContent: '[data-js-tab-content]',\n };\n this.selectors.tabElements = this.element.querySelectorAll(this.selectors.tab);\n this.selectors.tabPanelElements = this.element.querySelectorAll(this.selectors.tabPanel);\n this.selectors.tabContentElements = this.element.querySelectorAll(this.selectors.tabContent);\n this.selectors.scrollable = this.element.querySelector('[data-component=\"global/Scrollable\"]');\n this.selectors.tabScrollContainer = this.element.querySelector('[data-js-tab-scroll-container]');\n this.selectors.tabsWrapper = this.element.querySelector('[data-js-tabs-wrapper]');\n this.selectors.stickyLimiter = this.element.querySelector('[data-js-sticky-limit]');\n this.selectors.animatedIcon = this.element.querySelector('[data-js-animated-icon]');\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n this.options.classNames.tabCssClass = this.options.classNames.tabCssClass ? this.options.classNames.tabCssClass.trim().split(' ') : [];\n this.options.classNames.tabActiveCssClass = this.options.classNames.tabActiveCssClass ? this.options.classNames.tabActiveCssClass.trim().split(' ') : [];\n\n this.initTabs();\n this.initTabPanels();\n const tabToReopen = this.getTabToReopen();\n if (tabToReopen) {\n this.open(tabToReopen);\n } else {\n this.updateTabVirtualPath();\n }\n\n this.state.isSticky = false;\n this.state.isStickyAllowed = (this.options.stickyDesktopTabItems && mediaQuery.is('large')) || (this.options.stickyMobileTabItems && mediaQuery.is('medium down'));\n this.state.headerHeight = 0;\n }\n\n /**\n * Called after component initialization and save original tab index\n */\n afterInit() {\n if (this.state.isStickyAllowed) {\n this.updateObserverThreshold();\n }\n }\n\n /**\n * Update popper position when window is resized\n */\n onResize() {\n this.state.isStickyAllowed = (this.options.stickyDesktopTabItems && mediaQuery.is('large')) || (this.options.stickyMobileTabItems && mediaQuery.is('medium down'));\n if (this.state.isStickyAllowed) {\n this.updateObserverThreshold();\n }\n }\n\n /**\n * Update Observer Threshold value\n */\n updateObserverThreshold() {\n if (this.observer) {\n this.observer.unobserve(this.element);\n this.observer.disconnect();\n }\n\n const tabHeight = this.element.getBoundingClientRect().height;\n let th = [0, 1];\n\n // When the component height is close to or bigger than the screen height,\n // observer, due to its async nature, requires more points to catch the intersection\n // during the fast scrolling and work smooth during the slow scrolling\n if (tabHeight / window.innerHeight > 0.7) {\n const heightRatio = window.innerHeight / tabHeight;\n const threshold = heightRatio > 1 ? 1 : Math.floor(heightRatio * 100) / 100;\n th = [\n 0,\n 0.01,\n 0.05,\n 0.1,\n threshold - 0.1,\n threshold - 0.05,\n threshold - 0.01,\n threshold,\n ];\n }\n\n this.observer = new window.IntersectionObserver(this.onIntersection.bind(this), {\n threshold: th,\n });\n this.observer.observe(this.element);\n }\n\n /**\n * Function to init Tab navigation buttons\n */\n initTabs() {\n const tabs = this.selectors.tabElements;\n [...tabs].forEach((el, index) => {\n el.id = `${this.id}_control_${index}`;\n el.setAttribute('aria-controls', `${this.id}_panel_${index}`);\n el.setAttribute('data-js-index', index);\n if (el.classList.contains(this.options.classNames.activeElement)) {\n this.state.activeTabIndex = index;\n this.state.activeTabElement = el;\n }\n });\n }\n\n /**\n * Uses document.location.hash in order to detect and activate last opened tab\n *\n * @returns {Boolean|HTMLElement} - return false or HTML element\n */\n getTabToReopen() {\n const tab = decodeURIComponent(getHash('tab'));\n if (tab) {\n return this.element.querySelector(`[data-titlehash=\"${tab}\"]`);\n }\n return false;\n }\n\n /**\n * Function to init Tab panels which contain content\n */\n initTabPanels() {\n const tabPanels = this.selectors.tabPanelElements;\n [...tabPanels].forEach((el, index) => {\n el.id = `${this.id}_panel_${index}`;\n if (tabPanels.length > 1) {\n el.setAttribute('aria-labelledby', `${this.id}_control_${index}`);\n el.setAttribute('role', 'tabpanel');\n } else {\n el.removeAttribute('role');\n el.removeAttribute('aria-labelledby');\n }\n if (el.classList.contains(this.options.classNames.activeElement)) {\n this.state.activeTabPanelElement = el;\n } else {\n el.setAttribute('aria-hidden', true);\n }\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('click', this.element, this.onTabChange.bind(this));\n on('tab.change', this.element, this.onTabChange.bind(this));\n on(`hashchange.tabs-${this.id}`, window, this.onHashChange.bind(this));\n\n // Accessibility events\n on('keydown', this.element, this.onKeyDown.bind(this));\n\n if (this.state.isStickyAllowed) {\n Event.on('header.updateHeight', this.onUpdatePosition, this);\n }\n }\n\n /**\n * Function which is 'keydown' handler for Tab keydown\n * @param {EventObject} event - event object\n */\n onKeyDown(event) {\n const keyboardTrapActions = ['Tab', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'];\n const isActionKey = keyboardTrapActions.indexOf(event.key) !== -1;\n\n if (['Enter', ' '].indexOf(event.key) !== -1) {\n this.onTabChange(event);\n }\n if (isActionKey) {\n this.state.activeTabIndex = this.setTabKeyboardTrap(\n event,\n {\n index: this.state.activeTabIndex,\n element: this.state.activeTabElement,\n nodes: this.selectors.tabElements,\n },\n );\n }\n }\n\n /**\n * Function which is 'tab.change' or 'click' handler for Tab change/click\n * @param {EventObject} e - event object\n */\n onTabChange(e) {\n let targetElement = e.target;\n\n if (!targetElement.matches(this.selectors.tab)) {\n targetElement = targetElement.closest(this.selectors.tab);\n }\n\n if (targetElement) {\n e.stopPropagation();\n e.preventDefault();\n replaceState({}, '', `#tab=${targetElement.getAttribute('data-titlehash') || targetElement.id}`);\n this.open(targetElement);\n }\n }\n\n /**\n * Function which is 'hashchange' handler\n * @param {EventObject} e - event object\n */\n onHashChange() {\n const tabToReopen = this.getTabToReopen();\n if (tabToReopen) {\n if (this.state.activeTabElement && this.state.activeTabElement.id === tabToReopen.id) {\n return;\n }\n replaceState({}, '', `#tab=${tabToReopen.getAttribute('data-titlehash') || tabToReopen.id}`);\n this.open(tabToReopen, true);\n }\n }\n\n /**\n * Function describes behavior which is executed on Tab change to open particular tab\n * @param {HTMLElement} element - HTML element\n * @param {Boolean} skipScrolling - flag to skip scrolling (clicking on anchor with the hash in URL will scroll to the element)\n */\n open(element, skipScrolling) {\n this.close(this.state.activeTabElement);\n const elementTabPanel = document.getElementById(element.getAttribute('aria-controls'));\n this.tabEnable(element);\n if (!skipScrolling) {\n this.scrollToElement(element);\n }\n this.tabPanelEnable(elementTabPanel);\n this.state.activeTabElement = element;\n this.state.activeTabPanelElement = elementTabPanel;\n this.state.activeTabIndex = Number(element.getAttribute('data-js-index'));\n\n setTimeout(() => {\n const tabID = element.getAttribute('data-titlehash');\n trigger('tab.opened', elementTabPanel, {\n bubbles: true,\n tabID,\n });\n\n this.triggerOnOpenEvents(elementTabPanel, tabID);\n this.updateTabVirtualPath();\n this.emitOnOpenAnalyticsEvents(element);\n if (this.selectors.animatedIcon) {\n this.animateIcon();\n }\n }, 0);\n }\n\n /**\n * Triggers various events for components within the tab panel.\n * @param {Element} elementTabPanel - The tab panel element.\n * @param {string} tabID - The ID of the opened tab.\n */\n triggerOnOpenEvents(elementTabPanel, tabID) {\n const componentsToTrack = elementTabPanel.querySelectorAll('[data-js-track-tab-opened]');\n componentsToTrack.forEach((component) => {\n trigger('tab.opened', component, { tabID });\n });\n\n const componentsToUpdate = elementTabPanel.querySelectorAll('[data-component=\"global/Carousel\"]');\n componentsToUpdate.forEach((component) => {\n trigger('carousel.update', component, { bubbles: true });\n });\n\n const scrollables = elementTabPanel.querySelectorAll('[data-component=\"global/Scrollable\"]');\n scrollables.forEach((scrollable) => {\n trigger('scrollable.update', scrollable);\n });\n }\n\n /**\n * Emits analytics events based on the tab element's data attributes.\n * @param {Element} element - The tab element.\n */\n emitOnOpenAnalyticsEvents(element) {\n if (tryParseJSON(element.getAttribute('data-analytics'))) {\n Event.emit('analytics.event', tryParseJSON(element.getAttribute('data-analytics')));\n }\n if (this.options.sendAnalyticsOnTabChange) {\n this.emitAnalyticsOnTabChange(element);\n }\n }\n\n /**\n * Emit Analytics on tab change\n * @param {String} element - target element\n */\n emitAnalyticsOnTabChange(element) {\n const ctaName = element.getAttribute('data-js-tab-name');\n Event.emit('analytics.event', {\n event: 'uaevent',\n category: 'highlight tab',\n action: ctaName ? ctaName.toLowerCase() : '',\n label: '{{dataLayer.page.category}}',\n extraData: {\n event_name: 'highlight_tab_button_click',\n cta_name: ctaName ? ctaName.toLowerCase() : '',\n },\n });\n }\n\n /**\n * Update virtual page path for the current tab\n */\n updateTabVirtualPath() {\n if (this.state.activeTabElement && this.state.activeTabElement.hasAttribute('data-virtual-page')) {\n this.updateVirtualPage(tryParseJSON(this.state.activeTabElement.getAttribute('data-virtual-page')));\n }\n }\n\n /**\n * Close tab\n * @param {HTMLElement} element - HTML element\n */\n close(element) {\n this.tabDisable(element);\n const elementTabPanel = document.getElementById(element.getAttribute('aria-controls'));\n this.tabPanelDisable(elementTabPanel);\n this.stopVideoInsideTab(elementTabPanel);\n trigger('tab.closed', elementTabPanel, {\n bubbles: true,\n tabID: element.getAttribute('data-titlehash'),\n });\n }\n\n /**\n * Function to disable particular tab navigation button\n * @param {HTMLElement} element - HTML element\n */\n tabDisable(element) {\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n element.classList.remove('m-active');\n if (this.options.classNames.tabActiveCssClass) {\n this.options.classNames.tabActiveCssClass.forEach((tabActiveCssClass) => {\n element.classList.remove(tabActiveCssClass);\n });\n }\n if (this.options.classNames.tabCssClass) {\n this.options.classNames.tabCssClass.forEach((tabCssClass) => {\n element.classList.add(tabCssClass);\n });\n }\n }\n\n /**\n * Function to disable/hide particular tab content panel\n * @param {HTMLElement} element - HTML element\n */\n tabPanelDisable(element) {\n element.classList.remove('m-active');\n element.setAttribute('aria-hidden', true);\n }\n\n /**\n * Function to enable particular tab navigation button\n * @param {HTMLElement} element - HTML element\n */\n tabEnable(element) {\n element.setAttribute('aria-selected', true);\n element.setAttribute('tabindex', '0');\n element.classList.add('m-active');\n\n if (this.options.classNames.tabCssClass) {\n this.options.classNames.tabCssClass.forEach((tabCssClass) => {\n element.classList.remove(tabCssClass);\n });\n }\n if (this.options.classNames.tabActiveCssClass) {\n this.options.classNames.tabActiveCssClass.forEach((tabActiveCssClass) => {\n element.classList.add(tabActiveCssClass);\n });\n }\n\n if (this.state.isSticky) {\n scrollTo(this.selectors.stickyLimiter, this.options.scrollTopOffset);\n }\n }\n\n /**\n * Function enable/show particular tab content panel\n * @param {HTMLElement} element - HTML element\n */\n tabPanelEnable(element) {\n element.classList.add('m-active');\n element.setAttribute('aria-hidden', false);\n }\n\n /**\n * Function to animate icon\n */\n animateIcon() {\n if (this.state.activeTabIndex === 0) {\n this.selectors.animatedIcon.classList.remove('m-active');\n } else {\n this.selectors.animatedIcon.classList.add('m-active');\n }\n }\n\n /**\n * Scroll to the current tab element\n * @param {HTMLElement} element - HTML element\n */\n scrollToElement(element) {\n if (this.selectors.scrollable) {\n trigger('scrollable.scrollToElement', this.selectors.scrollable, { element, offset: this.options.scrollOffset });\n } else if (this.selectors.tabScrollContainer) { // Fallback for native browser scroll instead of Scrollable component\n if (this.options.isVertical) {\n this.selectors.tabScrollContainer.scroll({\n top: element.offsetTop - this.options.scrollOffset,\n left: 0,\n behavior: 'smooth',\n });\n } else {\n this.selectors.tabScrollContainer.scroll({\n top: 0,\n left: element.offsetLeft - this.options.scrollOffset,\n behavior: 'smooth',\n });\n }\n }\n }\n\n /**\n * Stop video inside tab (if present) when tab is closed\n * @param {HTMLElement} tab - HTML element\n */\n stopVideoInsideTab(tab) {\n const video = tab.querySelector('[data-js-video-container]');\n if (video) {\n trigger('video.player.pause', video);\n }\n }\n\n /**\n * Update top position of the sticky header\n *\n * @param {Object} event of the header\n */\n onUpdatePosition(event) {\n this.state.headerHeight = event.isSticky ? event.height : 0;\n this.updatePosition(this.state.headerHeight);\n }\n\n /**\n * Update top position of the sticky header\n *\n * @param {Number} height of the header\n */\n updatePosition(height) {\n this.selectors.tabsWrapper.style.top = `${height}px`;\n }\n\n /**\n * Inter section event handler\n * @param {Object} entries - Entries object\n */\n onIntersection(entries) {\n const currentHeight = this.selectors.tabsWrapper.offsetHeight;\n\n entries.forEach((entry) => {\n if ((entry.intersectionRatio > 0) && entry.boundingClientRect.top < 0) {\n this.selectors.tabsWrapper.classList.add(this.options.classNames.stickyElement);\n this.selectors.stickyLimiter.style.height = `${currentHeight}px`;\n this.state.isSticky = true;\n this.updatePosition(this.state.headerHeight);\n } else {\n this.selectors.tabsWrapper.classList.remove(this.options.classNames.stickyElement);\n this.state.isSticky = false;\n this.selectors.stickyLimiter.style.height = 0;\n this.updatePosition(0);\n }\n });\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 if (this.observer) {\n this.observer.unobserve(this.element);\n this.observer.disconnect();\n }\n off('click', this.element);\n off('hashchange', window);\n off('tab.change', this.element);\n\n if (this.state.isStickyAllowed) {\n Event.removeListener('header.updateHeight', this.onUpdatePosition, this);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}