@rtstic.dev/pulse 0.0.43 → 0.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";(()=>{var S=Object.create;var f=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var M=(l=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(l,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):l)(function(l){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+l+'" is not supported')});var b=(l,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!L.call(l,n)&&n!==e&&f(l,n,{get:()=>t[n],enumerable:!(r=T(t,n))||r.enumerable});return l};var H=(l,t,e)=>(e=l!=null?S(g(l)):{},b(t||!l||!l.__esModule?f(e,"default",{value:l,enumerable:!0}):e,l));function E(l={}){let{root:t=document,initialCountry:e="us",separateDialCode:r=!0,countryCodeSelector:n='input[pulse-form-field="country-code"]',onInit:i,onError:a=c=>console.warn(`[initIntlTelInput] ${c}`)}=l,s=new Map,o=window.intlTelInput;return o?(t.querySelectorAll('input[type="tel"]').forEach(c=>{try{let d=o(c,{initialCountry:e,separateDialCode:r,strictMode:!1,loadUtils:()=>import("https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js")});s.set(c,d),h(d,n),c.addEventListener("countrychange",()=>{h(d,n)}),i?.(c,d)}catch(d){a(`Failed to init on input inside "${q(c)}"`,d)}}),s):(a(`intlTelInput not found on window. Include the script before calling this function.
2
- e.g. <script src="https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js"><\/script>`),s)}function h(l,t){try{let e=l.getSelectedCountryData?.();if(!e?.dialCode)return;document.querySelectorAll(t).forEach(r=>{r.value=`+${e.dialCode}`})}catch{}}function q(l){return l.closest("[pulse-form-block]")?.getAttribute("pulse-field-name")??"unknown"}var y={required:"This field is required",email_invalid:"Please enter a valid email address",email_company:"Please use your company email address",phone_invalid:"Please enter a valid phone number",selection_required:"Please select at least one option",legal_required:"You must accept this to continue"},I={"pulse-demo":["pulse-demo-only","common-fields"],"white-glove-services":["white-glove-only","common-fields"]},x={1:{heading:"Your info",subheading:"Pulse is launching March 2025. Spots for onboarding cohort 1 are limited.",counter:"Step 1/2"},2:{heading:"Personalize",subheading:"Help us personalize your demo.",counter:"Step 2/2"}},m=class{constructor(t,e){this.currentStepIndex=0;this.stepHasBeenValidated=!1;this.originalRequired=new WeakMap;this.fieldState=new Map;this.form=t,this.itiInstances=e,this.steps=Array.from(t.querySelectorAll('[data-msf="step"]')),this.bindEvents(),this.cacheOriginalRequiredState(),this.initializeFieldState(),this.showStep(0),this.applyFlowConditions(),this.syncAllFieldState()}bindEvents(){this.form.addEventListener("click",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-action]");if(!r)return;let n=r.dataset.action;n==="next"&&(t.preventDefault(),this.next()),n==="back"&&(t.preventDefault(),this.back())}),this.form.addEventListener("submit",t=>{t.preventDefault()}),this.form.addEventListener("input",t=>{let e=t.target;e&&(!(e instanceof HTMLInputElement)&&!(e instanceof HTMLTextAreaElement)&&!(e instanceof HTMLSelectElement)||this.handleLiveValidation())}),this.itiInstances.forEach((t,e)=>{e.addEventListener("countrychange",()=>{this.stepHasBeenValidated&&this.handleLiveValidation()})}),this.form.addEventListener("change",t=>{let e=t.target;e&&e instanceof HTMLInputElement&&e.type==="radio"&&e.name==="flow-type"&&this.applyFlowConditions()}),this.form.addEventListener("input",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-field-key]");if(!r)return;let n=r.dataset.fieldKey;n&&this.updateFieldState(n)}),this.form.addEventListener("change",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-field-key]");if(!r)return;let n=r.dataset.fieldKey;n&&this.updateFieldState(n)})}handleLiveValidation(){if(!this.stepHasBeenValidated)return;let t=this.validateStep(this.currentStepIndex);this.clearErrors(),Object.keys(t).length>0&&this.showErrors(t)}showStep(t){this.steps.forEach((r,n)=>{r.style.display=n===t?"flex":"none"}),this.currentStepIndex=t,this.stepHasBeenValidated=!1,this.clearErrors();let e=t+1;this.updateStepText(e)}next(){this.stepHasBeenValidated=!0;let t=this.validateStep(this.currentStepIndex);if(Object.keys(t).length>0){this.clearErrors(),this.showErrors(t),this.focusFirstError(t);return}this.clearErrors(),this.stepHasBeenValidated=!1;let e=this.currentStepIndex+1;if(e>=this.steps.length){console.log("Validation passed");let n=this.steps[this.currentStepIndex].querySelector('[data-action="next"]');if(n){let s=n.querySelector("[data-action-text]");s&&(s.textContent="Submitting...")}this.mirrorFieldStateToDOM();let i=document.getElementById("webflow-form-submit"),a=document.getElementById("hubspot-form-submit");i&&a?(i.click(),a.click()):console.warn("Submit button not found");return}this.showStep(e)}showErrors(t){Object.entries(t).forEach(([e,r])=>{let n=this.form.querySelector(`[data-required-group="${e}"]`)||this.form.querySelector(`[data-required-legal="${e}"]`);if(n){n.classList.add("has-error");let s=n.querySelector(".field-error");s||(s=document.createElement("div"),s.className="field-error",n.appendChild(s)),s.textContent=y[r],s.setAttribute("data-error-code",r);return}let i=this.form.querySelector(`[name="${e}"]`);if(!i)return;i.classList.add("has-error");let a=i.parentElement?.querySelector(".field-error");a||(a=document.createElement("div"),a.className="field-error",i.parentElement?.appendChild(a)),a.textContent=y[r],a.setAttribute("data-error-code",r)})}clearErrors(){this.form.querySelectorAll(".field-error").forEach(t=>t.remove()),this.form.querySelectorAll(".has-error").forEach(t=>t.classList.remove("has-error"))}back(){let t=this.currentStepIndex-1;t<0||this.showStep(t)}getFieldsForStep(t){let e=this.steps[t];return Array.from(e.querySelectorAll("input, select, textarea"))}validateStep(t){let e={};this.getFieldsForStep(t).forEach(a=>{let s=a.name;if(!s||a.type==="checkbox"||a.type==="radio")return;let o=a.value.trim();if(a.hasAttribute("required")&&!o){e[s]="required";return}if(a.type==="email"&&o){if(!this.isValidEmailFormat(o)){e[s]="email_invalid";return}if(!this.isCompanyEmail(o)){e[s]="email_company";return}}if(a.type==="tel"&&o&&this.validatePhoneField(a)){e[s]="phone_invalid";return}});let n=this.validateRequiredSelectionGroups(t),i=this.validateLegalGroups(t);return{...e,...n,...i}}validateRequiredSelectionGroups(t){let e=this.steps[t],r={};return e.querySelectorAll("[data-required-group]").forEach(i=>{let a=i.dataset.requiredGroup;if(!a)return;let o=Array.from(i.querySelectorAll('input[type="checkbox"], input[type="radio"]')).filter(c=>!c.disabled);if(o.length===0)return;o.some(c=>c.checked)||(r[a]="selection_required")}),r}validateLegalGroups(t){let e=this.steps[t],r={};return e.querySelectorAll("[data-required-legal]").forEach(i=>{let a=i.dataset.requiredLegal;if(!a)return;let s=i.querySelector('input[type="checkbox"]');!s||s.disabled||s.checked||(r[a]="legal_required")}),r}isValidEmailFormat(t){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)}isCompanyEmail(t){let e=["gmail.com","yahoo.com","hotmail.com","outlook.com","icloud.com","aol.com"],r=t.split("@")[1]?.toLowerCase();return r?!e.includes(r):!1}validatePhoneField(t){let e=this.itiInstances.get(t);return!e||!t.value.trim()||e.isValidNumber()?null:"phone_invalid"}focusFirstError(t){let e=Object.keys(t)[0];if(!e)return;let r=this.form.querySelector(`[data-required-group="${e}"]`)||this.form.querySelector(`[data-required-legal="${e}"]`);if(r){r.querySelector("input, select, textarea")?.focus();return}this.form.querySelector(`[name="${e}"]`)?.focus()}getFlowType(){let t=this.form.querySelector('[data-required-group="flow-type"]');return t?t.querySelector('input[type="radio"]:checked')?.value??null:null}applyFlowConditions(){let t=this.getFlowType();if(!t)return;let e=I[t]||[];this.form.querySelectorAll("[data-conditional]").forEach(n=>{let i=n.dataset.conditional;if(!i)return;let a=e.includes(i),s=n.querySelectorAll("input, select, textarea");if(a)n.style.display="",s.forEach(o=>{o.disabled=!1,this.originalRequired.get(o)&&o.setAttribute("required","true")});else{n.style.display="none",s.forEach(u=>{u.disabled=!0,u.removeAttribute("required");let c=u.closest("[data-field-key]");if(!c)return;let d=c.dataset.fieldKey;if(!d)return;let p=this.fieldState.get(d);p&&(p.required=!1,p.valid=!0,p.value="",this.fieldState.set(d,p))});let o=n.dataset.fieldKey;if(o){let u=this.fieldState.get(o);u&&(u.required=!1,u.valid=!0,u.value="",this.fieldState.set(o,u))}this.clearErrorsInBlock(n)}}),this.updateValidityForStep(this.currentStepIndex+1)}cacheOriginalRequiredState(){this.form.querySelectorAll("input, select, textarea").forEach(e=>{this.originalRequired.set(e,e.hasAttribute("required"))})}clearErrorsInBlock(t){t.querySelectorAll(".field-error").forEach(e=>e.remove()),t.querySelectorAll(".has-error").forEach(e=>e.classList.remove("has-error"))}initializeFieldState(){this.form.querySelectorAll("[data-field-key]").forEach(e=>{let r=e.dataset.fieldKey;if(!r)return;let n=e.closest("[data-msf='step']"),i=n?Number(n.dataset.step):this.currentStepIndex+1;this.fieldState.set(r,{"field-name":r,value:"",required:!1,valid:!0,"step-number":i})})}updateFieldState(t){let e=this.form.querySelector(`[data-field-key="${t}"]`);if(!e)return;let r="",n=!1;if(e.hasAttribute("data-group")){let o=Array.from(e.querySelectorAll("input[type='radio'], input[type='checkbox']")).filter(u=>!u.disabled);if(n=e.hasAttribute("data-required-group"),o.some(u=>u.type==="radio")){let u=o.find(c=>c.checked);u?r=u.closest("label")?.querySelector("span")?.textContent?.trim()??u.value??"":r=""}else r=o.filter(c=>c.checked).map(c=>c.closest("label")?.querySelector("span")?.textContent?.trim()??c.value??"").join(",")}else if(e.hasAttribute("data-required-legal")){let o=e.querySelector("input[type='checkbox']");o&&!o.disabled&&(n=!0,r=o.checked?"true":"false")}else(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement)&&(n=e.hasAttribute("required")&&!e.disabled,e instanceof HTMLInputElement&&e.type==="checkbox"?r=e.checked?"true":"false":r=e.value.trim());let i=e.closest("[data-msf='step']"),a=i?Number(i.dataset.step):this.currentStepIndex+1,s=this.fieldState.get(t);s&&(s.value=r,s.required=n,s["step-number"]=a,this.fieldState.set(t,s),this.updateValidityForStep(a))}updateValidityForStep(t){let e=this.steps.findIndex(i=>Number(i.dataset.step)===t);if(e===-1)return;let r=this.validateStep(e);Array.from(this.fieldState.values()).filter(i=>i["step-number"]===t).forEach(i=>{i.valid=!r[i["field-name"]]})}getFormStateJSON(){return Array.from(this.fieldState.values())}updateStepText(t){let e=x[t];if(e){if(e.heading){let r=this.form.querySelector('[data-dynamic-text="heading"]');r&&(r.textContent=e.heading)}if(e.subheading){let r=this.form.querySelector('[data-dynamic-text="subheading"]');r&&(r.textContent=e.subheading)}if(e.counter){let r=this.form.querySelector('[data-dynamic-text="counter"]');r&&(r.textContent=e.counter)}}}syncAllFieldState(){this.fieldState.forEach((t,e)=>{this.updateFieldState(e)})}mirrorFieldStateToDOM(){let t=this.getFormStateJSON(),e=document.getElementById("form-hubspot-book-a-demo");t.forEach(r=>{let n=e?.querySelector(`[data-mirror="${r["field-name"]}"]`);if(!n){console.warn(`[Mirror] No element found with data-mirror="${r["field-name"]}"`);return}n instanceof HTMLInputElement&&n.disabled||(n instanceof HTMLInputElement?n.type==="checkbox"?n.checked=r.value==="true":n.type==="radio"?n.checked=n.value===r.value:n.value=r.value:n.value=r.value)})}};document.addEventListener("DOMContentLoaded",()=>{let l=document.querySelector('[data-msf="form"]');if(!l)return;let t=E({root:l}),e=new m(l,t);window.msf=e});})();
1
+ "use strict";(()=>{var S=Object.create;var f=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var M=(c=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(c,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):c)(function(c){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+c+'" is not supported')});var H=(c,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of g(t))!L.call(c,n)&&n!==e&&f(c,n,{get:()=>t[n],enumerable:!(r=b(t,n))||r.enumerable});return c};var I=(c,t,e)=>(e=c!=null?S(T(c)):{},H(t||!c||!c.__esModule?f(e,"default",{value:c,enumerable:!0}):e,c));function y(c={}){let{root:t=document,initialCountry:e="us",separateDialCode:r=!0,countryCodeSelector:n='input[pulse-form-field="country-code"]',onInit:i,onError:a=d=>console.warn(`[initIntlTelInput] ${d}`)}=c,s=new Map,l=window.intlTelInput;return l?(t.querySelectorAll('input[type="tel"]').forEach(d=>{try{let u=l(d,{initialCountry:e,separateDialCode:r,strictMode:!1,loadUtils:()=>import("https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js")});s.set(d,u),h(u,n),d.addEventListener("countrychange",()=>{h(u,n)}),i?.(d,u)}catch(u){a(`Failed to init on input inside "${q(d)}"`,u)}}),s):(a(`intlTelInput not found on window. Include the script before calling this function.
2
+ e.g. <script src="https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js"><\/script>`),s)}function h(c,t){try{let e=c.getSelectedCountryData?.();if(!e?.dialCode)return;document.querySelectorAll(t).forEach(r=>{r.value=`+${e.dialCode}`})}catch{}}function q(c){return c.closest("[pulse-form-block]")?.getAttribute("pulse-field-name")??"unknown"}var x={1:[{selector:'[data-action="back"]',property:"display",value:"none"},{selector:'[pricing-form-element="progress-fill"]',property:"width",value:"50%"}],2:[{selector:'[data-action="back"]',property:"display",value:"flex"},{selector:'[pricing-form-element="progress-fill"]',property:"width",value:"100%"}]},E=[{type:"company_type",name:"Record Label / Music Distributor","calender-name":"valeria","embed-url":"https://meetings.hubspot.com/valeria-angelini/pulse-valeria-and-alessandra?embed=true"},{type:"industry",name:"Financial Services","calender-name":"david","embed-url":"https://meetings.hubspot.com/david-zarate2?embed=true"},{type:"industry",name:"Sports","calender-name":"steven","embed-url":"https://meetings.hubspot.com/steven-campos?embed=true"},{type:"industry",name:"Beauty","calender-name":"albany","embed-url":"https://meetings.hubspot.com/david-zarate2?embed=true"},{type:"industry",name:"Music","calender-name":"steven","embed-url":"https://meetings.hubspot.com/steven-campos?embed=true"},{type:"industry",name:"Customer Packaged Goods","calender-name":"david","embed-url":"https://meetings.hubspot.com/david-zarate2?embed=true"},{type:"industry",name:"Other","calender-name":"david","embed-url":"https://meetings.hubspot.com/david-zarate2?embed=true"}],v={required:"This field is required",email_invalid:"Please enter a valid email address",email_company:"Please use your company email address",phone_invalid:"Please enter a valid phone number",selection_required:"Please select at least one option",legal_required:"You must accept this to continue"},k={"pulse-demo":["pulse-demo-only","common-fields"],"white-glove-services":["white-glove-only","common-fields"]},C={1:{heading:"Your info",subheading:"Pulse is launching March 2025. Spots for onboarding cohort 1 are limited.",counter:"Step 1/2"},2:{heading:"Personalize",subheading:"Help us personalize your demo.",counter:"Step 2/2"}},m=class{constructor(t,e){this.currentStepIndex=0;this.stepHasBeenValidated=!1;this.originalRequired=new WeakMap;this.fieldState=new Map;this.form=t,this.itiInstances=e,this.steps=Array.from(t.querySelectorAll('[data-msf="step"]')),this.bindEvents(),this.cacheOriginalRequiredState(),this.initializeFieldState(),this.showStep(0),this.applyFlowConditions(),this.syncAllFieldState()}bindEvents(){this.form.addEventListener("click",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-action]");if(!r)return;let n=r.dataset.action;n==="next"&&(t.preventDefault(),this.next()),n==="back"&&(t.preventDefault(),this.back())}),this.form.addEventListener("submit",t=>{t.preventDefault()}),this.form.addEventListener("input",t=>{let e=t.target;e&&(!(e instanceof HTMLInputElement)&&!(e instanceof HTMLTextAreaElement)&&!(e instanceof HTMLSelectElement)||this.handleLiveValidation())}),this.itiInstances.forEach((t,e)=>{e.addEventListener("countrychange",()=>{this.stepHasBeenValidated&&this.handleLiveValidation()})}),this.form.addEventListener("change",t=>{let e=t.target;e&&e instanceof HTMLInputElement&&e.type==="radio"&&e.name==="flow-type"&&this.applyFlowConditions()}),this.form.addEventListener("input",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-field-key]");if(!r)return;let n=r.dataset.fieldKey;n&&this.updateFieldState(n)}),this.form.addEventListener("change",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-field-key]");if(!r)return;let n=r.dataset.fieldKey;n&&this.updateFieldState(n)})}handleLiveValidation(){if(!this.stepHasBeenValidated)return;let t=this.validateStep(this.currentStepIndex);this.clearErrors(),Object.keys(t).length>0&&this.showErrors(t)}showStep(t){this.steps.forEach((r,n)=>{r.style.display=n===t?"flex":"none"}),this.currentStepIndex=t,this.stepHasBeenValidated=!1,this.clearErrors();let e=t+1;this.updateStepText(e),this.applyStepStyles(e)}next(){this.stepHasBeenValidated=!0;let t=this.validateStep(this.currentStepIndex);if(Object.keys(t).length>0){this.clearErrors(),this.showErrors(t),this.focusFirstError(t);return}this.clearErrors(),this.stepHasBeenValidated=!1;let e=this.currentStepIndex+1;if(e>=this.steps.length){console.log("Validation passed");let n=this.steps[this.currentStepIndex].querySelector('[data-action="next"]');if(n){let s=n.querySelector("[data-action-text]");s&&(s.textContent="Submitting...")}this.mirrorFieldStateToDOM(),this.loadCalendarEmbed();let i=document.getElementById("webflow-form-submit"),a=document.getElementById("hubspot-form-submit");i&&a?(i.click(),a.click()):console.warn("Submit button not found");return}this.showStep(e)}showErrors(t){Object.entries(t).forEach(([e,r])=>{let n=this.form.querySelector(`[data-required-group="${e}"]`)||this.form.querySelector(`[data-required-legal="${e}"]`);if(n){n.classList.add("has-error");let s=n.querySelector(".field-error");s||(s=document.createElement("div"),s.className="field-error",n.appendChild(s)),s.textContent=v[r],s.setAttribute("data-error-code",r);return}let i=this.form.querySelector(`[name="${e}"]`);if(!i)return;i.classList.add("has-error");let a=i.parentElement?.querySelector(".field-error");a||(a=document.createElement("div"),a.className="field-error",i.parentElement?.appendChild(a)),a.textContent=v[r],a.setAttribute("data-error-code",r)})}clearErrors(){this.form.querySelectorAll(".field-error").forEach(t=>t.remove()),this.form.querySelectorAll(".has-error").forEach(t=>t.classList.remove("has-error"))}back(){let t=this.currentStepIndex-1;t<0||this.showStep(t)}getFieldsForStep(t){let e=this.steps[t];return Array.from(e.querySelectorAll("input, select, textarea"))}validateStep(t){let e={};this.getFieldsForStep(t).forEach(a=>{let s=a.name;if(!s||a.type==="checkbox"||a.type==="radio")return;let l=a.value.trim();if(a.hasAttribute("required")&&!l){e[s]="required";return}if(a.type==="email"&&l){if(!this.isValidEmailFormat(l)){e[s]="email_invalid";return}if(!this.isCompanyEmail(l)){e[s]="email_company";return}}if(a.type==="tel"&&l&&this.validatePhoneField(a)){e[s]="phone_invalid";return}});let n=this.validateRequiredSelectionGroups(t),i=this.validateLegalGroups(t);return{...e,...n,...i}}validateRequiredSelectionGroups(t){let e=this.steps[t],r={};return e.querySelectorAll("[data-required-group]").forEach(i=>{let a=i.dataset.requiredGroup;if(!a)return;let l=Array.from(i.querySelectorAll('input[type="checkbox"], input[type="radio"]')).filter(d=>!d.disabled);if(l.length===0)return;l.some(d=>d.checked)||(r[a]="selection_required")}),r}validateLegalGroups(t){let e=this.steps[t],r={};return e.querySelectorAll("[data-required-legal]").forEach(i=>{let a=i.dataset.requiredLegal;if(!a)return;let s=i.querySelector('input[type="checkbox"]');!s||s.disabled||s.checked||(r[a]="legal_required")}),r}isValidEmailFormat(t){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)}isCompanyEmail(t){let e=["gmail.com","yahoo.com","hotmail.com","outlook.com","icloud.com","aol.com"],r=t.split("@")[1]?.toLowerCase();return r?!e.includes(r):!1}validatePhoneField(t){let e=this.itiInstances.get(t);return!e||!t.value.trim()||e.isValidNumber()?null:"phone_invalid"}focusFirstError(t){let e=Object.keys(t)[0];if(!e)return;let r=this.form.querySelector(`[data-required-group="${e}"]`)||this.form.querySelector(`[data-required-legal="${e}"]`);if(r){r.querySelector("input, select, textarea")?.focus();return}this.form.querySelector(`[name="${e}"]`)?.focus()}getFlowType(){let t=this.form.querySelector('[data-required-group="flow-type"]');return t?t.querySelector('input[type="radio"]:checked')?.value??null:null}applyFlowConditions(){let t=this.getFlowType();if(!t)return;let e=k[t]||[];this.form.querySelectorAll("[data-conditional]").forEach(n=>{let i=n.dataset.conditional;if(!i)return;let a=e.includes(i),s=n.querySelectorAll("input, select, textarea");if(a)n.style.display="",s.forEach(l=>{l.disabled=!1,this.originalRequired.get(l)&&l.setAttribute("required","true")});else{n.style.display="none",s.forEach(o=>{o.disabled=!0,o.removeAttribute("required"),o instanceof HTMLInputElement?o.type==="checkbox"||o.type==="radio"?o.checked=!1:o.value="":o instanceof HTMLSelectElement?o.selectedIndex=0:o instanceof HTMLTextAreaElement&&(o.value="");let d=o.closest("[data-field-key]");if(!d)return;let u=d.dataset.fieldKey;if(!u)return;let p=this.fieldState.get(u);p&&(p.required=!1,p.valid=!0,p.value="",this.fieldState.set(u,p))});let l=n.dataset.fieldKey;if(l){let o=this.fieldState.get(l);o&&(o.required=!1,o.valid=!0,o.value="",this.fieldState.set(l,o))}this.clearErrorsInBlock(n)}}),this.updateValidityForStep(this.currentStepIndex+1)}cacheOriginalRequiredState(){this.form.querySelectorAll("input, select, textarea").forEach(e=>{this.originalRequired.set(e,e.hasAttribute("required"))})}clearErrorsInBlock(t){t.querySelectorAll(".field-error").forEach(e=>e.remove()),t.querySelectorAll(".has-error").forEach(e=>e.classList.remove("has-error"))}initializeFieldState(){this.form.querySelectorAll("[data-field-key]").forEach(e=>{let r=e.dataset.fieldKey;if(!r)return;let n=e.closest("[data-msf='step']"),i=n?Number(n.dataset.step):this.currentStepIndex+1;this.fieldState.set(r,{"field-name":r,value:"",required:!1,valid:!0,"step-number":i})})}updateFieldState(t){let e=this.form.querySelector(`[data-field-key="${t}"]`);if(!e)return;let r="",n=!1;if(e.hasAttribute("data-group")){let l=Array.from(e.querySelectorAll("input[type='radio'], input[type='checkbox']")).filter(o=>!o.disabled);if(n=e.hasAttribute("data-required-group"),l.some(o=>o.type==="radio")){let o=l.find(d=>d.checked);o?r=o.closest("label")?.querySelector("span")?.textContent?.trim()??o.value??"":r=""}else r=l.filter(d=>d.checked).map(d=>d.closest("label")?.querySelector("span")?.textContent?.trim()??d.value??"").join(",")}else if(e.hasAttribute("data-required-legal")){let l=e.querySelector("input[type='checkbox']");l&&!l.disabled&&(n=!0,r=l.checked?"true":"false")}else(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement)&&(n=e.hasAttribute("required")&&!e.disabled,e instanceof HTMLInputElement&&e.type==="checkbox"?r=e.checked?"true":"false":r=e.value.trim());let i=e.closest("[data-msf='step']"),a=i?Number(i.dataset.step):this.currentStepIndex+1,s=this.fieldState.get(t);s&&(s.value=r,s.required=n,s["step-number"]=a,this.fieldState.set(t,s),this.updateValidityForStep(a))}updateValidityForStep(t){let e=this.steps.findIndex(i=>Number(i.dataset.step)===t);if(e===-1)return;let r=this.validateStep(e);Array.from(this.fieldState.values()).filter(i=>i["step-number"]===t).forEach(i=>{i.valid=!r[i["field-name"]]})}getFormStateJSON(){return Array.from(this.fieldState.values())}updateStepText(t){let e=C[t];if(e){if(e.heading){let r=this.form.querySelector('[data-dynamic-text="heading"]');r&&(r.textContent=e.heading)}if(e.subheading){let r=this.form.querySelector('[data-dynamic-text="subheading"]');r&&(r.textContent=e.subheading)}if(e.counter){let r=this.form.querySelector('[data-dynamic-text="counter"]');r&&(r.textContent=e.counter)}}}syncAllFieldState(){this.fieldState.forEach((t,e)=>{this.updateFieldState(e)})}mirrorFieldStateToDOM(){let t=this.getFormStateJSON(),e=document.getElementById("form-hubspot-book-a-demo");t.forEach(r=>{let n=e?.querySelector(`[data-mirror="${r["field-name"]}"]`);if(!n){console.warn(`[Mirror] No element found with data-mirror="${r["field-name"]}"`);return}n instanceof HTMLInputElement&&n.disabled||(n instanceof HTMLInputElement?n.type==="checkbox"?n.checked=r.value==="true":n.type==="radio"?n.checked=n.value===r.value:n.value=r.value:n.value=r.value)})}resolveCalendarEntry(){let t=this.fieldState.get("company_type")?.value??"",e=this.fieldState.get("industry")?.value??"",r=E.find(i=>i.type==="company_type"&&i.name===t);return r||(E.find(i=>i.type==="industry"&&i.name===e)??null)}loadCalendarEmbed(){let t=document.querySelector("[hs-calender-block]");if(!t){console.warn("[Calendar] No [hs-calender-block] element found");return}let e=this.resolveCalendarEntry();if(!e){t.setAttribute("hs-calender-block-active","false"),t.innerHTML="",console.warn("[Calendar] No matching calendar entry found");return}t.setAttribute("hs-calender-block-active","true"),t.innerHTML="";let r=document.createElement("div");r.className="meetings-iframe-container",r.setAttribute("data-src",e["embed-url"]),t.appendChild(r);let n="https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js",i=document.querySelector(`script[src="${n}"]`);i&&i.remove();let a=document.createElement("script");a.type="text/javascript",a.src=n,t.appendChild(a),console.log(`[Calendar] Loaded embed for "${e["calender-name"]}" \u2192 ${e["embed-url"]}`)}applyStepStyles(t){let e=x[t];e&&e.forEach(({selector:r,property:n,value:i})=>{document.querySelectorAll(r).forEach(s=>{s.style.setProperty(n,i)})})}};document.addEventListener("DOMContentLoaded",()=>{let c=document.querySelector('[data-msf="form"]');if(!c)return;let t=y({root:c}),e=new m(c,t);window.msf=e});})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/form/utils/initIntlTelInput.ts", "../../src/form/index.ts"],
4
- "sourcesContent": ["// \u2500\u2500\u2500 initIntlTelInput.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reusable utility that initialises intl-tel-input on every phone field\n// inside a given root. Returns the instance map so callers can pass it\n// to collectFormFields / validatePhone when needed.\n//\n// Usage:\n// import { initIntlTelInput } from \"./initIntlTelInput\";\n// const itiInstances = initIntlTelInput();\n// const itiInstances = initIntlTelInput({ root: myDiv, initialCountry: \"gb\" });\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface IntlTelInputOptions {\n /** Root element to scan for phone inputs. Default: document */\n root?: ParentNode;\n /** ISO-2 country code for default selection. Default: \"us\" */\n initialCountry?: string;\n /** Show dial code separately from the input. Default: true */\n separateDialCode?: boolean;\n /** Selector for hidden input(s) that should receive the dial code. Default: 'input[pulse-form-field=\"country-code\"]' */\n countryCodeSelector?: string;\n /** Called after each input is successfully initialised */\n onInit?: (input: HTMLInputElement, iti: any) => void;\n /** Called when intlTelInput is missing from window or an input fails */\n onError?: (message: string, error?: unknown) => void;\n}\n\n/**\n * Finds every `input[type=\"tel\"]` inside `[pulse-form-block=\"phone\"]`\n * wrappers, attaches intl-tel-input, and returns a Map of\n * `HTMLInputElement \u2192 iti instance` for downstream use (validation, etc.).\n */\nexport function initIntlTelInput(\n options: IntlTelInputOptions = {}\n): Map<HTMLInputElement, any> {\n const {\n root = document,\n initialCountry = \"us\",\n separateDialCode = true,\n countryCodeSelector = 'input[pulse-form-field=\"country-code\"]',\n onInit,\n onError = (msg) => console.warn(`[initIntlTelInput] ${msg}`),\n } = options;\n\n const instances = new Map<HTMLInputElement, any>();\n\n // \u2500\u2500 Guard: library must be loaded first \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const intlTelInput = (window as any).intlTelInput;\n if (!intlTelInput) {\n onError(\n \"intlTelInput not found on window. \" +\n \"Include the script before calling this function.\\n\" +\n 'e.g. <script src=\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js\"></script>'\n );\n return instances;\n }\n\n // \u2500\u2500 Find phone inputs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const phoneInputs = root.querySelectorAll<HTMLInputElement>(\n 'input[type=\"tel\"]'\n );\n\n phoneInputs.forEach((input) => {\n try {\n const iti = intlTelInput(input, {\n initialCountry,\n separateDialCode,\n strictMode: false,\n // @ts-ignore \u2014 runtime CDN import\n loadUtils: () =>\n import(\n // @ts-ignore \u2014 runtime CDN import, not a TS module\n \"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js\"\n ),\n });\n\n instances.set(input, iti);\n\n // Fill hidden country-code input(s) on load + on change\n fillCountryCode(iti, countryCodeSelector);\n input.addEventListener(\"countrychange\", () => {\n fillCountryCode(iti, countryCodeSelector);\n });\n\n onInit?.(input, iti);\n } catch (err) {\n onError(`Failed to init on input inside \"${fieldNameOf(input)}\"`, err);\n }\n });\n\n return instances;\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction fillCountryCode(iti: any, selector: string): void {\n try {\n const countryData = iti.getSelectedCountryData?.();\n if (!countryData?.dialCode) return;\n\n document.querySelectorAll<HTMLInputElement>(selector).forEach((input) => {\n input.value = `+${countryData.dialCode}`;\n });\n } catch {\n // silently ignore \u2014 non-critical\n }\n}\n\nfunction fieldNameOf(input: HTMLInputElement): string {\n return (\n input.closest(\"[pulse-form-block]\")?.getAttribute(\"pulse-field-name\") ??\n \"unknown\"\n );\n}", "import { initIntlTelInput } from \"./utils/initIntlTelInput\";\n\ntype StepEl = HTMLElement;\n\ntype ErrorCode =\n | \"required\"\n | \"email_invalid\"\n | \"email_company\"\n | \"phone_invalid\"\n | \"selection_required\"\n | \"legal_required\";\n\nconst ERROR_MESSAGES: Record<ErrorCode, string> = {\n required: \"This field is required\",\n email_invalid: \"Please enter a valid email address\",\n email_company: \"Please use your company email address\",\n phone_invalid: \"Please enter a valid phone number\",\n selection_required: \"Please select at least one option\",\n legal_required: \"You must accept this to continue\"\n};\n\ntype FieldState = {\n \"field-name\": string;\n value: string;\n required: boolean;\n valid: boolean;\n \"step-number\": number;\n};\n\nconst FLOW_CONDITIONS: Record<string, string[]> = {\n \"pulse-demo\": [\n \"pulse-demo-only\",\n \"common-fields\"\n ],\n \"white-glove-services\": [\n \"white-glove-only\",\n \"common-fields\"\n ]\n};\n\nconst STEP_TEXT: Record<number, { heading?: string; subheading?: string; counter?: string }> = {\n 1: {\n heading: \"Your info\",\n subheading: \"Pulse is launching March 2025. Spots for onboarding cohort 1 are limited.\",\n counter: \"Step 1/2\"\n },\n 2: {\n heading: \"Personalize\",\n subheading: \"Help us personalize your demo.\",\n counter: \"Step 2/2\"\n }\n};\n\nclass MultiStepForm {\n private form: HTMLFormElement;\n private steps: StepEl[];\n private currentStepIndex = 0;\n private itiInstances: Map<HTMLInputElement, any>;\n private stepHasBeenValidated = false;\n private originalRequired = new WeakMap<HTMLElement, boolean>();\n private fieldState = new Map<string, FieldState>();\n\n\n constructor(form: HTMLFormElement, itiInstances: Map<HTMLInputElement, any>) {\n this.form = form;\n this.itiInstances = itiInstances;\n\n this.steps = Array.from(\n form.querySelectorAll<HTMLElement>('[data-msf=\"step\"]')\n );\n\n this.bindEvents();\n this.cacheOriginalRequiredState();\n this.initializeFieldState();\n this.showStep(0);\n this.applyFlowConditions();\n this.syncAllFieldState();\n }\n\n private bindEvents() {\n this.form.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const btn = target.closest<HTMLElement>(\"[data-action]\");\n if (!btn) return;\n\n const action = btn.dataset.action;\n\n if (action === \"next\") {\n e.preventDefault();\n this.next();\n }\n\n if (action === \"back\") {\n e.preventDefault();\n this.back();\n }\n });\n\n // Prevent Webflow native submit until you decide\n this.form.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n });\n\n this.form.addEventListener(\"input\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n // Only care about fields\n if (\n !(target instanceof HTMLInputElement) &&\n !(target instanceof HTMLTextAreaElement) &&\n !(target instanceof HTMLSelectElement)\n ) return;\n\n this.handleLiveValidation();\n });\n\n this.itiInstances.forEach((_iti, input) => {\n input.addEventListener(\"countrychange\", () => {\n if (!this.stepHasBeenValidated) return;\n this.handleLiveValidation();\n });\n });\n\n this.form.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n if (\n target instanceof HTMLInputElement &&\n target.type === \"radio\" &&\n target.name === \"flow-type\"\n ) {\n this.applyFlowConditions();\n }\n });\n\n this.form.addEventListener(\"input\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const trackable = target.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const key = trackable.dataset.fieldKey;\n if (!key) return;\n\n this.updateFieldState(key);\n });\n\n this.form.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const trackable = target.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const key = trackable.dataset.fieldKey;\n if (!key) return;\n\n this.updateFieldState(key);\n });\n }\n\n private handleLiveValidation() {\n if (!this.stepHasBeenValidated) return;\n\n const errors = this.validateStep(this.currentStepIndex);\n\n this.clearErrors();\n\n if (Object.keys(errors).length > 0) {\n this.showErrors(errors);\n }\n }\n private showStep(index: number) {\n this.steps.forEach((step, i) => {\n step.style.display = i === index ? \"flex\" : \"none\";\n });\n\n this.currentStepIndex = index;\n\n this.stepHasBeenValidated = false;\n this.clearErrors();\n\n const stepNumber = index + 1;\n this.updateStepText(stepNumber);\n }\n\n private next() {\n this.stepHasBeenValidated = true;\n\n const errors = this.validateStep(this.currentStepIndex);\n\n if (Object.keys(errors).length > 0) {\n this.clearErrors();\n this.showErrors(errors);\n this.focusFirstError(errors);\n return;\n }\n\n this.clearErrors();\n this.stepHasBeenValidated = false;\n\n const nextIndex = this.currentStepIndex + 1;\n\n // If this is the last step \u2192 treat as submit\n if (nextIndex >= this.steps.length) {\n console.log(\"Validation passed\");\n\n // Find the current step\n const currentStep = this.steps[this.currentStepIndex];\n\n // Find the next button inside this step\n const nextButton = currentStep.querySelector<HTMLElement>('[data-action=\"next\"]');\n\n if (nextButton) {\n const actionTextEl = nextButton.querySelector<HTMLElement>('[data-action-text]');\n if (actionTextEl) {\n actionTextEl.textContent = \"Submitting...\";\n }\n }\n\n this.mirrorFieldStateToDOM();\n\n const webflowSubmitBtn = document.getElementById(\"webflow-form-submit\") as HTMLButtonElement | null;\n const hubspotSubmitBtn = document.getElementById(\"hubspot-form-submit\") as HTMLButtonElement | null;\n\n if (webflowSubmitBtn && hubspotSubmitBtn) {\n webflowSubmitBtn.click();\n hubspotSubmitBtn.click();\n } else {\n console.warn(\"Submit button not found\");\n }\n\n return;\n }\n\n // Otherwise go to next step normally\n this.showStep(nextIndex);\n }\n\n private showErrors(errors: Record<string, ErrorCode>) {\n Object.entries(errors).forEach(([name, message]) => {\n\n // First check for group wrapper\n const groupEl =\n this.form.querySelector<HTMLElement>(`[data-required-group=\"${name}\"]`) ||\n this.form.querySelector<HTMLElement>(`[data-required-legal=\"${name}\"]`);\n\n if (groupEl) {\n groupEl.classList.add(\"has-error\");\n\n let errorEl = groupEl.querySelector<HTMLElement>(\".field-error\");\n if (!errorEl) {\n errorEl = document.createElement(\"div\");\n errorEl.className = \"field-error\";\n groupEl.appendChild(errorEl);\n }\n\n errorEl.textContent = ERROR_MESSAGES[message];\n errorEl.setAttribute(\"data-error-code\", message);\n return;\n }\n\n // Otherwise treat as normal field\n const field = this.form.querySelector<HTMLInputElement>(`[name=\"${name}\"]`);\n if (!field) return;\n\n field.classList.add(\"has-error\");\n\n let errorEl = field.parentElement?.querySelector<HTMLElement>(\".field-error\");\n if (!errorEl) {\n errorEl = document.createElement(\"div\");\n errorEl.className = \"field-error\";\n field.parentElement?.appendChild(errorEl);\n }\n\n errorEl.textContent = ERROR_MESSAGES[message];\n errorEl.setAttribute(\"data-error-code\", message);\n });\n }\n\n private clearErrors() {\n this.form.querySelectorAll(\".field-error\").forEach((el) => el.remove());\n this.form.querySelectorAll(\".has-error\").forEach((el) =>\n el.classList.remove(\"has-error\")\n );\n }\n\n private back() {\n const prevIndex = this.currentStepIndex - 1;\n if (prevIndex < 0) return;\n this.showStep(prevIndex);\n }\n\n private getFieldsForStep(index: number): HTMLInputElement[] {\n const step = this.steps[index];\n return Array.from(\n step.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n \"input, select, textarea\"\n )\n ) as HTMLInputElement[];\n }\n\n private validateStep(index: number): Record<string, ErrorCode> {\n const errors: Record<string, ErrorCode> = {};\n\n const fields = this.getFieldsForStep(index);\n\n fields.forEach((field) => {\n const name = field.name;\n if (!name) return;\n\n if (field.type === \"checkbox\" || field.type === \"radio\") return;\n\n const value = field.value.trim();\n const isRequired = field.hasAttribute(\"required\");\n\n if (isRequired && !value) {\n errors[name] = \"required\";\n return;\n }\n\n // Custom email validation\n if (field.type === \"email\" && value) {\n if (!this.isValidEmailFormat(value)) {\n errors[name] = \"email_invalid\";\n return;\n }\n\n if (!this.isCompanyEmail(value)) {\n errors[name] = \"email_company\";\n return;\n }\n }\n\n // Custom phone validation\n if (field.type === \"tel\" && value) {\n const phoneError = this.validatePhoneField(field as HTMLInputElement);\n if (phoneError) {\n errors[name] = \"phone_invalid\";\n return;\n }\n }\n });\n\n const selectionGroupErrors = this.validateRequiredSelectionGroups(index);\n const legalErrors = this.validateLegalGroups(index);\n\n return {\n ...errors,\n ...selectionGroupErrors,\n ...legalErrors\n };\n }\n\n private validateRequiredSelectionGroups(index: number): Record<string, ErrorCode> {\n const step = this.steps[index];\n const errors: Record<string, ErrorCode> = {};\n\n const groups = step.querySelectorAll<HTMLElement>(\"[data-required-group]\");\n\n groups.forEach((groupEl) => {\n const groupName = groupEl.dataset.requiredGroup;\n if (!groupName) return;\n\n const inputs = Array.from(\n groupEl.querySelectorAll<HTMLInputElement>(\n 'input[type=\"checkbox\"], input[type=\"radio\"]'\n )\n );\n\n // Only consider enabled inputs\n const enabledInputs = inputs.filter((input) => !input.disabled);\n\n // If no enabled inputs \u2192 group is structurally inactive \u2192 skip validation\n if (enabledInputs.length === 0) return;\n\n const isChecked = enabledInputs.some((input) => input.checked);\n\n if (!isChecked) {\n errors[groupName] = \"selection_required\";\n }\n });\n\n return errors;\n }\n\n private validateLegalGroups(index: number): Record<string, ErrorCode> {\n const step = this.steps[index];\n const errors: Record<string, ErrorCode> = {};\n\n const legalGroups = step.querySelectorAll<HTMLElement>(\"[data-required-legal]\");\n\n legalGroups.forEach((groupEl) => {\n const groupName = groupEl.dataset.requiredLegal;\n if (!groupName) return;\n\n const checkbox = groupEl.querySelector<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n\n // If checkbox doesn't exist or is disabled \u2192 skip validation\n if (!checkbox || checkbox.disabled) return;\n\n if (!checkbox.checked) {\n errors[groupName] = \"legal_required\";\n }\n });\n\n return errors;\n }\n\n private isValidEmailFormat(email: string): boolean {\n const emailRegex =\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n }\n\n private isCompanyEmail(email: string): boolean {\n const publicDomains = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"outlook.com\",\n \"icloud.com\",\n \"aol.com\"\n ];\n\n const domain = email.split(\"@\")[1]?.toLowerCase();\n if (!domain) return false;\n\n return !publicDomains.includes(domain);\n }\n private validatePhoneField(field: HTMLInputElement): ErrorCode | null {\n const iti = this.itiInstances.get(field);\n if (!iti) return null;\n\n const value = field.value.trim();\n if (!value) return null;\n\n if (!iti.isValidNumber()) {\n return \"phone_invalid\";\n }\n\n return null;\n }\n\n private focusFirstError(errors: Record<string, ErrorCode>) {\n const firstErrorName = Object.keys(errors)[0];\n if (!firstErrorName) return;\n\n const groupEl =\n this.form.querySelector<HTMLElement>(\n `[data-required-group=\"${firstErrorName}\"]`\n ) ||\n this.form.querySelector<HTMLElement>(\n `[data-required-legal=\"${firstErrorName}\"]`\n );\n\n if (groupEl) {\n const firstInput = groupEl.querySelector<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n firstInput?.focus();\n return;\n }\n\n const field = this.form.querySelector<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(`[name=\"${firstErrorName}\"]`);\n\n field?.focus();\n }\n\n private getFlowType(): string | null {\n const flowWrapper = this.form.querySelector<HTMLElement>(\n '[data-required-group=\"flow-type\"]'\n );\n if (!flowWrapper) return null;\n\n const checked = flowWrapper.querySelector<HTMLInputElement>(\n 'input[type=\"radio\"]:checked'\n );\n\n return checked?.value ?? null;\n }\n\n private applyFlowConditions() {\n const flowType = this.getFlowType();\n if (!flowType) return;\n\n const visibleKeys = FLOW_CONDITIONS[flowType] || [];\n\n const conditionalBlocks = this.form.querySelectorAll<HTMLElement>(\n \"[data-conditional]\"\n );\n\n conditionalBlocks.forEach((block) => {\n const key = block.dataset.conditional;\n if (!key) return;\n\n const shouldShow = visibleKeys.includes(key);\n\n const inputs = block.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n if (shouldShow) {\n block.style.display = \"\";\n\n inputs.forEach((input) => {\n input.disabled = false;\n\n const wasRequired = this.originalRequired.get(input);\n if (wasRequired) {\n input.setAttribute(\"required\", \"true\");\n }\n });\n } else {\n block.style.display = \"none\";\n\n inputs.forEach((input) => {\n input.disabled = true;\n input.removeAttribute(\"required\");\n\n // Sync fieldState for hidden inputs\n const trackable = input.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const fieldKey = trackable.dataset.fieldKey;\n if (!fieldKey) return;\n\n const state = this.fieldState.get(fieldKey);\n if (!state) return;\n\n state.required = false;\n state.valid = true;\n state.value = \"\";\n\n this.fieldState.set(fieldKey, state);\n });\n\n // Sync wrapper-level fieldState if wrapper itself is tracked\n const wrapperKey = block.dataset.fieldKey;\n if (wrapperKey) {\n const state = this.fieldState.get(wrapperKey);\n if (state) {\n state.required = false;\n state.valid = true;\n state.value = \"\";\n this.fieldState.set(wrapperKey, state);\n }\n }\n\n this.clearErrorsInBlock(block);\n }\n });\n\n // \uD83D\uDD25 Recalculate validity after structural changes\n this.updateValidityForStep(this.currentStepIndex + 1);\n }\n\n private cacheOriginalRequiredState() {\n const inputs = this.form.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n inputs.forEach((input) => {\n this.originalRequired.set(input, input.hasAttribute(\"required\"));\n });\n }\n\n private clearErrorsInBlock(block: HTMLElement) {\n block.querySelectorAll(\".field-error\").forEach((el) => el.remove());\n block.querySelectorAll(\".has-error\").forEach((el) =>\n el.classList.remove(\"has-error\")\n );\n }\n\n private initializeFieldState() {\n const trackables = this.form.querySelectorAll<HTMLElement>(\n \"[data-field-key]\"\n );\n\n trackables.forEach((el) => {\n const key = el.dataset.fieldKey;\n if (!key) return;\n\n const stepWrapper = el.closest<HTMLElement>(\"[data-msf='step']\");\n const stepNumber = stepWrapper\n ? Number(stepWrapper.dataset.step)\n : this.currentStepIndex + 1;\n\n this.fieldState.set(key, {\n \"field-name\": key,\n value: \"\",\n required: false,\n valid: true,\n \"step-number\": stepNumber\n });\n });\n }\n\n private updateFieldState(key: string) {\n const element = this.form.querySelector<HTMLElement>(\n `[data-field-key=\"${key}\"]`\n );\n if (!element) return;\n\n let value = \"\";\n let required = false;\n\n // If wrapper group\n if (element.hasAttribute(\"data-group\")) {\n const inputs = Array.from(\n element.querySelectorAll<HTMLInputElement>(\n \"input[type='radio'], input[type='checkbox']\"\n )\n ).filter((i) => !i.disabled);\n\n required = element.hasAttribute(\"data-required-group\");\n\n if (inputs.some((i) => i.type === \"radio\")) {\n const checked = inputs.find((i) => i.checked);\n\n if (checked) {\n const span = checked.closest(\"label\")?.querySelector(\"span\");\n value = span?.textContent?.trim() ?? checked.value ?? \"\";\n } else {\n value = \"\";\n }\n } else {\n const checkedValues = inputs\n .filter((i) => i.checked)\n .map((i) => {\n const span = i.closest(\"label\")?.querySelector(\"span\");\n return span?.textContent?.trim() ?? i.value ?? \"\";\n });\n\n value = checkedValues.join(\",\");\n }\n }\n // Legal wrapper\n else if (element.hasAttribute(\"data-required-legal\")) {\n const checkbox = element.querySelector<HTMLInputElement>(\n \"input[type='checkbox']\"\n );\n\n if (checkbox && !checkbox.disabled) {\n required = true;\n value = checkbox.checked ? \"true\" : \"false\";\n }\n }\n // Normal input\n else if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n ) {\n required = element.hasAttribute(\"required\") && !element.disabled;\n\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\n value = element.checked ? \"true\" : \"false\";\n } else {\n value = (element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value.trim();\n }\n }\n\n const stepWrapper = element.closest<HTMLElement>(\"[data-msf='step']\");\n const stepNumber = stepWrapper\n ? Number(stepWrapper.dataset.step)\n : this.currentStepIndex + 1;\n\n const state = this.fieldState.get(key);\n if (!state) return;\n\n state.value = value;\n state.required = required;\n state[\"step-number\"] = stepNumber;\n\n this.fieldState.set(key, state);\n\n this.updateValidityForStep(stepNumber);\n }\n\n private updateValidityForStep(stepNumber: number) {\n const stepIndex = this.steps.findIndex(\n (step) => Number(step.dataset.step) === stepNumber\n );\n\n if (stepIndex === -1) return;\n\n const errors = this.validateStep(stepIndex);\n\n const keysInStep = Array.from(this.fieldState.values()).filter(\n (f) => f[\"step-number\"] === stepNumber\n );\n\n keysInStep.forEach((field) => {\n field.valid = !errors[field[\"field-name\"]];\n });\n }\n\n public getFormStateJSON(): FieldState[] {\n return Array.from(this.fieldState.values());\n }\n\n private updateStepText(stepNumber: number) {\n const config = STEP_TEXT[stepNumber];\n if (!config) return;\n\n if (config.heading) {\n const headingEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"heading\"]'\n );\n if (headingEl) headingEl.textContent = config.heading;\n }\n\n if (config.subheading) {\n const subheadingEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"subheading\"]'\n );\n if (subheadingEl) subheadingEl.textContent = config.subheading;\n }\n\n if (config.counter) {\n const counterEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"counter\"]'\n );\n if (counterEl) counterEl.textContent = config.counter;\n }\n }\n\n private syncAllFieldState() {\n this.fieldState.forEach((_state, key) => {\n this.updateFieldState(key);\n });\n }\n\n private mirrorFieldStateToDOM() {\n const allFields = this.getFormStateJSON();\n const hubspotForm = document.getElementById(\"form-hubspot-book-a-demo\");\n\n allFields.forEach((field) => {\n const mirrorEl = hubspotForm?.querySelector<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >(`[data-mirror=\"${field[\"field-name\"]}\"]`);\n\n if (!mirrorEl) {\n console.warn(\n `[Mirror] No element found with data-mirror=\"${field[\"field-name\"]}\"`\n );\n return;\n }\n\n // Skip disabled mirrors just in case\n if (\n mirrorEl instanceof HTMLInputElement &&\n mirrorEl.disabled\n ) {\n return;\n }\n\n if (mirrorEl instanceof HTMLInputElement) {\n if (mirrorEl.type === \"checkbox\") {\n mirrorEl.checked = field.value === \"true\";\n } else if (mirrorEl.type === \"radio\") {\n mirrorEl.checked = mirrorEl.value === field.value;\n } else {\n mirrorEl.value = field.value;\n }\n } else {\n mirrorEl.value = field.value;\n }\n });\n }\n\n}\n\n// Boot\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const form = document.querySelector<HTMLFormElement>('[data-msf=\"form\"]');\n if (!form) return;\n\n const itiInstances = initIntlTelInput({ root: form });\n\n const msf = new MultiStepForm(form, itiInstances);\n\n // expose globally for debugging\n (window as any).msf = msf;\n});"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// \u2500\u2500\u2500 initIntlTelInput.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reusable utility that initialises intl-tel-input on every phone field\n// inside a given root. Returns the instance map so callers can pass it\n// to collectFormFields / validatePhone when needed.\n//\n// Usage:\n// import { initIntlTelInput } from \"./initIntlTelInput\";\n// const itiInstances = initIntlTelInput();\n// const itiInstances = initIntlTelInput({ root: myDiv, initialCountry: \"gb\" });\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface IntlTelInputOptions {\n /** Root element to scan for phone inputs. Default: document */\n root?: ParentNode;\n /** ISO-2 country code for default selection. Default: \"us\" */\n initialCountry?: string;\n /** Show dial code separately from the input. Default: true */\n separateDialCode?: boolean;\n /** Selector for hidden input(s) that should receive the dial code. Default: 'input[pulse-form-field=\"country-code\"]' */\n countryCodeSelector?: string;\n /** Called after each input is successfully initialised */\n onInit?: (input: HTMLInputElement, iti: any) => void;\n /** Called when intlTelInput is missing from window or an input fails */\n onError?: (message: string, error?: unknown) => void;\n}\n\n/**\n * Finds every `input[type=\"tel\"]` inside `[pulse-form-block=\"phone\"]`\n * wrappers, attaches intl-tel-input, and returns a Map of\n * `HTMLInputElement \u2192 iti instance` for downstream use (validation, etc.).\n */\nexport function initIntlTelInput(\n options: IntlTelInputOptions = {}\n): Map<HTMLInputElement, any> {\n const {\n root = document,\n initialCountry = \"us\",\n separateDialCode = true,\n countryCodeSelector = 'input[pulse-form-field=\"country-code\"]',\n onInit,\n onError = (msg) => console.warn(`[initIntlTelInput] ${msg}`),\n } = options;\n\n const instances = new Map<HTMLInputElement, any>();\n\n // \u2500\u2500 Guard: library must be loaded first \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const intlTelInput = (window as any).intlTelInput;\n if (!intlTelInput) {\n onError(\n \"intlTelInput not found on window. \" +\n \"Include the script before calling this function.\\n\" +\n 'e.g. <script src=\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js\"></script>'\n );\n return instances;\n }\n\n // \u2500\u2500 Find phone inputs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const phoneInputs = root.querySelectorAll<HTMLInputElement>(\n 'input[type=\"tel\"]'\n );\n\n phoneInputs.forEach((input) => {\n try {\n const iti = intlTelInput(input, {\n initialCountry,\n separateDialCode,\n strictMode: false,\n // @ts-ignore \u2014 runtime CDN import\n loadUtils: () =>\n import(\n // @ts-ignore \u2014 runtime CDN import, not a TS module\n \"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js\"\n ),\n });\n\n instances.set(input, iti);\n\n // Fill hidden country-code input(s) on load + on change\n fillCountryCode(iti, countryCodeSelector);\n input.addEventListener(\"countrychange\", () => {\n fillCountryCode(iti, countryCodeSelector);\n });\n\n onInit?.(input, iti);\n } catch (err) {\n onError(`Failed to init on input inside \"${fieldNameOf(input)}\"`, err);\n }\n });\n\n return instances;\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction fillCountryCode(iti: any, selector: string): void {\n try {\n const countryData = iti.getSelectedCountryData?.();\n if (!countryData?.dialCode) return;\n\n document.querySelectorAll<HTMLInputElement>(selector).forEach((input) => {\n input.value = `+${countryData.dialCode}`;\n });\n } catch {\n // silently ignore \u2014 non-critical\n }\n}\n\nfunction fieldNameOf(input: HTMLInputElement): string {\n return (\n input.closest(\"[pulse-form-block]\")?.getAttribute(\"pulse-field-name\") ??\n \"unknown\"\n );\n}", "import { initIntlTelInput } from \"./utils/initIntlTelInput\";\n\ntype StepEl = HTMLElement;\n\ntype ErrorCode =\n | \"required\"\n | \"email_invalid\"\n | \"email_company\"\n | \"phone_invalid\"\n | \"selection_required\"\n | \"legal_required\";\n\ntype StepStyle = {\n selector: string;\n property: string;\n value: string;\n};\n\nconst STEP_STYLES: Record<number, StepStyle[]> = {\n 1: [\n { selector: '[data-action=\"back\"]', property: \"display\", value: \"none\" },\n { selector: '[pricing-form-element=\"progress-fill\"]', property: \"width\", value: \"50%\" },\n ],\n 2: [\n { selector: '[data-action=\"back\"]', property: \"display\", value: \"flex\" },\n { selector: '[pricing-form-element=\"progress-fill\"]', property: \"width\", value: \"100%\" },\n ],\n};\n\ntype CalendarEntry = {\n type: \"company_type\" | \"industry\";\n name: string;\n \"calender-name\": string;\n \"embed-url\": string;\n};\n\nconst CALENDAR_ENTRIES: CalendarEntry[] = [\n {\n type: \"company_type\",\n name: \"Record Label / Music Distributor\",\n \"calender-name\": \"valeria\",\n \"embed-url\": \"https://meetings.hubspot.com/valeria-angelini/pulse-valeria-and-alessandra?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Financial Services\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Sports\",\n \"calender-name\": \"steven\",\n \"embed-url\": \"https://meetings.hubspot.com/steven-campos?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Beauty\",\n \"calender-name\": \"albany\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Music\",\n \"calender-name\": \"steven\",\n \"embed-url\": \"https://meetings.hubspot.com/steven-campos?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Customer Packaged Goods\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Other\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n];\n\nconst ERROR_MESSAGES: Record<ErrorCode, string> = {\n required: \"This field is required\",\n email_invalid: \"Please enter a valid email address\",\n email_company: \"Please use your company email address\",\n phone_invalid: \"Please enter a valid phone number\",\n selection_required: \"Please select at least one option\",\n legal_required: \"You must accept this to continue\"\n};\n\ntype FieldState = {\n \"field-name\": string;\n value: string;\n required: boolean;\n valid: boolean;\n \"step-number\": number;\n};\n\nconst FLOW_CONDITIONS: Record<string, string[]> = {\n \"pulse-demo\": [\n \"pulse-demo-only\",\n \"common-fields\"\n ],\n \"white-glove-services\": [\n \"white-glove-only\",\n \"common-fields\"\n ]\n};\n\nconst STEP_TEXT: Record<number, { heading?: string; subheading?: string; counter?: string }> = {\n 1: {\n heading: \"Your info\",\n subheading: \"Pulse is launching March 2025. Spots for onboarding cohort 1 are limited.\",\n counter: \"Step 1/2\"\n },\n 2: {\n heading: \"Personalize\",\n subheading: \"Help us personalize your demo.\",\n counter: \"Step 2/2\"\n }\n};\n\nclass MultiStepForm {\n private form: HTMLFormElement;\n private steps: StepEl[];\n private currentStepIndex = 0;\n private itiInstances: Map<HTMLInputElement, any>;\n private stepHasBeenValidated = false;\n private originalRequired = new WeakMap<HTMLElement, boolean>();\n private fieldState = new Map<string, FieldState>();\n\n\n constructor(form: HTMLFormElement, itiInstances: Map<HTMLInputElement, any>) {\n this.form = form;\n this.itiInstances = itiInstances;\n\n this.steps = Array.from(\n form.querySelectorAll<HTMLElement>('[data-msf=\"step\"]')\n );\n\n this.bindEvents();\n this.cacheOriginalRequiredState();\n this.initializeFieldState();\n this.showStep(0);\n this.applyFlowConditions();\n this.syncAllFieldState();\n }\n\n private bindEvents() {\n this.form.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const btn = target.closest<HTMLElement>(\"[data-action]\");\n if (!btn) return;\n\n const action = btn.dataset.action;\n\n if (action === \"next\") {\n e.preventDefault();\n this.next();\n }\n\n if (action === \"back\") {\n e.preventDefault();\n this.back();\n }\n });\n\n // Prevent Webflow native submit until you decide\n this.form.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n });\n\n this.form.addEventListener(\"input\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n // Only care about fields\n if (\n !(target instanceof HTMLInputElement) &&\n !(target instanceof HTMLTextAreaElement) &&\n !(target instanceof HTMLSelectElement)\n ) return;\n\n this.handleLiveValidation();\n });\n\n this.itiInstances.forEach((_iti, input) => {\n input.addEventListener(\"countrychange\", () => {\n if (!this.stepHasBeenValidated) return;\n this.handleLiveValidation();\n });\n });\n\n this.form.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n if (\n target instanceof HTMLInputElement &&\n target.type === \"radio\" &&\n target.name === \"flow-type\"\n ) {\n this.applyFlowConditions();\n }\n });\n\n this.form.addEventListener(\"input\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const trackable = target.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const key = trackable.dataset.fieldKey;\n if (!key) return;\n\n this.updateFieldState(key);\n });\n\n this.form.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const trackable = target.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const key = trackable.dataset.fieldKey;\n if (!key) return;\n\n this.updateFieldState(key);\n });\n }\n\n private handleLiveValidation() {\n if (!this.stepHasBeenValidated) return;\n\n const errors = this.validateStep(this.currentStepIndex);\n\n this.clearErrors();\n\n if (Object.keys(errors).length > 0) {\n this.showErrors(errors);\n }\n }\n private showStep(index: number) {\n this.steps.forEach((step, i) => {\n step.style.display = i === index ? \"flex\" : \"none\";\n });\n\n this.currentStepIndex = index;\n\n this.stepHasBeenValidated = false;\n this.clearErrors();\n\n const stepNumber = index + 1;\n this.updateStepText(stepNumber);\n this.applyStepStyles(stepNumber);\n }\n\n private next() {\n this.stepHasBeenValidated = true;\n\n const errors = this.validateStep(this.currentStepIndex);\n\n if (Object.keys(errors).length > 0) {\n this.clearErrors();\n this.showErrors(errors);\n this.focusFirstError(errors);\n return;\n }\n\n this.clearErrors();\n this.stepHasBeenValidated = false;\n\n const nextIndex = this.currentStepIndex + 1;\n\n // If this is the last step \u2192 treat as submit\n if (nextIndex >= this.steps.length) {\n console.log(\"Validation passed\");\n\n // Find the current step\n const currentStep = this.steps[this.currentStepIndex];\n\n // Find the next button inside this step\n const nextButton = currentStep.querySelector<HTMLElement>('[data-action=\"next\"]');\n\n if (nextButton) {\n const actionTextEl = nextButton.querySelector<HTMLElement>('[data-action-text]');\n if (actionTextEl) {\n actionTextEl.textContent = \"Submitting...\";\n }\n }\n\n this.mirrorFieldStateToDOM();\n this.loadCalendarEmbed();\n\n const webflowSubmitBtn = document.getElementById(\"webflow-form-submit\") as HTMLButtonElement | null;\n const hubspotSubmitBtn = document.getElementById(\"hubspot-form-submit\") as HTMLButtonElement | null;\n\n if (webflowSubmitBtn && hubspotSubmitBtn) {\n webflowSubmitBtn.click();\n hubspotSubmitBtn.click();\n } else {\n console.warn(\"Submit button not found\");\n }\n\n return;\n }\n\n // Otherwise go to next step normally\n this.showStep(nextIndex);\n }\n\n private showErrors(errors: Record<string, ErrorCode>) {\n Object.entries(errors).forEach(([name, message]) => {\n\n // First check for group wrapper\n const groupEl =\n this.form.querySelector<HTMLElement>(`[data-required-group=\"${name}\"]`) ||\n this.form.querySelector<HTMLElement>(`[data-required-legal=\"${name}\"]`);\n\n if (groupEl) {\n groupEl.classList.add(\"has-error\");\n\n let errorEl = groupEl.querySelector<HTMLElement>(\".field-error\");\n if (!errorEl) {\n errorEl = document.createElement(\"div\");\n errorEl.className = \"field-error\";\n groupEl.appendChild(errorEl);\n }\n\n errorEl.textContent = ERROR_MESSAGES[message];\n errorEl.setAttribute(\"data-error-code\", message);\n return;\n }\n\n // Otherwise treat as normal field\n const field = this.form.querySelector<HTMLInputElement>(`[name=\"${name}\"]`);\n if (!field) return;\n\n field.classList.add(\"has-error\");\n\n let errorEl = field.parentElement?.querySelector<HTMLElement>(\".field-error\");\n if (!errorEl) {\n errorEl = document.createElement(\"div\");\n errorEl.className = \"field-error\";\n field.parentElement?.appendChild(errorEl);\n }\n\n errorEl.textContent = ERROR_MESSAGES[message];\n errorEl.setAttribute(\"data-error-code\", message);\n });\n }\n\n private clearErrors() {\n this.form.querySelectorAll(\".field-error\").forEach((el) => el.remove());\n this.form.querySelectorAll(\".has-error\").forEach((el) =>\n el.classList.remove(\"has-error\")\n );\n }\n\n private back() {\n const prevIndex = this.currentStepIndex - 1;\n if (prevIndex < 0) return;\n this.showStep(prevIndex);\n }\n\n private getFieldsForStep(index: number): HTMLInputElement[] {\n const step = this.steps[index];\n return Array.from(\n step.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n \"input, select, textarea\"\n )\n ) as HTMLInputElement[];\n }\n\n private validateStep(index: number): Record<string, ErrorCode> {\n const errors: Record<string, ErrorCode> = {};\n\n const fields = this.getFieldsForStep(index);\n\n fields.forEach((field) => {\n const name = field.name;\n if (!name) return;\n\n if (field.type === \"checkbox\" || field.type === \"radio\") return;\n\n const value = field.value.trim();\n const isRequired = field.hasAttribute(\"required\");\n\n if (isRequired && !value) {\n errors[name] = \"required\";\n return;\n }\n\n // Custom email validation\n if (field.type === \"email\" && value) {\n if (!this.isValidEmailFormat(value)) {\n errors[name] = \"email_invalid\";\n return;\n }\n\n if (!this.isCompanyEmail(value)) {\n errors[name] = \"email_company\";\n return;\n }\n }\n\n // Custom phone validation\n if (field.type === \"tel\" && value) {\n const phoneError = this.validatePhoneField(field as HTMLInputElement);\n if (phoneError) {\n errors[name] = \"phone_invalid\";\n return;\n }\n }\n });\n\n const selectionGroupErrors = this.validateRequiredSelectionGroups(index);\n const legalErrors = this.validateLegalGroups(index);\n\n return {\n ...errors,\n ...selectionGroupErrors,\n ...legalErrors\n };\n }\n\n private validateRequiredSelectionGroups(index: number): Record<string, ErrorCode> {\n const step = this.steps[index];\n const errors: Record<string, ErrorCode> = {};\n\n const groups = step.querySelectorAll<HTMLElement>(\"[data-required-group]\");\n\n groups.forEach((groupEl) => {\n const groupName = groupEl.dataset.requiredGroup;\n if (!groupName) return;\n\n const inputs = Array.from(\n groupEl.querySelectorAll<HTMLInputElement>(\n 'input[type=\"checkbox\"], input[type=\"radio\"]'\n )\n );\n\n // Only consider enabled inputs\n const enabledInputs = inputs.filter((input) => !input.disabled);\n\n // If no enabled inputs \u2192 group is structurally inactive \u2192 skip validation\n if (enabledInputs.length === 0) return;\n\n const isChecked = enabledInputs.some((input) => input.checked);\n\n if (!isChecked) {\n errors[groupName] = \"selection_required\";\n }\n });\n\n return errors;\n }\n\n private validateLegalGroups(index: number): Record<string, ErrorCode> {\n const step = this.steps[index];\n const errors: Record<string, ErrorCode> = {};\n\n const legalGroups = step.querySelectorAll<HTMLElement>(\"[data-required-legal]\");\n\n legalGroups.forEach((groupEl) => {\n const groupName = groupEl.dataset.requiredLegal;\n if (!groupName) return;\n\n const checkbox = groupEl.querySelector<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n\n // If checkbox doesn't exist or is disabled \u2192 skip validation\n if (!checkbox || checkbox.disabled) return;\n\n if (!checkbox.checked) {\n errors[groupName] = \"legal_required\";\n }\n });\n\n return errors;\n }\n\n private isValidEmailFormat(email: string): boolean {\n const emailRegex =\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n }\n\n private isCompanyEmail(email: string): boolean {\n const publicDomains = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"outlook.com\",\n \"icloud.com\",\n \"aol.com\"\n ];\n\n const domain = email.split(\"@\")[1]?.toLowerCase();\n if (!domain) return false;\n\n return !publicDomains.includes(domain);\n }\n\n private validatePhoneField(field: HTMLInputElement): ErrorCode | null {\n const iti = this.itiInstances.get(field);\n if (!iti) return null;\n\n const value = field.value.trim();\n if (!value) return null;\n\n if (!iti.isValidNumber()) {\n return \"phone_invalid\";\n }\n\n return null;\n }\n\n private focusFirstError(errors: Record<string, ErrorCode>) {\n const firstErrorName = Object.keys(errors)[0];\n if (!firstErrorName) return;\n\n const groupEl =\n this.form.querySelector<HTMLElement>(\n `[data-required-group=\"${firstErrorName}\"]`\n ) ||\n this.form.querySelector<HTMLElement>(\n `[data-required-legal=\"${firstErrorName}\"]`\n );\n\n if (groupEl) {\n const firstInput = groupEl.querySelector<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n firstInput?.focus();\n return;\n }\n\n const field = this.form.querySelector<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(`[name=\"${firstErrorName}\"]`);\n\n field?.focus();\n }\n\n private getFlowType(): string | null {\n const flowWrapper = this.form.querySelector<HTMLElement>(\n '[data-required-group=\"flow-type\"]'\n );\n if (!flowWrapper) return null;\n\n const checked = flowWrapper.querySelector<HTMLInputElement>(\n 'input[type=\"radio\"]:checked'\n );\n\n return checked?.value ?? null;\n }\n\n private applyFlowConditions() {\n const flowType = this.getFlowType();\n if (!flowType) return;\n\n const visibleKeys = FLOW_CONDITIONS[flowType] || [];\n\n const conditionalBlocks = this.form.querySelectorAll<HTMLElement>(\n \"[data-conditional]\"\n );\n\n conditionalBlocks.forEach((block) => {\n const key = block.dataset.conditional;\n if (!key) return;\n\n const shouldShow = visibleKeys.includes(key);\n\n const inputs = block.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n if (shouldShow) {\n block.style.display = \"\";\n\n inputs.forEach((input) => {\n input.disabled = false;\n\n const wasRequired = this.originalRequired.get(input);\n if (wasRequired) {\n input.setAttribute(\"required\", \"true\");\n }\n });\n } else {\n block.style.display = \"none\";\n\n inputs.forEach((input) => {\n input.disabled = true;\n input.removeAttribute(\"required\");\n\n // Clear DOM values\n if (input instanceof HTMLInputElement) {\n if (input.type === \"checkbox\" || input.type === \"radio\") {\n input.checked = false;\n } else {\n input.value = \"\";\n }\n } else if (input instanceof HTMLSelectElement) {\n input.selectedIndex = 0;\n } else if (input instanceof HTMLTextAreaElement) {\n input.value = \"\";\n }\n\n // Sync fieldState for hidden inputs\n const trackable = input.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const fieldKey = trackable.dataset.fieldKey;\n if (!fieldKey) return;\n\n const state = this.fieldState.get(fieldKey);\n if (!state) return;\n\n state.required = false;\n state.valid = true;\n state.value = \"\";\n\n this.fieldState.set(fieldKey, state);\n });\n\n // Sync wrapper-level fieldState if wrapper itself is tracked\n const wrapperKey = block.dataset.fieldKey;\n if (wrapperKey) {\n const state = this.fieldState.get(wrapperKey);\n if (state) {\n state.required = false;\n state.valid = true;\n state.value = \"\";\n this.fieldState.set(wrapperKey, state);\n }\n }\n\n this.clearErrorsInBlock(block);\n }\n });\n\n // Recalculate validity after structural changes\n this.updateValidityForStep(this.currentStepIndex + 1);\n }\n\n private cacheOriginalRequiredState() {\n const inputs = this.form.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n inputs.forEach((input) => {\n this.originalRequired.set(input, input.hasAttribute(\"required\"));\n });\n }\n\n private clearErrorsInBlock(block: HTMLElement) {\n block.querySelectorAll(\".field-error\").forEach((el) => el.remove());\n block.querySelectorAll(\".has-error\").forEach((el) =>\n el.classList.remove(\"has-error\")\n );\n }\n\n private initializeFieldState() {\n const trackables = this.form.querySelectorAll<HTMLElement>(\n \"[data-field-key]\"\n );\n\n trackables.forEach((el) => {\n const key = el.dataset.fieldKey;\n if (!key) return;\n\n const stepWrapper = el.closest<HTMLElement>(\"[data-msf='step']\");\n const stepNumber = stepWrapper\n ? Number(stepWrapper.dataset.step)\n : this.currentStepIndex + 1;\n\n this.fieldState.set(key, {\n \"field-name\": key,\n value: \"\",\n required: false,\n valid: true,\n \"step-number\": stepNumber\n });\n });\n }\n\n private updateFieldState(key: string) {\n const element = this.form.querySelector<HTMLElement>(\n `[data-field-key=\"${key}\"]`\n );\n if (!element) return;\n\n let value = \"\";\n let required = false;\n\n // If wrapper group\n if (element.hasAttribute(\"data-group\")) {\n const inputs = Array.from(\n element.querySelectorAll<HTMLInputElement>(\n \"input[type='radio'], input[type='checkbox']\"\n )\n ).filter((i) => !i.disabled);\n\n required = element.hasAttribute(\"data-required-group\");\n\n if (inputs.some((i) => i.type === \"radio\")) {\n const checked = inputs.find((i) => i.checked);\n\n if (checked) {\n const span = checked.closest(\"label\")?.querySelector(\"span\");\n value = span?.textContent?.trim() ?? checked.value ?? \"\";\n } else {\n value = \"\";\n }\n } else {\n const checkedValues = inputs\n .filter((i) => i.checked)\n .map((i) => {\n const span = i.closest(\"label\")?.querySelector(\"span\");\n return span?.textContent?.trim() ?? i.value ?? \"\";\n });\n\n value = checkedValues.join(\",\");\n }\n }\n // Legal wrapper\n else if (element.hasAttribute(\"data-required-legal\")) {\n const checkbox = element.querySelector<HTMLInputElement>(\n \"input[type='checkbox']\"\n );\n\n if (checkbox && !checkbox.disabled) {\n required = true;\n value = checkbox.checked ? \"true\" : \"false\";\n }\n }\n // Normal input\n else if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n ) {\n required = element.hasAttribute(\"required\") && !element.disabled;\n\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\n value = element.checked ? \"true\" : \"false\";\n } else {\n value = (element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value.trim();\n }\n }\n\n const stepWrapper = element.closest<HTMLElement>(\"[data-msf='step']\");\n const stepNumber = stepWrapper\n ? Number(stepWrapper.dataset.step)\n : this.currentStepIndex + 1;\n\n const state = this.fieldState.get(key);\n if (!state) return;\n\n state.value = value;\n state.required = required;\n state[\"step-number\"] = stepNumber;\n\n this.fieldState.set(key, state);\n\n this.updateValidityForStep(stepNumber);\n }\n\n private updateValidityForStep(stepNumber: number) {\n const stepIndex = this.steps.findIndex(\n (step) => Number(step.dataset.step) === stepNumber\n );\n\n if (stepIndex === -1) return;\n\n const errors = this.validateStep(stepIndex);\n\n const keysInStep = Array.from(this.fieldState.values()).filter(\n (f) => f[\"step-number\"] === stepNumber\n );\n\n keysInStep.forEach((field) => {\n field.valid = !errors[field[\"field-name\"]];\n });\n }\n\n public getFormStateJSON(): FieldState[] {\n return Array.from(this.fieldState.values());\n }\n\n private updateStepText(stepNumber: number) {\n const config = STEP_TEXT[stepNumber];\n if (!config) return;\n\n if (config.heading) {\n const headingEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"heading\"]'\n );\n if (headingEl) headingEl.textContent = config.heading;\n }\n\n if (config.subheading) {\n const subheadingEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"subheading\"]'\n );\n if (subheadingEl) subheadingEl.textContent = config.subheading;\n }\n\n if (config.counter) {\n const counterEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"counter\"]'\n );\n if (counterEl) counterEl.textContent = config.counter;\n }\n }\n\n private syncAllFieldState() {\n this.fieldState.forEach((_state, key) => {\n this.updateFieldState(key);\n });\n }\n\n private mirrorFieldStateToDOM() {\n const allFields = this.getFormStateJSON();\n const hubspotForm = document.getElementById(\"form-hubspot-book-a-demo\");\n\n allFields.forEach((field) => {\n const mirrorEl = hubspotForm?.querySelector<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >(`[data-mirror=\"${field[\"field-name\"]}\"]`);\n\n if (!mirrorEl) {\n console.warn(\n `[Mirror] No element found with data-mirror=\"${field[\"field-name\"]}\"`\n );\n return;\n }\n\n // Skip disabled mirrors just in case\n if (\n mirrorEl instanceof HTMLInputElement &&\n mirrorEl.disabled\n ) {\n return;\n }\n\n if (mirrorEl instanceof HTMLInputElement) {\n if (mirrorEl.type === \"checkbox\") {\n mirrorEl.checked = field.value === \"true\";\n } else if (mirrorEl.type === \"radio\") {\n mirrorEl.checked = mirrorEl.value === field.value;\n } else {\n mirrorEl.value = field.value;\n }\n } else {\n mirrorEl.value = field.value;\n }\n });\n }\n\n private resolveCalendarEntry(): CalendarEntry | null {\n const companyType = this.fieldState.get(\"company_type\")?.value ?? \"\";\n const industry = this.fieldState.get(\"industry\")?.value ?? \"\";\n\n // Priority: company_type match first\n const byCompanyType = CALENDAR_ENTRIES.find(\n (entry) => entry.type === \"company_type\" && entry.name === companyType\n );\n if (byCompanyType) return byCompanyType;\n\n // Fallback: industry match\n const byIndustry = CALENDAR_ENTRIES.find(\n (entry) => entry.type === \"industry\" && entry.name === industry\n );\n return byIndustry ?? null;\n }\n\n private loadCalendarEmbed() {\n const container = document.querySelector<HTMLElement>(\"[hs-calender-block]\");\n if (!container) {\n console.warn(\"[Calendar] No [hs-calender-block] element found\");\n return;\n }\n\n const entry = this.resolveCalendarEntry();\n\n if (!entry) {\n container.setAttribute(\"hs-calender-block-active\", \"false\");\n container.innerHTML = \"\";\n console.warn(\"[Calendar] No matching calendar entry found\");\n return;\n }\n\n container.setAttribute(\"hs-calender-block-active\", \"true\");\n\n // Clear any previous embed\n container.innerHTML = \"\";\n\n // Inject the HubSpot meetings iframe container\n const meetingsDiv = document.createElement(\"div\");\n meetingsDiv.className = \"meetings-iframe-container\";\n meetingsDiv.setAttribute(\"data-src\", entry[\"embed-url\"]);\n container.appendChild(meetingsDiv);\n\n // Load (or re-trigger) the HubSpot embed script\n const scriptSrc =\n \"https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js\";\n\n const existingScript = document.querySelector<HTMLScriptElement>(\n `script[src=\"${scriptSrc}\"]`\n );\n if (existingScript) existingScript.remove();\n\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = scriptSrc;\n container.appendChild(script);\n\n console.log(\n `[Calendar] Loaded embed for \"${entry[\"calender-name\"]}\" \u2192 ${entry[\"embed-url\"]}`\n );\n }\n\n private applyStepStyles(stepNumber: number) {\n const styles = STEP_STYLES[stepNumber];\n if (!styles) return;\n\n styles.forEach(({ selector, property, value }) => {\n const els = document.querySelectorAll<HTMLElement>(selector);\n els.forEach((el) => {\n el.style.setProperty(property, value);\n });\n });\n }\n\n}\n\n// Boot\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const form = document.querySelector<HTMLFormElement>('[data-msf=\"form\"]');\n if (!form) return;\n\n const itiInstances = initIntlTelInput({ root: form });\n\n const msf = new MultiStepForm(form, itiInstances);\n\n // expose globally for debugging\n (window as any).msf = msf;\n});"],
5
+ "mappings": "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",
6
6
  "names": ["errorEl"]
7
7
  }
