{"version":3,"file":"Tabs-12bfcef5.js","names":["define","Moduler","create","defaults","event","handles","panels","activeClass","togglable","scrollable","showFirst","selectedPanel","defaultTab","tabParam","tabChangeHandler","init","self","this","bindEvents","Array","from","el","querySelectorAll","options","forEach","handle","addEventListener","e","data","showPanel","key","target","dispatchEvent","Event","selectedHandle","filter","matches","selectedTab","params","window","location","search","split","paramsArr","i","length","parts","centerSelected","toggleNavigationButtons","resizeTimeout","querySelector","preventDefault","scrollNavigation","tab","onresize","clearTimeout","setTimeout","handleIndex","indexOf","closest","panel","h","classList","remove","CustomEvent","p","toggle","add","call","tabP","splice","push","join","query","startsWith","history","pushState","pathname","direction","scrollAmount","getBoundingClientRect","width","scrollBy","left","top","behavior","scrollableWidth","tabsItemsWidth","scrollLeft","leftButton","rightButton","selectedPosition","newScrollPosition","selected","selectedWidth","lastKnownScrollPosition","innerWidth"],"sources":["Tabs.js"],"mappings":"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","sourcesContent":["define(['moduler'], function (Moduler) {\r\n 'use strict';\r\n\r\n /*\r\n Example HTML:\r\n\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n */\r\n\r\n return Moduler.create({\r\n defaults: {\r\n event: 'click',\r\n handles: '.Tabs-item',\r\n panels: '.Tabs-panel',\r\n activeClass: 'is-active',\r\n togglable: false, // whether to allow a panel to close if you click on its handle again.\r\n scrollable: false, // whether to activate horizontal scroll if needed\r\n showFirst: true, // whether to show first (or selected) panel on load.\r\n selectedPanel: null, // the panel to show at page load (optional).\r\n defaultTab: 0,\r\n tabParam: 'tab',\r\n tabChangeHandler: null // add a function here to have it called when the user changes tab\r\n },\r\n\r\n init: function () {\r\n var self = this;\r\n \r\n self.bindEvents(self);\r\n\r\n self.handles = Array.from(self.el.querySelectorAll(self.options.handles));\r\n\r\n self.panels = Array.from(self.el.querySelectorAll(self.options.panels));\r\n \r\n self.handles.forEach(handle => {\r\n handle.addEventListener(self.options.event, function (e) {\r\n e.data = self;\r\n self.showPanel(e);\r\n });\r\n handle.addEventListener('keydown', e => {\r\n if (e.key === 'Enter') {\r\n e.target.dispatchEvent(new Event('click'));\r\n e.data = self;\r\n self.showPanel(e);\r\n }\r\n });\r\n });\r\n\r\n\r\n if (self.options.selectedPanel) {\r\n let selectedHandle = self.handles.filter(el => el.matches('[data-name=\"' + self.options.selectedPanel + '\"]'))[0];\r\n if (selectedHandle) {\r\n selectedHandle.dispatchEvent(new Event(self.options.event));\r\n }\r\n } else if (self.options.showFirst) {\r\n let selectedTab = self.options.defaultTab;\r\n var params = window.location.search.split(\"?\")[1];\r\n if (params) {\r\n var paramsArr = params.split(\"&\");\r\n for (var i = paramsArr.length - 1; i >= 0; i -= 1) {\r\n var parts = paramsArr[i].split(\"=\");\r\n if (parts[0] === self.options.tabParam && parts[1] > 0 && self.handles.length > parts[1]) {\r\n selectedTab = parts[1];\r\n }\r\n }\r\n }\r\n\r\n if (!selectedTab) {\r\n selectedTab = 0;\r\n }\r\n\r\n Array.from(self.handles)[selectedTab].dispatchEvent(new Event(self.options.event));\r\n }\r\n\r\n if (self.options.scrollable) {\r\n self.centerSelected(self);\r\n self.toggleNavigationButtons(self);\r\n }\r\n },\r\n\r\n bindEvents: function (self) {\r\n if (self.options.scrollable) {\r\n self.el.querySelector('.js-tabsLeft')?.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n self.scrollNavigation(self, 'left');\r\n });\r\n\r\n self.el.querySelector('.js-tabsRight')?.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n self.scrollNavigation(self, 'right');\r\n });\r\n\r\n self.el.querySelectorAll('.js-tabsScrollable').forEach(tab => {\r\n tab.addEventListener('scroll', function () {\r\n self.toggleNavigationButtons(self);\r\n });\r\n });\r\n\r\n // Timeout so the event run only once\r\n var resizeTimeout;\r\n window.onresize = function (event) {\r\n clearTimeout(resizeTimeout);\r\n\r\n resizeTimeout = setTimeout(function () {\r\n self.toggleNavigationButtons(self);\r\n self.centerSelected(self);\r\n }, 500);\r\n };\r\n }\r\n },\r\n\r\n showPanel: function (e) {\r\n e.preventDefault();\r\n\r\n let self = e.data;\r\n let handle = e.target;\r\n let handleIndex = self.handles.indexOf(handle);\r\n\r\n // if event was triggered on a link inside \"handles\" then we try to find the handle element now\r\n if (!handle.matches(self.options.handles)) {\r\n handle = handle.closest(self.options.handles);\r\n handleIndex = self.handles.indexOf(handle);\r\n }\r\n\r\n let panel = self.panels[handleIndex];\r\n\r\n self.handles.filter(h => h !== handle).forEach(h => {\r\n h.classList.remove(self.options.activeClass);\r\n h.dispatchEvent(new CustomEvent('Tab-hide'));\r\n });\r\n\r\n self.panels.filter(p => p !== panel).forEach(p => {\r\n p.classList.remove(self.options.activeClass);\r\n p.dispatchEvent(new CustomEvent('Tab-hide'));\r\n });\r\n\r\n if (self.options.togglable) {\r\n handle.classList.toggle(self.options.activeClass);\r\n panel.classList.toggle(self.options.activeClass);\r\n } else {\r\n handle.classList.add(self.options.activeClass);\r\n panel.classList.add(self.options.activeClass);\r\n }\r\n handle.dispatchEvent(new CustomEvent('Tab-show'));\r\n panel.dispatchEvent(new CustomEvent('Tab-show'));\r\n\r\n if (self.options.tabChangeHandler != null) {\r\n self.options.tabChangeHandler.call(panel);\r\n }\r\n\r\n var params = window.location.search.split(\"?\")[1];\r\n var tabP = '';\r\n if (handleIndex > 0) {\r\n tabP = self.options.tabParam + \"=\" + handleIndex;\r\n }\r\n if (!params) {\r\n params = tabP;\r\n } else {\r\n var paramsArr = params.split(\"&\");\r\n for (var i = paramsArr.length - 1; i >= 0; i -= 1) {\r\n var parts = paramsArr[i].split(\"=\");\r\n if (parts[0] === self.options.tabParam) {\r\n paramsArr.splice(i, 1);\r\n }\r\n }\r\n if (tabP.length > 0) {\r\n paramsArr.push(tabP);\r\n }\r\n params = paramsArr.join(\"&\");\r\n }\r\n\r\n var query = params != null && params.length > 0 ? '?' + params : '';\r\n if (query.startsWith('#')) {\r\n window.history.pushState(null, null, location.pathname + query);\r\n } else if (query.length == 0) {\r\n window.history.pushState(null, null, location.pathname);\r\n } else {\r\n window.history.pushState(null, null, query);\r\n }\r\n\r\n if (self.options.scrollable) {\r\n self.centerSelected(self);\r\n }\r\n },\r\n\r\n scrollNavigation: function (self, direction) {\r\n var scrollable = self.el.querySelector('.js-tabsScrollable');\r\n\r\n let scrollAmount = scrollable.getBoundingClientRect().width/2;\r\n if (direction !== 'right') {\r\n scrollAmount = -scrollAmount;\r\n }\r\n scrollable.scrollBy({ left: scrollAmount, top: 0, behavior: 'smooth' });\r\n },\r\n\r\n toggleNavigationButtons: function (self) {\r\n let scrollable = self.el.querySelector('.js-tabsScrollable');\r\n let scrollableWidth = scrollable.getBoundingClientRect().width;\r\n let tabsItemsWidth = self.el.querySelector('.js-tabsItems').getBoundingClientRect().width;\r\n let scrollLeft = scrollable.scrollLeft;\r\n let leftButton = self.el.querySelector('.js-tabsLeft');\r\n let rightButton = self.el.querySelector('.js-tabsRight');\r\n\r\n if (tabsItemsWidth > scrollableWidth) {\r\n if (leftButton) {\r\n if (scrollLeft > 0) {\r\n leftButton.classList.remove(\"hide200\");\r\n leftButton.classList.add(\"show200\");\r\n } else {\r\n leftButton.classList.remove(\"show200\");\r\n leftButton.classList.add(\"hide200\");\r\n }\r\n }\r\n\r\n if (rightButton) {\r\n if (scrollLeft + scrollableWidth < tabsItemsWidth - 2) {\r\n rightButton.classList.remove(\"hide200\");\r\n rightButton.classList.add(\"show200\");\r\n } else {\r\n rightButton.classList.remove(\"show200\");\r\n rightButton.classList.add(\"hide200\");\r\n }\r\n }\r\n } else {\r\n leftButton?.classList.remove(\"show200\");\r\n leftButton?.classList.add(\"hide200\");\r\n rightButton?.classList.remove(\"show200\");\r\n rightButton?.classList.add(\"hide200\");\r\n }\r\n },\r\n\r\n centerSelected: function (self) {\r\n let scrollable = self.el.querySelector('.js-tabsScrollable'),\r\n selected = self.el.querySelector('.is-active'),\r\n selectedWidth = selected.getBoundingClientRect().width,\r\n selectedPosition,\r\n newScrollPosition,\r\n lastKnownScrollPosition = scrollable.scrollLeft;\r\n \r\n // Reset scroll to get correct offset of selected item\r\n scrollable.scrollLeft = 0;\r\n \r\n selectedPosition = (selected ? selected.getBoundingClientRect().left : 0) + selectedWidth;\r\n\r\n //// Restore scroll position so animation can be done\r\n scrollable.scrollLeft = lastKnownScrollPosition;\r\n newScrollPosition = selectedPosition - (window.innerWidth / 2) - (selectedWidth / 2);\r\n newScrollPosition = (newScrollPosition > 0 ? newScrollPosition : 0);\r\n\r\n scrollable.scrollBy({ left: newScrollPosition - scrollable.scrollLeft, top: 0, behavior: 'smooth' });\r\n }\r\n });\r\n});"]}