1var m=Object.defineProperty;var u=(a,n,e)=>n in a?m(a,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[n]=e;var f=(a,n,e)=>u(a,typeof n!="symbol"?n+"":n,e);import{E as p}from"./index-20260917T125828-sh.js";const i={classes:{formGroup:"form-group",formControl:"form-control",formError:"form-error",labelTextAlt:"label-text-alt",textErrorContent:"text-error",inputError:"input--error",hidden:"is-hidden",inputIgnore:"input--ignore"},dataAttributes:{password:"password",passwordConfirmation:"passwordConfirmation"},inputTypes:["input","checkbox","textarea","select"]};class l extends p{constructor(){super(...arguments);f(this,"$forms",this.querySelectorAll("form"));f(this,"constantCheck",this.hasAttribute("data-constant-check"))}static createErrorLabel(e,s,r="error"){let t=e.querySelector("[data-error-content], [data-success-content]"),o=e.querySelector(".label:last-child");return s?(o!=null&&o.querySelector(".label-text")?(o=document.createElement("div"),o.className="label",e.appendChild(o)):o||(o=document.createElement("div"),o.className="label",e.appendChild(o)),t?(t.parentElement!==o&&o.appendChild(t),t.className=`label-text-alt ${r==="error"?i.classes.textErrorContent:"text-success"}`,r==="error"?(t.removeAttribute("data-success-content"),t.setAttribute("data-error-content","")):(t.removeAttribute("data-error-content"),t.setAttribute("data-success-content",""))):(t=document.createElement("span"),t.className=`label-text-alt ${r==="error"?i.classes.textErrorContent:"text-success"}`,t.setAttribute(r==="error"?"data-error-content":"data-success-content",""),o.appendChild(t)),t.textContent=s,t.classList.remove(i.classes.hidden),t):(t&&(t.remove(),o&&!o.querySelector(".label-text")&&o.remove()),null)}refreshInputError(e){const s=e.closest(`.${i.classes.formControl}`)??this._throwError("Input element or its parent not found");if(e.checkValidity())l.createErrorLabel(s),e.classList.remove(i.classes.inputError);else{let r="invalid-value";e.validity.valueMissing?r="required":e.validity.typeMismatch?r=e.type==="email"?"email":"url":e.validity.tooShort?r="short":e.validity.tooLong&&(r="long");const t=window.formErrors[r]??e.validationMessage;l.createErrorLabel(s,t),e.classList.add(i.classes.inputError)}}checkForm(e){let s=!0,r=null;for(const t of e.elements)if(!(t.classList.contains(i.classes.inputIgnore)||!(t instanceof HTMLInputElement)&&!(t instanceof HTMLTextAreaElement)&&!(t instanceof HTMLSelectElement))){t.checkValidity()||(s=!1,r||(r=t));try{this.refreshInputError(t)}catch(o){console.error("Skipping validation because: error for an input:",o)}}if(!s&&r){const t=r.closest(`.${i.classes.formControl}`);if(t){t.scrollIntoView({behavior:"smooth",block:"start"});const c=t.getBoundingClientRect().top+window.scrollY-120;window.scrollTo({top:c,behavior:"smooth"})}else{r.scrollIntoView({behavior:"smooth",block:"start"});const c=r.getBoundingClientRect().top+window.scrollY-120;window.scrollTo({top:c,behavior:"smooth"})}}return s}onStart(){for(const e of this.$forms){e.setAttribute("novalidate","");const s=e.querySelectorAll("[data-pattern-sync]");for(const r of s){const t=r.dataset.patternSync;if(!t)continue;const o=e.querySelector(`[name="${t}"]`);o&&r.addEventListener("input",()=>{o.pattern=`^${r.value.split("").join("\\")}$`},{signal:this.signal})}this.constantCheck&&(e.addEventListener("input",r=>{(r.target instanceof HTMLInputElement||r.target instanceof HTMLTextAreaElement||r.target instanceof HTMLSelectElement)&&this.refreshInputError(r.target)},{signal:this.signal}),e.addEventListener("change",r=>{(r.target instanceof HTMLInputElement||r.target instanceof HTMLTextAreaElement||r.target instanceof HTMLSelectElement)&&this.refreshInputError(r.target)},{signal:this.signal})),e.addEventListener("submit",r=>{r.preventDefault(),this.checkForm(e)?(sessionStorage.setItem("last_form",e.id),e.removeAttribute("novalidate"),e.requestSubmit?e.requestSubmit():e.submit()):r.stopImmediatePropagation()},{signal:this.signal,capture:!0})}}}customElements.define("form-controller",l);export{l as FormController,i as checkFormConfig};
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.