PageSourceSearch

https://heictojpg.im/_astro/HeicConverter.astro_astro_type_script_index_0_lang.CHlzZh6C.js

js heictojpg.im collected 2026-10-05 18:06:50 UTC 24,451 bytes, 1 lines download raw bytes

1const __vite__mapDeps=(e,t=__vite__mapDeps,n=t.f||(t.f=["_astro/heic2any.BeYNQ1J5.js","_astro/_commonjsHelpers.Cpj98o6Y.js","_astro/jszip.min.Calr8H_w.js","_astro/_commonjs-dynamic-modules.TDtrdbi3.js"]))=>e.map((e=>n[e]));import{_ as ie,g as je,t as $,f as X,d as Ce,r as de,s as R,a as ee,e as fe,c as Fe,D as $e,i as he,b as Pe,m as K,h as W,j as De,k as Re,l as Te,o as qe,n as Oe,p as Se,q as te,u as Ve,v as ge,w as pe,x as Ge,y as Ne,z as He,A as Qe,C as we}from"./reveal-work-area.ByhkTpeS.js";let se=null;function Ze(e){return Number.isFinite(e)?Math.max(1,Math.min(100,Math.round(e))):92}async function Ke(){return se||(se=(async()=>{const[{default:e},{initEmscriptenModule:t}]=await Promise.all([ie((()=>import("./avif_enc.STNH8sfm.js")),[]),ie((()=>import("./utils.CPJ2ECJU.js")),[])]),n=await t(e,void 0,{locateFile:e=>e.endsWith(".wasm")?"/wasm/avif_enc.wasm":e});return async(e,t)=>{const r=n.encode(new Uint8Array(e.data.buffer),e.width,e.height,{quality:Ze(t),qualityAlpha:-1,denoiseLevel:0,tileColsLog2:0,tileRowsLog2:0,speed:8,subsample:1,chromaDeltaQ:!1,sharpness:0,tune:0,enableSharpYUV:!1,bitDepth:8});if(!r)throw new Error("AVIF encode failed");return r.buffer}})()),se}function We(e){if(e.length<12)return!1;const t=String.fromCharCode(e[4],e[5],e[6],e[7]),n=String.fromCharCode(e[8],e[9],e[10],e[11]);return"ftyp"===t&&("avif"===n||"avis"===n)}async function Je(e,t){const n=await createImageBitmap(e),r=document.createElement("canvas");r.width=n.width,r.height=n.height;const i=r.getContext("2d");if(!i)throw n.close(),new Error("Canvas 2D context unavailable");i.drawImage(n,0,0);const a=i.getImageData(0,0,r.width,r.height);n.close();const o=await(await Ke())(a,t),s=new Blob([o],{type:"image/avif"});if(s.size<16)throw new Error("AVIF encode produced an empty file");if(!We(new Uint8Array(await s.slice(0,12).arrayBuffer())))throw new Error("AVIF encode did not produce an AVIF file");return s}var Ye={trailer:59};function ze(e=256){let t=0,n=new Uint8Array(e);return{get buffer(){return n.buffer},reset(){t=0},bytesView:()=>n.subarray(0,t),bytes:()=>n.slice(0,t),writeByte(e){r(t+1),n[t]=e,t++},writeBytes(e,i=0,a=e.length){r(t+a);for(let r=0;r<a;r++)n[t++]=e[r+i]},writeBytesView(e,i=0,a=e.byteLength){r(t+a),n.set(e.subarray(i,i+a),t),t+=a}};function r(e){var r=n.length;if(r>=e)return;e=Math.max(e,r*(r<1048576?2:1.125)>>>0),0!=r&&(e=Math.max(e,256));let i=n;n=new Uint8Array(e),t>0&&n.set(i.subarray(0,t),0)}}var ce=12,me=5003,Xe=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function et(e,t,n,r,i=ze(512),a=new Uint8Array(256),o=new Int32Array(me),s=new Int32Array(me)){let c=o.length,l=Math.max(2,r);a.fill(0),s.fill(0),o.fill(-1);let u=0,d=0,f=l+1,h=f,m=!1,g=h,w=(1<<g)-1,p=1<<f-1,y=p+1,b=p+2,_=0,v=n[0],k=0;for(let e=c;e<65536;e*=2)++k;k=8-k,i.writeByte(l),E(p);let B=n.length;for(let e=1;e<B;e++)e:{let t=n[e],r=(t<<ce)+v,i=t<<k^v;if(o[i]===r){v=s[i];break e}let a=0===i?1:c-i;for(;o[i]>=0;)if(i-=a,i<0&&(i+=c),o[i]===r){v=s[i];break e}E(v),v=t,b<1<<ce?(s[i]=b++,o[i]=r):(o.fill(-1),b=p+2,m=!0,E(p))}return E(v),E(y),i.writeByte(0),i.bytesView();function E(e){for(u&=Xe[d],d>0?u|=e<<d:u=e,d+=g;d>=8;)a[_++]=255&u,_>=254&&(i.writeByte(_),i.writeBytesView(a,0,_),_=0),u>>=8,d-=8;if((b>w||m)&&(m?(g=h,w=(1<<g)-1,m=!1):(++g,w=g===ce?1<<g:(1<<g)-1)),e==y){for(;d>0;)a[_++]=255&u,_>=254&&(i.writeByte(_),i.writeBytesView(a,0,_),_=0),u>>=8,d-=8;_>0&&(i.writeByte(_),i.writeBytesView(a,0,_),_=0)}}}var tt=et;function Ie(e,t,n){return e<<8&63488|t<<2&992|n>>3}function Ae(e,t,n,r){return e>>4|240&t|(240&n)<<4|(240&r)<<8}function ke(e,t,n){return e>>4<<8|240&t|n>>4}function ne(e,t,n){return e<t?t:e>n?n:e}function ae(e){return e*e}function be(e,t,n){var r=0,i=1e100;let a=e[t],o=a.cnt;a.ac;let s=a.rc,c=a.gc,l=a.bc;for(var u=a.fw;0!=u;u=e[u].fw){let t=e[u],n=t.cnt,a=o*n/(o+n);if(!(a>=i)){var d=0;!((d+=a*ae(t.rc-s))>=i)&&(!((d+=a*ae(t.gc-c))>=i)&&(!((d+=a*ae(t.bc-l))>=i)&&(i=d,r=u)))}}a.err=i,a.nn=r}function le(){return{ac:0,rc:0,gc:0,bc:0,cnt:0,nn:0,fw:0,bk:0,tm:0,mtm:0,err:0}}function nt(e,t){let n=new Array("rgb444"===t?4096:65536),r=e.length;if("rgba4444"===t)for(let t=0;t<r;++t){let r=e[t],i=r>>24&255,a=r>>16&255,o=r>>8&255,s=255&r,c=Ae(s,o,a,i),l=c in n?n[c]:n[c]=le();l.rc+=s,l.gc+=o,l.bc+=a,l.ac+=i,l.cnt++}else if("rgb444"===t)for(let t=0;t<r;++t){let r=e[t],i=r>>16&255,a=r>>8&255,o=255&r,s=ke(o,a,i),c=s in n?n[s]:n[s]=le();c.rc+=o,c.gc+=a,c.bc+=i,c.cnt++}else for(let t=0;t<r;++t){let r=e[t],i=r>>16&255,a=r>>8&255,o=255&r,s=Ie(o,a,i),c=s in n?n[s]:n[s]=le();c.rc+=o,c.gc+=a,c.bc+=i,c.cnt++}return n}function rt(e,t,n={}){let{format:r="rgb565",clearAlpha:i=!0,clearAlphaColor:a=0,clearAlphaThreshold:o=0,oneBitAlpha:s=!1}=n;if(!e||!e.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(e instanceof Uint8Array||e instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");let c=new Uint32Array(e.buffer),l=!1!==n.useSqrt,u="rgba4444"===r,d=nt(c,r),f=d.length,h=f-1,m=new Uint32Array(f+1);for(var g=0,w=0;w<f;++w){let e=d[w];if(null!=e){var p=1/e.cnt;
1u&&(e.ac*=p),e.rc*=p,e.gc*=p,e.bc*=p,d[g++]=e}}ae(t)/g<.022&&(l=!1);for(w=0;w<g-1;++w)d[w].fw=w+1,d[w+1].bk=w,l&&(d[w].cnt=Math.sqrt(d[w].cnt));var y,b,_;for(l&&(d[w].cnt=Math.sqrt(d[w].cnt)),w=0;w<g;++w){be(d,w);var v=d[w].err;for(b=++m[0];b>1&&!(d[y=m[_=b>>1]].err<=v);b=_)m[b]=y;m[b]=w}var k=g-t;for(w=0;w<k;){for(var B;;){var E=m[1];if((B=d[E]).tm>=B.mtm&&d[B.nn].mtm<=B.tm)break;B.mtm==h?E=m[1]=m[m[0]--]:(be(d,E),B.tm=w);v=d[E].err;for(b=1;(_=b+b)<=m[0]&&(_<m[0]&&d[m[_]].err>d[m[_+1]].err&&_++,!(v<=d[y=m[_]].err));b=_)m[b]=y;m[b]=E}var z=d[B.nn],I=B.cnt,j=z.cnt;p=1/(I+j);u&&(B.ac=p*(I*B.ac+j*z.ac)),B.rc=p*(I*B.rc+j*z.rc),B.gc=p*(I*B.gc+j*z.gc),B.bc=p*(I*B.bc+j*z.bc),B.cnt+=z.cnt,B.mtm=++w,d[z.bk].fw=z.fw,d[z.fw].bk=z.bk,z.mtm=h}let U=[];var A=0;for(w=0;;++A){let e=ne(Math.round(d[w].rc),0,255),t=ne(Math.round(d[w].gc),0,255),n=ne(Math.round(d[w].bc),0,255),r=255;u&&(r=ne(Math.round(d[w].ac),0,255),s&&(r=r<=("number"==typeof s?s:127)?0:255),i&&r<=o&&(e=t=n=a,r=0));let c=u?[e,t,n,r]:[e,t,n];if(ot(U,c)||U.push(c),0==(w=d[w].fw))break}return U}function ot(e,t){for(let n=0;n<e.length;n++){let r=e[n],i=r[0]===t[0]&&r[1]===t[1]&&r[2]===t[2],a=!(r.length>=4&&t.length>=4)||r[3]===t[3];if(i&&a)return!0}return!1}function at(e,t,n="rgb565"){if(!e||!e.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(e instanceof Uint8Array||e instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");if(t.length>256)throw new Error("applyPalette() only works with 256 colors or less");let r=new Uint32Array(e.buffer),i=r.length,a="rgb444"===n?4096:65536,o=new Uint8Array(i),s=new Array(a);if("rgba4444"===n)for(let e=0;e<i;e++){let n=r[e],i=n>>24&255,a=n>>16&255,c=n>>8&255,l=255&n,u=Ae(l,c,a,i),d=u in s?s[u]:s[u]=it(l,c,a,i,t);o[e]=d}else{let e="rgb444"===n?ke:Ie;for(let n=0;n<i;n++){let i=r[n],a=i>>16&255,c=i>>8&255,l=255&i,u=e(l,c,a),d=u in s?s[u]:s[u]=st(l,c,a,t);o[n]=d}}return o}function it(e,t,n,r,i){let a=0,o=1e100;for(let s=0;s<i.length;s++){let c=i[s],l=V(c[3]-r);l>o||(l+=V(c[0]-e),l>o||(l+=V(c[1]-t),l>o||(l+=V(c[2]-n),!(l>o)&&(o=l,a=s))))}return a}function st(e,t,n,r){let i=0,a=1e100;for(let o=0;o<r.length;o++){let s=r[o],c=V(s[0]-e);c>a||(c+=V(s[1]-t),c>a||(c+=V(s[2]-n),!(c>a)&&(a=c,i=o)))}return i}function V(e){return e*e}function ct(e={}){let{initialCapacity:t=4096,auto:n=!0}=e,r=ze(t),i=new Uint8Array(256),a=new Int32Array(5003),o=new Int32Array(5003),s=!1;return{reset(){r.reset(),s=!1},finish(){r.writeByte(Ye.trailer)},bytes:()=>r.bytes(),bytesView:()=>r.bytesView(),get buffer(){return r.buffer},get stream(){return r},writeHeader:c,writeFrame(e,t,l,u={}){let{transparent:d=!1,transparentIndex:f=0,delay:h=0,palette:m=null,repeat:g=0,colorDepth:w=8,dispose:p=-1}=u,y=!1;if(n?s||(y=!0,c(),s=!0):y=!!u.first,t=Math.max(0,Math.floor(t)),l=Math.max(0,Math.floor(l)),y){if(!m)throw new Error("First frame must include a { palette } option");ut(r,t,l,m,w),ye(r,m),g>=0&&dt(r,g)}let b=Math.round(h/10);lt(r,p,b,d,f);let _=!!m&&!y;ft(r,t,l,_?m:null),_&&ye(r,m),ht(r,e,t,l,w,i,a,o)}};function c(){Ue(r,"GIF89a")}}function lt(e,t,n,r,i){var a,o;e.writeByte(33),e.writeByte(249),e.writeByte(4),i<0&&(i=0,r=!1),r?(a=1,o=2):(a=0,o=0),t>=0&&(o=7&t),o<<=2,e.writeByte(o|a),q(e,n),e.writeByte(i||0),e.writeByte(0)}function ut(e,t,n,r,i=8){let a=128|i-1<<4|ue(r.length)-1;q(e,t),q(e,n),e.writeBytes([a,0,0])}function dt(e,t){e.writeByte(33),e.writeByte(255),e.writeByte(11),Ue(e,"NETSCAPE2.0"),e.writeByte(3),e.writeByte(1),q(e,t),e.writeByte(0)}function ye(e,t){let n=1<<ue(t.length);for(let r=0;r<n;r++){let n=[0,0,0];r<t.length&&(n=t[r]),e.writeByte(n[0]),e.writeByte(n[1]),e.writeByte(n[2])}}function ft(e,t,n,r){if(e.writeByte(44),q(e,0),q(e,0),q(e,t),q(e,n),r){let t=0,n=0,i=ue(r.length)-1;e.writeByte(128|t|n|i)}else e.writeByte(0)}function ht(e,t,n,r,i=8,a,o,s){tt(n,r,t,i,e,a,o,s)}function q(e,t){e.writeByte(255&t),e.writeByte(t>>8&255)}function Ue(e,t){for(var n=0;n<t.length;n++)e.writeByte(t.charCodeAt(n))}function ue(e){return Math.max(Math.ceil(Math.log2(e)),1)}function gt(e){return Number.isFinite(e)?Math.max(60,Math.min(100,Math.round(e))):92}function pt(e){const t=gt(e);return Math.max(16,Math.min(256,Math.round(64+(t-60)/40*192)))}function wt(e){if(e.length<6)return!1;const t=String.fromCharCode(e[0],e[1],e[2],e[3],e[4],e[5]);return"GIF87a"===t||"GIF89a"===t}function Me(e,t,n){if(!e.length)throw new Error("GIF encode produced an empty file");const r=pt(t),i=ct();e.forEach(((t,a)=>{const o=t.data,s=rt(o,r,{format:"rgb565"}),c=at(o,s,"rgb565");i.writeFrame(c,t.width,t.height,{palette:s,delay:e.length>1?n:0,repeat:0===a?e.length>1?0:-1:void 0})})),i.finish();const a=i.bytes();if(a.byteLength<16)throw new Error("GIF encode produced an empty file");if(!wt(a))throw new Error("GIF encode did not produce a GIF file");const o=new Uint8Array(a.byteLength);return o.set(a),new Blob([o],{type:"image/gif"})}async function Le(e){const t=await createImageBitmap(e),n=document.createElement("canvas");n.width=t.width,n.height=t.height;const r=n.getContext("2d");if(!r)throw t.close(),new Error("Canvas 2D context unavailable");r.drawImage(t,0,0);const i=r.getImageData(0,0,n.width,n.height);return t.close(),i}async function mt(e,t){return Me([await Le(e)],t,0)}async function bt(e,t,n=100){if(!e.length)throw new Error("GIF encode produced an empty file");return Me(await Promise.all(e.map((e=>Le(e)))),t,n)}function yt(e){return e.length>=2&&66===e[0]&&77===e[1]}function _t(e){return 3*e+3>>2<<2}function vt(e){const t=0|e.width,n=0|e.height;if(t<=0||n<=0)throw new Error("BMP encode produced an empty file");const r=_t(t),i=r*n,a=54+i,o=new Uint8Array(a),s=new DataView(o.buffer,o.byteOffset,o.byteLength);o[0]=66,o[1]=77,s.setUint32(2,a,!0),s.setUint32(10,54,!0),s.setUint32(14,40,!0),s.setInt32(18,t,!0),s.setInt32(22,n,!0),s.setUint16(26,1,!0),s.setUint16(28,24,!0),s.setUint32(34,i,!0),s.setInt32(38,2835,!0),s.setInt32(42,2835,!0);const c=e.data;for(let e=0;e<n;e+=1){let i=54+(n-1-e)*r,a=e*t*4;for(let e=0;e<t;e+=1){const e=c[a],t=c[a+1],n=c[a+2],r=c[a+3];if(255===r)o[i]=n,o[i+1]=t,o[i+2]=e;else if(0===r)o[i]=255,o[i+1]=255,o[i+2]=255;else{const a=r/255,s=1-a;o[i]=Math.round(n*a+255*s),o[i+1]=Math.round(t*a+255*s),o[i+2]=Math.round(e*a+255*s)}i+=3,a+=4}}return o}async function Bt(e){const t=await createImageBitmap(e),n=document.createElement("canvas");n.width=t.width,n.height=t.height;const r=n.getContext("2d");if(!r)throw t.close(),new Error("Canvas 2D context unavailable");r.drawImage(t,0,0);const i=r.getImageData(0,0,n.width,n.height);return t.close(),i}async function Et(e){const t=vt(await Bt(e));if(t.byteLength<54)throw new Error("BMP encode produced an empty file");if(!yt(t))throw new Error("BMP encode did not produce a BMP file");return new Blob([t],{type:"image/bmp"})}
1const J=document.getElementById("converter"),k="png"===J?.dataset.outputFormat?"png":"webp"===J?.dataset.outputFormat?"webp":"avif"===J?.dataset.outputFormat?"avif":"gif"===J?.dataset.outputFormat?"gif":"bmp"===J?.dataset.outputFormat?"bmp":"jpg",G=k.toUpperCase(),xt="bmp"===k?"image/bmp":"gif"===k?"image/gif":"avif"===k?"image/avif":"webp"===k?"image/webp":"png"===k?"image/png":"image/jpeg",zt="png"===k?"heic_to_png":"webp"===k?"heic_to_webp":"avif"===k?"heic_to_avif":"gif"===k?"heic_to_gif":"bmp"===k?"heic_to_bmp":"heic_to_jpg";function P(e,t={}){try{window.__toolPerf?.send({tool_name:zt,event_name:e,...t})}catch{}}function N(e,t){try{const n=window.__toolPerf;return n?.buildFileMeta&&e?n.buildFileMeta(e,t):{}}catch{return{}}}const Y=je(),T=document.getElementById("htj-dropzone"),H=document.getElementById("htj-file-input"),_e=document.getElementById("htj-choose-btn"),ve=document.getElementById("htj-quality"),Be=document.getElementById("htj-quality-val"),re=document.getElementById("htj-status"),oe=document.getElementById("htj-results"),Q=document.getElementById("htj-file-list"),Ee=document.getElementById("htj-progress-text"),xe=document.getElementById("htj-size-text"),O=document.getElementById("htj-zip"),S=document.getElementById("htj-download-all"),It=document.getElementById("htj-clear"),At=document.getElementById("htj-add-more");if(T&&H&&_e&&Q){let e=function(e,t=!1){re&&(re.textContent=e,re.classList.toggle("is-error",t))},t=function(){return Fe(Number(ve?.value)||$e)},n=function(){H.click()},r=function(n){const r=[];let i=0;m=0;for(const e of n){if(!he(e)){r.push(Pe(e)),$("file_rejected",{ext:W(e.name),mime_bucket:K(e.type),size_bucket:R(e.size),input_bytes:e.size,reject_reason:"not_heic"}),P("error",{success:!1,error_code:"unsupported_format",fail_stage:"validate_format",...N(e)});continue}const t=De(e.size,Y,e.name);if("reject"===t.action){r.push(t.message),$("file_rejected",{ext:W(e.name),mime_bucket:K(e.type),size_bucket:R(e.size),input_bytes:e.size,reject_reason:"too_large"}),P("error",{success:!1,error_code:"file_too_large",fail_stage:"validate_size",error_detail:`hard_max tier=${Y.tier}`,...N(e)});continue}const n=Re({queuedBytes:u.reduce(((e,t)=>e+t.file.size),0),queuedCount:u.length,incomingBytes:e.size,profile:Y});if("reject"===n.action){r.push(n.message),m+=1,$("file_rejected",{ext:W(e.name),mime_bucket:K(e.type),size_bucket:R(e.size),input_bytes:e.size,reject_reason:"batch_too_large"});continue}const a=Te(e);if(d.has(a))continue;d.add(a);const o={id:a,file:e,status:"waiting",outputName:qe(e.name,f,k)};u.push(o),i+=1,P("image_selected",{...N(e)})}if(i){const e=n.reduce(((e,t)=>e+(he(t)?t.size:0)),0);$("files_added",{added_count:i,batch_size:u.length,quality:t(),input_bytes:e,size_bucket:R(e),concurrency:we})}r.length?e(r.slice(0,2).join(" ")+(r.length>2?` (+${r.length-2} more)`:""),!0):i&&e(`Converting ${i} file${1===i?"":"s"}…`),l(),I(),(i||r.length)&&Oe({results:i?oe:null,status:re})},i=function(e){e.outputUrl&&URL.revokeObjectURL(e.outputUrl),e.thumbUrl&&URL.revokeObjectURL(e.thumbUrl),e.outputUrl=void 0,e.thumbUrl=void 0,e.outputBlob=void 0},a=function(){const e=u.length,t=u.filter((e=>"done"===e.status)).length;Ee&&(Ee.textContent=Se(t,e));const n=u.reduce(((e,t)=>e+t.file.size),0),r=u.reduce(((e,t)=>e+(t.outputBytes||0)),0);xe&&(xe.textContent=e>0?`Input ${te(n)} · Output ${te(r)} · ${G}`:""),O&&(O.disabled=t<1),S&&(S.disabled=t<1);const i=document.getElementById("htj-format-switch");i&&(i.hidden=t<1)},o=function(e){return"done"===e?"done":"failed"===e?"failed":"converting"===e?"converting":"waiting"},s=function(e){let t=Q.querySelector(`[data-id="${CSS.escape(e.id)}"]`);t||(t=document.createElement("li"),t.className="htj-file-row",t.dataset.id=e.id,Q.appendChild(t));const n=[te(e.file.size)];e.width&&e.height&&n.push(`${e.width}×${e.height}`),e.outputBytes&&n.push(`→ ${te(e.outputBytes)} ${G}`),e.error&&n.push(e.error);const r=e.thumbUrl&&"done"===e.status?`<img class="htj-thumb" src="${e.thumbUrl}" alt="" width="48" height="48" loading="lazy" />`:'<div class="htj-thumb-placeholder">HEIC</div>',i=[];"done"===e.status&&e.outputUrl&&i.push(`<a class="htj-download-btn" href="${e.outputUrl}
1" download="${c(e.outputName)}" aria-label="Download ${c(e.outputName)}">Download ${G}</a>`),"failed"===e.status&&i.push(`<button type="button" class="htj-btn-link" data-retry="${c(e.id)}">Retry</button>`),i.push(`<button type="button" class="htj-btn-link danger" data-remove="${c(e.id)}">Remove</button>`),t.innerHTML=`\n        ${r}\n        <div class="htj-file-meta">\n          <div class="htj-file-name" data-results-title>${c("done"===e.status&&e.outputName?e.outputName:e.file.name)}\n            ${"done"===e.status?`<span class="htj-format-pill">${G}</span>`:""}\n            <span class="htj-badge ${o(e.status)}">${e.status}</span>\n          </div>\n          <div class="htj-file-sub">${c(n.join(" · "))}</div>\n        </div>\n        <div class="htj-row-actions">${i.join("")}</div>\n      `},c=function(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},l=function(){if(!u.length)return oe?.classList.add("hidden"),Q.innerHTML="",void a();oe?.classList.remove("hidden"),Q.innerHTML="";for(const e of u)s(e);a()};const u=[],d=new Set,f=new Set;let h=!1,m=0,g=!1,w=null,p=null;ve?.addEventListener("input",(()=>{Be&&(Be.textContent=String(t()))})),_e.addEventListener("click",(e=>{e.stopPropagation(),n()})),T.addEventListener("click",(e=>{e.target.closest("button")||n()})),T.addEventListener("keydown",(e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),n())})),At?.addEventListener("click",n),["dragenter","dragover"].forEach((e=>{T.addEventListener(e,(e=>{e.preventDefault(),e.stopPropagation(),T.classList.add("is-dragover")}))})),["dragleave","drop"].forEach((e=>{T.addEventListener(e,(e=>{e.preventDefault(),e.stopPropagation(),T.classList.remove("is-dragover")}))})),T.addEventListener("drop",(e=>{const t=e.dataTransfer;t?.files?.length&&r(Array.from(t.files))})),H.addEventListener("change",(()=>{H.files?.length&&r(Array.from(H.files)),H.value=""})),It?.addEventListener("click",(()=>{g=!0,$("queue_cleared",{batch_size:u.length});for(const e of u)i(e);u.length=0,d.clear(),f.clear(),g=!1,h=!1,e("Queue cleared."),l(),X()}));let y=!1;async function U(){return w||(w=ie((()=>import("./heic2any.BeYNQ1J5.js").then((e=>e.h))),__vite__mapDeps([0,1])).then((e=>{const t=[e.default?.default,e.default,e.heic2any,e,window.heic2any].find((e=>"function"==typeof e));if(!t)throw new TypeError("HEIC converter failed to load");return t}))),w}async function E(){return p||(p=ie((()=>import("./jszip.min.Calr8H_w.js").then((e=>e.j))),__vite__mapDeps([2,1,3])).then((e=>e.default||e))),p}async function L(e,t){const n=await createImageBitmap(e),r=document.createElement("canvas");r.width=n.width,r.height=n.height;const i=r.getContext("2d");if(!i)throw n.close(),new Error("Canvas 2D context unavailable");i.drawImage(n,0,0),n.close();const a=await new Promise(((e,n)=>{r.toBlob((t=>t?e(t):n(new Error("WebP encode failed"))),"image/webp",t)}));if(a.size<16)throw new Error("WebP encode produced an empty file");return a}async function D(e,n){e.status="converting",s(e);const r=performance.now(),i=t();try{const t=await U();let a,o=!1;if("webp"===k||"avif"===k||"gif"===k||"bmp"===k){const n=await t({blob:e.file,toType:"image/png"});o=Array.isArray(n);const r=Array.isArray(n)?n:[n],s=r[0];a="avif"===k?await Je(s,i):"gif"===k?r.length>1?await bt(r,i):await mt(s,i):"bmp"===k?await Et(s):await L(s,ge(i))}else{const n={blob:e.file,toType:xt};"jpg"===k&&(n.quality=ge(i));const r=await t(n);o=Array.isArray(r),a=o?r[0]:r}e.outputBlob=a,e.outputBytes=a.size,e.outputUrl=URL.createObjectURL(a),e.thumbUrl=e.outputUrl,await new Promise((t=>{const n=new Image;n.onload=()=>{e.width=n.naturalWidth,e.height=n.naturalHeight,t()},n.onerror=()=>t(),n.src=e.outputUrl})),e.status="done",e.error=void 0;const s=Math.round(performance.now()-r);$("convert_ok",{ext:W(e.file.name),mime_bucket:K(e.file.type),size_bucket:R(e.file.size),out_size_bucket:R(a.size),input_bytes:e.file.size,output_bytes:a.size,width:e.width,height:e.height,megapixels:Ne(e.width,e.height),ratio_pct:de(e.file.size,a.size),mp_bucket:Ge(e.width,e.height),width_bucket:pe(e.width),height_bucket:pe(e.height),quality:i,duration_ms:s,batch_size:u.length,concurrency:n.concurrency,queue_index:n.queueIndex,multi_frame:o?1:0,is_retry:n.isRetry?1:0});const c={width:e.width,height:e.height};P("image_decoded",{duration_ms:s,...N(e.file,c)}),P("generate_done",{duration_ms:s,output_count:1,export_format:k,...N(e.file,c),output_size_bucket:window.__toolPerf?.bucketFileSize?.(a.size)})}catch(t){e.status="failed",e.failKind=He(t),e.error=Qe(t,{fileLabel:`“${e.file.name}”`,kind:"heic"});const a=fe(t),o="too_large"===e.failKind||"memory"===a;$("convert_fail",{ext:W(e.file.name),mime_bucket:K(e.file.type),size_bucket:R(e.file.size),input_bytes:e.file.size,quality:i,duration_ms:Math.round(performance.now()-r),batch_size:u.length,concurrency:n.concurrency,queue_index:n.queueIndex,is_retry:n.isRetry?1:0,error_code:o?"memory":a,error_message:ee(t)}),P("error",{success:!1,error_code:o?"device_insufficient":"abort"===a?"image_read_aborted":"image_load_failed",fail_stage:"abort"===a?"abort":"decode",duration_ms:Math.round(performance.now()-r),error_message:ee(t),error_detail:o?`tier=${Y.tier} suggest_mb=${Math.round(Y.suggestMaxBytes/1024/1024)}`:void 0,...N(e.file)})}s(e),a()}async function I(t={}){if(h)return;for(h=!0,g=!1,oe?.classList.remove("hidden");!g;){const e=u.find((e=>"waiting"===e.status));if(!e)break;const n=u.indexOf(e);await D(e,{concurrency:we,queueIndex:n<0?0:n,isRetry:!!t.isRetry})}h=!1;const n=u.filter((e=>"failed"===e.status)),r=u.filter((e=>"done"===e.status)).length,i=Ve({failed:n.length,done:r,queued:u.length,memoryFailed:n.filter((e=>"too_large"===e.failKind)).length,skipped:m,readyLabel:`Done. ${r} ${G} file${1===r?"":"s"} ready.`});i&&e(i.message,i.isError),a(),X()}S?.addEventListener("click",(async()=>
1{if(y)return;const t=u.filter((e=>"done"===e.status&&e.outputUrl)).map((e=>({url:e.outputUrl,name:e.outputName})));if(!t.length)return;y=!0;const n=S.textContent;S.textContent="Saving…",S.disabled=!0,O&&(O.disabled=!0);try{await Ce(t,{onEach:(t,n)=>e(`Saving ${t} of ${n}…`)}),e(1===t.length?"Downloaded 1 file.":`Downloaded ${t.length} files one at a time. Use Download ZIP if your browser blocked some.`),$("download_all_files",{output_count:t.length}),P("download_clicked",{export_format:"each",output_count:t.length})}catch{e("Downloads did not start. Use Download ZIP, or save each file.",!0)}finally{S.textContent=n||"Download all",y=!1,a()}})),O?.addEventListener("click",(async()=>{const t=u.filter((e=>"done"===e.status&&e.outputBlob));if(!t.length)return;const n=performance.now();try{O.disabled=!0,e("Building ZIP…");const r=new(await E());for(const e of t)r.file(e.outputName,e.outputBlob);const i=await r.generateAsync({type:"blob"}),a=URL.createObjectURL(i),o=document.createElement("a");o.href=a,o.download=`heic-to-${k}-${t.length}-files.zip`,document.body.appendChild(o),o.click(),o.remove(),setTimeout((()=>URL.revokeObjectURL(a)),2e3),e(`Downloaded ZIP with ${t.length} ${G} file${1===t.length?"":"s"}.`);const s=t.reduce(((e,t)=>e+t.file.size),0),c=Math.round(performance.now()-n);$("zip_ok",{batch_size:t.length,duration_ms:c,input_bytes:s,output_bytes:i.size,size_bucket:R(s),out_size_bucket:R(i.size),ratio_pct:de(s,i.size)}),P("zip_done",{duration_ms:c,output_count:t.length,export_format:k,output_size_bucket:window.__toolPerf?.bucketFileSize?.(i.size)}),P("download_clicked",{export_format:"zip",output_count:t.length}),X()}catch(r){e(`Could not create ZIP: ${r instanceof Error?r.message:"unknown error"}. Try single-file download.`,!0),$("zip_fail",{batch_size:t.length,duration_ms:Math.round(performance.now()-n),error_code:fe(r),error_message:ee(r)}),P("error",{success:!1,error_code:"zip_failed",fail_stage:"zip",duration_ms:Math.round(performance.now()-n),error_message:ee(r),output_count:t.length}),X()}finally{O.disabled=!1,a()}})),Q.addEventListener("click",(e=>{const t=e.target;t.closest("a[download]")&&($("download_one",{batch_size:u.filter((e=>"done"===e.status)).length}),P("download_clicked",{export_format:k}));const n=t.getAttribute("data-retry"),r=t.getAttribute("data-remove");if(n){const e=u.find((e=>e.id===n));e&&(i(e),e.status="waiting",e.error=void 0,s(e),I({isRetry:!0}))}if(r){const e=u.findIndex((e=>e.id===r));e>=0&&(i(u[e]),d.delete(u[e].id),u.splice(e,1),l())}}))}

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.