{"version":3,"file":"365.min.js?t=1743173738202","mappings":"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","sources":["webpack://@hero-digital/masonite/./src/components/modules/Tabs/Tabs.js","webpack://@hero-digital/masonite/./src/components/modules/Tabs/index.js"],"sourcesContent":["import { actionOnClickOutside } from 'utilities/utilities'\nimport Services from 'services'\n\n/**\n * Module that controls the Tabs component\n */\nexport default class Tabs {\n\tstatic SELECTORS = {\n\t\tCOMPONENT: '[data-cmp-is=\"tabs\"]',\n\t\tTAB: '[data-cmp-tabs=\"tab\"]',\n\t\tCONTENT: '[data-cmp-tabs=\"content\"]',\n\t\tLINE: '[data-cmp-tabs=\"line\"]',\n\t\tTABS_CONTAINER: '[data-cmp-tabs=\"tabs-container\"]',\n\t\tTABS_SELECT: '[data-cmp-hook=\"mod-tabs-select\"]',\n\t\tTABS_SELECT_TOGGLE: '[data-cmp-hook=\"mod-tabs-select-toggle\"]',\n\t\tTABS_SELECT_LIST: '[data-cmp-hook=\"mod-tabs-select-list\"]',\n\t\tTABS_SELECT_LINK: '[data-cmp-hook=\"mod-tabs-select-link\"]'\n\t}\n\n\tstatic CLASSES = {\n\t\tCONTENT_ACTIVE: 'mod-tabs__content--active',\n\t\tTAB_ACTIVE: 'mod-tabs__tab--active',\n\t\tSELECT_ACTIVE: 'mod-tabs-select--active',\n\t\tENABLE_SELECT: 'mod-tabs--enable-select'\n\t}\n\n\tstatic THEMES = {\n\t\tLIGHT: 'theme-light',\n\t\tDARK: 'theme-dark'\n\t}\n\n\tstatic EVENTS = {\n\t\tTAB_CLICK: 'tab click event',\n\t\tSWITCH_TAB: 'switch tab event'\n\t}\n\n\tconstructor(element) {\n\t\tthis.element = element\n\t\tthis.id = element?.id || ''\n\t\tthis.services = Services.getInstance()\n\n\t\tthis.EventEmitterService = this.services.EventEmitterService\n\t\tthis.BreakpointListener = this.services.BreakpointListener\n\n\t\tthis.cacheDom()\n\t\tthis.attachEvents()\n\t\tthis.initializeComponent()\n\t}\n\n\t/**\n\t * Cache the DOM references needed for the component\n\t */\n\tcacheDom() {\n\t\tthis.tabsContainer = this.element.querySelector(Tabs.SELECTORS.TABS_CONTAINER)\n\t\tthis.tabs = this.element.querySelectorAll(Tabs.SELECTORS.TAB)\n\t\tthis.contents = this.element.querySelectorAll(Tabs.SELECTORS.CONTENT)\n\t\tthis.line = this.element.querySelector(Tabs.SELECTORS.LINE)\n\n\t\tthis.tabsSelect = this.element.querySelector(Tabs.SELECTORS.TABS_SELECT)\n\t\tif (this.tabsSelect) {\n\t\t\tthis.tabsSelectToggleBtn = this.tabsSelect.querySelector(Tabs.SELECTORS.TABS_SELECT_TOGGLE)\n\t\t\tthis.tabsSelectList = this.tabsSelect.querySelector(Tabs.SELECTORS.TABS_SELECT_LIST)\n\t\t\tthis.tabsSelectLinks = this.tabsSelect.querySelectorAll(Tabs.SELECTORS.TABS_SELECT_LINK)\n\t\t}\n\t}\n\n\t/**\n\t * Destroy the component and clean up event listeners\n\t */\n\tdestroy() {\n\t\tthis.detachEvents()\n\t}\n\n\t/**\n\t * Animate the underline line under the active tab\n\t */\n\tanimateLine = (activeTab) => {\n\t\tif (!activeTab) return\n\n\t\t// Use requestAnimationFrame to ensure the DOM has updated\n\t\trequestAnimationFrame(() => {\n\t\t\tconst tabRect = activeTab.getBoundingClientRect()\n\t\t\tconst containerRect = this.tabsContainer.getBoundingClientRect()\n\n\t\t\t// Calculate left relative to the tabs container\n\t\t\tconst left = tabRect.left - containerRect.left\n\t\t\tconst width = tabRect.width\n\n\t\t\t// Apply styles\n\t\t\tthis.line.style.left = `${left}px`\n\t\t\tthis.line.style.width = `${width}px`\n\t\t\tthis.line.style.display = 'block'\n\t\t})\n\t}\n\n\t/**\n\t * Switch to a specific tab\n\t */\n\tswitchTab(id, isInternal = false) {\n\t\tconst tabElement = Array.from(this.tabs).find(tab => tab.id === id)\n\t\tconst contentElement = Array.from(this.contents).find(content => content.id === `${id}-content`)\n\n\t\tif (!tabElement || !contentElement) return\n\n\t\t// Update active classes\n\t\tthis.tabs.forEach(tab => tab.classList.remove(Tabs.CLASSES.TAB_ACTIVE))\n\t\tthis.contents.forEach(content => content.classList.remove(Tabs.CLASSES.CONTENT_ACTIVE))\n\n\t\ttabElement.classList.add(Tabs.CLASSES.TAB_ACTIVE)\n\t\tcontentElement.classList.add(Tabs.CLASSES.CONTENT_ACTIVE)\n\n\t\tthis.animateLine(tabElement)\n\n\n\n\t\t// Update dropdown toggle button text\n\t\tif (this.tabsSelectToggleBtn) {\n\t\t\tconst activeTitle = tabElement.querySelector('.mod-tabs__tab-title').textContent.trim()\n\t\t\tthis.tabsSelectToggleBtn.textContent = activeTitle\n\t\t}\n\n\t\t// Emit switch tab event only if it's not an internal call\n\t\tif (!isInternal) {\n\t\t\tthis.EventEmitterService.emit(Tabs.EVENTS.SWITCH_TAB, { tabsId: this.id, tabId: id })\n\t\t}\n\t}\n\n\n\t/**\n\t * Scroll to a deep link within the tab content\n\t */\n\tdeepLink(tab, id) {\n\t\tthis.switchTab(tab)\n\t\tconst anchorElement = document.getElementById(id)\n\t\tif (anchorElement) {\n\t\t\tanchorElement.scrollIntoView({\n\t\t\t\tbehavior: 'smooth'\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Handle Tab button clicks\n\t */\n\tonTabClick = (event) => {\n\t\tconst tabId = event.currentTarget.id\n\t\tif (tabId) {\n\t\t\tthis.emitTabClickEvent()\n\t\t\tthis.switchTab(tabId)\n\t\t}\n\t}\n\n\t/**\n\t * Emit 'Tab Click' event\n\t */\n\temitTabClickEvent = () => {\n\t\tthis.EventEmitterService.emit(Tabs.EVENTS.TAB_CLICK)\n\t}\n\n\t/**\n\t * Set the theme class for the component\n\t * @param {String} theme - Theme class to set\n\t */\n\tsetTheme(theme) {\n\t\tconst themeClasses = Object.values(Tabs.THEMES)\n\t\tif (themeClasses.includes(theme)) {\n\t\t\t// Remove existing theme classes\n\t\t\tthis.element.classList.remove(...themeClasses)\n\t\t\tthis.tabs.forEach(tab => tab.classList.remove(...themeClasses))\n\t\t\tthis.contents.forEach(content => content.classList.remove(...themeClasses))\n\n\t\t\t// Add new theme class\n\t\t\tthis.element.classList.add(theme)\n\t\t\tthis.tabs.forEach(tab => tab.classList.add(theme))\n\t\t\tthis.contents.forEach(content => content.classList.add(theme))\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the Tabs component\n\t */\n\tinitializeComponent() {\n\t\t// Handle initial breakpoint\n\t\tthis.handleBreakpointChange(this.BreakpointListener.queryMatch)\n\n\t\t// Get deep link ID from URL if available\n\t\tconst activeId = window.location.hash ? window.location.hash.substring(1) : null;\n\n\t\tif (activeId && this.tabsContainer.querySelector(`#${activeId}`)) {\n\t\t\t// If activeId corresponds to a tab, switch to that tab\n\t\t\tthis.switchTab(activeId);\n\t\t} else if (activeId) {\n\t\t\t// If activeId does not correspond to a tab, check within tab contents\n\t\t\tfor (const tab of this.tabs) {\n\t\t\t\tif (tab.querySelector(`#${activeId}`)) {\n\t\t\t\t\tthis.switchTab(tab.id);\n\t\t\t\t\tbreak; // Exit the loop once the corresponding tab is found\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.tabs.length > 0) {\n\t\t\t// If no activeId is present, initialize the first tab by default\n\t\t\tthis.switchTab(this.tabs[0].id);\n\t\t}\n\t}\n\n\t/**\n\t * Handle breakpoint changes to adjust display\n\t * @param {Object} breakpoints - Current breakpoint matches\n\t */\n\thandleBreakpointChange = (breakpoints) => {\n\t\tconst isBelowMediumLarge = !breakpoints.MEDIUM_LARGE // true if screen width <996px\n\n\t\tif (isBelowMediumLarge) {\n\t\t\tthis.element.classList.add(Tabs.CLASSES.ENABLE_SELECT)\n\t\t} else {\n\t\t\tthis.element.classList.remove(Tabs.CLASSES.ENABLE_SELECT)\n\t\t}\n\n\t\t// Update the underline line position\n\t\tthis.updateUnderlinePosition()\n\t}\n\n\t/**\n\t * Toggle the dropdown select visibility\n\t */\n\ttoggleDropdown = () => {\n\t\tif (this.tabsSelect.classList.contains(Tabs.CLASSES.SELECT_ACTIVE)) {\n\t\t\tthis.closeDropdown()\n\t\t} else {\n\t\t\tthis.openDropdown()\n\t\t}\n\t}\n\n\t/**\n\t * Open the dropdown select\n\t */\n\topenDropdown = () => {\n\t\tthis.tabsSelect.classList.add(Tabs.CLASSES.SELECT_ACTIVE)\n\t\tthis.setAriaAttributesOpen(this.tabsSelectToggleBtn, this.tabsSelectList)\n\t\t// Focus the first dropdown link\n\t\tif (this.tabsSelectLinks && this.tabsSelectLinks.length > 0) {\n\t\t\tthis.tabsSelectLinks[0].focus()\n\t\t}\n\n\t\t// Close dropdown when clicking outside\n\t\tactionOnClickOutside(this.tabsSelect, this.closeDropdown)\n\t}\n\n\t/**\n\t * Close the dropdown select\n\t */\n\tcloseDropdown = () => {\n\t\tthis.tabsSelect.classList.remove(Tabs.CLASSES.SELECT_ACTIVE)\n\t\tthis.setAriaAttributesClosed(this.tabsSelectToggleBtn, this.tabsSelectList)\n\t}\n\n\t/**\n\t * Set ARIA attributes when the dropdown is open\n\t * @param {HTMLElement} toggleBtn - The dropdown toggle button\n\t * @param {HTMLElement} list - The dropdown list\n\t */\n\tsetAriaAttributesOpen(toggleBtn, list) { // Refactored: New method for setting ARIA attributes when open\n\t\ttoggleBtn.setAttribute('aria-expanded', 'true')\n\t\tlist.setAttribute('aria-hidden', 'false')\n\t}\n\n\t/**\n\t * Set ARIA attributes when the dropdown is closed\n\t * @param {HTMLElement} toggleBtn - The dropdown toggle button\n\t * @param {HTMLElement} list - The dropdown list\n\t */\n\tsetAriaAttributesClosed(toggleBtn, list) { // Refactored: New method for setting ARIA attributes when closed\n\t\ttoggleBtn.setAttribute('aria-expanded', 'false')\n\t\tlist.setAttribute('aria-hidden', 'true')\n\t}\n\n\n\t/**\n\t * Update the underline line position based on the active tab\n\t */\n\tupdateUnderlinePosition = () => {\n\t\tconst activeTab = this.element.querySelector(`.${Tabs.CLASSES.TAB_ACTIVE}`)\n\t\tthis.animateLine(activeTab)\n\t}\n\n\tonWindowResize = () => {\n\t\tconst activeTab = this.element.querySelector(`.${Tabs.CLASSES.TAB_ACTIVE}`)\n\t\tthis.animateLine(activeTab)\n\t}\n\n\t/**\n\t * Attach component event listeners\n\t */\n\tattachEvents() {\n\t\twindow.addEventListener('resize', this.onWindowResize)\n\t\t// Listen to breakpoint changes\n\t\tthis.BreakpointListener.addListener(this.handleBreakpointChange)\n\n\t\t// Add event listeners to tab buttons\n\t\tthis.tabs.forEach((tabElement) => {\n\t\t\ttabElement.addEventListener('click', this.onTabClick)\n\t\t})\n\n\t\t// Add event listener to dropdown toggle button\n\t\tif (this.tabsSelectToggleBtn) {\n\t\t\tthis.tabsSelectToggleBtn.addEventListener('click', this.toggleDropdown)\n\t\t}\n\n\t\t// Add event listeners to dropdown links\n\t\tif (this.tabsSelectLinks && this.tabsSelectLinks.length > 0) {\n\t\t\tthis.tabsSelectLinks.forEach((link) => {\n\t\t\t\tlink.addEventListener('click', (event) => {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tconst href = link.getAttribute('href')\n\t\t\t\t\tconst tabId = href.replace('#', '')\n\t\t\t\t\tthis.switchTab(tabId)\n\t\t\t\t\tthis.closeDropdown()\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t// Listen to switch tab events\n\t\tthis.EventEmitterService.on(Tabs.EVENTS.SWITCH_TAB, this.onSwitchTab)\n\t}\n\n\t/**\n\t * Detach component event listeners\n\t */\n\tdetachEvents() {\n\t\t// Remove breakpoint listener\n\t\tthis.BreakpointListener.removeListener(this.handleBreakpointChange)\n\n\t\t// Remove event listeners from tab buttons\n\t\tthis.tabs.forEach((tabElement) => {\n\t\t\ttabElement.removeEventListener('click', this.onTabClick)\n\t\t})\n\n\t\t// Remove event listener from dropdown toggle button\n\t\tif (this.tabsSelectToggleBtn) {\n\t\t\tthis.tabsSelectToggleBtn.removeEventListener('click', this.toggleDropdown)\n\t\t}\n\n\t\t// Remove event listeners from dropdown links\n\t\tif (this.tabsSelectLinks && this.tabsSelectLinks.length > 0) {\n\t\t\tthis.tabsSelectLinks.forEach((link) => {\n\t\t\t\tlink.removeEventListener('click', (event) => {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tconst href = link.getAttribute('href')\n\t\t\t\t\tconst tabId = href.replace('#', '')\n\t\t\t\t\tthis.switchTab(tabId)\n\t\t\t\t\tthis.closeDropdown()\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t// Remove EventEmitterService listeners\n\t\tthis.EventEmitterService.off(Tabs.EVENTS.SWITCH_TAB, this.onSwitchTab)\n\t\twindow.removeEventListener('resize', this.onWindowResize)\n\t}\n\n\t/**\n\t * Handle switch tab events emitted by other components\n\t * @param {Object} payload - Event payload containing tabsId and tabId\n\t */\n\tonSwitchTab = ({ tabsId, tabId }) => {\n\t\tif (this.id !== tabsId) {\n\t\t\treturn\n\t\t}\n\t\tthis.switchTab(tabId, true, true) // Pass 'true' to indicate an internal call\n\t}\n}\n","import Tabs from './Tabs'\n\nexport default Tabs\n"],"names":["Tabs","static","COMPONENT","TAB","CONTENT","LINE","TABS_CONTAINER","TABS_SELECT","TABS_SELECT_TOGGLE","TABS_SELECT_LIST","TABS_SELECT_LINK","CONTENT_ACTIVE","TAB_ACTIVE","SELECT_ACTIVE","ENABLE_SELECT","LIGHT","DARK","TAB_CLICK","SWITCH_TAB","constructor","element","this","id","services","Services","getInstance","EventEmitterService","BreakpointListener","cacheDom","attachEvents","initializeComponent","tabsContainer","querySelector","SELECTORS","tabs","querySelectorAll","contents","line","tabsSelect","tabsSelectToggleBtn","tabsSelectList","tabsSelectLinks","destroy","detachEvents","animateLine","activeTab","requestAnimationFrame","tabRect","getBoundingClientRect","containerRect","left","width","style","display","switchTab","isInternal","arguments","length","undefined","tabElement","Array","from","find","tab","contentElement","content","forEach","classList","remove","CLASSES","add","activeTitle","textContent","trim","emit","EVENTS","tabsId","tabId","deepLink","anchorElement","document","getElementById","scrollIntoView","behavior","onTabClick","event","currentTarget","emitTabClickEvent","setTheme","theme","themeClasses","Object","values","THEMES","includes","handleBreakpointChange","queryMatch","activeId","window","location","hash","substring","breakpoints","MEDIUM_LARGE","updateUnderlinePosition","toggleDropdown","contains","closeDropdown","openDropdown","setAriaAttributesOpen","focus","actionOnClickOutside","setAriaAttributesClosed","toggleBtn","list","setAttribute","onWindowResize","addEventListener","addListener","link","preventDefault","getAttribute","replace","on","onSwitchTab","removeListener","removeEventListener","off","_ref"],"sourceRoot":""}