{"version":3,"file":"zoomv.8003.min.js?t=626c97beb25afd846136","mappings":"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","sources":["webpack://@hero-digital/zoom/./src/components/modules/SMBROICalculator/SMBROICalculator.js"],"sourcesContent":["class BandwidthCalculator {\r\n constructor(el) {\r\n this.el = el\r\n\r\n this.map = {\r\n showValueInput: '.bandwidth-calculator__ShowValue',\r\n card: '.bandwidth-calculator__manualTabs-card',\r\n rangeSteps: '.bandwidth-calculator-steps',\r\n appsHighlight: '.savings-summary .resulted-apps .highlight',\r\n appsLabel: '.resulted-apps .description-highlight',\r\n monthlyCostHighlight: '.monthly-usage-cost .highlight',\r\n totalCostHighlight: '.total-estimated-cost .highlight',\r\n appCost: '.bandwidth-calculator-app-cost',\r\n slider: '#rangeSlider',\r\n tooltip: '#tooltip',\r\n input: '#webinarParticipantsValue',\r\n empCount: '.emp-count',\r\n error: '.fdn-error-message',\r\n planCta: '.fdn-button-plan-cta',\r\n salesCta: '.fdn-button-pricing-cta',\r\n planName: '.bandwidth-calculator__meshSidebar-description span'\r\n }\r\n\r\n this.slider = this.el.querySelector(this.map.slider)\r\n this.tooltip = this.el.querySelector(this.map.tooltip)\r\n this.textInput = this.el.querySelector(this.map.input)\r\n\r\n this.init()\r\n this.bindEvents()\r\n this.updateSelectedApps()\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n this.updateRecommendedPlan()\r\n\r\n window.addEventListener('resize', () => {\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n })\r\n }\r\n\r\n init() {\r\n if (!this.slider || !this.tooltip || !this.textInput) return\r\n\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n\r\n this.slider.addEventListener('input', () => {\r\n this.textInput.value = this.slider.value\r\n if (this.slider.value > 1) {\r\n this.el.querySelector(this.map.error)?.setAttribute('hidden', true)\r\n }\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n this.updateRecommendedPlan()\r\n })\r\n\r\n this.textInput.addEventListener('input', () => {\r\n let raw = this.textInput.value.replace(/\\D/g, '').slice(0, 5)\r\n this.textInput.value = raw\r\n this.updateTotalEstimatedCost()\r\n\r\n let n = +raw\r\n let errorEl = this.el.querySelector(this.map.error)\r\n\r\n if (!raw || n === 0) {\r\n if (errorEl) errorEl.removeAttribute('hidden')\r\n return\r\n }\r\n\r\n if (errorEl) errorEl.setAttribute('hidden', true)\r\n\r\n n = Math.min(Math.max(n, +this.slider.min), +this.slider.max)\r\n this.slider.value = n\r\n\r\n this.updateTooltip()\r\n this.updateSliderBackground()\r\n this.updateMonthlyCost()\r\n this.updateRecommendedPlan()\r\n })\r\n }\r\n\r\n updateTooltip() {\r\n const val = +this.slider.value\r\n const min = +this.slider.min\r\n const max = +this.slider.max\r\n const percent = (val - min) / (max - min)\r\n this.tooltip.style.left = `calc(${percent * 100}% + 10px)`\r\n this.tooltip.textContent = val >= 5000 ? '5000+' : val\r\n }\r\n\r\n updateTooltipPosition() {\r\n const content = this.tooltip.textContent.trim()\r\n const stringLength = content.length\r\n const computedLeft = window.getComputedStyle(this.tooltip).left\r\n const currentLeft = parseFloat(computedLeft)\r\n if (stringLength == 4) {\r\n this.tooltip.style.left = currentLeft - 10 + 'px'\r\n } else if (stringLength == 5) {\r\n this.tooltip.style.left = currentLeft - 20 + 'px'\r\n }\r\n }\r\n\r\n updateSliderBackground() {\r\n const percent =\r\n ((this.slider.value - this.slider.min) /\r\n (this.slider.max - this.slider.min)) *\r\n 100\r\n this.slider.style.background = `linear-gradient(to right, rgb(11, 92, 255) 0%, rgb(11, 92, 255) ${percent}%, rgb(224, 224, 230) ${percent}%, rgb(224, 224, 230) 100%)`\r\n this.updateTooltipPosition()\r\n }\r\n\r\n bindEvents() {\r\n this.el.querySelectorAll(this.map.card).forEach((card) => {\r\n card.addEventListener('click', () => {\r\n this.onCardClick(card)\r\n this.updateMonthlyCost()\r\n this.updateTotalEstimatedCost()\r\n })\r\n })\r\n }\r\n\r\n onCardClick(card) {\r\n let isSelected = card.getAttribute('data-selected') === 'true'\r\n if (isSelected) {\r\n card.removeAttribute('data-selected')\r\n card.classList.remove('selected')\r\n } else {\r\n card.setAttribute('data-selected', 'true')\r\n card.classList.add('selected')\r\n }\r\n this.updateSelectedApps()\r\n }\r\n\r\n updateSelectedApps() {\r\n let appsCount = this.el.querySelectorAll(\r\n `${this.map.card}[data-selected=\"true\"]`\r\n ).length\r\n let appsHighlight = this.el.querySelector(this.map.appsHighlight)\r\n let appsLabel = this.el.querySelector(this.map.appsLabel)\r\n\r\n if (appsHighlight) {\r\n appsHighlight.textContent = appsCount || 'X'\r\n if (appsLabel) {\r\n appsLabel.textContent = appsCount === 1 ? 'app' : 'apps'\r\n }\r\n }\r\n }\r\n\r\n updateMonthlyCost() {\r\n let highlightEl = this.el.querySelector(this.map.monthlyCostHighlight)\r\n if (!highlightEl) return\r\n\r\n let total = Array.from(\r\n this.el.querySelectorAll(`${this.map.card}.selected`)\r\n ).reduce(\r\n (sum, card) =>\r\n sum +\r\n (parseFloat(card.querySelector(this.map.appCost)?.value) || 0),\r\n 0\r\n )\r\n\r\n let formatted = total\r\n ? `$${total.toLocaleString(undefined, { maximumFractionDigits: 2 })}`\r\n : '$XXX'\r\n\r\n highlightEl.textContent = formatted\r\n }\r\n\r\n updateTotalEstimatedCost() {\r\n let highlight = this.el.querySelector(this.map.totalCostHighlight)\r\n if (!highlight) return\r\n\r\n let raw = this.textInput.value\r\n let value = parseInt(raw, 10) || 0\r\n\r\n if (!raw || value === 0) {\r\n this.tooltip.style.display = 'none'\r\n let e = this.el.querySelector(this.map.empCount)\r\n if (e) e.textContent = 'X'\r\n highlight.textContent = '$X,XXX'\r\n this.slider.value = this.slider.min\r\n this.updateSliderBackground()\r\n\r\n let errorEl = this.el.querySelector(this.map.error)\r\n if (errorEl) errorEl.removeAttribute('hidden')\r\n\r\n return\r\n }\r\n\r\n this.tooltip.style.display = ''\r\n let empCountEl = this.el.querySelector(this.map.empCount)\r\n if (empCountEl) empCountEl.textContent = raw\r\n\r\n let planCta = this.el.querySelector(this.map.planCta)\r\n let salesCta = this.el.querySelector(this.map.salesCta)\r\n if (planCta && salesCta) {\r\n if (value >= 100) {\r\n planCta.classList.add('hidden')\r\n salesCta.classList.remove('hidden')\r\n } else {\r\n planCta.classList.remove('hidden')\r\n salesCta.classList.add('hidden')\r\n }\r\n }\r\n\r\n let sum = Array.from(\r\n this.el.querySelectorAll(`${this.map.card}.selected`)\r\n ).reduce(\r\n (acc, card) =>\r\n acc +\r\n (parseFloat(card.querySelector(this.map.appCost)?.value) || 0),\r\n 0\r\n )\r\n let total = sum * value\r\n highlight.textContent = total ? `$${total.toLocaleString()}` : '$X,XXX'\r\n\r\n let errorEl = this.el.querySelector(this.map.error)\r\n if (errorEl) errorEl.setAttribute('hidden', true)\r\n }\r\n\r\n updateRecommendedPlan() {\r\n const empCount = parseInt(this.textInput.value, 10) || 0\r\n const planSpan = this.el.querySelector(this.map.planName)\r\n\r\n if (!planSpan) return\r\n\r\n if (empCount > 250) {\r\n planSpan.textContent = 'Workplace Enterprise Plan'\r\n } else if (empCount >= 100) {\r\n planSpan.textContent = 'Workplace Business Plan'\r\n } else {\r\n planSpan.textContent = 'Workplace Pro Plan'\r\n }\r\n }\r\n}\r\n\r\nexport default BandwidthCalculator"],"names":["BandwidthCalculator","el","_this","_classCallCheck","this","map","showValueInput","card","rangeSteps","appsHighlight","appsLabel","monthlyCostHighlight","totalCostHighlight","appCost","slider","tooltip","input","empCount","error","planCta","salesCta","planName","querySelector","textInput","init","bindEvents","updateSelectedApps","updateMonthlyCost","updateTotalEstimatedCost","updateRecommendedPlan","window","addEventListener","updateTooltip","updateSliderBackground","key","value","_this2","_this2$el$querySelect","setAttribute","raw","replace","slice","n","errorEl","Math","min","max","removeAttribute","val","percent","style","left","concat","textContent","stringLength","trim","length","computedLeft","getComputedStyle","currentLeft","parseFloat","background","updateTooltipPosition","_this3","querySelectorAll","forEach","onCardClick","getAttribute","classList","remove","add","appsCount","_this4","highlightEl","total","Array","from","reduce","sum","_card$querySelector","formatted","toLocaleString","undefined","maximumFractionDigits","_this5","highlight","parseInt","display","empCountEl","acc","_card$querySelector2","e","planSpan"],"sourceRoot":""}