1(()=>{var M=Object.defineProperty,$=(e,t,i)=>(t in e)?M(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,h=(e,t,i)=>{return $(e,typeof t!=="symbol"?t+"":t,i),i},_=/^(([^<>()[\]\\.,;:\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,}))$/,P=/^-?[0-9]\d*$/,j=/^(?=.*[A-Za-z])(?=.*\d).{8,}$/,O=/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/,N=(e)=>{let t=e;if(typeof e==="string")t=e.trim();return!t},k=(e)=>{return _.test(e)},G=(e,t)=>{return e.length>t},A=(e,t)=>{return e.length<t},q=(e)=>{if(typeof e!=="string")return!1;return!isNaN(+e)&&!isNaN(parseFloat(e))},B=(e)=>{return P.test(e)},D=(e)=>{return j.test(e)},z=(e)=>{return O.test(e)},H=(e,t)=>{return e>t},K=(e,t)=>{return e<t},g=(e)=>{return typeof e!=="string"||e===""},c=((e)=>{return e.Required="required",e.Email="email",e.MinLength="minLength",e.MaxLength="maxLength",e.Password="password",e.Number="number",e.Integer="integer",e.MaxNumber="maxNumber",e.MinNumber="minNumber",e.StrongPassword="strongPassword",e.CustomRegexp="customRegexp",e.MinFilesCount="minFilesCount",e.MaxFilesCount="maxFilesCount",e.Files="files",e})(c||{}),C=((e)=>{return e.Required="required",e})(C||{}),w=((e)=>{return e.Label="label",e.LabelArrow="labelArrow",e})(w||{}),S=[{key:c.Required,dict:{en:"The field is required"}},{key:c.Email,dict:{en:"Email has invalid format"}},{key:c.MaxLength,dict:{en:"The field must contain a maximum of :value characters"}},{key:c.MinLength,dict:{en:"The field must contain a minimum of :value characters"}},{key:c.Password,dict:{en:"Password must contain minimum eight characters, at least one letter and one number"}},{key:c.StrongPassword,dict:{en:"Password should contain minimum eight characters, at least one uppercase letter, one lowercase letter, one number and one special character"}},{key:c.Number,dict:{en:"Value should be a number"}},{key:c.MaxNumber,dict:{en:"Number should be less or equal than :value"}},{key:c.MinNumber,dict:{en:"Number should be more or equal than :value"}},{key:c.MinFilesCount,dict:{en:"Files count should be more or equal than :value"}},{key:c.MaxFilesCount,dict:{en:"Files count should be less or equal than :value"}},{key:c.Files,dict:{en:"Uploaded files have one or several invalid properties (extension/size/type etc)."}}],Z="Value is incorrect",p=(e)=>typeof e==="object"&&e!==null&&("then"in e)&&typeof e.then==="function",X=(e)=>{let t=e,i=[];while(t)i.unshift(t),t=t.parentNode;return i},W=(e,t)=>{let i=[...t].reverse();for(let s=0,r=i.length;s<r;++s){let o=i[s];for(let l in e){let d=e[l];if(d.groupElem===o)return[l,d]}}return null},b=(e)=>{if(Array.isArray(e))return e.filter((t)=>t.length>0);if(typeof e==="string"&&e.trim())return[...e.split(" ").filter((t)=>t.length>0)];return[]},v=(e)=>{return e instanceof Element||e instanceof HTMLDocument},Y=".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)}",F=5,m={errorFieldStyle:{color:"#b81111",border:"1px solid #B81111"},errorFieldCssClass:"just-validate-error-field",successFieldCssClass:"just-validate-success-field",errorLabelStyle:{color:"#b81111"},errorLabelCssClass:"just-validate-error-label",successLabelCssClass:"just-validate-success-label",focusInvalidField:!0,lockForm:!0,testingMode:!1,validateBeforeSubmitting:!1,submitFormAutomatically:!1};class y{constructor(e,t,i){h(this,"form",null),h(this,"fields",{}),h(this,"groupFields",{}),h(this,"errors",{}),h(this,"isValid",!1),h(this,"isSubmitted",!1),h(this,"globalConfig",m),h(this,"errorLabels",{}),h(this,"successLabels",{}),h(this,"eventListeners",[]),h(this,"dictLocale",S),h(this,"currentLocale","en"),h(this,"customStyleTags",{}),h(this,"onSuccessCallback"),h(this,"onFailCallback"),h(this,"onValidateCallback"),h(this,"tooltips",[]),h(this,"lastScrollPosition"),h(this,"isScrollTick"),h(this,"fieldIds",new Map),h(this,"getKeyByFieldSelector",(s)=>{return this.fieldIds.get(s)}),h(this,"getFieldSelectorByKey",(s)=>{for(let[r,o]of this.fieldIds)if(s===o)return r;return}),h(this,"getCompatibleFields",()=>{let s={};
1return Object.keys(this.fields).forEach((r)=>{let o=r,l=this.getFieldSelectorByKey(r);if(typeof l==="string")o=l;s[o]={...this.fields[r]}}),s}),h(this,"setKeyByFieldSelector",(s)=>{if(this.fieldIds.has(s))return this.fieldIds.get(s);let r=String(this.fieldIds.size+1);return this.fieldIds.set(s,r),r}),h(this,"refreshAllTooltips",()=>{this.tooltips.forEach((s)=>{s.refresh()})}),h(this,"handleDocumentScroll",()=>{if(this.lastScrollPosition=window.scrollY,!this.isScrollTick)window.requestAnimationFrame(()=>{this.refreshAllTooltips(),this.isScrollTick=!1}),this.isScrollTick=!0}),h(this,"formSubmitHandler",(s)=>{s.preventDefault(),this.isSubmitted=!0,this.validateHandler(s)}),h(this,"handleFieldChange",(s)=>{let r;for(let o in this.fields)if(this.fields[o].elem===s){r=o;break}if(!r)return;this.fields[r].touched=!0,this.validateField(r,!0)}),h(this,"handleGroupChange",(s)=>{let r;for(let o in this.groupFields)if(this.groupFields[o].elems.find((d)=>d===s)){r=o;break}if(!r)return;this.groupFields[r].touched=!0,this.validateGroup(r,!0)}),h(this,"handlerChange",(s)=>{if(!s.target)return;this.handleFieldChange(s.target),this.handleGroupChange(s.target),this.renderErrors()}),this.initialize(e,t,i)}initialize(e,t,i){if(this.form=null,this.errors={},this.isValid=!1,this.isSubmitted=!1,this.globalConfig=m,this.errorLabels={},this.successLabels={},this.eventListeners=[],this.customStyleTags={},this.tooltips=[],this.currentLocale="en",typeof e==="string"){let s=document.querySelector(e);if(!s)throw Error(`Form with ${e} selector not found! Please check the form selector`);this.setForm(s)}else if(e instanceof HTMLFormElement)this.setForm(e);else throw Error("Form selector is not valid. Please specify a string selector or a DOM element.");if(this.globalConfig={...m,...t},i)this.dictLocale=[...i,...S];if(this.isTooltip()){let s=document.createElement("style");s.textContent=Y,this.customStyleTags[w.Label]=document.head.appendChild(s),this.addListener("scroll",document,this.handleDocumentScroll)}}getLocalisedString(e,t,i){var s;let r=i!=null?i:e,o=(s=this.dictLocale.find((l)=>l.key===r))==null?void 0:s.dict[this.currentLocale];if(!o){if(i)o=i}if(o&&t!==void 0)switch(e){case c.MaxLength:case c.MinLength:case c.MaxNumber:case c.MinNumber:case c.MinFilesCount:case c.MaxFilesCount:o=o.replace(":value",String(t))}return o||i||Z}getFieldErrorMessage(e,t){let i=typeof e.errorMessage==="function"?e.errorMessage(this.getElemValue(t),this.fields):e.errorMessage;return this.getLocalisedString(e.rule,e.value,i)}getFieldSuccessMessage(e,t){let i=typeof e==="function"?e(this.getElemValue(t),this.fields):e;return this.getLocalisedString(void 0,void 0,i)}getGroupErrorMessage(e){return this.getLocalisedString(e.rule,void 0,e.errorMessage)}getGroupSuccessMessage(e){if(!e.successMessage)return;return this.getLocalisedString(void 0,void 0,e.successMessage)}setFieldInvalid(e,t){this.fields[e].isValid=!1,this.fields[e].errorMessage=this.getFieldErrorMessage(t,this.fields[e].elem)}setFieldValid(e,t){if(this.fields[e].isValid=!0,t!==void 0)this.fields[e].successMessage=this.getFieldSuccessMessage(t,this.fields[e].elem)}setGroupInvalid(e,t){this.groupFields[e].isValid=!1,this.groupFields[e].errorMessage=this.getGroupErrorMessage(t)}setGroupValid(e,t){this.groupFields[e].isValid=!0,this.groupFields[e].successMessage=this.getGroupSuccessMessage(t)}getElemValue(e){switch(e.type){case"checkbox":return e.checked;case"file":return e.files;default:return e.value}}validateGroupRule(e,t,i){switch(i.rule){case C.Required:if(t.every((s)=>!s.checked))this.setGroupInvalid(e,i);else this.setGroupValid(e,i)}}validateFieldRule(e,t,i,s=!1){let r=i.value,o=this.getElemValue(t);if(i.plugin){if(!i.plugin(o,this.getCompatibleFields()))this.setFieldInvalid(e,i);return}switch(i.rule){case c.Required:{if(N(o))this.setFieldInvalid(e,i);break}case c.Email:{if(g(o))break;if(!k(o))this.setFieldInvalid(e,i);break}case c.MaxLength:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(typeof r!=="number"){console.error(`Value for ${i.rule} rule for [${e}
1] should be a number. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(g(o))break;if(G(o,r))this.setFieldInvalid(e,i);break}case c.MinLength:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(typeof r!=="number"){console.error(`Value for ${i.rule} rule for [${e}] should be a number. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(g(o))break;if(A(o,r))this.setFieldInvalid(e,i);break}case c.Password:{if(g(o))break;if(!D(o))this.setFieldInvalid(e,i);break}case c.StrongPassword:{if(g(o))break;if(!z(o))this.setFieldInvalid(e,i);break}case c.Number:{if(g(o))break;if(!q(o))this.setFieldInvalid(e,i);break}case c.Integer:{if(g(o))break;if(!B(o))this.setFieldInvalid(e,i);break}case c.MaxNumber:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(typeof r!=="number"){console.error(`Value for ${i.rule} rule for [${e}] field should be a number. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(g(o))break;let l=+o;if(Number.isNaN(l)||H(l,r))this.setFieldInvalid(e,i);break}case c.MinNumber:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(typeof r!=="number"){console.error(`Value for ${i.rule} rule for [${e}] field should be a number. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(g(o))break;let l=+o;if(Number.isNaN(l)||K(l,r))this.setFieldInvalid(e,i);break}case c.CustomRegexp:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. This field will be always invalid.`),this.setFieldInvalid(e,i);return}let l;try{l=new RegExp(r)}catch(a){console.error(`Value for ${i.rule} rule for [${e}] should be a valid regexp. This field will be always invalid.`),this.setFieldInvalid(e,i);break}let d=String(o);if(d!==""&&!l.test(d))this.setFieldInvalid(e,i);break}case c.MinFilesCount:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. This field will be always invalid.`),this.setFieldInvalid(e,i);break}if(typeof r!=="number"){console.error(`Value for ${i.rule} rule for [${e}] field should be a number. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(Number.isFinite(o==null?void 0:o.length)&&o.length<r){this.setFieldInvalid(e,i);break}break}case c.MaxFilesCount:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. This field will be always invalid.`),this.setFieldInvalid(e,i);break}if(typeof r!=="number"){console.error(`Value for ${i.rule} rule for [${e}] field should be a number. The field will be always invalid.`),this.setFieldInvalid(e,i);break}if(Number.isFinite(o==null?void 0:o.length)&&o.length>r){this.setFieldInvalid(e,i);break}break}case c.Files:{if(r===void 0){console.error(`Value for ${i.rule} rule for [${e}] field is not defined. This field will be always invalid.`),this.setFieldInvalid(e,i);return}if(typeof r!=="object"){console.error(`Value for ${i.rule} rule for [${e}] field should be an object. This field will be always invalid.`),this.setFieldInvalid(e,i);return}let l=r.files;if(typeof l!=="object"){console.error(`Value for ${i.rule} rule for [${e}] field should be an object with files array. This field will be always invalid.`),this.setFieldInvalid(e,i);return}let d=(a,n)=>{let u=Number.isFinite(n.minSize)&&a.size<n.minSize,f=Number.isFinite(n.maxSize)&&a.size>n.maxSize,V=Array.isArray(n.names)&&!n.names.includes(a.name),x=Array.isArray(n.extensions)&&!n.extensions.includes(a.name.split(".")[a.name.split(".").length-1]),T=Array.isArray(n.types)&&!n.types.includes(a.type);return u||f||V||x||T};if(typeof o==="object"&&o!==null)for(let a=0,n=o.length;a<n;++a){let u=o.item(a);if(!u){this.setFieldInvalid(e,i);break}if(d(u,l)){this.setFieldInvalid(e,i);break}}break}default:{if(typeof i.validator!=="function"){console.error(`Validator for custom rule for [${e}
1] field should be a function. This field will be always invalid.`),this.setFieldInvalid(e,i);return}let l=i.validator(o,this.getCompatibleFields());if(typeof l!=="boolean"&&typeof l!=="function")console.error(`Validator return value for [${e}] field should be boolean or function. It will be cast to boolean.`);if(typeof l==="function")if(s)this.fields[e].asyncCheckPending=!0;else{this.fields[e].asyncCheckPending=!1;let d=l();if(!p(d)){console.error(`Validator function for custom rule for [${e}] field should return a Promise. This field will be always invalid.`),this.setFieldInvalid(e,i);return}return d.then((a)=>{if(!a)this.setFieldInvalid(e,i)}).catch(()=>{this.setFieldInvalid(e,i)})}if(!l)this.setFieldInvalid(e,i)}}}isFormValid(){let e=!0;for(let t=0,i=Object.values(this.fields).length;t<i;++t){let s=Object.values(this.fields)[t];if(s.isValid===void 0){e=void 0;break}if(s.isValid===!1){e=!1;break}}for(let t=0,i=Object.values(this.groupFields).length;t<i;++t){let s=Object.values(this.groupFields)[t];if(s.isValid===void 0){e=void 0;break}if(s.isValid===!1){e=!1;break}}return e}validateField(e,t=!1){var i;let s=this.fields[e];s.isValid=!0;let r=[];if([...s.rules].reverse().forEach((o)=>{let l=this.validateFieldRule(e,s.elem,o,t);if(p(l))r.push(l)}),s.isValid)this.setFieldValid(e,(i=s.config)==null?void 0:i.successMessage);return Promise.allSettled(r).finally(()=>{var o;if(t)(o=this.onValidateCallback)==null||o.call(this,{isValid:this.isFormValid(),isSubmitted:this.isSubmitted,fields:this.getCompatibleFields(),groups:{...this.groupFields}})})}revalidateField(e){if(typeof e!=="string"&&!v(e))throw Error("Field selector is not valid. Please specify a string selector or a valid DOM element.");let t=this.getKeyByFieldSelector(e);if(!t||!this.fields[t])return console.error("Field not found. Check the field selector."),Promise.reject();return new Promise((i)=>{this.validateField(t,!0).finally(()=>{this.clearFieldStyle(t),this.clearFieldLabel(t),this.renderFieldError(t,!0),i(!!this.fields[t].isValid)})})}revalidateGroup(e){if(typeof e!=="string"&&!v(e))throw Error("Group selector is not valid. Please specify a string selector or a valid DOM element.");let t=this.getKeyByFieldSelector(e);if(!t||!this.groupFields[t])return console.error("Group not found. Check the group selector."),Promise.reject();return new Promise((i)=>{this.validateGroup(t).finally(()=>{this.clearFieldLabel(t),this.renderGroupError(t,!0),i(!!this.groupFields[t].isValid)})})}validateGroup(e,t=!1){let i=this.groupFields[e],s=[];return[...i.rules].reverse().forEach((r)=>{let o=this.validateGroupRule(e,i.elems,r);if(p(o))s.push(o)}),Promise.allSettled(s).finally(()=>{var r;if(t)(r=this.onValidateCallback)==null||r.call(this,{isValid:this.isFormValid(),isSubmitted:this.isSubmitted,fields:this.getCompatibleFields(),groups:{...this.groupFields}})})}focusInvalidField(){for(let e in this.fields){let t=this.fields[e];if(!t.isValid){setTimeout(()=>t.elem.focus(),0);break}}}afterSubmitValidation(e=!1){if(this.renderErrors(e),this.globalConfig.focusInvalidField)this.focusInvalidField()}validate(e=!1){return new Promise((t)=>{let i=[];Object.keys(this.fields).forEach((s)=>{let r=this.validateField(s);if(p(r))i.push(r)}),Object.keys(this.groupFields).forEach((s)=>{let r=this.validateGroup(s);if(p(r))i.push(r)}),Promise.allSettled(i).then(()=>{var s;this.afterSubmitValidation(e),(s=this.onValidateCallback)==null||s.call(this,{isValid:this.isFormValid(),isSubmitted:this.isSubmitted,fields:this.getCompatibleFields(),groups:{...this.groupFields}}),t(!!i.length)})})}revalidate(){return new Promise((e)=>{this.validateHandler(void 0,!0).finally(()=>{if(this.globalConfig.focusInvalidField)this.focusInvalidField();e(this.isValid)})})}validateHandler(e,t=!1){if(this.globalConfig.lockForm)this.lockForm();return this.validate(t).finally(()=>{var i,s,r;if(this.globalConfig.lockForm)this.unlockForm();if(this.isValid){if((i=this.onSuccessCallback)==null||i.call(this,e),this.globalConfig.submitFormAutomatically)(s=e==null?void 0:e.currentTarget)==null||s.submit()}else(r=this.onFailCallback)==null||r.call(this,this.getCompatibleFields(),this.groupFields)})}setForm(e){this.form=e,this.form.setAttribute("novalidate","novalidate"),this.removeListener("submit",this.form,this.formSubmitHandler),this.addListener("submit",this.form,this.formSubmitHandler)}addListener(e,t,i){t.addEventListener(e,i),this.eventListeners.push({type:e,elem:t,func:i})}removeListener(e,t,i){t.removeEventListener(e,i),this.eventListeners=this.eventListeners.filter((s)=>s.type!==e||s.elem!==t)}addField(e,t,i){if(typeof e!=="string"&&!v(e))throw Error("Field selector is not val
1id. Please specify a string selector or a valid DOM element.");let s;if(typeof e==="string")s=this.form.querySelector(e);else s=e;if(!s)throw Error("Field doesn't exist in the DOM! Please check the field selector.");if(!Array.isArray(t)||!t.length)throw Error("Rules argument should be an array and should contain at least 1 element.");t.forEach((o)=>{if(!(("rule"in o)||("validator"in o)||("plugin"in o)))throw Error("Rules argument must contain at least one rule or validator property.");if(!o.validator&&!o.plugin&&(!o.rule||!Object.values(c).includes(o.rule)))throw Error(`Rule should be one of these types: ${Object.values(c).join(", ")}. Provided value: ${o.rule}`)});let r=this.setKeyByFieldSelector(e);if(this.fields[r]={elem:s,rules:t,isValid:void 0,touched:!1,config:i},this.setListeners(s),this.isSubmitted||this.globalConfig.validateBeforeSubmitting)this.validateField(r);return this}removeField(e){if(typeof e!=="string"&&!v(e))throw Error("Field selector is not valid. Please specify a string selector or a valid DOM element.");let t=this.getKeyByFieldSelector(e);if(!t||!this.fields[t])return console.error("Field not found. Check the field selector."),this;let i=this.getListenerType(this.fields[t].elem.type);return this.removeListener(i,this.fields[t].elem,this.handlerChange),this.clearErrors(),delete this.fields[t],this}removeGroup(e){if(typeof e!=="string")throw Error("Group selector is not valid. Please specify a string selector.");let t=this.getKeyByFieldSelector(e);if(!t||!this.groupFields[t])return console.error("Group not found. Check the group selector."),this;return this.groupFields[t].elems.forEach((i)=>{let s=this.getListenerType(i.type);this.removeListener(s,i,this.handlerChange)}),this.clearErrors(),delete this.groupFields[t],this}addRequiredGroup(e,t,i,s){if(typeof e!=="string"&&!v(e))throw Error("Group selector is not valid. Please specify a string selector or a valid DOM element.");let r;if(typeof e==="string")r=this.form.querySelector(e);else r=e;if(!r)throw Error("Group selector not found! Please check the group selector.");let o=r.querySelectorAll("input"),l=Array.from(o).filter((a)=>{let n=W(this.groupFields,X(a));if(!n)return!0;return n[1].elems.find((u)=>u!==a)}),d=this.setKeyByFieldSelector(e);return this.groupFields[d]={rules:[{rule:C.Required,errorMessage:t,successMessage:s}],groupElem:r,elems:l,touched:!1,isValid:void 0,config:i},o.forEach((a)=>{this.setListeners(a)}),this}getListenerType(e){switch(e){case"checkbox":case"select-one":case"file":case"radio":return"change";default:return"input"}}setListeners(e){let t=this.getListenerType(e.type);this.removeListener(t,e,this.handlerChange),this.addListener(t,e,this.handlerChange)}clearFieldLabel(e){var t,i;(t=this.errorLabels[e])==null||t.remove(),(i=this.successLabels[e])==null||i.remove()}clearFieldStyle(e){var t,i,s,r;let o=this.fields[e],l=((t=o.config)==null?void 0:t.errorFieldStyle)||this.globalConfig.errorFieldStyle;Object.keys(l).forEach((a)=>{o.elem.style[a]=""});let d=((i=o.config)==null?void 0:i.successFieldStyle)||this.globalConfig.successFieldStyle||{};Object.keys(d).forEach((a)=>{o.elem.style[a]=""}),o.elem.classList.remove(...b(((s=o.config)==null?void 0:s.errorFieldCssClass)||this.globalConfig.errorFieldCssClass),...b(((r=o.config)==null?void 0:r.successFieldCssClass)||this.globalConfig.successFieldCssClass))}clearErrors(){var e,t;Object.keys(this.errorLabels).forEach((i)=>this.errorLabels[i].remove()),Object.keys(this.successLabels).forEach((i)=>this.successLabels[i].remove());for(let i in this.fields)this.clearFieldStyle(i);for(let i in this.groupFields){let s=this.groupFields[i],r=((e=s.config)==null?void 0:e.errorFieldStyle)||this.globalConfig.errorFieldStyle;Object.keys(r).forEach((l)=>{s.elems.forEach((d)=>{var a;d.style[l]="",d.classList.remove(...b(((a=s.config)==null?void 0:a.errorFieldCssClass)||this.globalConfig.errorFieldCssClass))})});let o=((t=s.config)==null?void 0:t.successFieldStyle)||this.globalConfig.successFieldStyle||{};Object.keys(o).forEach((l)=>{s.elems.forEach((d)=>{var a;d.style[l]="",d.classList.remove(...b(((a=s.config)==null?void 0:a.successFieldCssClass)||this.globalConfig.successFieldCssClass))})})}this.tooltips=[]}isTooltip(){return!!this.globalConfig.tooltip}lockForm(){let e=this.form.querySelectorAll("input, textarea, button, select");for(let t=0,i=e.length;t<i;++t)e[t].setAttribute("data-just-validate-fallback-disabled",e[t].disabled?"true":"false"),e[t].setAttribute("disabled","disabled"),e[t].style.pointerEvents="none",e[t].style.webkitFilter="grayscale(100%)",e[t].style.filter="grayscale(100%)"}unlockForm(){let e=this.form.querySelectorAll("input, textarea, button, select");for(let t=0,i=e.length;t<i;++t){if(e[t].getAttribute("data-just-validate-fallback-disabled")!=="true")e[t].removeAttribute("disabled");e[t].style.pointerEvents="",e[t].style.webkitFilter="",e[t].style.filter=""}}renderTooltip(e,t,i){var s;let{top:r,left:o,width:l,height:d}=e.getBoundingClientRect(),a=t.getBoundingClientRect(),n=i||((s=this.globalConfig.tooltip)==null?void 0:s.position);switch(n){case"left":{t.style.top=`${r+d/2-a.height/2}px`,t.style.left=`${o-a.width-F}px`;break}case"top":{t.style.top=`${r-a.height-F}px`,t.style.left=`${o+l/2-a.width/2}px`;break}case"right":{t.style.top=`${r+d/2-a.height/2}px`,t.style.left=`${o+l+F}px`;break}case"bottom":{t.style.top=`${r+d+F}px`,t.style.left=`${o+l/2-a.width/2}px`;break}}return t.dataset.direction=n,{refresh:()=>{this.renderTooltip(e,t,i)}}}createErrorLabelElem(e,t,i){let s=document.createElement("div");s.innerHTML=t;let r=this.isTooltip()?i==null?void 0:i.errorLabelStyle:(i==null?void 0:i.errorLabelStyle)||this.globalConfig.errorLabelStyle;if(Object.assign(s.style,r),s.classList.add(...b((i==null?void 0:i.errorLabelCssClass)||this.globalConfig.errorLabelCssClass),"just-validate-error-label"),this.isTooltip())s.dataset.tooltip="true";if(this.globalConfig.testingMode)s.dataset.testId=`error-label-${e}`;return this.errorLabels[e]=s,s}createSuccessLabelElem(e,t,i){if(t===void 0)return null;let s=document.createElement("div");s.innerHTML=t;let r=(i==null?void 0:i.successLabelStyle)||this.globalConfig.successLabelStyle;if(Object.assign(s.style,r),s.classList.add(...b((i==null?void 0:i.successLabelCssClass)||this.globalConfig.successLabelCssClass),"just-validate-success-label"),this.globalConfig.testingMode)s.dataset.testId=`success-label-${e}`;return this.successLabels[e]=s,s}renderErrorsContainer(e,t){let i=t||this.globalConfig.errorsContainer;
1if(typeof i==="string"){let s=this.form.querySelector(i);if(s)return s.appendChild(e),!0;else console.error(`Error container with ${i} selector not found. Errors will be rendered as usual`)}if(i instanceof Element)return i.appendChild(e),!0;if(i!==void 0)console.error("Error container not found. It should be a string or existing Element. Errors will be rendered as usual");return!1}renderGroupLabel(e,t,i,s){if(!s){if(this.renderErrorsContainer(t,i))return}e.appendChild(t)}renderFieldLabel(e,t,i,s){var r,o,l,d,a,n,u;if(!s){if(this.renderErrorsContainer(t,i))return}if(e.type==="checkbox"||e.type==="radio"){let f=document.querySelector(`label[for="${e.getAttribute("id")}"]`);if(((o=(r=e.parentElement)==null?void 0:r.tagName)==null?void 0:o.toLowerCase())==="label")(d=(l=e.parentElement)==null?void 0:l.parentElement)==null||d.appendChild(t);else if(f)(a=f.parentElement)==null||a.appendChild(t);else(n=e.parentElement)==null||n.appendChild(t)}else(u=e.parentElement)==null||u.appendChild(t)}showLabels(e,t){Object.keys(e).forEach((i,s)=>{let r=e[i],o=this.getKeyByFieldSelector(i);if(!o||!this.fields[o]){console.error("Field not found. Check the field selector.");return}let l=this.fields[o];if(l.isValid=!t,this.clearFieldStyle(o),this.clearFieldLabel(o),this.renderFieldError(o,!1,r),s===0&&this.globalConfig.focusInvalidField)setTimeout(()=>l.elem.focus(),0)})}showErrors(e){if(typeof e!=="object")throw Error("[showErrors]: Errors should be an object with key: value format");this.showLabels(e,!0)}showSuccessLabels(e){if(typeof e!=="object")throw Error("[showSuccessLabels]: Labels should be an object with key: value format");this.showLabels(e,!1)}renderFieldError(e,t=!1,i){var s,r,o,l,d,a;let n=this.fields[e];if(n.isValid===!1)this.isValid=!1;if(n.isValid===void 0||!t&&!this.isSubmitted&&!n.touched&&i===void 0)return;if(n.isValid){if(!n.asyncCheckPending){let f=this.createSuccessLabelElem(e,i!==void 0?i:n.successMessage,n.config);if(f)this.renderFieldLabel(n.elem,f,(s=n.config)==null?void 0:s.errorsContainer,!0);n.elem.classList.add(...b(((r=n.config)==null?void 0:r.successFieldCssClass)||this.globalConfig.successFieldCssClass))}return}n.elem.classList.add(...b(((o=n.config)==null?void 0:o.errorFieldCssClass)||this.globalConfig.errorFieldCssClass));let u=this.createErrorLabelElem(e,i!==void 0?i:n.errorMessage,n.config);if(this.renderFieldLabel(n.elem,u,(l=n.config)==null?void 0:l.errorsContainer),this.isTooltip())this.tooltips.push(this.renderTooltip(n.elem,u,(a=(d=n.config)==null?void 0:d.tooltip)==null?void 0:a.position))}renderGroupError(e,t=!0){var i,s,r,o;let l=this.groupFields[e];if(l.isValid===!1)this.isValid=!1;if(l.isValid===void 0||!t&&!this.isSubmitted&&!l.touched)return;if(l.isValid){l.elems.forEach((n)=>{var u,f;Object.assign(n.style,((u=l.config)==null?void 0:u.successFieldStyle)||this.globalConfig.successFieldStyle),n.classList.add(...b(((f=l.config)==null?void 0:f.successFieldCssClass)||this.globalConfig.successFieldCssClass))});let a=this.createSuccessLabelElem(e,l.successMessage,l.config);if(a)this.renderGroupLabel(l.groupElem,a,(i=l.config)==null?void 0:i.errorsContainer,!0);return}this.isValid=!1,l.elems.forEach((a)=>{var n,u;Object.assign(a.style,((n=l.config)==null?void 0:n.errorFieldStyle)||this.globalConfig.errorFieldStyle),a.classList.add(...b(((u=l.config)==null?void 0:u.errorFieldCssClass)||this.globalConfig.errorFieldCssClass))});let d=this.createErrorLabelElem(e,l.errorMessage,l.config);if(this.renderGroupLabel(l.groupElem,d,(s=l.config)==null?void 0:s.errorsContainer),this.isTooltip())this.tooltips.push(this.renderTooltip(l.groupElem,d,(o=(r=l.config)==null?void 0:r.tooltip)==null?void 0:o.position))}renderErrors(e=!1){if(!this.isSubmitted&&!e&&!this.globalConfig.validateBeforeSubmitting)return;this.clearErrors(),this.isValid=!0;for(let t in this.groupFields)this.renderGroupError(t);for(let t in this.fields)this.renderFieldError(t)}destroy(){if(this.eventListeners.forEach((e)=>{this.removeListener(e.type,e.elem,e.func)}),Object.keys(this.customStyleTags).forEach((e)=>{this.customStyleTags[e].remove()}),this.clearErrors(),this.globalConfig.lockForm)this.unlockForm()}refresh(){if(this.destroy(),!this.form)console.error("Cannot initialize the library! Form is not defined");else this.initialize(this.form,this.globalConfig),Object.keys(this.fields).forEac
1h((e)=>{let t=this.getFieldSelectorByKey(e);if(t)this.addField(t,[...this.fields[e].rules],this.fields[e].config)})}setCurrentLocale(e){if(typeof e!=="string"&&e!==void 0){console.error("Current locale should be a string");return}if(this.currentLocale=e,this.isSubmitted)this.validate()}onSuccess(e){return this.onSuccessCallback=e,this}onFail(e){return this.onFailCallback=e,this}onValidate(e){return this.onValidateCallback=e,this}}var L={cs:{required:"VyplÅte prosÃm toto pole.",email:"Zadejte platnou e-mailovou adresu.",url:"Zadejte platnou URL adresu.",number:"Zadejte prosÃm ÄÃslo.",integer:"Zadejte prosÃm celé ÄÃslo.",pattern:"Hodnota nemá správný formát.",maxLength:"Hodnota je pÅÃliÅ¡ dlouhá.",minLength:"Hodnota je pÅÃliÅ¡ krátká.",maxNumber:"Hodnota je pÅÃliÅ¡ velká.",minNumber:"Hodnota je pÅÃliÅ¡ malá.",requireOne:"VyplÅte prosÃm alespoÅ jednu z tÄchto položek.",emailHints:{hasSpace:"E-mail nesmà obsahovat mezery.",missingAt:"V e-mailu chybà zavinÃ¡Ä (@).",multipleAt:"E-mail smà obsahovat jen jeden zavinÃ¡Ä (@).",missingLocal:"PÅed zavináÄem chybà jméno (napÅ. jan.novak).",missingDomain:"Za zavináÄem chybà doména (napÅ. seznam.cz).",missingDot:"Doména musà obsahovat teÄku (napÅ. seznam.cz)."}},sk:{required:"VyplÅte prosÃm toto pole.",email:"Zadajte platnú e-mailovú adresu.",url:"Zadajte platnú URL adresu.",number:"Zadajte prosÃm ÄÃslo.",integer:"Zadajte prosÃm celé ÄÃslo.",pattern:"Hodnota nemá správny formát.",maxLength:"Hodnota je prÃliÅ¡ dlhá.",minLength:"Hodnota je prÃliÅ¡ krátka.",maxNumber:"Hodnota je prÃliÅ¡ veľká.",minNumber:"Hodnota je prÃliÅ¡ malá.",requireOne:"VyplÅte prosÃm aspoÅ jednu z týchto položiek.",emailHints:{hasSpace:"E-mail nesmie obsahovaÅ¥ medzery.",missingAt:"V e-maile chýba zavinÃ¡Ä (@).",multipleAt:"E-mail smie obsahovaÅ¥ len jeden zavinÃ¡Ä (@).",missingLocal:"Pred zavináÄom chýba meno (napr. jan.novak).",missingDomain:"Za zavináÄom chýba doména (napr. seznam.sk).",missingDot:"Doména musà obsahovaÅ¥ bodku (napr. seznam.sk)."}},en:{required:"Please fill in this field.",email:"Please enter a valid e-mail address.",url:"Please enter a valid URL.",number:"Please enter a number.",integer:"Please enter a whole number.",pattern:"The value has an invalid format.",maxLength:"The value is too long.",minLength:"The value is too short.",maxNumber:"The value is too large.",minNumber:"The value is too small.",requireOne:"Please fill in at least one of these fields.",emailHints:{hasSpace:"The e-mail must not contain spaces.",missingAt:"The e-mail is missing the @ sign.",multipleAt:"The e-mail may contain only one @ sign.",missingLocal:"The name before @ is missing (e.g. john.doe).",missingDomain:"The domain after @ is missing (e.g. example.com).",missingDot:"The domain must contain a dot (e.g. example.com)."}}},Q="https?:\\/\\/\\S+",U=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;class E{constructor(e,t={}){if(this.form=typeof e==="string"?document.querySelector(e):e,!(this.form instanceof HTMLFormElement))return;let i=(document.documentElement.lang||"cs").slice(0,2).toLowerCase();this.messages={...L.cs,...L[i]||{},...t.messages||{}},this.fields=[],this.validator=new y(this.form,{focusInvalidField:!0,lockForm:!1}),this.validator.setListeners=()=>{},this.rulesByField=new Map,this.requireOneGroups=[],this.collectFieldRules(),this.collectRequireOneGroups(),this.commitFields(),this.bindBlurRevalidation(),this.validator.onValidate(()=>this.refresh()),this.validator.onSuccess((s)=>this.submit(s))}submit(e){let t=e?.submitter;if(t?.name){let i=document.createElement("input");i.type="hidden",i.name=t.name,i.value=t.value??"",this.form.appendChild(i)}HTMLFormElement.prototype.submit.call(this.form)}refresh(){this.syncAria(),this.highlightRequireOneGroups()}addRule(e,t){if(!this.rulesByField.has(e))this.rulesByField.set(e,[]);this.rulesByField.get(e).push(t)}collectFieldRules(){this.form.querySelectorAll("input, select, textarea").forEach((e)=>{if(this.shouldSkip(e))return;this.buildRules(e).forEach((t)=>this.addRule(e,t))})}shouldSkip(e){let t=(e.getAttribute("type")||"").toLowerCase();return["hidden","submit","button","reset","image"].includes(t)||e.disabled||e.hasAttribute("data-jv-ignore")}buildRules(e){let t=[],i=(e.getAttribute("type")||"").toLowerCase(),s=e.getAttribute("pattern");if(i==="file")return e.required?[{rule:"minFilesCount",value:1,errorMessage:this.message(e,"required")}]:[];if(e.hasAttribute("data-jv-required-dynamic"))t.push({validator:(a)=>!e.required||String(a).trim()!=="",errorMessage:this.message(e,"required")});else if(e.required)t.push({rule:"required",errorMessage:this.message(e,"required")});if(i==="email")t.push({validator:(a)=>{let n=String(a).trim();return n===""||U.test(n)},errorMessage:(a)=>this.diagnoseEmail(e,a)});if(i==="url")t.push({rule:"customRegexp",value:`^(?:${Q})$`,errorMessage:this.message(e,"url")});if(i==="number"){t.push({rule:"number",errorMessage:this.message(e,"number")});let a=this.numericAttribute(e,"step");if(a!==null&&Number.isInteger(a))t.push({rule:"integer",errorMessage:this.message(e,"integer")})}if(s)t.push({rule:"customRegexp",value:`^(?:${s})$`,errorMessage:this.message(e,"pattern")});let r=e.getAttribute("maxlength");if(r)t.push({rule:"maxLength",value:Number(r),errorMessage:this.message(e,"maxLength")});let o=e.getAttribute("minlength");if(o)t.push({rule:"minLength",value:Number(o),errorMessage:this.message(e,"minLength")});let l=this.numericAttribute(e,"min");if(l!==null)t.push({rule:"minNumber",value:l,errorMessage:this.message(e,"minNumber")});let d=this.numericAttribute(e,"max");if(d!==null)t.push({rule:"maxNumber",value:d,errorMessage:this.message(e,"maxNumber")});return t}numericAttribute(e,t){let i=e.getAttribute(t);if(i===null||i.trim()==="")return null;let s=Number(i);return Number.isFinite(s)?s:null}collectRequireOneGroups(){let e=this.form.dataset.jvErrorRequireone||this.messages.requireOne,t
1=(i)=>i.value.trim()!=="";this.groupBy("jvRequireOne").forEach((i)=>{let s=i.filter((a)=>!a.dataset.jvRequireOneAll),r=new Map;i.filter((a)=>a.dataset.jvRequireOneAll).forEach((a)=>{let n=a.dataset.jvRequireOneAll;if(!r.has(n))r.set(n,[]);r.get(n).push(a)});let o=()=>s.some(t)||[...r.values()].some((a)=>a.every(t)),l=[...r.values()].map((a)=>a[0]),d=i.filter((a)=>s.includes(a)||l.includes(a));d.forEach((a)=>{this.addRule(a,{validator:()=>!this.validator.isSubmitted||o(),errorMessage:e})}),this.requireOneGroups.push({members:i,clusters:r,displayFields:d})})}highlightRequireOneGroups(){let e=(t)=>t.value.trim()!=="";this.requireOneGroups.forEach(({members:t,clusters:i,displayFields:s})=>{let r=s[0].getAttribute("aria-invalid")==="true",o=[];if(r){let l=[...i.values()].find((d)=>d.some(e));o=l?l.filter((d)=>!e(d)):t}t.forEach((l)=>{l.classList.toggle("just-validate-error-field",o.includes(l))})})}commitFields(){this.rulesByField.forEach((e,t)=>{let i=t.dataset.jvErrorsContainer?{errorsContainer:t.dataset.jvErrorsContainer}:void 0;this.validator.addField(`#${this.ensureId(t)}`,e,i),this.registerField(t)})}groupBy(e){let t=`data-${e.replace(/[A-Z]/g,(s)=>`-${s.toLowerCase()}`)}`,i=new Map;return this.form.querySelectorAll(`[${t}]`).forEach((s)=>{let r=s.dataset[e];
1if(!i.has(r))i.set(r,[]);i.get(r).push(s)}),i}bindBlurRevalidation(){let e=this.requireOneGroups.flatMap((t)=>t.displayFields);this.fields.forEach((t)=>{t.addEventListener("change",()=>{let i=new Set([t,...e]);Promise.all([...i].map((s)=>this.validator.revalidateField(`#${s.id}`).catch(()=>{}))).then(()=>this.refresh())})})}syncAria(){this.fields.forEach((e)=>{let t=e.classList.contains("just-validate-error-field"),i=`${e.id}-error`;if(e.setAttribute("aria-invalid",String(t)),e.value.trim()==="")e.classList.remove("just-validate-success-field");let s=this.errorLabel(e);if(t&&s)s.id=i,s.setAttribute("role","alert"),this.describedBy(e,i,!0);else this.describedBy(e,i,!1)})}errorLabel(e){let t=this.validator.fields,i=this.validator.errorLabels;if(t&&i){let r=Object.keys(t).find((o)=>t[o].elem===e);if(r)return i[r]||null}let s=e.dataset.jvErrorsContainer?this.form.querySelector(e.dataset.jvErrorsContainer):e.parentElement;return s?s.querySelector(".just-validate-error-label"):null}describedBy(e,t,i){let s=(e.getAttribute("aria-describedby")||"").split(/\s+/).filter((r)=>r&&r!==t);if(i)s.push(t);if(s.length>0)e.setAttribute("aria-describedby",s.join(" "));else e.removeAttribute("aria-describedby")}message(e,t){return e.getAttribute(`data-jv-error-${t.toLowerCase()}`)||this.messages[t]}diagnoseEmail(e,t){let i=String(t).trim(),s=this.messages.emailHints||{},r=(i.match(/@/g)||[]).length;if(/\s/.test(i))return s.hasSpace;if(r===0)return s.missingAt;if(r>1)return s.multipleAt;let o=i.indexOf("@"),l=i.slice(0,o),d=i.slice(o+1);if(l==="")return s.missingLocal;if(d==="")return s.missingDomain;if(!d.includes("."))return s.missingDot;return this.message(e,"email")}ensureId(e){if(!e.id)this.generatedIds=(this.generatedIds||0)+1,e.id=`jv-field-${this.generatedIds}`;return e.id}registerField(e){if(!this.fields.includes(e))this.fields.push(e)}}var I=()=>{document.querySelectorAll("form[data-gcm-validate]").forEach((e)=>{if(e.dataset.gcmValidateReady)return;e.dataset.gcmValidateReady="1",new E(e)})};if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",I);else I();})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.