{"version":3,"mappings":"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","names":["setupDropdowns","form","dropdowns","easydropdown","__vitePreload","n","el","select","placeholder","setupMasks","fields","IMask","field","mask","e","setupSpecialFields","input","setupStyledForm","setupAjaxForm","validator","createValidator","hideOnSubmit","disableAutoHideMessage","handleMessages","messages","success","formMessages","message","showFormMessages","toggleSubmit","result","firstError","scrollToIfNeeded","formData","res","ajax","event","trackGoogleAnalytics","fireEvent","error","submitButton","autoHide","holder","fragment","node","p","setupValidateOnlyForm","setupForm","handleModalForms","setupForms","delegate"],"ignoreList":[],"sources":["../src/scripts/components/form/styled-form.js","../src/scripts/components/form/ajax-form.js","../src/scripts/components/form/form.js"],"sourcesContent":["import \"@/styles/components/styled-form.css\";\n\nexport const setupDropdowns = async (form) => {\n const dropdowns = form.querySelectorAll(\".js-dropdown, .userform .field.dropdown\");\n\n if (!dropdowns.length) {\n return;\n }\n\n const { default: easydropdown } = await import(\"easydropdown-a11y\");\n import(\"@/styles/components/dropdown.css\");\n\n dropdowns.forEach((el) => {\n const select = el.querySelector(\"select\");\n\n if (!select) {\n return;\n }\n\n if (select.closest(\".edd-root\")) {\n return;\n }\n\n const placeholder = el.querySelector('option[value=\"\"]');\n\n if (placeholder && !placeholder.hasAttribute(\"data-placeholder\")) {\n placeholder.setAttribute(\"data-placeholder\", true);\n\n if (!placeholder.textContent) {\n placeholder.textContent = \"Select One\";\n }\n }\n\n const opts = {\n behavior: {\n openOnFocus: true,\n maxVisibleItems: 8,\n liveUpdates: true,\n useNativeUiOnMobile: false,\n },\n };\n\n easydropdown(select, opts);\n });\n};\n\nconst setupMasks = async (form) => {\n const fields = form.querySelectorAll('input[type=\"tel\"], input[data-mask-currency], input[data-mask-num-range]');\n\n if (!fields.length) {\n return;\n }\n\n const { default: IMask } = await import(\"imask/esm/imask\");\n await import(\"imask/esm/masked/number\");\n await import(\"imask/esm/masked/pattern\");\n\n fields.forEach((field) => {\n if (field.type === \"tel\") {\n IMask(field, {\n mask: \"(000) 000-0000\",\n });\n }\n\n if (field.dataset.maskCurrency !== undefined) {\n const mask = IMask(field, {\n mask: Number,\n scale: 0,\n thousandsSeparator: \",\",\n min: 1,\n });\n\n field.addEventListener(\"updateValue\", (e) => {\n field.value = e.detail;\n mask.updateValue();\n field.dispatchEvent(new Event(\"blur\"));\n });\n }\n\n if (field.dataset.maskNumRange !== undefined) {\n const mask = IMask(field, {\n mask: /^(\\d+)?(-)?(\\d+)?$/,\n });\n\n field.addEventListener(\"updateValue\", (e) => {\n field.value = e.detail;\n mask.updateValue();\n field.dispatchEvent(new Event(\"blur\"));\n });\n }\n });\n};\n\nconst setupSpecialFields = (form) => {\n form.querySelectorAll(\"input[type=file]\").forEach((input) => {\n const placeholder = document.createElement(\"div\");\n placeholder.classList.add(\"file-input-placeholder\");\n\n if (input.value) {\n placeholder.textContent = input.files[0].name;\n } else {\n placeholder.textContent = input.dataset.placeholder;\n }\n\n input.parentNode.insertBefore(placeholder, input);\n\n placeholder.addEventListener(\"click\", () => input.click());\n\n input.addEventListener(\"change\", (e) => {\n placeholder.textContent = e.target.files[0].name;\n placeholder.classList.add(\"filled\");\n });\n });\n};\n\nexport const setupStyledForm = (form) => {\n setupDropdowns(form);\n setupMasks(form);\n setupSpecialFields(form);\n};\n","import ajax from \"@/scripts/common/ajax\";\nimport { createValidator } from \"./validation/validator\";\nimport { toggleSubmit, showFormMessages } from \"@/scripts/components/form/form\";\nimport { fireEvent, trackGoogleAnalytics } from \"@/scripts/common/util\";\nimport { scrollToIfNeeded } from \"@/scripts/common/scroll-to\";\n\nexport const setupAjaxForm = (form) => {\n const validator = form.dataset.formValidate !== undefined && createValidator(form);\n const hideOnSubmit = form.dataset.formHideOnSubmit !== undefined;\n const disableAutoHideMessage = form.dataset.formNoHideMessage !== undefined;\n\n const handleMessages = (messages, success) => {\n const formMessages = [];\n\n messages.forEach((message) => {\n if (message.fieldName) {\n validator.addFieldError(form.elements[message.fieldName], message.message);\n } else {\n formMessages.push(message);\n }\n });\n\n const autoHide = success && !hideOnSubmit && !disableAutoHideMessage;\n\n showFormMessages(form, formMessages, success, autoHide);\n };\n\n form.addEventListener(\"submit\", async (e) => {\n e.preventDefault();\n\n toggleSubmit(form);\n\n if (validator) {\n const result = validator.validateForm();\n const firstError = form.querySelector(\".has-error\");\n\n if (!result.isValid) {\n toggleSubmit(form);\n\n if (firstError) {\n scrollToIfNeeded(firstError, 32);\n }\n\n return;\n }\n }\n\n const formData = new FormData(form);\n\n try {\n const res = await ajax.post(form.action, { body: formData }).json();\n\n if (res.success) {\n if (res.ga) {\n res.ga.forEach((event) => trackGoogleAnalytics(event));\n }\n\n form.reset();\n\n fireEvent(\"form:submit\", form);\n }\n\n if (res.messages) {\n handleMessages(res.messages, res.success);\n }\n\n if (res instanceof Array) {\n handleMessages(res, false);\n }\n } catch (error) {\n console.error(error);\n showFormMessages(form, [{ message: \"Sorry, there was a problem with your submission\" }]);\n } finally {\n toggleSubmit(form);\n }\n });\n};\n","import { setupStyledForm } from \"./styled-form\";\nimport { setupAjaxForm } from \"./ajax-form\";\nimport { createValidator } from \"./validation/validator\";\nimport delegate from \"delegate-it\";\n\nexport const toggleSubmit = (form) => {\n const submitButton =\n form.querySelector('[type=\"submit\"]') || document.querySelector(`[type=\"submit\"][form=\"${form.id}\"]`);\n\n if (submitButton) {\n submitButton.disabled = !submitButton.disabled;\n submitButton.classList.toggle(\"is-loading\");\n }\n};\n\nexport const showFormMessages = (form, messages = [], success, autoHide = true) => {\n const holder = form.querySelector(\".form-messages\");\n\n if (!holder || messages.length === 0) {\n return;\n }\n\n holder.replaceChildren();\n holder.style.display = \"block\";\n\n messages.forEach((message) => {\n const fragment = document.createRange().createContextualFragment(message.message);\n const isOnlyText = Array.from(fragment.childNodes).every(\n (node) => node.nodeType === Node.TEXT_NODE || (node.nodeType === Node.ELEMENT_NODE && node.tagName === \"BR\"),\n );\n\n if (isOnlyText) {\n const p = document.createElement(\"p\");\n p.appendChild(fragment);\n holder.appendChild(p);\n } else {\n holder.appendChild(fragment);\n }\n });\n\n if (success) {\n holder.classList.remove(\"form-message-error\");\n } else {\n holder.classList.add(\"form-message-error\");\n }\n\n if (autoHide) {\n setTimeout(() => {\n holder.style.display = \"none\";\n }, 5000);\n }\n};\n\nconst setupValidateOnlyForm = (form) => {\n const validator = createValidator(form);\n\n form.addEventListener(\"submit\", (e) => {\n const result = validator.validateForm();\n\n if (!result.isValid) {\n e.preventDefault();\n }\n });\n};\n\nconst setupForm = (form) => {\n if (form.dataset.formInit === \"true\") {\n return;\n }\n\n if (form.dataset.formStyled) {\n setupStyledForm(form);\n }\n\n if (form.dataset.formValidate && !form.dataset.formAjax) {\n setupValidateOnlyForm(form);\n }\n\n if (form.dataset.formAjax) {\n setupAjaxForm(form);\n }\n\n form.setAttribute(\"data-form-init\", \"true\");\n};\n\nconst handleModalForms = (e) => {\n e.detail.modalEl.querySelectorAll(\"form\").forEach((form) => {\n setupForm(form);\n });\n};\n\nexport const setupForms = () => {\n document.querySelectorAll(\".app-form\").forEach((form) => {\n setupForm(form);\n });\n};\n\nexport default {\n init: () => {\n setupForms();\n\n delegate(\"html\", \"modal:populate\", handleModalForms);\n },\n};\n"],"file":"form-BVTC9p-A.js"}