{"version":3,"file":"books-for-email.js","sources":["../../../w3t_front/components/books-for-email/decorators.js","../../../w3t_front/components/books-for-email/errors.js","../../../w3t_front/components/books-for-email/field.js","../../../w3t_front/components/books-for-email/getBooksModal.ts","../../../w3t_front/components/books-for-email/validate.js","../../../w3t_front/components/books-for-email/books-for-email.js"],"sourcesContent":["/**\n * @param {FormApi} form\n */\nexport function createLoadingDecorator(form) {\n return form.subscribe(\n ({ submitting }) => {\n const button = document.querySelector('.bfe-submit');\n const container = document.querySelector('.bfe-form');\n const input = document.getElementById('bfe-email');\n\n if (submitting) {\n button.disabled = true;\n input.disabled = true;\n container.classList.add('submitting');\n } else {\n button.disabled = false;\n input.disabled = false;\n container.classList.remove('submitting');\n }\n },\n {\n submitting: true,\n },\n );\n}\n","/**\n * @param {HTMLElement} field\n * @param {FieldState} fieldState\n */\nexport function fieldErrors(field, fieldState) {\n const { touched, error, submitError, dirtySinceLastSubmit } = fieldState;\n\n const fieldBlock = field.closest('.bfe__field');\n const errorTextElement = document.querySelector(`.bfe__field-error[for=\"${field.id}\"]`);\n\n if (touched && (error || submitError)) {\n fieldBlock.classList.add('error');\n\n if (field.type !== 'checkbox' && submitError) {\n if (dirtySinceLastSubmit) {\n errorTextElement.innerText = '';\n fieldBlock.classList.remove('error');\n } else {\n errorTextElement.innerText = submitError;\n }\n }\n\n if (field.type !== 'checkbox' && error) {\n errorTextElement.innerText = error;\n }\n } else {\n if (errorTextElement) {\n errorTextElement.innerText = '';\n }\n\n if (fieldBlock) fieldBlock.classList.remove('error');\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport { position } from 'caret-pos';\n\nimport { fieldErrors } from './errors';\n\n/**\n * @param {HTMLElement} field\n * @param {FieldState} fieldState\n */\nexport function addFieldListeners(field, fieldState, form) {\n const { blur, change, focus } = fieldState;\n\n const blurHandler = e => blur(e);\n\n field.addEventListener('input', event => change(event.target.value));\n field.addEventListener('blur', blurHandler);\n field.addEventListener('focus', () => focus());\n}\n\nconst cacheFields = {};\n\n/**\n * Safari reactive input carret fix\n * @param {Function} update\n * @param {HTMLElement} field\n * @param {FieldState} fieldState\n */\nfunction updateWithCarretPosition(update, field, fieldState) {\n const ignoreFields = ['checkbox', 'select', 'select-one', 'hidden'];\n const { active } = fieldState;\n\n let carretPosition = NaN;\n\n if (ignoreFields.includes(field.type)) {\n update();\n return;\n }\n\n if (active) {\n carretPosition = position(field).pos;\n }\n\n update();\n\n if (active && !isNaN(carretPosition)) {\n position(field, carretPosition);\n }\n}\n\n/**\n * Render\n * @param {HTMLElement} field\n * @param {FormApi} form\n * @returns {Unregister} unregister\n */\nexport function registerField(field, form) {\n const { name } = field;\n\n return form.registerField(\n name,\n fieldState => {\n const { value } = fieldState;\n\n if (!cacheFields[field.name]) {\n cacheFields[field.name] = true;\n addFieldListeners(field, fieldState, form);\n }\n\n updateWithCarretPosition(\n () => {\n field.value = value === undefined ? '' : value;\n },\n field,\n fieldState,\n );\n\n fieldErrors(field, fieldState);\n },\n {\n active: true,\n value: true,\n error: true,\n touched: true,\n submitError: true,\n dirtySinceLastSubmit: true,\n },\n );\n}\n","/**\n * Markup for the about us modal\n * @returns string\n */\nexport default function getBooksModal() {\n return `\n