{"version":3,"file":"zoom.v1.1666.min.js?t=8f235263bdff34931db2","mappings":"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","sources":["webpack://@hero-digital/zoom/./src/components/product-hub-components/pricing-cards-v1/pricing-cards-v1.js"],"sourcesContent":["class PricingCardV1 {\r\n constructor(el) {\r\n this.el = el\r\n this.switches = this.el.querySelectorAll('input[name=\"zdcm-pricing-switch\"]')\r\n this.indicator = this.el.querySelector('.zdcm-indicator')\r\n this.currencyPlaceHolder = this.el.querySelector(\r\n '.fdn-zdcm-plan-currency-placeholder'\r\n )\r\n\r\n this.ul = this.el.querySelector('ul')\r\n\r\n this.monthlyPrices = this.el.querySelectorAll('[data-price=\"0\"]')\r\n this.annualPrices = this.el.querySelectorAll('[data-price=\"1\"], [data-price=\"2\"]');\r\n this.currencyLabel = this.apiUrl = this.el.dataset.currencyLabel\r\n this.monthlyCTAs = this.el.querySelectorAll('.fdn-zdcm-buy:nth-of-type(1)')\r\n this.annualCTAs = this.el.querySelectorAll('.fdn-zdcm-buy:nth-of-type(2)')\r\n this.monthlyCTAs = this.el.querySelectorAll('.fdn-zdcm-pricing-card-content-body[data-price]:not([data-price=\"-1\"]) .fdn-zdcm-buy:nth-of-type(1)')\r\n this.annualCTAs = this.el.querySelectorAll('.fdn-zdcm-pricing-card-content-body[data-price]:not([data-price=\"-1\"]) .fdn-zdcm-buy:nth-of-type(2)')\r\n this.domMap = {\r\n $swiper: el.querySelector('.fdn-zdcm-pricing-cards .swiper'),\r\n $slides: el.querySelectorAll(\r\n '.fdn-zdcm-pricing-cards .zdcm-resources-carousel .zdcm-resources'\r\n ),\r\n $slide: el.querySelectorAll('.fdn-zdcm-pricing-cards .swiper-slide')\r\n }\r\n\r\n const dropdown = this.el.querySelector('.fdn-currency-dropdown')\r\n if (dropdown) {\r\n const button = dropdown.querySelector('button')\r\n const wrapper = dropdown.querySelector('.fdn-currency-dropdown-wrapper')\r\n const radioInputs = dropdown.querySelectorAll('input[type=\"radio\"]')\r\n\r\n button.addEventListener('click', () => {\r\n wrapper.classList.toggle('open')\r\n button.classList.toggle('active')\r\n })\r\n\r\n document.addEventListener('click', (e) => {\r\n if (!dropdown.contains(e.target)) {\r\n wrapper.classList.remove('open')\r\n button.classList.remove('active')\r\n }\r\n })\r\n\r\n radioInputs.forEach((input) => {\r\n input.addEventListener('change', (e) => {\r\n const span = button.querySelector('span')\r\n span.textContent = e.target.value\r\n\r\n wrapper.classList.remove('open')\r\n button.classList.remove('active')\r\n\r\n this.el.dispatchEvent(\r\n new CustomEvent('currency:changed', {\r\n detail: { currency: e.target.value }\r\n })\r\n )\r\n })\r\n })\r\n\r\n const checkedCurrency = dropdown.querySelector(\r\n 'input[type=\"radio\"]:checked'\r\n )\r\n if (checkedCurrency) {\r\n const span = button.querySelector('span')\r\n span.textContent = checkedCurrency.value\r\n }\r\n }\r\n this.swiper = null\r\n this.handleResize = this.handleResize.bind(this)\r\n window.addEventListener('resize', () => {\r\n setTimeout(this.handleResize, 300)\r\n })\r\n this.init()\r\n this.syncCurrencyDropdown()\r\n requestAnimationFrame(() => {\r\n setTimeout(() => {\r\n this.initFeaturesSlide();\r\n }, 0);\r\n });\r\n window.addEventListener(\"load\", () => {\r\n this.initAfterpageLoad()\r\n });\r\n }\r\n\r\n init() {\r\n this.switches.forEach((checkbox) => {\r\n if(checkbox.checked) {\r\n this.showAnnually()\r\n } else {\r\n this.showMonthly()\r\n }\r\n })\r\n\r\n // Add change event listener to each switch\r\n this.switches.forEach((checkbox) => {\r\n checkbox.addEventListener('change', () => {\r\n // Find the label element wrapping this checkbox\r\n const label = checkbox.closest('.zdcm-switch')\r\n // Get the plan label span (you might need to adjust this selector if you have many switches)\r\n const labelText = label.nextElementSibling; // assumes the span is right after the label\r\n if(checkbox.checked) {\r\n this.showAnnually()\r\n if (labelText) {\r\n labelText.textContent = label.dataset.labelAnnual\r\n }\r\n } else {\r\n this.showMonthly()\r\n if (labelText) {\r\n labelText.textContent = label.dataset.labelMonth\r\n }\r\n }\r\n this.setFeaturesHeight()\r\n this.reinitiateSlide()\r\n })\r\n })\r\n \r\n this.handleResize()\r\n }\r\n\r\n initAfterpageLoad() {\r\n const cards = this.el\r\n if (cards) {\r\n cards.style.opacity = '1';\r\n }\r\n }\r\n \r\n initFeaturesSlide() {\r\n const titles = this.el.querySelectorAll('.fdn-zdcm-features-title')\r\n let isDesktop = window.innerWidth > 1024\r\n let maxHeight = 0\r\n\r\n // Step 1: Calculate max scrollHeight of all content sections\r\n titles.forEach((title) => {\r\n const content = title.nextElementSibling\r\n\r\n // Temporarily set to auto to measure true scrollHeight\r\n const originalHeight = content.style.height\r\n content.style.height = 'auto'\r\n const height = content.scrollHeight\r\n content.style.height = originalHeight\r\n\r\n if (height > maxHeight) {\r\n maxHeight = height\r\n }\r\n })\r\n\r\n // Step 2: Apply fixed height to all content sections\r\n if (isDesktop) {\r\n titles.forEach((title) => {\r\n const content = title.nextElementSibling\r\n content.style.height = maxHeight + 'px' // ✅ Fixed height\r\n content.style.overflow = 'hidden'\r\n content.style.transition = 'height 0.3s ease'\r\n title.classList.add('features-open')\r\n });\r\n }\r\n\r\n // Step 3: Setup click behavior\r\n titles.forEach((title) => {\r\n const content = title.nextElementSibling\r\n\r\n title.addEventListener('click', function () {\r\n const isOpen = content.style.height && content.style.height !== '0px'\r\n title.classList.toggle(\"features-open\")\r\n\r\n if (isOpen) {\r\n content.style.height = maxHeight + 'px' // Reset before collapsing\r\n requestAnimationFrame(() => {\r\n content.style.height = '0'\r\n })\r\n } else {\r\n content.style.height = maxHeight + 'px'\r\n const afterExpand = () => {\r\n // Keep height fixed\r\n content.removeEventListener('transitionend', afterExpand);\r\n }\r\n\r\n content.addEventListener('transitionend', afterExpand);\r\n }\r\n })\r\n })\r\n\r\n // Step 4: Responsive behavior\r\n const handleDesktopResize = () => {\r\n this.setFeaturesHeight()\r\n\r\n const nowDesktop = window.innerWidth > 1024\r\n\r\n if (!nowDesktop && isDesktop) {\r\n titles.forEach((title) => {\r\n if (title.classList.contains('features-open')) {\r\n title.click()\r\n }\r\n const content = title.nextElementSibling;\r\n content.style.height = '0' // Collapse on mobile\r\n });\r\n }\r\n\r\n if (nowDesktop && !isDesktop) {\r\n titles.forEach((title) => {\r\n if (!title.classList.contains('features-open')) {\r\n title.click()\r\n }\r\n })\r\n }\r\n\r\n isDesktop = nowDesktop;\r\n};\r\n\r\n// Attach debounced resize handler\r\nwindow.addEventListener('resize', this.debounce(handleDesktopResize, 500))\r\n}\r\n\r\ndebounce(fn, delay) {\r\n let timeoutId;\r\n return function (...args) {\r\n clearTimeout(timeoutId);\r\n timeoutId = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n}\r\n\r\nsetFeaturesHeight() {\r\n const titles = this.el.querySelectorAll('.fdn-zdcm-features-title')\r\n let isDesktop = window.innerWidth > 1024\r\n let maxHeight = 0\r\n\r\n // Step 1: Calculate max scrollHeight of all content sections\r\n titles.forEach((title) => {\r\n const content = title.nextElementSibling\r\n\r\n // Temporarily set to auto to measure true scrollHeight\r\n const originalHeight = content.style.height\r\n content.style.height = 'auto'\r\n const height = content.scrollHeight\r\n content.style.height = originalHeight\r\n\r\n if (height > maxHeight) {\r\n maxHeight = height\r\n }\r\n\r\n if (isDesktop) {\r\n titles.forEach((title) => {\r\n const content = title.nextElementSibling\r\n content.style.height = maxHeight + 'px' // ✅ Fixed height\r\n content.style.overflow = 'hidden'\r\n content.style.transition = 'height 0.3s ease'\r\n title.classList.add('features-open')\r\n });\r\n }\r\n })\r\n}\r\n\r\n reinitiateSlide () {\r\n const titles = document.querySelectorAll('.fdn-zdcm-features-title')\r\n let isDesktop = window.innerWidth > 1024;\r\n titles.forEach(function (title) {\r\n const content = title.nextElementSibling\r\n title.classList.remove(\"features-open\")\r\n content.style.height = 0\r\n if (isDesktop) {\r\n title.click()\r\n }\r\n })\r\n }\r\n\r\n initSwiper() {\r\n const { $swiper } = this.domMap\r\n this.swiper = new Swiper($swiper, {\r\n autoHeight: false,\r\n spaceBetween: 20,\r\n centeredSlides: true, // If you want the slide to be centered\r\n initialSlide: 1, // this shows the 2nd slide\r\n navigation: {\r\n nextEl: this.el.querySelector(\r\n '.fdn-zdcm-pricing-cards .swiper-button-next'\r\n ),\r\n prevEl: this.el.querySelector(\r\n '.fdn-zdcm-pricing-cards .swiper-button-prev'\r\n )\r\n },\r\n pagination: {\r\n el: this.el.querySelector('.fdn-zdcm-pricing-cards .swiper-pagination'),\r\n clickable: true\r\n },\r\n breakpoints: {\r\n 768: { slidesPerView: 2, loop: false },\r\n 1024: { slidesPerView: 3, loop: false, slidesPerView: 1.5 }\r\n }\r\n })\r\n }\r\n\r\n destroySwiper() {\r\n if (this.swiper) {\r\n this.swiper.destroy(true, true)\r\n this.swiper = null\r\n }\r\n }\r\n\r\n handleResize() {\r\n const viewportWidth = window.innerWidth\r\n const prevBtn = this.el.querySelector('.swiper-button-prev')\r\n const nextBtn = this.el.querySelector('.swiper-button-next')\r\n\r\n if ((viewportWidth >= 768 && viewportWidth <= 1024)) {\r\n if (!this.swiper && this.domMap.$slides != null) {\r\n if (prevBtn) prevBtn.style.display = 'flex'\r\n if (nextBtn) nextBtn.style.display = 'flex'\r\n this.initSwiper()\r\n }\r\n } else {\r\n this.destroySwiper()\r\n if (prevBtn) prevBtn.style.display = 'none'\r\n if (nextBtn) nextBtn.style.display = 'none'\r\n }\r\n this.reinitiateSlide()\r\n }\r\n\r\n showMonthly() {\r\n this.monthlyPrices.forEach((el) => {\r\n el.classList.remove('hidden')\r\n el.removeAttribute(\"style\")\r\n })\r\n this.annualPrices.forEach((el) => {\r\n el.classList.add('hidden')\r\n el.removeAttribute(\"style\")\r\n })\r\n\r\n this.monthlyCTAs.forEach((el) => el.classList.remove('hidden'))\r\n this.annualCTAs.forEach((el) => el.classList.add('hidden'))\r\n }\r\n\r\n showAnnually() {\r\n this.monthlyPrices.forEach((el) => {\r\n el.classList.add('hidden')\r\n el.removeAttribute(\"style\")\r\n })\r\n this.annualPrices.forEach((el) => {\r\n el.classList.remove('hidden')\r\n el.removeAttribute(\"style\")\r\n })\r\n\r\n this.monthlyCTAs.forEach((el) => el.classList.add('hidden'))\r\n this.annualCTAs.forEach((el) => el.classList.remove('hidden'))\r\n }\r\n\r\n syncCurrencyDropdown() {\r\n function getCurrenciesFromOldDropdown(id) {\r\n const items = document.querySelectorAll(\r\n '#js-currency-content .zdcm-module-footer-dropdown__item'\r\n )\r\n\r\n if (!items.length) {\r\n return []\r\n }\r\n\r\n const currencies = Array.from(items).map((item) => {\r\n const btn = item.querySelector('button')\r\n return {\r\n id: item.id + '_' + id,\r\n value: item.getAttribute('data-currency-value'),\r\n country: item.getAttribute('data-country-value'),\r\n label: btn?.textContent.trim() || '',\r\n active: btn?.classList.contains('active')\r\n }\r\n })\r\n\r\n return currencies\r\n }\r\n\r\n function buildNewDropdown(currencies, targetContainer, currencyLabel) {\r\n const wrapper = document.createElement('div')\r\n wrapper.className = 'fdn-zdcm-plan-currency'\r\n\r\n const dropdown = document.createElement('div')\r\n dropdown.className = 'fdn-currency-dropdown'\r\n\r\n const active = currencies.find((c) => c.active) || currencies[0]\r\n\r\n const button = document.createElement('button')\r\n button.type = 'button'\r\n button.name = 'currency'\r\n button.setAttribute('aria-expanded', 'false')\r\n button.innerHTML = `${currencyLabel} ${\r\n active?.value || '???'\r\n }`\r\n\r\n dropdown.appendChild(button)\r\n\r\n const dropdownWrapper = document.createElement('div')\r\n dropdownWrapper.className = 'fdn-currency-dropdown-wrapper'\r\n\r\n const fieldset = document.createElement('fieldset')\r\n const legend = document.createElement('legend')\r\n legend.className = 'visually-hidden'\r\n legend.textContent = 'Currency Selection'\r\n fieldset.appendChild(legend)\r\n\r\n const inputMap = {}\r\n\r\n currencies.forEach((curr) => {\r\n const optionDiv = document.createElement('div')\r\n optionDiv.className = 'fdn-currency-option'\r\n\r\n const input = document.createElement('input')\r\n input.type = 'radio'\r\n input.className = 'checkbox-currency'\r\n input.id = curr.id\r\n input.value = curr.value\r\n input.name = 'currency'\r\n if (curr.active) input.checked = true\r\n\r\n inputMap[curr.id] = input\r\n\r\n const label = document.createElement('label')\r\n label.setAttribute('for', curr.id)\r\n label.textContent = curr.value\r\n\r\n optionDiv.appendChild(input)\r\n optionDiv.appendChild(label)\r\n fieldset.appendChild(optionDiv)\r\n\r\n input.addEventListener('click', () => {\r\n let currency = curr?.id?.split('_')[0]\r\n document.dispatchEvent(\r\n new CustomEvent('currencySync', {\r\n detail: { currency },\r\n bubbles: true\r\n })\r\n )\r\n })\r\n })\r\n\r\n function onChangeCurrency(data) {\r\n let id = data.detail.currency\r\n let item = findByIdPrefix(id, currencies)\r\n button.querySelector('span').textContent = item.value\r\n dropdownWrapper.classList.remove('open')\r\n button.classList.remove('active')\r\n button.setAttribute('aria-expanded', 'false')\r\n }\r\n\r\n function findByIdPrefix(prefix, list) {\r\n return list.find((obj) => obj.id.startsWith(prefix + '_'))\r\n }\r\n document.addEventListener('currencySync', (data) =>\r\n onChangeCurrency(data)\r\n )\r\n\r\n dropdownWrapper.appendChild(fieldset)\r\n dropdown.appendChild(dropdownWrapper)\r\n wrapper.appendChild(dropdown)\r\n targetContainer.replaceWith(wrapper)\r\n button.addEventListener('click', (e) => {\r\n e.stopPropagation()\r\n const expanded = button.getAttribute('aria-expanded') === 'true'\r\n button.setAttribute('aria-expanded', (!expanded).toString())\r\n dropdownWrapper.classList.toggle('open', !expanded)\r\n button.classList.toggle('active', !expanded)\r\n })\r\n document.addEventListener('click', (e) => {\r\n if (!wrapper.contains(e.target)) {\r\n dropdownWrapper.classList.remove('open')\r\n button.classList.remove('active')\r\n button.setAttribute('aria-expanded', 'false')\r\n }\r\n })\r\n }\r\n\r\n function init(context) {\r\n const currencies = getCurrenciesFromOldDropdown(\r\n context.el.getAttribute('data-id')\r\n )\r\n\r\n if (!currencies.length) {\r\n return\r\n }\r\n\r\n buildNewDropdown(\r\n currencies,\r\n context.currencyPlaceHolder,\r\n context.currencyLabel\r\n )\r\n }\r\n\r\n init(this)\r\n }\r\n}\r\n\r\nexport default PricingCardV1\r\n"],"names":["PricingCardV1","el","_this","_classCallCheck","this","switches","querySelectorAll","indicator","querySelector","currencyPlaceHolder","ul","monthlyPrices","annualPrices","currencyLabel","apiUrl","dataset","monthlyCTAs","annualCTAs","domMap","$swiper","$slides","$slide","dropdown","button","wrapper","radioInputs","addEventListener","classList","toggle","document","e","contains","target","remove","forEach","input","textContent","value","dispatchEvent","CustomEvent","detail","currency","checkedCurrency","swiper","handleResize","bind","window","setTimeout","init","syncCurrencyDropdown","requestAnimationFrame","initFeaturesSlide","initAfterpageLoad","key","_this2","checkbox","checked","showAnnually","showMonthly","label","closest","labelText","nextElementSibling","labelAnnual","labelMonth","setFeaturesHeight","reinitiateSlide","cards","style","opacity","_this3","titles","isDesktop","innerWidth","maxHeight","title","content","originalHeight","height","scrollHeight","overflow","transition","add","isOpen","afterExpand","removeEventListener","debounce","nowDesktop","click","fn","delay","timeoutId","_this4","_len","arguments","length","args","Array","_key","clearTimeout","apply","Swiper","autoHeight","spaceBetween","centeredSlides","initialSlide","navigation","nextEl","prevEl","pagination","clickable","breakpoints","slidesPerView","loop","destroy","viewportWidth","prevBtn","nextBtn","display","initSwiper","destroySwiper","removeAttribute","context","id","items","currencies","getAttribute","from","map","item","btn","country","trim","active","targetContainer","createElement","className","find","c","type","name","setAttribute","innerHTML","concat","appendChild","dropdownWrapper","fieldset","legend","inputMap","curr","optionDiv","_curr$id","split","bubbles","data","prefix","obj","startsWith","onChangeCurrency","replaceWith","stopPropagation","expanded","toString","buildNewDropdown"],"sourceRoot":""}