@@ -1 +1 @@
1
- .w-form-formradioinput--inputType-custom.w--redirected-focus{box-shadow:none}.radio-checked{display:none}.w-form-formradioinput.w--redirected-checked~.radio-checked{display:flex}.w-checkbox-input--inputType-custom.w--redirected-focus{box-shadow:none}.w-input:focus,.w-select:focus{border-color:transparent;outline:0}.radio-inner-label{color:var(--text-colors--subtext)}input[type=radio]:checked+.radio-inner-label{color:var(--text-colors--title)}.checkbox-label{color:var(--text-colors--subtext)}.w-checkbox-input--inputType-custom.w--redirected-checked{background-color:#f66025;border-color:#f66025}input[type=checkbox]:checked+.checkbox-label{color:var(--text-colors--title)}.checkbox-field:has(input[type=checkbox]:checked){border-color:#f66025}.radio-inner-label,.checkbox-label{transition:color .3s ease}.checkbox-field{transition:border-color .3s ease}.w-checkbox-input--inputType-custom{transition:background-color .3s ease,border-color .3s ease}span.pulse-form-error,.field-error{color:#e55757;font-size:var(--_text-size---body--s);line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s)}[data-error-code=ERR_LEGAL_REQUIRED]{padding-left:18px}[form-flow-active=false]{display:none}[form-flow-active=true]{display:flex}[fullwidth]{width:100%}[hs-calender-active=true]{display:block;width:100%}[hs-calender-active=false]{display:none}div#iti-0__dropdown-content{background-color:#121212;border-color:#242424}#iti-0__search-input{background:#242424}.iti__search-input-wrapper{border-color:#242424}iframe{border:1px solid transparent!important}.w-form-done{border:1px solid transparent}.hubspot-submitted-form{display:none!important}
1
+ .w-form-formradioinput--inputType-custom.w--redirected-focus{box-shadow:none}.radio-checked{display:none}.w-form-formradioinput.w--redirected-checked~.radio-checked{display:flex}.w-checkbox-input--inputType-custom.w--redirected-focus{box-shadow:none}.w-input:focus,.w-select:focus{border-color:transparent;outline:0}.radio-inner-label{color:var(--text-colors--subtext)}input[type=radio]:checked+.radio-inner-label{color:var(--text-colors--title)}.checkbox-label{color:var(--text-colors--subtext)}.w-checkbox-input--inputType-custom.w--redirected-checked{background-color:#f66025;border-color:#f66025}input[type=checkbox]:checked+.checkbox-label{color:var(--text-colors--title)}.checkbox-field:has(input[type=checkbox]:checked){border-color:#f66025}.radio-inner-label,.checkbox-label{transition:color .3s ease}.checkbox-field{transition:border-color .3s ease}.w-checkbox-input--inputType-custom{transition:background-color .3s ease,border-color .3s ease}span.pulse-form-error{color:#e55757;font-size:var(--_text-size---body--s);line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s)}.field-error{color:#e55757;font-size:12px;line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s);position:absolute;bottom:-22px}[data-error-code=legal_required]{bottom:-8px;left:28px}[data-error-code=ERR_LEGAL_REQUIRED]{padding-left:18px}[form-flow-active=false]{display:none}[form-flow-active=true]{display:flex}[fullwidth]{width:100%}[hs-calender-active=true]{display:block;width:100%}[hs-calender-active=false]{display:none}div#iti-0__dropdown-content{background-color:#121212;border-color:#242424}#iti-0__search-input{background:#242424}.iti__search-input-wrapper{border-color:#242424}iframe{border:1px solid transparent!important}.w-form-done{border:1px solid transparent}.hubspot-submitted-form{display:none!important}[hs-calender-block][hs-calender-block-active=false],.step-2,[data-action=back]{display:none}.is-iti-input-wrapper{position:relative;z-index:2}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/form/styles.css"],
4
- "sourcesContent": [".w-form-formradioinput--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n/* Hide by default */\n.radio-checked {\n display: none;\n}\n\n/* Show when the custom radio is checked */\n.w-form-formradioinput.w--redirected-checked~.radio-checked {\n display: flex;\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n.w-input:focus,\n.w-select:focus {\n border-color: transparent;\n outline: 0;\n}\n\n/* Default state */\n.radio-inner-label {\n color: var(--text-colors--subtext);\n}\n\n/* When radio is checked */\ninput[type=\"radio\"]:checked+.radio-inner-label {\n color: var(--text-colors--title);\n}\n\n/* Default (unchecked) */\n.checkbox-label {\n color: var(--text-colors--subtext);\n}\n\n/* When checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-checked {\n background-color: #F66025;\n border-color: #F66025;\n}\n\n/* Change label color when checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n/* Change parent border when checked */\n.checkbox-field:has(input[type=\"checkbox\"]:checked) {\n border-color: #F66025;\n}\n\n/* Smooth color transition for labels */\n.radio-inner-label,\n.checkbox-label {\n transition: color 300ms ease;\n}\n\n/* Smooth border transition for parent checkbox field */\n.checkbox-field {\n transition: border-color 300ms ease;\n}\n\n/* Smooth background + border transition for custom checkbox input */\n.w-checkbox-input--inputType-custom {\n transition: background-color 300ms ease, border-color 300ms ease;\n}\n\nspan.pulse-form-error {\n color: #e55757;\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n.field-error{\n color: #e55757;\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n\n[data-error-code=\"ERR_LEGAL_REQUIRED\"] {\n padding-left: 18px;\n}\n\n[form-flow-active=\"false\"] {\n display: none;\n}\n\n[form-flow-active=\"true\"] {\n display: flex;\n}\n\n[fullwidth] {\n width: 100%;\n}\n\n[hs-calender-active=\"true\"] {\n display: block;\n width: 100%;\n}\n\n[hs-calender-active=\"false\"] {\n display: none;\n}\n\ndiv#iti-0__dropdown-content {\n background-color: #121212;\n border-color: #242424;\n}\n\n#iti-0__search-input {\n background: #242424;\n}\n\n.iti__search-input-wrapper {\n border-color: #242424;\n}\n\niframe {\n border: 1px solid transparent !important;\n}\n\n.w-form-done {\n border: 1px solid transparent;\n}\n\n.hubspot-submitted-form {\n display: none !important;\n}"],
5
- "mappings": ";AAAA,CAAC,uCAAuC,CAAC;AACrC,cAAY;AAChB;AAGA,CAAC;AACG,WAAS;AACb;AAGA,CAAC,qBAAqB,CAAC,sBAAqB,EAAC,CAL5C;AAMG,WAAS;AACb;AAEA,CAAC,kCAAkC,CAdM;AAerC,cAAY;AAChB;AAEA,CAAC,OAAO;AACR,CAAC,QAAQ;AACL,gBAAc;AACd,WAAS;AACb;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,WAAa,SAAQ,EAAC,CAL3B;AAMG,SAAO,IAAI;AACf;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAL9B;AAMG,SAAO,IAAI;AACf;AAEA,CA9BC,kCA8BkC,CAlCZ;AAmCnB,oBAAkB;AAClB,gBAAc;AAClB;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAf9B;AAgBG,SAAO,IAAI;AACf;AAGA,CAAC,cAAc,KAAK,KAAK,CAAC,cAAgB;AACtC,gBAAc;AAClB;AAGA,CAnCC;AAoCD,CA1BC;AA2BG,cAAY,MAAM,MAAM;AAC5B;AAGA,CAXC;AAYG,cAAY,aAAa,MAAM;AACnC;AAGA,CAzDC;AA0DG,cAAY,iBAAiB,MAAM,IAAI,EAAE,aAAa,MAAM;AAChE;AAEA,IAAI,CAAC;AACD,SAAO;AACP,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACxB;AACA,CAAC;AACG,SAAO;AACP,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACxB;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACT,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACb;AAEA,GAAG,CAAC;AACA,oBAAkB;AAClB,gBAAc;AAClB;AAEA,CAAC;AACG,cAAY;AAChB;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA;AACI,UAAQ,IAAI,MAAM;AACtB;AAEA,CAAC;AACG,UAAQ,IAAI,MAAM;AACtB;AAEA,CAAC;AACG,WAAS;AACb;",
4
+ "sourcesContent": [".w-form-formradioinput--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n/* Hide by default */\n.radio-checked {\n display: none;\n}\n\n/* Show when the custom radio is checked */\n.w-form-formradioinput.w--redirected-checked~.radio-checked {\n display: flex;\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n.w-input:focus,\n.w-select:focus {\n border-color: transparent;\n outline: 0;\n}\n\n/* Default state */\n.radio-inner-label {\n color: var(--text-colors--subtext);\n}\n\n/* When radio is checked */\ninput[type=\"radio\"]:checked+.radio-inner-label {\n color: var(--text-colors--title);\n}\n\n/* Default (unchecked) */\n.checkbox-label {\n color: var(--text-colors--subtext);\n}\n\n/* When checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-checked {\n background-color: #F66025;\n border-color: #F66025;\n}\n\n/* Change label color when checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n/* Change parent border when checked */\n.checkbox-field:has(input[type=\"checkbox\"]:checked) {\n border-color: #F66025;\n}\n\n/* Smooth color transition for labels */\n.radio-inner-label,\n.checkbox-label {\n transition: color 300ms ease;\n}\n\n/* Smooth border transition for parent checkbox field */\n.checkbox-field {\n transition: border-color 300ms ease;\n}\n\n/* Smooth background + border transition for custom checkbox input */\n.w-checkbox-input--inputType-custom {\n transition: background-color 300ms ease, border-color 300ms ease;\n}\n\nspan.pulse-form-error {\n color: #e55757;\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n.field-error{\n color: #e55757;\n font-size: 12px;\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n position: absolute;\n bottom: -22px;\n}\n\n[data-error-code=\"legal_required\"]{\n bottom: -8px;\n left: 28px;\n}\n\n[data-error-code=\"ERR_LEGAL_REQUIRED\"] {\n padding-left: 18px;\n}\n\n[form-flow-active=\"false\"] {\n display: none;\n}\n\n[form-flow-active=\"true\"] {\n display: flex;\n}\n\n[fullwidth] {\n width: 100%;\n}\n\n[hs-calender-active=\"true\"] {\n display: block;\n width: 100%;\n}\n\n[hs-calender-active=\"false\"] {\n display: none;\n}\n\ndiv#iti-0__dropdown-content {\n background-color: #121212;\n border-color: #242424;\n}\n\n#iti-0__search-input {\n background: #242424;\n}\n\n.iti__search-input-wrapper {\n border-color: #242424;\n}\n\niframe {\n border: 1px solid transparent !important;\n}\n\n.w-form-done {\n border: 1px solid transparent;\n}\n\n.hubspot-submitted-form {\n display: none !important;\n}\n\n[hs-calender-block][hs-calender-block-active=\"false\"] {\n display: none;\n}\n\n.step-2{\n display: none;\n}\n[data-action=\"back\"]{\n display: none;\n}\n.is-iti-input-wrapper {\n position: relative;\n z-index: 2;\n}"],
5
+ "mappings": ";AAAA,CAAC,uCAAuC,CAAC;AACrC,cAAY;AAChB;AAGA,CAAC;AACG,WAAS;AACb;AAGA,CAAC,qBAAqB,CAAC,sBAAqB,EAAC,CAL5C;AAMG,WAAS;AACb;AAEA,CAAC,kCAAkC,CAdM;AAerC,cAAY;AAChB;AAEA,CAAC,OAAO;AACR,CAAC,QAAQ;AACL,gBAAc;AACd,WAAS;AACb;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,WAAa,SAAQ,EAAC,CAL3B;AAMG,SAAO,IAAI;AACf;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAL9B;AAMG,SAAO,IAAI;AACf;AAEA,CA9BC,kCA8BkC,CAlCZ;AAmCnB,oBAAkB;AAClB,gBAAc;AAClB;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAf9B;AAgBG,SAAO,IAAI;AACf;AAGA,CAAC,cAAc,KAAK,KAAK,CAAC,cAAgB;AACtC,gBAAc;AAClB;AAGA,CAnCC;AAoCD,CA1BC;AA2BG,cAAY,MAAM,MAAM;AAC5B;AAGA,CAXC;AAYG,cAAY,aAAa,MAAM;AACnC;AAGA,CAzDC;AA0DG,cAAY,iBAAiB,MAAM,IAAI,EAAE,aAAa,MAAM;AAChE;AAEA,IAAI,CAAC;AACD,SAAO;AACP,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACxB;AACA,CAAC;AACG,SAAO;AACP,aAAW;AACX,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACpB,YAAU;AACV,UAAQ;AACZ;AAEA,CAAC;AACG,UAAQ;AACR,QAAM;AACV;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACT,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACb;AAEA,GAAG,CAAC;AACA,oBAAkB;AAClB,gBAAc;AAClB;AAEA,CAAC;AACG,cAAY;AAChB;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA;AACI,UAAQ,IAAI,MAAM;AACtB;AAEA,CAAC;AACG,UAAQ,IAAI,MAAM;AACtB;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC,kBAAkB,CAAC;AAChB,WAAS;AACb;AAEA,CAAC;AACG,WAAS;AACb;AACA,CAAC;AACG,WAAS;AACb;AACA,CAAC;AACC,YAAU;AACV,WAAS;AACX;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtstic.dev/pulse",
3
- "version": "0.0.43",
3
+ "version": "0.0.45",
4
4
  "description": "pulse website",
5
5
  "license": "license-of-your-project",
6
6
  "keywords": [],