{"version":3,"file":"just-validate.es-DUwLyMhG.js","sources":["../../node_modules/just-validate/dist/just-validate.es.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nconst EMAIL_REGEXP = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst INTEGER_REGEXP = /^-?[0-9]\\d*$/;\nconst PASSWORD_REGEXP = /^(?=.*[A-Za-z])(?=.*\\d).{8,}$/;\nconst STRONG_PASSWORD_REGEXP = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$/;\nconst isEmpty = (value) => {\n let newVal = value;\n if (typeof value === \"string\") {\n newVal = value.trim();\n }\n return !newVal;\n};\nconst isEmail = (value) => {\n return EMAIL_REGEXP.test(value);\n};\nconst isLengthMoreThanMax = (value, len) => {\n return value.length > len;\n};\nconst isLengthLessThanMin = (value, len) => {\n return value.length < len;\n};\nconst isNumber = (value) => {\n if (typeof value !== \"string\") {\n return false;\n }\n return !isNaN(+value) && !isNaN(parseFloat(value));\n};\nconst isInteger = (value) => {\n return INTEGER_REGEXP.test(value);\n};\nconst isPassword = (value) => {\n return PASSWORD_REGEXP.test(value);\n};\nconst isStrongPassword = (value) => {\n return STRONG_PASSWORD_REGEXP.test(value);\n};\nconst isNumberMoreThanMax = (value, len) => {\n return value > len;\n};\nconst isNumberLessThanMin = (value, len) => {\n return value < len;\n};\nconst isInvalidOrEmptyString = (value) => {\n return typeof value !== \"string\" || value === \"\";\n};\nvar Rules = /* @__PURE__ */ ((Rules2) => {\n Rules2[\"Required\"] = \"required\";\n Rules2[\"Email\"] = \"email\";\n Rules2[\"MinLength\"] = \"minLength\";\n Rules2[\"MaxLength\"] = \"maxLength\";\n Rules2[\"Password\"] = \"password\";\n Rules2[\"Number\"] = \"number\";\n Rules2[\"Integer\"] = \"integer\";\n Rules2[\"MaxNumber\"] = \"maxNumber\";\n Rules2[\"MinNumber\"] = \"minNumber\";\n Rules2[\"StrongPassword\"] = \"strongPassword\";\n Rules2[\"CustomRegexp\"] = \"customRegexp\";\n Rules2[\"MinFilesCount\"] = \"minFilesCount\";\n Rules2[\"MaxFilesCount\"] = \"maxFilesCount\";\n Rules2[\"Files\"] = \"files\";\n return Rules2;\n})(Rules || {});\nvar GroupRules = /* @__PURE__ */ ((GroupRules2) => {\n GroupRules2[\"Required\"] = \"required\";\n return GroupRules2;\n})(GroupRules || {});\nvar CustomStyleTagIds = /* @__PURE__ */ ((CustomStyleTagIds2) => {\n CustomStyleTagIds2[\"Label\"] = \"label\";\n CustomStyleTagIds2[\"LabelArrow\"] = \"labelArrow\";\n return CustomStyleTagIds2;\n})(CustomStyleTagIds || {});\nconst defaultDictionary = [\n {\n key: Rules.Required,\n dict: {\n en: \"The field is required\"\n }\n },\n {\n key: Rules.Email,\n dict: {\n en: \"Email has invalid format\"\n }\n },\n {\n key: Rules.MaxLength,\n dict: {\n en: \"The field must contain a maximum of :value characters\"\n }\n },\n {\n key: Rules.MinLength,\n dict: {\n en: \"The field must contain a minimum of :value characters\"\n }\n },\n {\n key: Rules.Password,\n dict: {\n en: \"Password must contain minimum eight characters, at least one letter and one number\"\n }\n },\n {\n key: Rules.StrongPassword,\n dict: {\n en: \"Password should contain minimum eight characters, at least one uppercase letter, one lowercase letter, one number and one special character\"\n }\n },\n {\n key: Rules.Number,\n dict: {\n en: \"Value should be a number\"\n }\n },\n {\n key: Rules.MaxNumber,\n dict: {\n en: \"Number should be less or equal than :value\"\n }\n },\n {\n key: Rules.MinNumber,\n dict: {\n en: \"Number should be more or equal than :value\"\n }\n },\n {\n key: Rules.MinFilesCount,\n dict: {\n en: \"Files count should be more or equal than :value\"\n }\n },\n {\n key: Rules.MaxFilesCount,\n dict: {\n en: \"Files count should be less or equal than :value\"\n }\n },\n {\n key: Rules.Files,\n dict: {\n en: \"Uploaded files have one or several invalid properties (extension/size/type etc).\"\n }\n }\n];\nconst DEFAULT_ERROR_FIELD_MESSAGE = \"Value is incorrect\";\nconst isPromise = (val) => typeof val === \"object\" && val !== null && \"then\" in val && typeof val.then === \"function\";\nconst getNodeParents = (el) => {\n let elem = el;\n const els = [];\n while (elem) {\n els.unshift(elem);\n elem = elem.parentNode;\n }\n return els;\n};\nconst getClosestParent = (groups, parents) => {\n const reversedParents = [...parents].reverse();\n for (let i = 0, len = reversedParents.length; i < len; ++i) {\n const parent = reversedParents[i];\n for (const key in groups) {\n const group = groups[key];\n if (group.groupElem === parent) {\n return [key, group];\n }\n }\n }\n return null;\n};\nconst getClassList = (classList) => {\n if (Array.isArray(classList)) {\n return classList.filter((cls) => cls.length > 0);\n }\n if (typeof classList === \"string\" && classList.trim()) {\n return [...classList.split(\" \").filter((cls) => cls.length > 0)];\n }\n return [];\n};\nconst isElement = (element) => {\n return element instanceof Element || element instanceof HTMLDocument;\n};\nconst errorLabelCss = `.just-validate-error-label[data-tooltip=true]{position:fixed;padding:4px 8px;background:#423f3f;color:#fff;white-space:nowrap;z-index:10;border-radius:4px;transform:translateY(-5px)}.just-validate-error-label[data-tooltip=true]:before{content:'';width:0;height:0;border-left:solid 5px transparent;border-right:solid 5px transparent;border-bottom:solid 5px #423f3f;position:absolute;z-index:3;display:block;bottom:-5px;transform:rotate(180deg);left:calc(50% - 5px)}.just-validate-error-label[data-tooltip=true][data-direction=left]{transform:translateX(-5px)}.just-validate-error-label[data-tooltip=true][data-direction=left]:before{right:-7px;bottom:auto;left:auto;top:calc(50% - 2px);transform:rotate(90deg)}.just-validate-error-label[data-tooltip=true][data-direction=right]{transform:translateX(5px)}.just-validate-error-label[data-tooltip=true][data-direction=right]:before{right:auto;bottom:auto;left:-7px;top:calc(50% - 2px);transform:rotate(-90deg)}.just-validate-error-label[data-tooltip=true][data-direction=bottom]{transform:translateY(5px)}.just-validate-error-label[data-tooltip=true][data-direction=bottom]:before{right:auto;bottom:auto;left:calc(50% - 5px);top:-5px;transform:rotate(0)}`;\nconst TOOLTIP_ARROW_HEIGHT = 5;\nconst defaultGlobalConfig = {\n errorFieldStyle: {\n color: \"#b81111\",\n border: \"1px solid #B81111\"\n },\n errorFieldCssClass: \"just-validate-error-field\",\n successFieldCssClass: \"just-validate-success-field\",\n errorLabelStyle: {\n color: \"#b81111\"\n },\n errorLabelCssClass: \"just-validate-error-label\",\n successLabelCssClass: \"just-validate-success-label\",\n focusInvalidField: true,\n lockForm: true,\n testingMode: false,\n validateBeforeSubmitting: false,\n submitFormAutomatically: false\n};\nclass JustValidate {\n constructor(form, globalConfig, dictLocale) {\n __publicField(this, \"form\", null);\n __publicField(this, \"fields\", {});\n __publicField(this, \"groupFields\", {});\n __publicField(this, \"errors\", {});\n __publicField(this, \"isValid\", false);\n __publicField(this, \"isSubmitted\", false);\n __publicField(this, \"globalConfig\", defaultGlobalConfig);\n __publicField(this, \"errorLabels\", {});\n __publicField(this, \"successLabels\", {});\n __publicField(this, \"eventListeners\", []);\n __publicField(this, \"dictLocale\", defaultDictionary);\n __publicField(this, \"currentLocale\", \"en\");\n __publicField(this, \"customStyleTags\", {});\n __publicField(this, \"onSuccessCallback\");\n __publicField(this, \"onFailCallback\");\n __publicField(this, \"onValidateCallback\");\n __publicField(this, \"tooltips\", []);\n __publicField(this, \"lastScrollPosition\");\n __publicField(this, \"isScrollTick\");\n __publicField(this, \"fieldIds\", /* @__PURE__ */ new Map());\n __publicField(this, \"getKeyByFieldSelector\", (field) => {\n return this.fieldIds.get(field);\n });\n __publicField(this, \"getFieldSelectorByKey\", (key) => {\n for (const [fieldSelector, k] of this.fieldIds) {\n if (key === k) {\n return fieldSelector;\n }\n }\n return void 0;\n });\n __publicField(this, \"getCompatibleFields\", () => {\n const fields = {};\n Object.keys(this.fields).forEach((key) => {\n let newKey = key;\n const fieldSelector = this.getFieldSelectorByKey(key);\n if (typeof fieldSelector === \"string\") {\n newKey = fieldSelector;\n }\n fields[newKey] = { ...this.fields[key] };\n });\n return fields;\n });\n __publicField(this, \"setKeyByFieldSelector\", (field) => {\n if (this.fieldIds.has(field)) {\n return this.fieldIds.get(field);\n }\n const key = String(this.fieldIds.size + 1);\n this.fieldIds.set(field, key);\n return key;\n });\n __publicField(this, \"refreshAllTooltips\", () => {\n this.tooltips.forEach((item) => {\n item.refresh();\n });\n });\n __publicField(this, \"handleDocumentScroll\", () => {\n this.lastScrollPosition = window.scrollY;\n if (!this.isScrollTick) {\n window.requestAnimationFrame(() => {\n this.refreshAllTooltips();\n this.isScrollTick = false;\n });\n this.isScrollTick = true;\n }\n });\n __publicField(this, \"formSubmitHandler\", (ev) => {\n ev.preventDefault();\n this.isSubmitted = true;\n this.validateHandler(ev);\n });\n __publicField(this, \"handleFieldChange\", (target) => {\n let foundKey;\n for (const key in this.fields) {\n const field = this.fields[key];\n if (field.elem === target) {\n foundKey = key;\n break;\n }\n }\n if (!foundKey) {\n return;\n }\n this.fields[foundKey].touched = true;\n this.validateField(foundKey, true);\n });\n __publicField(this, \"handleGroupChange\", (target) => {\n let foundKey;\n for (const key in this.groupFields) {\n const group = this.groupFields[key];\n if (group.elems.find((elem) => elem === target)) {\n foundKey = key;\n break;\n }\n }\n if (!foundKey) {\n return;\n }\n this.groupFields[foundKey].touched = true;\n this.validateGroup(foundKey, true);\n });\n __publicField(this, \"handlerChange\", (ev) => {\n if (!ev.target) {\n return;\n }\n this.handleFieldChange(ev.target);\n this.handleGroupChange(ev.target);\n this.renderErrors();\n });\n this.initialize(form, globalConfig, dictLocale);\n }\n initialize(form, globalConfig, dictLocale) {\n this.form = null;\n this.errors = {};\n this.isValid = false;\n this.isSubmitted = false;\n this.globalConfig = defaultGlobalConfig;\n this.errorLabels = {};\n this.successLabels = {};\n this.eventListeners = [];\n this.customStyleTags = {};\n this.tooltips = [];\n this.currentLocale = \"en\";\n if (typeof form === \"string\") {\n const elem = document.querySelector(form);\n if (!elem) {\n throw Error(\n `Form with ${form} selector not found! Please check the form selector`\n );\n }\n this.setForm(elem);\n } else if (form instanceof HTMLFormElement) {\n this.setForm(form);\n } else {\n throw Error(\n `Form selector is not valid. Please specify a string selector or a DOM element.`\n );\n }\n this.globalConfig = { ...defaultGlobalConfig, ...globalConfig };\n if (dictLocale) {\n this.dictLocale = [...dictLocale, ...defaultDictionary];\n }\n if (this.isTooltip()) {\n const styleTag = document.createElement(\"style\");\n styleTag.textContent = errorLabelCss;\n this.customStyleTags[CustomStyleTagIds.Label] = document.head.appendChild(styleTag);\n this.addListener(\"scroll\", document, this.handleDocumentScroll);\n }\n }\n getLocalisedString(rule, ruleValue, customMsg) {\n var _a;\n const search = customMsg != null ? customMsg : rule;\n let localisedStr = (_a = this.dictLocale.find((item) => item.key === search)) == null ? void 0 : _a.dict[this.currentLocale];\n if (!localisedStr) {\n if (customMsg) {\n localisedStr = customMsg;\n }\n }\n if (localisedStr && ruleValue !== void 0) {\n switch (rule) {\n case Rules.MaxLength:\n case Rules.MinLength:\n case Rules.MaxNumber:\n case Rules.MinNumber:\n case Rules.MinFilesCount:\n case Rules.MaxFilesCount:\n localisedStr = localisedStr.replace(\":value\", String(ruleValue));\n }\n }\n return localisedStr || customMsg || DEFAULT_ERROR_FIELD_MESSAGE;\n }\n getFieldErrorMessage(fieldRule, elem) {\n const msg = typeof fieldRule.errorMessage === \"function\" ? fieldRule.errorMessage(this.getElemValue(elem), this.fields) : fieldRule.errorMessage;\n return this.getLocalisedString(fieldRule.rule, fieldRule.value, msg);\n }\n getFieldSuccessMessage(successMessage, elem) {\n const msg = typeof successMessage === \"function\" ? successMessage(this.getElemValue(elem), this.fields) : successMessage;\n return this.getLocalisedString(void 0, void 0, msg);\n }\n getGroupErrorMessage(groupRule) {\n return this.getLocalisedString(\n groupRule.rule,\n void 0,\n groupRule.errorMessage\n );\n }\n getGroupSuccessMessage(groupRule) {\n if (!groupRule.successMessage) {\n return void 0;\n }\n return this.getLocalisedString(\n void 0,\n void 0,\n groupRule.successMessage\n );\n }\n setFieldInvalid(key, fieldRule) {\n this.fields[key].isValid = false;\n this.fields[key].errorMessage = this.getFieldErrorMessage(\n fieldRule,\n this.fields[key].elem\n );\n }\n setFieldValid(key, successMessage) {\n this.fields[key].isValid = true;\n if (successMessage !== void 0) {\n this.fields[key].successMessage = this.getFieldSuccessMessage(\n successMessage,\n this.fields[key].elem\n );\n }\n }\n setGroupInvalid(key, groupRule) {\n this.groupFields[key].isValid = false;\n this.groupFields[key].errorMessage = this.getGroupErrorMessage(groupRule);\n }\n setGroupValid(key, groupRule) {\n this.groupFields[key].isValid = true;\n this.groupFields[key].successMessage = this.getGroupSuccessMessage(groupRule);\n }\n getElemValue(elem) {\n switch (elem.type) {\n case \"checkbox\":\n return elem.checked;\n case \"file\":\n return elem.files;\n default:\n return elem.value;\n }\n }\n validateGroupRule(key, elems, groupRule) {\n switch (groupRule.rule) {\n case GroupRules.Required: {\n if (elems.every((elem) => !elem.checked)) {\n this.setGroupInvalid(key, groupRule);\n } else {\n this.setGroupValid(key, groupRule);\n }\n }\n }\n }\n validateFieldRule(key, elem, fieldRule, afterInputChanged = false) {\n const ruleValue = fieldRule.value;\n const elemValue = this.getElemValue(elem);\n if (fieldRule.plugin) {\n const result = fieldRule.plugin(\n elemValue,\n this.getCompatibleFields()\n );\n if (!result) {\n this.setFieldInvalid(key, fieldRule);\n }\n return;\n }\n switch (fieldRule.rule) {\n case Rules.Required: {\n if (isEmpty(elemValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.Email: {\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (!isEmail(elemValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.MaxLength: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (typeof ruleValue !== \"number\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] should be a number. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (isLengthMoreThanMax(elemValue, ruleValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.MinLength: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (typeof ruleValue !== \"number\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] should be a number. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (isLengthLessThanMin(elemValue, ruleValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.Password: {\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (!isPassword(elemValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.StrongPassword: {\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (!isStrongPassword(elemValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.Number: {\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (!isNumber(elemValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.Integer: {\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n if (!isInteger(elemValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.MaxNumber: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (typeof ruleValue !== \"number\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n const num = +elemValue;\n if (Number.isNaN(num) || isNumberMoreThanMax(num, ruleValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.MinNumber: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (typeof ruleValue !== \"number\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (isInvalidOrEmptyString(elemValue)) {\n break;\n }\n const num = +elemValue;\n if (Number.isNaN(num) || isNumberLessThanMin(num, ruleValue)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.CustomRegexp: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n return;\n }\n let regexp;\n try {\n regexp = new RegExp(ruleValue);\n } catch (e) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] should be a valid regexp. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n const str = String(elemValue);\n if (str !== \"\" && !regexp.test(str)) {\n this.setFieldInvalid(key, fieldRule);\n }\n break;\n }\n case Rules.MinFilesCount: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (typeof ruleValue !== \"number\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (Number.isFinite(elemValue == null ? void 0 : elemValue.length) && elemValue.length < ruleValue) {\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n break;\n }\n case Rules.MaxFilesCount: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (typeof ruleValue !== \"number\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field should be a number. The field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n if (Number.isFinite(elemValue == null ? void 0 : elemValue.length) && elemValue.length > ruleValue) {\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n break;\n }\n case Rules.Files: {\n if (ruleValue === void 0) {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field is not defined. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n return;\n }\n if (typeof ruleValue !== \"object\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field should be an object. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n return;\n }\n const filesConfig = ruleValue.files;\n if (typeof filesConfig !== \"object\") {\n console.error(\n `Value for ${fieldRule.rule} rule for [${key}] field should be an object with files array. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n return;\n }\n const isFilePropsInvalid = (file, fileConfig) => {\n const minSizeInvalid = Number.isFinite(fileConfig.minSize) && file.size < fileConfig.minSize;\n const maxSizeInvalid = Number.isFinite(fileConfig.maxSize) && file.size > fileConfig.maxSize;\n const nameInvalid = Array.isArray(fileConfig.names) && !fileConfig.names.includes(file.name);\n const extInvalid = Array.isArray(fileConfig.extensions) && !fileConfig.extensions.includes(\n file.name.split(\".\")[file.name.split(\".\").length - 1]\n );\n const typeInvalid = Array.isArray(fileConfig.types) && !fileConfig.types.includes(file.type);\n return minSizeInvalid || maxSizeInvalid || nameInvalid || extInvalid || typeInvalid;\n };\n if (typeof elemValue === \"object\" && elemValue !== null) {\n for (let fileIdx = 0, len = elemValue.length; fileIdx < len; ++fileIdx) {\n const file = elemValue.item(fileIdx);\n if (!file) {\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n const filesInvalid = isFilePropsInvalid(file, filesConfig);\n if (filesInvalid) {\n this.setFieldInvalid(key, fieldRule);\n break;\n }\n }\n }\n break;\n }\n default: {\n if (typeof fieldRule.validator !== \"function\") {\n console.error(\n `Validator for custom rule for [${key}] field should be a function. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n return;\n }\n const result = fieldRule.validator(\n elemValue,\n this.getCompatibleFields()\n );\n if (typeof result !== \"boolean\" && typeof result !== \"function\") {\n console.error(\n `Validator return value for [${key}] field should be boolean or function. It will be cast to boolean.`\n );\n }\n if (typeof result === \"function\") {\n if (afterInputChanged) {\n this.fields[key].asyncCheckPending = true;\n } else {\n this.fields[key].asyncCheckPending = false;\n const promise = result();\n if (!isPromise(promise)) {\n console.error(\n `Validator function for custom rule for [${key}] field should return a Promise. This field will be always invalid.`\n );\n this.setFieldInvalid(key, fieldRule);\n return;\n }\n return promise.then((resp) => {\n if (!resp) {\n this.setFieldInvalid(key, fieldRule);\n }\n }).catch(() => {\n this.setFieldInvalid(key, fieldRule);\n });\n }\n }\n if (!result) {\n this.setFieldInvalid(key, fieldRule);\n }\n }\n }\n }\n isFormValid() {\n let isValid = true;\n for (let i = 0, len = Object.values(this.fields).length; i < len; ++i) {\n const item = Object.values(this.fields)[i];\n if (item.isValid === void 0) {\n isValid = void 0;\n break;\n }\n if (item.isValid === false) {\n isValid = false;\n break;\n }\n }\n for (let i = 0, len = Object.values(this.groupFields).length; i < len; ++i) {\n const item = Object.values(this.groupFields)[i];\n if (item.isValid === void 0) {\n isValid = void 0;\n break;\n }\n if (item.isValid === false) {\n isValid = false;\n break;\n }\n }\n return isValid;\n }\n validateField(key, afterInputChanged = false) {\n var _a;\n const field = this.fields[key];\n field.isValid = true;\n const promises = [];\n [...field.rules].reverse().forEach((rule) => {\n const res = this.validateFieldRule(\n key,\n field.elem,\n rule,\n afterInputChanged\n );\n if (isPromise(res)) {\n promises.push(res);\n }\n });\n if (field.isValid) {\n this.setFieldValid(key, (_a = field.config) == null ? void 0 : _a.successMessage);\n }\n return Promise.allSettled(promises).finally(() => {\n var _a2;\n if (afterInputChanged) {\n (_a2 = this.onValidateCallback) == null ? void 0 : _a2.call(this, {\n isValid: this.isFormValid(),\n isSubmitted: this.isSubmitted,\n fields: this.getCompatibleFields(),\n groups: { ...this.groupFields }\n });\n }\n });\n }\n revalidateField(fieldSelector) {\n if (typeof fieldSelector !== \"string\" && !isElement(fieldSelector)) {\n throw Error(\n `Field selector is not valid. Please specify a string selector or a valid DOM element.`\n );\n }\n const key = this.getKeyByFieldSelector(fieldSelector);\n if (!key || !this.fields[key]) {\n console.error(`Field not found. Check the field selector.`);\n return Promise.reject();\n }\n return new Promise((resolve) => {\n this.validateField(key, true).finally(() => {\n this.clearFieldStyle(key);\n this.clearFieldLabel(key);\n this.renderFieldError(key, true);\n resolve(!!this.fields[key].isValid);\n });\n });\n }\n revalidateGroup(groupSelector) {\n if (typeof groupSelector !== \"string\" && !isElement(groupSelector)) {\n throw Error(\n `Group selector is not valid. Please specify a string selector or a valid DOM element.`\n );\n }\n const key = this.getKeyByFieldSelector(groupSelector);\n if (!key || !this.groupFields[key]) {\n console.error(`Group not found. Check the group selector.`);\n return Promise.reject();\n }\n return new Promise((resolve) => {\n this.validateGroup(key).finally(() => {\n this.clearFieldLabel(key);\n this.renderGroupError(key, true);\n resolve(!!this.groupFields[key].isValid);\n });\n });\n }\n validateGroup(key, afterInputChanged = false) {\n const group = this.groupFields[key];\n const promises = [];\n [...group.rules].reverse().forEach((rule) => {\n const res = this.validateGroupRule(key, group.elems, rule);\n if (isPromise(res)) {\n promises.push(res);\n }\n });\n return Promise.allSettled(promises).finally(() => {\n var _a;\n if (afterInputChanged) {\n (_a = this.onValidateCallback) == null ? void 0 : _a.call(this, {\n isValid: this.isFormValid(),\n isSubmitted: this.isSubmitted,\n fields: this.getCompatibleFields(),\n groups: { ...this.groupFields }\n });\n }\n });\n }\n focusInvalidField() {\n for (const key in this.fields) {\n const field = this.fields[key];\n if (!field.isValid) {\n setTimeout(() => field.elem.focus(), 0);\n break;\n }\n }\n }\n afterSubmitValidation(forceRevalidation = false) {\n this.renderErrors(forceRevalidation);\n if (this.globalConfig.focusInvalidField) {\n this.focusInvalidField();\n }\n }\n validate(forceRevalidation = false) {\n return new Promise((resolve) => {\n const promises = [];\n Object.keys(this.fields).forEach((key) => {\n const promise = this.validateField(key);\n if (isPromise(promise)) {\n promises.push(promise);\n }\n });\n Object.keys(this.groupFields).forEach((key) => {\n const promise = this.validateGroup(key);\n if (isPromise(promise)) {\n promises.push(promise);\n }\n });\n Promise.allSettled(promises).then(() => {\n var _a;\n this.afterSubmitValidation(forceRevalidation);\n (_a = this.onValidateCallback) == null ? void 0 : _a.call(this, {\n isValid: this.isFormValid(),\n isSubmitted: this.isSubmitted,\n fields: this.getCompatibleFields(),\n groups: { ...this.groupFields }\n });\n resolve(!!promises.length);\n });\n });\n }\n revalidate() {\n return new Promise((resolve) => {\n this.validateHandler(void 0, true).finally(() => {\n if (this.globalConfig.focusInvalidField) {\n this.focusInvalidField();\n }\n resolve(this.isValid);\n });\n });\n }\n validateHandler(ev, forceRevalidation = false) {\n if (this.globalConfig.lockForm) {\n this.lockForm();\n }\n return this.validate(forceRevalidation).finally(() => {\n var _a, _b, _c;\n if (this.globalConfig.lockForm) {\n this.unlockForm();\n }\n if (this.isValid) {\n (_a = this.onSuccessCallback) == null ? void 0 : _a.call(this, ev);\n if (this.globalConfig.submitFormAutomatically) {\n (_b = ev == null ? void 0 : ev.currentTarget) == null ? void 0 : _b.submit();\n }\n } else {\n (_c = this.onFailCallback) == null ? void 0 : _c.call(this, this.getCompatibleFields(), this.groupFields);\n }\n });\n }\n setForm(form) {\n this.form = form;\n this.form.setAttribute(\"novalidate\", \"novalidate\");\n this.removeListener(\"submit\", this.form, this.formSubmitHandler);\n this.addListener(\"submit\", this.form, this.formSubmitHandler);\n }\n addListener(type, elem, handler) {\n elem.addEventListener(type, handler);\n this.eventListeners.push({ type, elem, func: handler });\n }\n removeListener(type, elem, handler) {\n elem.removeEventListener(type, handler);\n this.eventListeners = this.eventListeners.filter(\n (item) => item.type !== type || item.elem !== elem\n );\n }\n addField(fieldSelector, rules, config) {\n if (typeof fieldSelector !== \"string\" && !isElement(fieldSelector)) {\n throw Error(\n `Field selector is not valid. Please specify a string selector or a valid DOM element.`\n );\n }\n let elem;\n if (typeof fieldSelector === \"string\") {\n elem = this.form.querySelector(fieldSelector);\n } else {\n elem = fieldSelector;\n }\n if (!elem) {\n throw Error(\n `Field doesn't exist in the DOM! Please check the field selector.`\n );\n }\n if (!Array.isArray(rules) || !rules.length) {\n throw Error(\n `Rules argument should be an array and should contain at least 1 element.`\n );\n }\n rules.forEach((item) => {\n if (!(\"rule\" in item || \"validator\" in item || \"plugin\" in item)) {\n throw Error(\n `Rules argument must contain at least one rule or validator property.`\n );\n }\n if (!item.validator && !item.plugin && (!item.rule || !Object.values(Rules).includes(item.rule))) {\n throw Error(\n `Rule should be one of these types: ${Object.values(Rules).join(\n \", \"\n )}. Provided value: ${item.rule}`\n );\n }\n });\n const key = this.setKeyByFieldSelector(fieldSelector);\n this.fields[key] = {\n elem,\n rules,\n isValid: void 0,\n touched: false,\n config\n };\n this.setListeners(elem);\n if (this.isSubmitted || this.globalConfig.validateBeforeSubmitting) {\n this.validateField(key);\n }\n return this;\n }\n removeField(fieldSelector) {\n if (typeof fieldSelector !== \"string\" && !isElement(fieldSelector)) {\n throw Error(\n `Field selector is not valid. Please specify a string selector or a valid DOM element.`\n );\n }\n const key = this.getKeyByFieldSelector(fieldSelector);\n if (!key || !this.fields[key]) {\n console.error(`Field not found. Check the field selector.`);\n return this;\n }\n const type = this.getListenerType(this.fields[key].elem.type);\n this.removeListener(type, this.fields[key].elem, this.handlerChange);\n this.clearErrors();\n delete this.fields[key];\n return this;\n }\n removeGroup(group) {\n if (typeof group !== \"string\") {\n throw Error(\n `Group selector is not valid. Please specify a string selector.`\n );\n }\n const key = this.getKeyByFieldSelector(group);\n if (!key || !this.groupFields[key]) {\n console.error(`Group not found. Check the group selector.`);\n return this;\n }\n this.groupFields[key].elems.forEach((elem) => {\n const type = this.getListenerType(elem.type);\n this.removeListener(type, elem, this.handlerChange);\n });\n this.clearErrors();\n delete this.groupFields[key];\n return this;\n }\n addRequiredGroup(groupField, errorMessage, config, successMessage) {\n if (typeof groupField !== \"string\" && !isElement(groupField)) {\n throw Error(\n `Group selector is not valid. Please specify a string selector or a valid DOM element.`\n );\n }\n let elem;\n if (typeof groupField === \"string\") {\n elem = this.form.querySelector(groupField);\n } else {\n elem = groupField;\n }\n if (!elem) {\n throw Error(`Group selector not found! Please check the group selector.`);\n }\n const inputs = elem.querySelectorAll(\"input\");\n const childrenInputs = Array.from(inputs).filter((input) => {\n const parent = getClosestParent(this.groupFields, getNodeParents(input));\n if (!parent) {\n return true;\n }\n return parent[1].elems.find((elem2) => elem2 !== input);\n });\n const key = this.setKeyByFieldSelector(groupField);\n this.groupFields[key] = {\n rules: [\n {\n rule: GroupRules.Required,\n errorMessage,\n successMessage\n }\n ],\n groupElem: elem,\n elems: childrenInputs,\n touched: false,\n isValid: void 0,\n config\n };\n inputs.forEach((input) => {\n this.setListeners(input);\n });\n return this;\n }\n getListenerType(type) {\n switch (type) {\n case \"checkbox\":\n case \"select-one\":\n case \"file\":\n case \"radio\": {\n return \"change\";\n }\n default: {\n return \"input\";\n }\n }\n }\n setListeners(elem) {\n const type = this.getListenerType(elem.type);\n this.removeListener(type, elem, this.handlerChange);\n this.addListener(type, elem, this.handlerChange);\n }\n clearFieldLabel(key) {\n var _a, _b;\n (_a = this.errorLabels[key]) == null ? void 0 : _a.remove();\n (_b = this.successLabels[key]) == null ? void 0 : _b.remove();\n }\n clearFieldStyle(key) {\n var _a, _b, _c, _d;\n const field = this.fields[key];\n const errorStyle = ((_a = field.config) == null ? void 0 : _a.errorFieldStyle) || this.globalConfig.errorFieldStyle;\n Object.keys(errorStyle).forEach((key2) => {\n field.elem.style[key2] = \"\";\n });\n const successStyle = ((_b = field.config) == null ? void 0 : _b.successFieldStyle) || this.globalConfig.successFieldStyle || {};\n Object.keys(successStyle).forEach((key2) => {\n field.elem.style[key2] = \"\";\n });\n field.elem.classList.remove(\n ...getClassList(\n ((_c = field.config) == null ? void 0 : _c.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n ),\n ...getClassList(\n ((_d = field.config) == null ? void 0 : _d.successFieldCssClass) || this.globalConfig.successFieldCssClass\n )\n );\n }\n clearErrors() {\n var _a, _b;\n Object.keys(this.errorLabels).forEach(\n (key) => this.errorLabels[key].remove()\n );\n Object.keys(this.successLabels).forEach(\n (key) => this.successLabels[key].remove()\n );\n for (const key in this.fields) {\n this.clearFieldStyle(key);\n }\n for (const key in this.groupFields) {\n const group = this.groupFields[key];\n const errorStyle = ((_a = group.config) == null ? void 0 : _a.errorFieldStyle) || this.globalConfig.errorFieldStyle;\n Object.keys(errorStyle).forEach((key2) => {\n group.elems.forEach((elem) => {\n var _a2;\n elem.style[key2] = \"\";\n elem.classList.remove(\n ...getClassList(\n ((_a2 = group.config) == null ? void 0 : _a2.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n )\n );\n });\n });\n const successStyle = ((_b = group.config) == null ? void 0 : _b.successFieldStyle) || this.globalConfig.successFieldStyle || {};\n Object.keys(successStyle).forEach((key2) => {\n group.elems.forEach((elem) => {\n var _a2;\n elem.style[key2] = \"\";\n elem.classList.remove(\n ...getClassList(\n ((_a2 = group.config) == null ? void 0 : _a2.successFieldCssClass) || this.globalConfig.successFieldCssClass\n )\n );\n });\n });\n }\n this.tooltips = [];\n }\n isTooltip() {\n return !!this.globalConfig.tooltip;\n }\n lockForm() {\n const elems = this.form.querySelectorAll(\n \"input, textarea, button, select\"\n );\n for (let i = 0, len = elems.length; i < len; ++i) {\n elems[i].setAttribute(\n \"data-just-validate-fallback-disabled\",\n elems[i].disabled ? \"true\" : \"false\"\n );\n elems[i].setAttribute(\"disabled\", \"disabled\");\n elems[i].style.pointerEvents = \"none\";\n elems[i].style.webkitFilter = \"grayscale(100%)\";\n elems[i].style.filter = \"grayscale(100%)\";\n }\n }\n unlockForm() {\n const elems = this.form.querySelectorAll(\n \"input, textarea, button, select\"\n );\n for (let i = 0, len = elems.length; i < len; ++i) {\n if (elems[i].getAttribute(\"data-just-validate-fallback-disabled\") !== \"true\") {\n elems[i].removeAttribute(\"disabled\");\n }\n elems[i].style.pointerEvents = \"\";\n elems[i].style.webkitFilter = \"\";\n elems[i].style.filter = \"\";\n }\n }\n renderTooltip(elem, errorLabel, position) {\n var _a;\n const { top, left, width, height } = elem.getBoundingClientRect();\n const errorLabelRect = errorLabel.getBoundingClientRect();\n const pos = position || ((_a = this.globalConfig.tooltip) == null ? void 0 : _a.position);\n switch (pos) {\n case \"left\": {\n errorLabel.style.top = `${top + height / 2 - errorLabelRect.height / 2}px`;\n errorLabel.style.left = `${left - errorLabelRect.width - TOOLTIP_ARROW_HEIGHT}px`;\n break;\n }\n case \"top\": {\n errorLabel.style.top = `${top - errorLabelRect.height - TOOLTIP_ARROW_HEIGHT}px`;\n errorLabel.style.left = `${left + width / 2 - errorLabelRect.width / 2}px`;\n break;\n }\n case \"right\": {\n errorLabel.style.top = `${top + height / 2 - errorLabelRect.height / 2}px`;\n errorLabel.style.left = `${left + width + TOOLTIP_ARROW_HEIGHT}px`;\n break;\n }\n case \"bottom\": {\n errorLabel.style.top = `${top + height + TOOLTIP_ARROW_HEIGHT}px`;\n errorLabel.style.left = `${left + width / 2 - errorLabelRect.width / 2}px`;\n break;\n }\n }\n errorLabel.dataset.direction = pos;\n const refresh = () => {\n this.renderTooltip(elem, errorLabel, position);\n };\n return {\n refresh\n };\n }\n createErrorLabelElem(key, errorMessage, config) {\n const errorLabel = document.createElement(\"div\");\n errorLabel.innerHTML = errorMessage;\n const customErrorLabelStyle = this.isTooltip() ? config == null ? void 0 : config.errorLabelStyle : (config == null ? void 0 : config.errorLabelStyle) || this.globalConfig.errorLabelStyle;\n Object.assign(errorLabel.style, customErrorLabelStyle);\n errorLabel.classList.add(\n ...getClassList(\n (config == null ? void 0 : config.errorLabelCssClass) || this.globalConfig.errorLabelCssClass\n ),\n \"just-validate-error-label\"\n );\n if (this.isTooltip()) {\n errorLabel.dataset.tooltip = \"true\";\n }\n if (this.globalConfig.testingMode) {\n errorLabel.dataset.testId = `error-label-${key}`;\n }\n this.errorLabels[key] = errorLabel;\n return errorLabel;\n }\n createSuccessLabelElem(key, successMessage, config) {\n if (successMessage === void 0) {\n return null;\n }\n const successLabel = document.createElement(\"div\");\n successLabel.innerHTML = successMessage;\n const customSuccessLabelStyle = (config == null ? void 0 : config.successLabelStyle) || this.globalConfig.successLabelStyle;\n Object.assign(successLabel.style, customSuccessLabelStyle);\n successLabel.classList.add(\n ...getClassList(\n (config == null ? void 0 : config.successLabelCssClass) || this.globalConfig.successLabelCssClass\n ),\n \"just-validate-success-label\"\n );\n if (this.globalConfig.testingMode) {\n successLabel.dataset.testId = `success-label-${key}`;\n }\n this.successLabels[key] = successLabel;\n return successLabel;\n }\n renderErrorsContainer(label, errorsContainer) {\n const container = errorsContainer || this.globalConfig.errorsContainer;\n if (typeof container === \"string\") {\n const elem = this.form.querySelector(container);\n if (elem) {\n elem.appendChild(label);\n return true;\n } else {\n console.error(\n `Error container with ${container} selector not found. Errors will be rendered as usual`\n );\n }\n }\n if (container instanceof Element) {\n container.appendChild(label);\n return true;\n }\n if (container !== void 0) {\n console.error(\n `Error container not found. It should be a string or existing Element. Errors will be rendered as usual`\n );\n }\n return false;\n }\n renderGroupLabel(elem, label, errorsContainer, isSuccess) {\n if (!isSuccess) {\n const renderedInErrorsContainer = this.renderErrorsContainer(\n label,\n errorsContainer\n );\n if (renderedInErrorsContainer) {\n return;\n }\n }\n elem.appendChild(label);\n }\n renderFieldLabel(elem, label, errorsContainer, isSuccess) {\n var _a, _b, _c, _d, _e, _f, _g;\n if (!isSuccess) {\n const renderedInErrorsContainer = this.renderErrorsContainer(\n label,\n errorsContainer\n );\n if (renderedInErrorsContainer) {\n return;\n }\n }\n if (elem.type === \"checkbox\" || elem.type === \"radio\") {\n const labelElem = document.querySelector(\n `label[for=\"${elem.getAttribute(\"id\")}\"]`\n );\n if (((_b = (_a = elem.parentElement) == null ? void 0 : _a.tagName) == null ? void 0 : _b.toLowerCase()) === \"label\") {\n (_d = (_c = elem.parentElement) == null ? void 0 : _c.parentElement) == null ? void 0 : _d.appendChild(label);\n } else if (labelElem) {\n (_e = labelElem.parentElement) == null ? void 0 : _e.appendChild(label);\n } else {\n (_f = elem.parentElement) == null ? void 0 : _f.appendChild(label);\n }\n } else {\n (_g = elem.parentElement) == null ? void 0 : _g.appendChild(label);\n }\n }\n showLabels(fields, isError) {\n Object.keys(fields).forEach((fieldName, i) => {\n const error = fields[fieldName];\n const key = this.getKeyByFieldSelector(fieldName);\n if (!key || !this.fields[key]) {\n console.error(`Field not found. Check the field selector.`);\n return;\n }\n const field = this.fields[key];\n field.isValid = !isError;\n this.clearFieldStyle(key);\n this.clearFieldLabel(key);\n this.renderFieldError(key, false, error);\n if (i === 0 && this.globalConfig.focusInvalidField) {\n setTimeout(() => field.elem.focus(), 0);\n }\n });\n }\n showErrors(fields) {\n if (typeof fields !== \"object\") {\n throw Error(\n \"[showErrors]: Errors should be an object with key: value format\"\n );\n }\n this.showLabels(fields, true);\n }\n showSuccessLabels(fields) {\n if (typeof fields !== \"object\") {\n throw Error(\n \"[showSuccessLabels]: Labels should be an object with key: value format\"\n );\n }\n this.showLabels(fields, false);\n }\n renderFieldError(key, forced = false, message) {\n var _a, _b, _c, _d, _e, _f;\n const field = this.fields[key];\n if (field.isValid === false) {\n this.isValid = false;\n }\n if (field.isValid === void 0 || !forced && !this.isSubmitted && !field.touched && message === void 0) {\n return;\n }\n if (field.isValid) {\n if (!field.asyncCheckPending) {\n const successLabel = this.createSuccessLabelElem(\n key,\n message !== void 0 ? message : field.successMessage,\n field.config\n );\n if (successLabel) {\n this.renderFieldLabel(\n field.elem,\n successLabel,\n (_a = field.config) == null ? void 0 : _a.errorsContainer,\n true\n );\n }\n field.elem.classList.add(\n ...getClassList(\n ((_b = field.config) == null ? void 0 : _b.successFieldCssClass) || this.globalConfig.successFieldCssClass\n )\n );\n }\n return;\n }\n field.elem.classList.add(\n ...getClassList(\n ((_c = field.config) == null ? void 0 : _c.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n )\n );\n const errorLabel = this.createErrorLabelElem(\n key,\n message !== void 0 ? message : field.errorMessage,\n field.config\n );\n this.renderFieldLabel(\n field.elem,\n errorLabel,\n (_d = field.config) == null ? void 0 : _d.errorsContainer\n );\n if (this.isTooltip()) {\n this.tooltips.push(\n this.renderTooltip(\n field.elem,\n errorLabel,\n (_f = (_e = field.config) == null ? void 0 : _e.tooltip) == null ? void 0 : _f.position\n )\n );\n }\n }\n renderGroupError(key, force = true) {\n var _a, _b, _c, _d;\n const group = this.groupFields[key];\n if (group.isValid === false) {\n this.isValid = false;\n }\n if (group.isValid === void 0 || !force && !this.isSubmitted && !group.touched) {\n return;\n }\n if (group.isValid) {\n group.elems.forEach((elem) => {\n var _a2, _b2;\n Object.assign(\n elem.style,\n ((_a2 = group.config) == null ? void 0 : _a2.successFieldStyle) || this.globalConfig.successFieldStyle\n );\n elem.classList.add(\n ...getClassList(\n ((_b2 = group.config) == null ? void 0 : _b2.successFieldCssClass) || this.globalConfig.successFieldCssClass\n )\n );\n });\n const successLabel = this.createSuccessLabelElem(\n key,\n group.successMessage,\n group.config\n );\n if (successLabel) {\n this.renderGroupLabel(\n group.groupElem,\n successLabel,\n (_a = group.config) == null ? void 0 : _a.errorsContainer,\n true\n );\n }\n return;\n }\n this.isValid = false;\n group.elems.forEach((elem) => {\n var _a2, _b2;\n Object.assign(\n elem.style,\n ((_a2 = group.config) == null ? void 0 : _a2.errorFieldStyle) || this.globalConfig.errorFieldStyle\n );\n elem.classList.add(\n ...getClassList(\n ((_b2 = group.config) == null ? void 0 : _b2.errorFieldCssClass) || this.globalConfig.errorFieldCssClass\n )\n );\n });\n const errorLabel = this.createErrorLabelElem(\n key,\n group.errorMessage,\n group.config\n );\n this.renderGroupLabel(\n group.groupElem,\n errorLabel,\n (_b = group.config) == null ? void 0 : _b.errorsContainer\n );\n if (this.isTooltip()) {\n this.tooltips.push(\n this.renderTooltip(\n group.groupElem,\n errorLabel,\n (_d = (_c = group.config) == null ? void 0 : _c.tooltip) == null ? void 0 : _d.position\n )\n );\n }\n }\n renderErrors(forceRevalidation = false) {\n if (!this.isSubmitted && !forceRevalidation && !this.globalConfig.validateBeforeSubmitting) {\n return;\n }\n this.clearErrors();\n this.isValid = true;\n for (const key in this.groupFields) {\n this.renderGroupError(key);\n }\n for (const key in this.fields) {\n this.renderFieldError(key);\n }\n }\n destroy() {\n this.eventListeners.forEach((event) => {\n this.removeListener(event.type, event.elem, event.func);\n });\n Object.keys(this.customStyleTags).forEach((key) => {\n this.customStyleTags[key].remove();\n });\n this.clearErrors();\n if (this.globalConfig.lockForm) {\n this.unlockForm();\n }\n }\n refresh() {\n this.destroy();\n if (!this.form) {\n console.error(\"Cannot initialize the library! Form is not defined\");\n } else {\n this.initialize(this.form, this.globalConfig);\n Object.keys(this.fields).forEach((key) => {\n const fieldSelector = this.getFieldSelectorByKey(key);\n if (fieldSelector) {\n this.addField(\n fieldSelector,\n [...this.fields[key].rules],\n this.fields[key].config\n );\n }\n });\n }\n }\n setCurrentLocale(locale) {\n if (typeof locale !== \"string\" && locale !== void 0) {\n console.error(\"Current locale should be a string\");\n return;\n }\n this.currentLocale = locale;\n if (this.isSubmitted) {\n this.validate();\n }\n }\n onSuccess(callback) {\n this.onSuccessCallback = callback;\n return this;\n }\n onFail(callback) {\n this.onFailCallback = callback;\n return this;\n }\n onValidate(callback) {\n this.onValidateCallback = callback;\n return this;\n }\n}\nexport {\n CustomStyleTagIds,\n GroupRules,\n Rules,\n JustValidate as default\n};\n"],"names":["__defProp","__defNormalProp","obj","key","value","__publicField","EMAIL_REGEXP","INTEGER_REGEXP","PASSWORD_REGEXP","STRONG_PASSWORD_REGEXP","isEmpty","newVal","isEmail","isLengthMoreThanMax","len","isLengthLessThanMin","isNumber","isInteger","isPassword","isStrongPassword","isNumberMoreThanMax","isNumberLessThanMin","isInvalidOrEmptyString","Rules","Rules2","GroupRules","GroupRules2","CustomStyleTagIds","CustomStyleTagIds2","defaultDictionary","DEFAULT_ERROR_FIELD_MESSAGE","isPromise","val","getNodeParents","el","elem","els","getClosestParent","groups","parents","reversedParents","i","parent","group","getClassList","classList","cls","isElement","element","errorLabelCss","TOOLTIP_ARROW_HEIGHT","defaultGlobalConfig","JustValidate","form","globalConfig","dictLocale","field","fieldSelector","k","fields","newKey","item","ev","target","foundKey","styleTag","rule","ruleValue","customMsg","_a","search","localisedStr","fieldRule","msg","successMessage","groupRule","elems","afterInputChanged","elemValue","num","regexp","str","filesConfig","isFilePropsInvalid","file","fileConfig","minSizeInvalid","maxSizeInvalid","nameInvalid","extInvalid","typeInvalid","fileIdx","result","promise","resp","isValid","promises","res","_a2","resolve","groupSelector","forceRevalidation","_b","_c","type","handler","rules","config","groupField","errorMessage","inputs","childrenInputs","input","elem2","_d","errorStyle","key2","successStyle","errorLabel","position","top","left","width","height","errorLabelRect","pos","customErrorLabelStyle","successLabel","customSuccessLabelStyle","label","errorsContainer","container","isSuccess","_e","_f","_g","labelElem","isError","fieldName","error","forced","message","force","_b2","event","locale","callback"],"mappings":"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","x_google_ignoreList":[0]}