/g,">").replace(/"/g,""").replace(/'/g,"'")}async function p(e){return new Promise(((n,t)=>{const s=new FileReader;s.onload=async function(s){try{const t=await a(s.target.result,e.name);n(t)}catch(e){t(e)}},s.onerror=()=>t(new Error(`Failed to read file ${e.name}`)),s.readAsText(e)}))}function u(n,t){const s=document.createElement("div");s.className="preview-item";const o=document.createElement("div");o.className="d-flex justify-content-between align-items-center mb-2",o.innerHTML=`\n
${n.fileName}
\n ${n.wasModified?'Modified':'Valid'}\n
\n `;const i=document.createElement("div");if(n.errorPosition)i.appendChild(function(e,n){const t=document.createElement("div");t.className="editor-container";const s=document.createElement("div");s.className="line-numbers";const o=e.split("\n");s.innerHTML=o.map(((e,n)=>`${n+1}
`)).join("");const i=document.createElement("div");return i.className="editor-content json-editor",n&&n.line?i.innerHTML=o.map(((e,t)=>{if(t+1===n.line){let t=d(e);if(n.column){const s=d(e.substring(0,n.column-1)),o=d(e.substring(n.column-1,n.column)),i=d(e.substring(n.column));t=`\n ${s}\n \n ${o}\n Error: ${d(n.message)}\n \n ${i}\n `}return`${t}
`}return`${d(e)}
`})).join(""):i.textContent=e,t.appendChild(s),t.appendChild(i),t}(n.processedText,n.errorPosition));else{const e=document.createElement("div");e.className="editor-container";const t=document.createElement("div");t.className="editor-content json-editor",t.textContent=n.processedText,e.appendChild(t),i.appendChild(e)}const r=document.createElement("div");r.className="preview-info",r.innerHTML=`\n ${g(n.blob.size)}
\n ${n.errorPosition?`Error at line ${n.errorPosition.line}, column ${n.errorPosition.column}
`:""}\n `;const l=document.createElement("div");l.className="issues-list",l.innerHTML=n.issues.length>0?`Processing Notes:
${n.issues.join("
")}`:"No changes needed";const a=document.createElement("div");a.className="preview-actions",a.innerHTML=`\n \n \n `,s.appendChild(o),s.appendChild(i),s.appendChild(r),s.appendChild(l),s.appendChild(a),e.previewContainer.appendChild(s),s.querySelector('.preview-btn[title="Download"]').addEventListener("click",(function(){m(n.blob,n.fileName)})),s.querySelector('.preview-btn[title="Copy to Clipboard"]').addEventListener("click",(function(){navigator.clipboard.writeText(n.processedText).then((()=>{f(`Copied ${n.fileName} to clipboard`,"success")})).catch((()=>{f("Failed to copy to clipboard","error")}))}))}function m(e,n,t="application/json"){const s=URL.createObjectURL(e),o=document.createElement("a");o.href=s,o.download=n,document.body.appendChild(o),o.click(),setTimeout((()=>{document.body.removeChild(o),URL.revokeObjectURL(s)}),100)}function g(e){if(0===e)return"0 Bytes";const n=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,n)).toFixed(1))+" "+["Bytes","KB","MB"][n]}function f(n,t){e.statusMessage&&(e.statusMessage.textContent=n,e.statusMessage.className="status-message "+t,setTimeout((()=>{e.statusMessage.className="status-message",e.statusMessage.textContent=""}),5e3))}["dragenter","dragover","dragleave","drop"].forEach((n=>{e.dropzone.addEventListener(n,s,!1)})),["dragenter","dragover"].forEach((n=>{e.dropzone.addEventListener(n,o,!1)})),["dragleave","drop"].forEach((n=>{e.dropzone.addEventListener(n,i,!1)})),e.dropzone.addEventListener("drop",(function(e){const n=e.dataTransfer.files;n.length>0&&r(n)}),!1),e.dropzone.addEventListener("click",(()=>e.fileInput.click())),e.fileInput.addEventListener("change",(function(){this.files.length>0&&r(this.files)})),e.jsonTextInput.addEventListener("input",(function(){this.value.trim()||n.length>0?e.cleanBtn.disabled=!1:e.cleanBtn.disabled=!0})),e.cleanBtn.addEventListener("click",(async function(){if(0!==n.length||e.jsonTextInput.value.trim()){e.cleanBtn.disabled=!0,e.cleanBtn.innerHTML=' Processing...',e.progressContainer.style.display="block",e.progressFill.style.width="0%",e.progressText.textContent=`Processing 0 of ${n.length+(e.jsonTextInput.value.trim()?1:0)} items`;try{if(t=[],e.jsonTextInput.value.trim()){const n=e.jsonTextInput.value.trim(),s=await a(n,"input.json");t.push(s)}for(let s=0;s6){const n=document.createElement("div");n.className="preview-item d-flex align-items-center justify-content-center",n.style.height="150px",n.innerHTML=`+${t.length-6} more items
`,e.previewContainer.appendChild(n)}}catch(e){console.error("Error processing JSON:",e),f(`Error processing JSON: ${e.message}`,"error")}finally{e.cleanBtn.disabled=!e.jsonTextInput.value.trim()&&0===n.length,e.cleanBtn.innerHTML=' Process JSON',e.progressContainer.style.display="none"}}else f("No JSON data to process","error")})),e.downloadAllBtn.addEventListener("click",(function(){if(0!==t.length)if(e.progressContainer.style.display="block",e.progressFill.style.width="0%",e.progressText.textContent=`Preparing download 0 of ${t.length} files`,t.length>1){const n=new JSZip,s=n.folder("processed_json");t.forEach(((n,o)=>{s.file(n.fileName,n.blob);const i=Math.round((o+1)/t.length*100);e.progressFill.style.width=`${i}%`,e.progressText.textContent=`Preparing download ${o+1} of ${t.length} files`})),n.generateAsync({type:"blob"}).then((function(n){m(n,"processed_json.zip","application/zip"),e.progressContainer.style.display="none"}))}else m(t[0].blob,t[0].fileName),e.progressContainer.style.display="none";else f("No processed JSON to download","error")}))}))