{"version":3,"file":"860.min.js?t=1743173738202","mappings":"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","sources":["webpack://@hero-digital/masonite/./src/components/modules/CardCarouselGallery/CardCarouselGallery.js","webpack://@hero-digital/masonite/./src/components/modules/Tabs/Tabs.js"],"sourcesContent":["import Services from 'services'\nimport Tabs from '../Tabs/Tabs'\n\n// Card Carousel Module:\nexport default class CardCarouselGallery {\n static SELECTORS = {\n COMPONENT: '[data-cmp-is=\"card-carousel-gallery\"]',\n TAB: '[data-cmp-tabs=\"tab\"]'\n }\n\n static CLASSES = {}\n\n static VALUES = {}\n\n constructor(element) {\n this.element = element // ref to component element\n this.id = element?.id || '' // ref to component id\n this.services = Services.getInstance()\n\n this.EventEmitterService = this.services.EventEmitterService\n\n this.cacheDom()\n this.attachEvents()\n }\n\n /**\n * Cache the dom refs needed for the component\n */\n cacheDom() {\n this.tabs = this.element.querySelectorAll(CardCarouselGallery.SELECTORS.TAB)\n }\n\n /**\n * Attach component event listeners\n */\n attachEvents() {\n // Add event listeners to tab buttons\n this.tabs.forEach((tabElement) => {\n tabElement.addEventListener('click', this.onTabClick)\n })\n }\n\n /**\n * Detach component event listeners\n */\n detachEvents() {\n this.tabs.forEach((tabElement) => {\n tabElement.removeEventListener('click', this.onTabClick)\n this.EventEmitterService.off(Tabs.EVENTS.TAB_CLICK)\n })\n }\n\n /**\n * Destroy the carousel instance and remove event listeners\n */\n destroy() {\n this.detachEvents()\n }\n\n /**\n * Handle Tab click\n */\n onTabClick = (event) => {\n // send to any handler\n this.EventEmitterService.emit(Tabs.EVENTS.TAB_CLICK)\n }\n}\n","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"],"names":["CardCarouselGallery","static","COMPONENT","TAB","constructor","element","this","id","services","Services","getInstance","EventEmitterService","cacheDom","attachEvents","tabs","querySelectorAll","SELECTORS","forEach","tabElement","addEventListener","onTabClick","detachEvents","removeEventListener","off","Tabs","EVENTS","TAB_CLICK","destroy","event","emit","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","SWITCH_TAB","BreakpointListener","initializeComponent","tabsContainer","querySelector","contents","line","tabsSelect","tabsSelectToggleBtn","tabsSelectList","tabsSelectLinks","animateLine","activeTab","requestAnimationFrame","tabRect","getBoundingClientRect","containerRect","left","width","style","display","switchTab","isInternal","arguments","length","undefined","Array","from","find","tab","contentElement","content","classList","remove","CLASSES","add","activeTitle","textContent","trim","tabsId","tabId","deepLink","anchorElement","document","getElementById","scrollIntoView","behavior","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","addListener","link","preventDefault","getAttribute","replace","on","onSwitchTab","removeListener","_ref"],"sourceRoot":""}