1import{a as o}from"./main-DxcxEap_.js";import"./module.esm-Bq2KT4vH.js";class r{dom;values={};hasSubmitted=!1;count={total:0,filled:0,empty:0};lockedInput=null;constructor(t){this.dom={container:t,inputs:Array.from(t.querySelectorAll("input[name]:not([hidden])")),selects:Array.from(t.querySelectorAll("select")),reset:t.querySelector("button[type=reset]")},this.count.total=this.dom.inputs.length+this.dom.selects.length,this.dom.inputs.forEach(e=>{this.setValue(e)}),this.dom.selects.forEach(e=>{this.setValue(e)}),this.initialize()}setValue=t=>{const{name:e,value:s}=t;s?this.values[e]=s:delete this.values[e]};onInputChange=t=>{const e=t.target;this.setValue(e),this.hasSubmitted?e.value===""&&this.lockedInput?(this.lockedInput.readOnly=!1,this.lockedInput.value="",this.lockedInput.dispatchEvent(new Event("change")),this.lockedInput=null,this.hasSubmitted=!1,this.setValue(e)):this.request():(this.count.filled=Object.keys(this.values).length,this.count.empty=this.count.total-this.count.filled,this.count.empty===1&&this.request())};debouncedInputChange=o(200,this.onInputChange);request=async()=>{const t=this.dom.container.parentNode?.action??"",e=new URLSearchParams(this.values).toString(),s=`${t}?${e}&optional=true`,n=await fetch(s),l=await n.json();n.ok&&(this.dom.container.querySelectorAll(".input-validation-error").forEach(i=>i.classList.remove("input-validation-error")),this.dom.container.querySelectorAll(".field-validation-error").forEach(i=>{i.textContent=""})),this.showResult(l.result)};showResult=t=>{const e=this.hasSubmitted?this.lockedInput:this.getEmptyElement();if(e){const s=e.step?.split(".")?.[1]?.length??1;e.value=t.toFixed(s),e.readOnly=!0,e.dispatchEvent(new Event("change")),this.lockedInput=e,this.hasSubmitted=!0}};getEmptyElement=()=>this.dom.inputs.filter(t=>!t.value)[0];resetForm=()=>{this.dom.inputs.forEach(t=>{t.value="",t.readOnly=!1,t.previousElementSibling&&t.previousElementSibling instanceof HTMLInputElement&&(t.previousElementSibling.readOnly=!1),this.hasSubmitted=!1,this.lockedInput=null,this.values={}})};initialize(){this.dom.inputs.forEach(t=>{t.addEventListener("input",this.debouncedInputChange)}),this.dom.selects.forEach(t=>{t.addEventListener("change",this.onInputChange)}),this.dom.reset?.addEventListener("click",this.resetForm)}}export{r as Calculation};
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.