{"version":3,"file":"chunk.9587.f7e52fcc85103893.js","mappings":"qKAAA,MAAMA,EACLC,WAAAA,CAAYC,GACXC,KAAKC,SAASC,OAAOH,GACjBC,KAAKC,SACRD,KAAKG,QAAUD,OAAOH,GAExB,CAMAK,GAAAA,CAAIC,GACH,GAAIL,KAAKC,OAAQ,CAChB,MAAMK,EAAON,KAAKG,QAAQI,QAAS,SAAQF,KAC3C,OAAOC,EAAOE,KAAKC,MAAMH,GAAQ,IAClC,CACD,CAMAI,GAAAA,CAAIL,EAAKM,GACJX,KAAKC,QACRD,KAAKG,QAAQS,QAAS,SAAQP,IAAOG,KAAKK,UAAUF,GAEtD,EAGM,MAAMG,EAAsB,IAAIjB,EAAa,kBACvCkB,EAAoB,IAAIlB,EAAa,e,6IC7BlD,MAAMmB,UAAuCC,EAAAA,EAC3CC,kBAAAA,CAAmBC,EAAIC,EAAO,MAC5B,MAAMC,EAAUF,EAAGG,cAAc,0BAEjCD,EAAQE,UAAY,geAQtB,CAEAC,aAAAA,CAAcC,GACZ,MAAMC,EAAQ,oBACd,OAAOA,EAAMC,KAAKF,EACpB,CAEAG,sBAAAA,CAAuBC,GACrB,MAAMC,EAAwB,0DACxBC,EAAgD,MAAvBF,EAAOG,MAAM,EAAG,GAC/C,OAAOF,EAAsBH,KAAKE,IAAWE,CAC/C,CAEAE,iBAAAA,CAAkBC,GAChB,IAAKA,EAAO,OAAOA,EACnB,MAAMC,EAAcD,EAAME,QAAQ,SAAU,IAE5C,OAAOD,EAAYH,MAAM,EAAG,GAC9B,EAyDF,QCpFA,MAAMK,EACLvC,WAAAA,CAAYqB,GACXnB,KAAKmB,GAAKA,EACVnB,KAAKsC,SAAU,EACftC,KAAKuC,SAAW,KAChBvC,KAAKwC,SAAW,CACfC,aAAc,KACdC,iBAAkB,KAClBC,eAAgB,MAEZ5B,EAAAA,EAAkBX,IAAK,UAC3BwC,WAAW5C,KAAK6C,iBAAiBC,KAAK9C,MAAOA,KAAKuC,UAEnDvC,KAAK+C,cACL/C,KAAKyB,MAAQ,IAAIT,EAChB,+BACA,eAEF,CAKA6B,gBAAAA,GACC7C,KAAKmB,GAAG6B,UAAUC,IAAI,UACtBjD,KAAKwC,SAASC,cAAe,IAAIS,MAAOC,SACzC,CAKAJ,WAAAA,GACC/C,KAAKmB,GACHG,cAAc,eACd8B,iBAAiB,QAASpD,KAAKqD,gBAAgBP,KAAK9C,MACvD,CAKAqD,eAAAA,GACGrD,KAAKmB,GAAG6B,UAAUM,OAAO,UAEzBvC,EAAAA,EAAkBL,IAAK,SAAQ,GACjC,MAAM6C,GAAa,IAAIL,MAAOC,UAC9BnD,KAAKwC,SAASE,iBAAmBa,EACjCvD,KAAKwC,SAASG,gBACZY,EAAavD,KAAKwC,SAASC,cAAgB,IAC7CzC,KAAKsC,SAAU,GACfkB,EAAAA,EAAAA,IAAmB,CAClBC,MAAOC,EAAAA,GAAOC,aACdC,UAAW5D,KAAKwC,UAElB,EAID,QACA,MAAMqB,EAAiBC,SAASxC,cAAc,kBACjCyC,IAAcF,GACxB,IAAIxB,EAAYwB,E","sources":["webpack://tombras/./js/classes/LodgeStorage.js","webpack://tombras/./js/classes/EmailSubscribeWithMobileNumber.js","webpack://tombras/./js/components/Promos.js"],"sourcesContent":["class LodgeStorage {\n\tconstructor(type) {\n\t\tthis.exists = window[type] ? true : false;\n\t\tif (this.exists) {\n\t\t\tthis.storage = window[type];\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {string} key\n\t */\n\tget(key) {\n\t\tif (this.exists) {\n\t\t\tconst item = this.storage.getItem(`lodge_${key}`);\n\t\t\treturn item ? JSON.parse(item) : null;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {key} key has lodge_ prepended to it\n\t */\n\tset(key, data) {\n\t\tif (this.exists) {\n\t\t\tthis.storage.setItem(`lodge_${key}`, JSON.stringify(data));\n\t\t}\n\t}\n}\n\nexport const lodgeSessionStorage = new LodgeStorage(\"sessionStorage\");\nexport const lodgeLocalStorage = new LodgeStorage(\"localStorage\");\n","import EmailSubscribe from \"./EmailSubscribe\";\n\nclass EmailSubscribeWithMobileNumber extends EmailSubscribe {\n addThankYouMessage(el, html = null) {\n const content = el.querySelector('.promo--bottom-content');\n\n content.outerHTML = '
\\n' +\n '

Congratulations!

\\n' +\n '

Check your texts and confirm your opt-in.

\\n' +\n ' \\n' +\n '

By submitting your information, you are\\n' +\n ' agreeing to Lodge Cast Iron’s Terms of Use and Privacy Policy.\\n' +\n '

\\n' +\n '
';\n }\n\n validateEmail(email) {\n const regex = /^[^\\s@]+@[^\\s@]+$/;\n return regex.test(email);\n }\n\n validateUSMobileNumber(number) {\n const usMobileNumberPattern = /^(\\([0-9]{3}\\)|[0-9]{3})[\\s\\-]?[0-9]{3}[\\s\\-]?[0-9]{4}$/;\n const theFirstNumberIsNotOne = number.slice(0, 1) !== '1';\n return usMobileNumberPattern.test(number) && theFirstNumberIsNotOne;\n }\n\n formatPhoneNumber(value) {\n if (!value) return value;\n const phoneNumber = value.replace(/[^\\d]/g, '');\n\n return phoneNumber.slice(0, 10);\n }\n\n // Rename this to formEvents and uncomment the code to enable the class to handle email subscriptions with a mobile number.\n // onFormSubmit(el) {\n // const form = el.querySelector(\"form\");\n // const emailAddressWrapper = el.querySelector(\"#email_address_control\");\n // const mobileNumberWrapper = el.querySelector(\"#mobile_number_control\");\n // const emailContinueBtn = el.querySelector(\"#email_address_control .btn--form\");\n // const emailInput = emailAddressWrapper.querySelector('input');\n // const mobileInput = mobileNumberWrapper.querySelector(\"input\");\n //\n // emailContinueBtn.addEventListener('click', () => {\n // const emailAddress = emailInput.value;\n //\n // if (!emailAddress || !this.validateEmail(emailAddress)) {\n // return;\n // }\n //\n // // Valid email case\n // emailAddressWrapper.style.display = 'none';\n // mobileNumberWrapper.classList.add('show');\n // setTimeout(() => {\n // mobileInput.blur();\n // mobileInput.focus();\n // }, 50);\n // });\n //\n // mobileInput.addEventListener('input', (e) => {\n // e.target.value = this.formatPhoneNumber(e.target.value);\n // });\n //\n // form.addEventListener(\"submit\", (e) => {\n // e.preventDefault();\n // const formError = mobileNumberWrapper.querySelector('.form-error');\n // const email = emailInput.value;\n // const mobileNumber = mobileInput.value;\n //\n // if (!email) return;\n //\n // if (!mobileNumber || !this.validateUSMobileNumber(mobileNumber)) {\n // formError.style.display = 'flex';\n // formError.textContent = 'Enter a valid mobile number (e.g., 9234567890)';\n // return;\n // }\n //\n // // Valid mobile number and email case\n // formError.style.display = 'none';\n // this.subscribeUser({\n // el,\n // email,\n // mobileNumber,\n // placement: this.placement,\n // });\n // });\n // }\n}\n\nexport default EmailSubscribeWithMobileNumber;\n","import { componentVersion } from \"../utils\";\nimport { gtmCustomEventPush, EVENTS } from \"../analytics\";\nimport { lodgeLocalStorage } from \"../classes/LodgeStorage\";\nimport EmailSubscribeWithMobileNumber from \"../classes/EmailSubscribeWithMobileNumber\";\n\nclass BottomPromo {\n\tconstructor(el) {\n\t\tthis.el = el;\n\t\tthis.showing = false;\n\t\tthis.waitTime = 15000;\n\t\tthis.timeData = {\n\t\t\tuserFirstSaw: null,\n\t\t\tuserClickedClose: null,\n\t\t\ttotalTimeShown: null,\n\t\t};\n\t\tif (!lodgeLocalStorage.get(`promo`)) {\n\t\t\tsetTimeout(this.showAfterTimeout.bind(this), this.waitTime);\n\t\t}\n\t\tthis.setupEvents();\n\t\tthis.email = new EmailSubscribeWithMobileNumber(\n\t\t\t\"#block-stickybottompagepromo\",\n\t\t\t\"Bottom Promo\",\n\t\t);\n\t}\n\n\t/**\n\t * Shows user the bottom promo and begins tracking timing\n\t */\n\tshowAfterTimeout() {\n\t\tthis.el.classList.add(\"active\");\n\t\tthis.timeData.userFirstSaw = new Date().getTime();\n\t}\n\n\t/**\n\t * Sets up any events for the promo, currently just closing\n\t */\n\tsetupEvents() {\n\t\tthis.el\n\t\t\t.querySelector(\".btn--close\")\n\t\t\t.addEventListener(\"click\", this.hideBottomPromo.bind(this));\n\t}\n\n\t/**\n\t * Closes the bottom promo, complete with timing data\n\t */\n\thideBottomPromo() {\n this.el.classList.remove(\"active\");\n console.log(48, \"set promo seen\");\n lodgeLocalStorage.set(`promo`, true);\n\t\tconst closedTime = new Date().getTime();\n\t\tthis.timeData.userClickedClose = closedTime;\n\t\tthis.timeData.totalTimeShown =\n\t\t\t(closedTime - this.timeData.userFirstSaw) / 1000;\n\t\tthis.showing = false;\n\t\tgtmCustomEventPush({\n\t\t\tevent: EVENTS.BOTTOM_PROMO,\n\t\t\textraData: this.timeData,\n\t\t});\n\t}\n}\n\n// Handles creating our specific object, but also exports promo bottom for reuse if needed\nexport default BottomPromo;\nconst bottomPromoDOM = document.querySelector(\".promo--bottom\");\nexport const bottomPromo = bottomPromoDOM\n\t? new BottomPromo(bottomPromoDOM)\n\t: false;\n"],"names":["LodgeStorage","constructor","type","this","exists","window","storage","get","key","item","getItem","JSON","parse","set","data","setItem","stringify","lodgeSessionStorage","lodgeLocalStorage","EmailSubscribeWithMobileNumber","EmailSubscribe","addThankYouMessage","el","html","content","querySelector","outerHTML","validateEmail","email","regex","test","validateUSMobileNumber","number","usMobileNumberPattern","theFirstNumberIsNotOne","slice","formatPhoneNumber","value","phoneNumber","replace","BottomPromo","showing","waitTime","timeData","userFirstSaw","userClickedClose","totalTimeShown","setTimeout","showAfterTimeout","bind","setupEvents","classList","add","Date","getTime","addEventListener","hideBottomPromo","remove","closedTime","gtmCustomEventPush","event","EVENTS","BOTTOM_PROMO","extraData","bottomPromoDOM","document","bottomPromo"],"sourceRoot":""}