@hkonda/loco-translate 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,7 +58,7 @@ Text to translate: "{{TEXT}}"`;br(async()=>{var we;try{const be=JSON.parse(i.set
58
58
  @keyframes loco-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.7; transform: scale(0.92); } }
59
59
  #loco-spinner-ring { animation: loco-spin 1.2s linear infinite; transform-origin: 40px 40px; }
60
60
  #loco-center-parrot { animation: loco-pulse 2s ease-in-out infinite; transform-origin: 40px 40px; }
61
- `),l=pe("g"),o=pe("circle"),s=pe("path"),u=pe("path"),f=pe("path"),d=pe("g"),h=pe("circle"),g=pe("circle"),p=pe("circle"),_=pe("circle"),m=pe("circle"),y=pe("circle"),v=pe("path"),w=pe("line"),C=pe("line"),x=pe("line"),A=pe("circle"),M=pe("circle"),z=pe("circle"),E=L(),P=b("p"),P.textContent="Creating backup…",a(o,"cx","40"),a(o,"cy","40"),a(o,"r","34"),a(o,"fill","none"),a(o,"stroke","#2a3040"),a(o,"stroke-width","4"),a(s,"d","M40 6 A34 34 0 0 1 74 40"),a(s,"fill","none"),a(s,"stroke","#2ECC88"),a(s,"stroke-width","4"),a(s,"stroke-linecap","round"),a(u,"d","M74 40 A34 34 0 0 1 56 70"),a(u,"fill","none"),a(u,"stroke","#3A8FE0"),a(u,"stroke-width","4"),a(u,"stroke-linecap","round"),a(f,"d","M56 70 A34 34 0 0 1 24 70"),a(f,"fill","none"),a(f,"stroke","#FFB833"),a(f,"stroke-width","4"),a(f,"stroke-linecap","round"),a(l,"id","loco-spinner-ring"),a(h,"cx","40"),a(h,"cy","40"),a(h,"r","16"),a(h,"fill","#1a1f2e"),a(g,"cx","40"),a(g,"cy","38"),a(g,"r","10"),a(g,"fill","#2ECC88"),a(p,"cx","37"),a(p,"cy","37"),a(p,"r","2.5"),a(p,"fill","white"),a(_,"cx","37.5"),a(_,"cy","37.5"),a(_,"r","1.5"),a(_,"fill","#2C2C2A"),a(m,"cx","43"),a(m,"cy","37"),a(m,"r","2.5"),a(m,"fill","white"),a(y,"cx","42.5"),a(y,"cy","37.5"),a(y,"r","1.5"),a(y,"fill","#2C2C2A"),a(v,"d","M38 41 Q40 39 42 41 Q42 44 40 45 Q38 44 38 41Z"),a(v,"fill","#E8A020"),a(w,"x1","38"),a(w,"y1","30"),a(w,"x2","36"),a(w,"y2","26"),a(w,"stroke","#FFB833"),a(w,"stroke-width","1.5"),a(w,"stroke-linecap","round"),a(C,"x1","40"),a(C,"y1","29"),a(C,"x2","40"),a(C,"y2","24"),a(C,"stroke","#7BC74A"),a(C,"stroke-width","1.5"),a(C,"stroke-linecap","round"),a(x,"x1","42"),a(x,"y1","30"),a(x,"x2","44"),a(x,"y2","26"),a(x,"stroke","#F07040"),a(x,"stroke-width","1.5"),a(x,"stroke-linecap","round"),a(A,"cx","36"),a(A,"cy","25.5"),a(A,"r","1.5"),a(A,"fill","#FFB833"),a(M,"cx","40"),a(M,"cy","23.5"),a(M,"r","1.5"),a(M,"fill","#7BC74A"),a(z,"cx","44"),a(z,"cy","25.5"),a(z,"r","1.5"),a(z,"fill","#F07040"),a(d,"id","loco-center-parrot"),a(t,"width","80"),a(t,"height","80"),a(t,"viewBox","0 0 80 80"),a(t,"xmlns","http://www.w3.org/2000/svg"),a(P,"class","text-sm font-medium text-gray-700")},m(I,D){B(I,t,D),c(t,n),c(n,r),c(r,i),c(t,l),c(l,o),c(l,s),c(l,u),c(l,f),c(t,d),c(d,h),c(d,g),c(d,p),c(d,_),c(d,m),c(d,y),c(d,v),c(d,w),c(d,C),c(d,x),c(d,A),c(d,M),c(d,z),B(I,E,D),B(I,P,D)},d(I){I&&(R(t),R(E),R(P))}}}function Jd(e){let t,n,r,i,l,o,s,u,f,d,h=e[2]?"Saving…":"Save",g,p,_,m,y,v,w,C,x=e[25].api_key+"",A,M,z,E=e[1]==="key"?"Copied":"Copy",P,I,D,T=e[3]?"Regenerating…":"Regenerate API Key",N,k,F,re,V,oe,Y,ie,Z,H,ce,se=e[6]?"🙈":"👁️",ee,_e,fe,ye=e[5]?"Saving…":"Save",G,de,ue,te,Se,S,X,J,U=e[1]==="snippet"?"Copied":"Copy Snippet",O,W,le,q,K,ne,ke,ge,Ce,Fe,Me,We,Ze,Pe,Xe,He,et,tt,rt,we,be,ae,Ne,Ae,xe,Re,ve,Ye,Ke,ht,Gt,Lt,Xt,Wt,Qt,me=e[14]?"Enabled":"Disabled",De,Ue,nt,gt,ft,lt,dt,Je,Oe,ze,Ve,xt,Qe,Hn,Wn=e[15]?"Enabled":"Disabled",vr,Zr,Nt,vn,Zn,Yr,ln,Vr,Yn,qr,wr,Kr,Ct,Vn,Jr,qn,Gr,dn,Kn=e[16]?"Clearing…":"Clear All Pending",kr,he,Ie,Ge,ot,St,mt,Zt=e[17]?"Resetting…":"Reset Entire Database",Qi,$l,An,Tn,Xr,eo,Qr,$r=e[10]?"▲":"▼",$i,to,el,xr,Cr,Sr,tl,no;function ro(Te,qe){return Te[6]?Rd:Fd}let ei=ro(e),on=ei(e),Jn=Le(e[7]),Mt=[];for(let Te=0;Te<Jn.length;Te+=1)Mt[Te]=la(ia(e,Jn,Te));let jt=e[7].length===0&&oa();function io(Te,qe){return Te[20]?jd:Bd}let ti=io(e),wn=ti(e),zt=!e[18].length&&!e[19]&&sa(e);function lo(Te,qe){if(Te[19])return Hd;if(Te[18].length>0)return Ud}let Gn=lo(e),It=Gn&&Gn(e),Pt=e[10]&&ua(e),Dt=e[24]&&ga(e),Ot=e[23]&&ma(e),Ft=e[22]&&_a(e);return{c(){t=b("div"),n=b("h2"),n.textContent="Settings",r=L(),i=b("div"),l=b("label"),l.textContent="Project Name",o=L(),s=b("div"),u=b("input"),f=L(),d=b("button"),g=j(h),_=L(),m=b("div"),y=b("div"),y.textContent="API Key",v=L(),w=b("div"),C=b("code"),A=j(x),M=L(),z=b("button"),P=j(E),I=L(),D=b("button"),N=j(T),k=L(),F=b("div"),re=b("label"),re.textContent="BlueHive API Key",V=L(),oe=b("p"),oe.innerHTML='Required for AI-powered translations. Get your key from <a href="https://bluehive.com" target="_blank" class="text-indigo-600 hover:underline">bluehive.com</a>',Y=L(),ie=b("div"),Z=b("div"),on.c(),H=L(),ce=b("button"),ee=j(se),_e=L(),fe=b("button"),G=j(ye),de=L(),ue=b("div"),te=b("div"),te.textContent="CDN Script Snippet",Se=L(),S=b("pre"),S.textContent=`${e[28]()}`,X=L(),J=b("button"),O=j(U),W=L(),le=b("div"),q=b("div"),q.textContent="Target Languages",K=L(),ne=b("div");for(let Te=0;Te<Mt.length;Te+=1)Mt[Te].c();ke=L(),jt&&jt.c(),ge=L(),Ce=b("div"),Fe=b("div"),Me=b("label"),Me.textContent="Language Code",We=L(),Ze=b("input"),Pe=L(),Xe=b("div"),He=b("label"),He.textContent="Language Name",et=L(),tt=b("input"),rt=L(),we=b("button"),be=j("Add"),Ne=L(),Ae=b("div"),xe=b("div"),xe.textContent="DOM Context",Re=L(),ve=b("p"),ve.textContent="When enabled, the Loco client builds context breadcrumbs (headings, labels, sections) for each phrase. This helps distinguish identical text in different parts of the page. Disable to simplify phrase collection and improve performance on large pages.",Ye=L(),Ke=b("label"),ht=b("button"),Gt=b("span"),Wt=L(),Qt=b("span"),De=j(me),Ue=L(),nt=b("div"),gt=b("div"),gt.textContent="Page Screenshots",ft=L(),lt=b("p"),lt.textContent="When enabled, the Loco client will capture a page screenshot and send it to the dashboard for context during translation.",dt=L(),Je=b("label"),Oe=b("button"),ze=b("span"),Qe=L(),Hn=b("span"),vr=j(Wn),Zr=L(),Nt=b("div"),vn=b("div"),Zn=b("div"),Zn.textContent="Backups",Yr=L(),ln=b("button"),wn.c(),Vr=L(),Yn=b("p"),Yn.innerHTML='Create point-in-time snapshots of your database. To restore, stop the server and replace <code class="bg-gray-100 px-1 rounded">server/data/loco.db</code> with a backup file.',qr=L(),zt&&zt.c(),wr=L(),It&&It.c(),Kr=L(),Ct=b("div"),Vn=b("div"),Vn.textContent="Danger Zone",Jr=L(),qn=b("p"),qn.textContent="Delete all pending text nodes from the database. Approved and trashed items are not affected.",Gr=L(),dn=b("button"),kr=j(Kn),he=L(),Ie=b("hr"),Ge=L(),ot=b("p"),ot.textContent="Delete ALL text nodes, translations, and screenshots. The project and its settings will be kept.",St=L(),mt=b("button"),Qi=j(Zt),$l=L(),An=b("div"),Tn=b("button"),Xr=b("span"),Xr.textContent="Crawler Configuration",eo=L(),Qr=b("span"),$i=j($r),to=L(),Pt&&Pt.c(),el=L(),Dt&&Dt.c(),xr=L(),Ot&&Ot.c(),Cr=L(),Ft&&Ft.c(),Sr=bt(),a(n,"class","text-xl font-semibold text-gray-800 mb-6"),a(l,"for","project-name"),a(l,"class","block text-sm font-medium text-gray-600 mb-2"),a(u,"id","project-name"),a(u,"class","flex-1 px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"),a(u,"placeholder","Project name"),a(d,"class","px-4 py-2 bg-indigo-600 text-white text-sm rounded-md hover:bg-indigo-700 disabled:opacity-50"),d.disabled=p=e[2]||e[0]===e[25].name,a(s,"class","flex gap-2"),a(i,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(y,"class","block text-sm font-medium text-gray-600 mb-2"),a(C,"class","flex-1 px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm font-mono text-gray-700 select-all"),a(z,"class","px-3 py-2 border border-gray-300 rounded-md text-sm hover:bg-gray-50"),a(w,"class","flex gap-2 items-center"),a(D,"class","mt-3 px-3 py-1.5 border border-red-300 text-red-600 text-xs rounded-md hover:bg-red-50 disabled:opacity-50"),D.disabled=e[3],a(m,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(re,"for","bluehive-api-key"),a(re,"class","block text-sm font-medium text-gray-600 mb-2"),a(oe,"class","text-xs text-gray-400 mb-2"),a(ce,"class","absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 text-xs"),a(ce,"type","button"),a(Z,"class","relative flex-1"),a(fe,"class","px-4 py-2 bg-indigo-600 text-white text-sm rounded-md hover:bg-indigo-700 disabled:opacity-50"),fe.disabled=e[5],a(ie,"class","flex gap-2"),a(F,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(te,"class","block text-sm font-medium text-gray-600 mb-2"),a(S,"class","px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-xs font-mono text-gray-700 overflow-x-auto whitespace-pre-wrap"),a(J,"class","mt-2 px-3 py-1.5 border border-gray-300 rounded-md text-sm hover:bg-gray-50"),a(ue,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(q,"class","block text-sm font-medium text-gray-600 mb-3"),a(ne,"class","space-y-1 mb-4"),a(Me,"for","new-language-code"),a(Me,"class","block text-xs text-gray-500 mb-1"),a(Ze,"id","new-language-code"),a(Ze,"placeholder","e.g. zh-Hans"),a(Ze,"class","w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500"),a(Fe,"class","flex-1"),a(He,"for","new-language-name"),a(He,"class","block text-xs text-gray-500 mb-1"),a(tt,"id","new-language-name"),a(tt,"placeholder","e.g. Chinese (Simplified)"),a(tt,"class","w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500"),a(Xe,"class","flex-1"),a(we,"class","px-4 py-2 bg-indigo-600 text-white text-sm rounded-md hover:bg-indigo-700 disabled:opacity-50"),we.disabled=ae=!e[8].trim()||!e[9].trim(),a(Ce,"class","flex gap-2 items-end"),a(le,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(xe,"class","block text-sm font-medium text-gray-700 mb-2"),a(ve,"class","text-xs text-gray-500 mb-3"),a(Gt,"class",Lt="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(e[14]?"translate-x-6":"translate-x-1")),a(ht,"class",Xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(e[14]?"bg-indigo-600":"bg-gray-300")),a(ht,"role","switch"),a(ht,"aria-checked",e[14]),a(Qt,"class","text-sm text-gray-700"),a(Ke,"class","flex items-center gap-3 cursor-pointer"),a(Ae,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(gt,"class","block text-sm font-medium text-gray-700 mb-2"),a(lt,"class","text-xs text-gray-500 mb-3"),a(ze,"class",Ve="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(e[15]?"translate-x-6":"translate-x-1")),a(Oe,"class",xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(e[15]?"bg-indigo-600":"bg-gray-300")),a(Oe,"role","switch"),a(Oe,"aria-checked",e[15]),a(Hn,"class","text-sm text-gray-700"),a(Je,"class","flex items-center gap-3 cursor-pointer"),a(nt,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(Zn,"class","text-sm font-medium text-gray-700"),a(ln,"class","px-3 py-1.5 bg-indigo-600 text-white text-xs rounded-md hover:bg-indigo-700 disabled:opacity-50 flex items-center gap-1.5"),ln.disabled=e[20],a(vn,"class","flex items-center justify-between mb-3"),a(Yn,"class","text-xs text-gray-400 mb-3"),a(Nt,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(Vn,"class","block text-sm font-medium text-red-600 mb-2"),a(qn,"class","text-xs text-gray-500 mb-3"),a(dn,"class","px-4 py-2 bg-red-600 text-white text-sm rounded-md hover:bg-red-700 disabled:opacity-50"),dn.disabled=e[16],a(Ie,"class","my-4 border-red-100"),a(ot,"class","text-xs text-gray-500 mb-3"),a(mt,"class","px-4 py-2 bg-red-700 text-white text-sm rounded-md hover:bg-red-800 disabled:opacity-50"),mt.disabled=e[17],a(Ct,"class","bg-white rounded-lg border border-red-200 p-5 mb-4"),a(Xr,"class","text-sm font-medium text-gray-600"),a(Qr,"class","text-gray-400 text-xs"),a(Tn,"class","flex items-center justify-between w-full text-left"),a(An,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(t,"class","max-w-2xl")},m(Te,qe){B(Te,t,qe),c(t,n),c(t,r),c(t,i),c(i,l),c(i,o),c(i,s),c(s,u),Ee(u,e[0]),c(s,f),c(s,d),c(d,g),c(t,_),c(t,m),c(m,y),c(m,v),c(m,w),c(w,C),c(C,A),c(w,M),c(w,z),c(z,P),c(m,I),c(m,D),c(D,N),c(t,k),c(t,F),c(F,re),c(F,V),c(F,oe),c(F,Y),c(F,ie),c(ie,Z),on.m(Z,null),c(Z,H),c(Z,ce),c(ce,ee),c(ie,_e),c(ie,fe),c(fe,G),c(t,de),c(t,ue),c(ue,te),c(ue,Se),c(ue,S),c(ue,X),c(ue,J),c(J,O),c(t,W),c(t,le),c(le,q),c(le,K),c(le,ne);for(let wt=0;wt<Mt.length;wt+=1)Mt[wt]&&Mt[wt].m(ne,null);c(le,ke),jt&&jt.m(le,null),c(le,ge),c(le,Ce),c(Ce,Fe),c(Fe,Me),c(Fe,We),c(Fe,Ze),Ee(Ze,e[8]),c(Ce,Pe),c(Ce,Xe),c(Xe,He),c(Xe,et),c(Xe,tt),Ee(tt,e[9]),c(Ce,rt),c(Ce,we),c(we,be),c(t,Ne),c(t,Ae),c(Ae,xe),c(Ae,Re),c(Ae,ve),c(Ae,Ye),c(Ae,Ke),c(Ke,ht),c(ht,Gt),c(Ke,Wt),c(Ke,Qt),c(Qt,De),c(t,Ue),c(t,nt),c(nt,gt),c(nt,ft),c(nt,lt),c(nt,dt),c(nt,Je),c(Je,Oe),c(Oe,ze),c(Je,Qe),c(Je,Hn),c(Hn,vr),c(t,Zr),c(t,Nt),c(Nt,vn),c(vn,Zn),c(vn,Yr),c(vn,ln),wn.m(ln,null),c(Nt,Vr),c(Nt,Yn),c(Nt,qr),zt&&zt.m(Nt,null),c(Nt,wr),It&&It.m(Nt,null),c(t,Kr),c(t,Ct),c(Ct,Vn),c(Ct,Jr),c(Ct,qn),c(Ct,Gr),c(Ct,dn),c(dn,kr),c(Ct,he),c(Ct,Ie),c(Ct,Ge),c(Ct,ot),c(Ct,St),c(Ct,mt),c(mt,Qi),c(t,$l),c(t,An),c(An,Tn),c(Tn,Xr),c(Tn,eo),c(Tn,Qr),c(Qr,$i),c(An,to),Pt&&Pt.m(An,null),B(Te,el,qe),Dt&&Dt.m(Te,qe),B(Te,xr,qe),Ot&&Ot.m(Te,qe),B(Te,Cr,qe),Ft&&Ft.m(Te,qe),B(Te,Sr,qe),tl||(no=[Q(u,"input",e[47]),Q(d,"click",e[30]),Q(z,"click",e[48]),Q(D,"click",e[31]),Q(ce,"click",e[51]),Q(fe,"click",e[29]),Q(J,"click",e[52]),Q(Ze,"input",e[54]),Q(tt,"input",e[55]),Q(we,"click",e[32]),Q(ht,"click",e[40]),Q(Oe,"click",e[39]),Q(ln,"click",e[44]),Q(dn,"click",e[41]),Q(mt,"click",e[42]),Q(Tn,"click",e[57])],tl=!0)},p(Te,qe){if(qe[0]&1&&u.value!==Te[0]&&Ee(u,Te[0]),qe[0]&4&&h!==(h=Te[2]?"Saving…":"Save")&&$(g,h),qe[0]&33554437&&p!==(p=Te[2]||Te[0]===Te[25].name)&&(d.disabled=p),qe[0]&33554432&&x!==(x=Te[25].api_key+"")&&$(A,x),qe[0]&2&&E!==(E=Te[1]==="key"?"Copied":"Copy")&&$(P,E),qe[0]&8&&T!==(T=Te[3]?"Regenerating…":"Regenerate API Key")&&$(N,T),qe[0]&8&&(D.disabled=Te[3]),ei===(ei=ro(Te))&&on?on.p(Te,qe):(on.d(1),on=ei(Te),on&&(on.c(),on.m(Z,H))),qe[0]&64&&se!==(se=Te[6]?"🙈":"👁️")&&$(ee,se),qe[0]&32&&ye!==(ye=Te[5]?"Saving…":"Save")&&$(G,ye),qe[0]&32&&(fe.disabled=Te[5]),qe[0]&2&&U!==(U=Te[1]==="snippet"?"Copied":"Copy Snippet")&&$(O,U),qe[0]&128|qe[1]&4){Jn=Le(Te[7]);let wt;for(wt=0;wt<Jn.length;wt+=1){const oo=ia(Te,Jn,wt);Mt[wt]?Mt[wt].p(oo,qe):(Mt[wt]=la(oo),Mt[wt].c(),Mt[wt].m(ne,null))}for(;wt<Mt.length;wt+=1)Mt[wt].d(1);Mt.length=Jn.length}Te[7].length===0?jt||(jt=oa(),jt.c(),jt.m(le,ge)):jt&&(jt.d(1),jt=null),qe[0]&256&&Ze.value!==Te[8]&&Ee(Ze,Te[8]),qe[0]&512&&tt.value!==Te[9]&&Ee(tt,Te[9]),qe[0]&768&&ae!==(ae=!Te[8].trim()||!Te[9].trim())&&(we.disabled=ae),qe[0]&16384&&Lt!==(Lt="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(Te[14]?"translate-x-6":"translate-x-1"))&&a(Gt,"class",Lt),qe[0]&16384&&Xt!==(Xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(Te[14]?"bg-indigo-600":"bg-gray-300"))&&a(ht,"class",Xt),qe[0]&16384&&a(ht,"aria-checked",Te[14]),qe[0]&16384&&me!==(me=Te[14]?"Enabled":"Disabled")&&$(De,me),qe[0]&32768&&Ve!==(Ve="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(Te[15]?"translate-x-6":"translate-x-1"))&&a(ze,"class",Ve),qe[0]&32768&&xt!==(xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(Te[15]?"bg-indigo-600":"bg-gray-300"))&&a(Oe,"class",xt),qe[0]&32768&&a(Oe,"aria-checked",Te[15]),qe[0]&32768&&Wn!==(Wn=Te[15]?"Enabled":"Disabled")&&$(vr,Wn),ti!==(ti=io(Te))&&(wn.d(1),wn=ti(Te),wn&&(wn.c(),wn.m(ln,null))),qe[0]&1048576&&(ln.disabled=Te[20]),!Te[18].length&&!Te[19]?zt?zt.p(Te,qe):(zt=sa(Te),zt.c(),zt.m(Nt,wr)):zt&&(zt.d(1),zt=null),Gn===(Gn=lo(Te))&&It?It.p(Te,qe):(It&&It.d(1),It=Gn&&Gn(Te),It&&(It.c(),It.m(Nt,null))),qe[0]&65536&&Kn!==(Kn=Te[16]?"Clearing…":"Clear All Pending")&&$(kr,Kn),qe[0]&65536&&(dn.disabled=Te[16]),qe[0]&131072&&Zt!==(Zt=Te[17]?"Resetting…":"Reset Entire Database")&&$(Qi,Zt),qe[0]&131072&&(mt.disabled=Te[17]),qe[0]&1024&&$r!==($r=Te[10]?"▲":"▼")&&$($i,$r),Te[10]?Pt?Pt.p(Te,qe):(Pt=ua(Te),Pt.c(),Pt.m(An,null)):Pt&&(Pt.d(1),Pt=null),Te[24]?Dt?Dt.p(Te,qe):(Dt=ga(Te),Dt.c(),Dt.m(xr.parentNode,xr)):Dt&&(Dt.d(1),Dt=null),Te[23]?Ot?Ot.p(Te,qe):(Ot=ma(Te),Ot.c(),Ot.m(Cr.parentNode,Cr)):Ot&&(Ot.d(1),Ot=null),Te[22]?Ft?Ft.p(Te,qe):(Ft=_a(Te),Ft.c(),Ft.m(Sr.parentNode,Sr)):Ft&&(Ft.d(1),Ft=null)},i:Be,o:Be,d(Te){Te&&(R(t),R(el),R(xr),R(Cr),R(Sr)),on.d(),it(Mt,Te),jt&&jt.d(),wn.d(),zt&&zt.d(),It&&It.d(),Pt&&Pt.d(),Dt&&Dt.d(Te),Ot&&Ot.d(Te),Ft&&Ft.d(Te),tl=!1,$e(no)}}}function ba(e){return e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB"}function ya(e){return new Date(e).toLocaleString()}function Gd(e,t,n){let r;Or(e,Yt,be=>n(25,r=be));const i=[{code:"zh-Hans",name:"Chinese (Simplified)"},{code:"zh-Hant",name:"Chinese (Traditional)"},{code:"es",name:"Spanish"},{code:"fr",name:"French"},{code:"de",name:"German"},{code:"ja",name:"Japanese"},{code:"ko",name:"Korean"},{code:"pt",name:"Portuguese"}],l={blockedTags:["SCRIPT","STYLE","NOSCRIPT","IFRAME","CODE","SVG","AUDIO","VIDEO","LINK"],inlineTags:["VAR","STRONG","EM","B","I","SPAN","A","ABBR","MARK","SMALL","SUB","SUP","U","S","TIME"],domContextSelectors:["h1","h2","h3","h4","h5","h6","label","legend","caption","figcaption","nav","header","footer","main","section","article","form",".portlet-header",".admin-card",".wc_win_title",".miewin_title_bar",".ui-dialog-title",".ui-dialog-titlebar",".wc_tab_title"]},o=[{key:"blockedTags",title:"Blocked Tags",desc:"HTML tags to skip during text extraction.",placeholder:"e.g. CANVAS"},{key:"inlineTags",title:"Inline Tags",desc:"Tags treated as inline content in mixed-content extraction.",placeholder:"e.g. CITE"},{key:"domContextSelectors",title:"DOM Context Selectors",desc:"CSS selectors used to build context breadcrumbs for each phrase.",placeholder:"e.g. .my-header"}];let s="",u="",f=!1,d=!1,h={},g="",p=!1,_=!1,m=[],y="",v="",w=!1,C={blockedTags:{disabled:[],custom:[]},inlineTags:{disabled:[],custom:[]},domContextSelectors:{disabled:[],custom:[]}},x={blockedTags:"",inlineTags:"",domContextSelectors:""},A=0,M=!0,z=!0,E=!1,P=!1,I=[],D=!1,T=!1,N=null,k=!1,F=!1,re=!1;br(()=>{n(0,s=r.name||"");try{h=JSON.parse(r.settings||"{}")}catch{h={}}n(7,m=h.languages||i.map(be=>({...be}))),n(4,g=h.bluehiveApiKey||""),n(11,C={blockedTags:{disabled:[],custom:[],...h.blockedTags||{}},inlineTags:{disabled:[],custom:[],...h.inlineTags||{}},domContextSelectors:{disabled:[],custom:[],...h.domContextSelectors||{}}}),n(13,A=typeof h.contextDepth=="number"?h.contextDepth:0),n(14,M=h.domContextEnabled!==!1),n(15,z=h.screenshotsEnabled!==!1)});function V(){const be=window.location.pathname.replace(/\/dashboard\/?$/,""),ae=window.location.origin+be;return`<script src="${ae}/cdn/loco.js"><\/script>
61
+ `),l=pe("g"),o=pe("circle"),s=pe("path"),u=pe("path"),f=pe("path"),d=pe("g"),h=pe("circle"),g=pe("circle"),p=pe("circle"),_=pe("circle"),m=pe("circle"),y=pe("circle"),v=pe("path"),w=pe("line"),C=pe("line"),x=pe("line"),A=pe("circle"),M=pe("circle"),z=pe("circle"),E=L(),P=b("p"),P.textContent="Creating backup…",a(o,"cx","40"),a(o,"cy","40"),a(o,"r","34"),a(o,"fill","none"),a(o,"stroke","#2a3040"),a(o,"stroke-width","4"),a(s,"d","M40 6 A34 34 0 0 1 74 40"),a(s,"fill","none"),a(s,"stroke","#2ECC88"),a(s,"stroke-width","4"),a(s,"stroke-linecap","round"),a(u,"d","M74 40 A34 34 0 0 1 56 70"),a(u,"fill","none"),a(u,"stroke","#3A8FE0"),a(u,"stroke-width","4"),a(u,"stroke-linecap","round"),a(f,"d","M56 70 A34 34 0 0 1 24 70"),a(f,"fill","none"),a(f,"stroke","#FFB833"),a(f,"stroke-width","4"),a(f,"stroke-linecap","round"),a(l,"id","loco-spinner-ring"),a(h,"cx","40"),a(h,"cy","40"),a(h,"r","16"),a(h,"fill","#1a1f2e"),a(g,"cx","40"),a(g,"cy","38"),a(g,"r","10"),a(g,"fill","#2ECC88"),a(p,"cx","37"),a(p,"cy","37"),a(p,"r","2.5"),a(p,"fill","white"),a(_,"cx","37.5"),a(_,"cy","37.5"),a(_,"r","1.5"),a(_,"fill","#2C2C2A"),a(m,"cx","43"),a(m,"cy","37"),a(m,"r","2.5"),a(m,"fill","white"),a(y,"cx","42.5"),a(y,"cy","37.5"),a(y,"r","1.5"),a(y,"fill","#2C2C2A"),a(v,"d","M38 41 Q40 39 42 41 Q42 44 40 45 Q38 44 38 41Z"),a(v,"fill","#E8A020"),a(w,"x1","38"),a(w,"y1","30"),a(w,"x2","36"),a(w,"y2","26"),a(w,"stroke","#FFB833"),a(w,"stroke-width","1.5"),a(w,"stroke-linecap","round"),a(C,"x1","40"),a(C,"y1","29"),a(C,"x2","40"),a(C,"y2","24"),a(C,"stroke","#7BC74A"),a(C,"stroke-width","1.5"),a(C,"stroke-linecap","round"),a(x,"x1","42"),a(x,"y1","30"),a(x,"x2","44"),a(x,"y2","26"),a(x,"stroke","#F07040"),a(x,"stroke-width","1.5"),a(x,"stroke-linecap","round"),a(A,"cx","36"),a(A,"cy","25.5"),a(A,"r","1.5"),a(A,"fill","#FFB833"),a(M,"cx","40"),a(M,"cy","23.5"),a(M,"r","1.5"),a(M,"fill","#7BC74A"),a(z,"cx","44"),a(z,"cy","25.5"),a(z,"r","1.5"),a(z,"fill","#F07040"),a(d,"id","loco-center-parrot"),a(t,"width","80"),a(t,"height","80"),a(t,"viewBox","0 0 80 80"),a(t,"xmlns","http://www.w3.org/2000/svg"),a(P,"class","text-sm font-medium text-gray-700")},m(I,D){B(I,t,D),c(t,n),c(n,r),c(r,i),c(t,l),c(l,o),c(l,s),c(l,u),c(l,f),c(t,d),c(d,h),c(d,g),c(d,p),c(d,_),c(d,m),c(d,y),c(d,v),c(d,w),c(d,C),c(d,x),c(d,A),c(d,M),c(d,z),B(I,E,D),B(I,P,D)},d(I){I&&(R(t),R(E),R(P))}}}function Jd(e){let t,n,r,i,l,o,s,u,f,d,h=e[2]?"Saving…":"Save",g,p,_,m,y,v,w,C,x=e[25].api_key+"",A,M,z,E=e[1]==="key"?"Copied":"Copy",P,I,D,T=e[3]?"Regenerating…":"Regenerate API Key",N,k,F,re,V,oe,Y,ie,Z,H,ce,se=e[6]?"🙈":"👁️",ee,_e,fe,ye=e[5]?"Saving…":"Save",G,de,ue,te,Se,S,X,J,U=e[1]==="snippet"?"Copied":"Copy Snippet",O,W,le,q,K,ne,ke,ge,Ce,Fe,Me,We,Ze,Pe,Xe,He,et,tt,rt,we,be,ae,Ne,Ae,xe,Re,ve,Ye,Ke,ht,Gt,Lt,Xt,Wt,Qt,me=e[14]?"Enabled":"Disabled",De,Ue,nt,gt,ft,lt,dt,Je,Oe,ze,Ve,xt,Qe,Hn,Wn=e[15]?"Enabled":"Disabled",vr,Zr,Nt,vn,Zn,Yr,ln,Vr,Yn,qr,wr,Kr,Ct,Vn,Jr,qn,Gr,dn,Kn=e[16]?"Clearing…":"Clear All Pending",kr,he,Ie,Ge,ot,St,mt,Zt=e[17]?"Resetting…":"Reset Entire Database",Qi,$l,An,Tn,Xr,eo,Qr,$r=e[10]?"▲":"▼",$i,to,el,xr,Cr,Sr,tl,no;function ro(Te,qe){return Te[6]?Rd:Fd}let ei=ro(e),on=ei(e),Jn=Le(e[7]),Mt=[];for(let Te=0;Te<Jn.length;Te+=1)Mt[Te]=la(ia(e,Jn,Te));let jt=e[7].length===0&&oa();function io(Te,qe){return Te[20]?jd:Bd}let ti=io(e),wn=ti(e),zt=!e[18].length&&!e[19]&&sa(e);function lo(Te,qe){if(Te[19])return Hd;if(Te[18].length>0)return Ud}let Gn=lo(e),It=Gn&&Gn(e),Pt=e[10]&&ua(e),Dt=e[24]&&ga(e),Ot=e[23]&&ma(e),Ft=e[22]&&_a(e);return{c(){t=b("div"),n=b("h2"),n.textContent="Settings",r=L(),i=b("div"),l=b("label"),l.textContent="Project Name",o=L(),s=b("div"),u=b("input"),f=L(),d=b("button"),g=j(h),_=L(),m=b("div"),y=b("div"),y.textContent="API Key",v=L(),w=b("div"),C=b("code"),A=j(x),M=L(),z=b("button"),P=j(E),I=L(),D=b("button"),N=j(T),k=L(),F=b("div"),re=b("label"),re.textContent="BlueHive API Key",V=L(),oe=b("p"),oe.innerHTML='Required for AI-powered translations. Get your key from <a href="https://app.ozwell.ai" target="_blank" class="text-indigo-600 hover:underline">app.ozwell.ai</a>',Y=L(),ie=b("div"),Z=b("div"),on.c(),H=L(),ce=b("button"),ee=j(se),_e=L(),fe=b("button"),G=j(ye),de=L(),ue=b("div"),te=b("div"),te.textContent="CDN Script Snippet",Se=L(),S=b("pre"),S.textContent=`${e[28]()}`,X=L(),J=b("button"),O=j(U),W=L(),le=b("div"),q=b("div"),q.textContent="Target Languages",K=L(),ne=b("div");for(let Te=0;Te<Mt.length;Te+=1)Mt[Te].c();ke=L(),jt&&jt.c(),ge=L(),Ce=b("div"),Fe=b("div"),Me=b("label"),Me.textContent="Language Code",We=L(),Ze=b("input"),Pe=L(),Xe=b("div"),He=b("label"),He.textContent="Language Name",et=L(),tt=b("input"),rt=L(),we=b("button"),be=j("Add"),Ne=L(),Ae=b("div"),xe=b("div"),xe.textContent="DOM Context",Re=L(),ve=b("p"),ve.textContent="When enabled, the Loco client builds context breadcrumbs (headings, labels, sections) for each phrase. This helps distinguish identical text in different parts of the page. Disable to simplify phrase collection and improve performance on large pages.",Ye=L(),Ke=b("label"),ht=b("button"),Gt=b("span"),Wt=L(),Qt=b("span"),De=j(me),Ue=L(),nt=b("div"),gt=b("div"),gt.textContent="Page Screenshots",ft=L(),lt=b("p"),lt.textContent="When enabled, the Loco client will capture a page screenshot and send it to the dashboard for context during translation.",dt=L(),Je=b("label"),Oe=b("button"),ze=b("span"),Qe=L(),Hn=b("span"),vr=j(Wn),Zr=L(),Nt=b("div"),vn=b("div"),Zn=b("div"),Zn.textContent="Backups",Yr=L(),ln=b("button"),wn.c(),Vr=L(),Yn=b("p"),Yn.innerHTML='Create point-in-time snapshots of your database. To restore, stop the server and replace <code class="bg-gray-100 px-1 rounded">server/data/loco.db</code> with a backup file.',qr=L(),zt&&zt.c(),wr=L(),It&&It.c(),Kr=L(),Ct=b("div"),Vn=b("div"),Vn.textContent="Danger Zone",Jr=L(),qn=b("p"),qn.textContent="Delete all pending text nodes from the database. Approved and trashed items are not affected.",Gr=L(),dn=b("button"),kr=j(Kn),he=L(),Ie=b("hr"),Ge=L(),ot=b("p"),ot.textContent="Delete ALL text nodes, translations, and screenshots. The project and its settings will be kept.",St=L(),mt=b("button"),Qi=j(Zt),$l=L(),An=b("div"),Tn=b("button"),Xr=b("span"),Xr.textContent="Crawler Configuration",eo=L(),Qr=b("span"),$i=j($r),to=L(),Pt&&Pt.c(),el=L(),Dt&&Dt.c(),xr=L(),Ot&&Ot.c(),Cr=L(),Ft&&Ft.c(),Sr=bt(),a(n,"class","text-xl font-semibold text-gray-800 mb-6"),a(l,"for","project-name"),a(l,"class","block text-sm font-medium text-gray-600 mb-2"),a(u,"id","project-name"),a(u,"class","flex-1 px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"),a(u,"placeholder","Project name"),a(d,"class","px-4 py-2 bg-indigo-600 text-white text-sm rounded-md hover:bg-indigo-700 disabled:opacity-50"),d.disabled=p=e[2]||e[0]===e[25].name,a(s,"class","flex gap-2"),a(i,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(y,"class","block text-sm font-medium text-gray-600 mb-2"),a(C,"class","flex-1 px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm font-mono text-gray-700 select-all"),a(z,"class","px-3 py-2 border border-gray-300 rounded-md text-sm hover:bg-gray-50"),a(w,"class","flex gap-2 items-center"),a(D,"class","mt-3 px-3 py-1.5 border border-red-300 text-red-600 text-xs rounded-md hover:bg-red-50 disabled:opacity-50"),D.disabled=e[3],a(m,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(re,"for","bluehive-api-key"),a(re,"class","block text-sm font-medium text-gray-600 mb-2"),a(oe,"class","text-xs text-gray-400 mb-2"),a(ce,"class","absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 text-xs"),a(ce,"type","button"),a(Z,"class","relative flex-1"),a(fe,"class","px-4 py-2 bg-indigo-600 text-white text-sm rounded-md hover:bg-indigo-700 disabled:opacity-50"),fe.disabled=e[5],a(ie,"class","flex gap-2"),a(F,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(te,"class","block text-sm font-medium text-gray-600 mb-2"),a(S,"class","px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-xs font-mono text-gray-700 overflow-x-auto whitespace-pre-wrap"),a(J,"class","mt-2 px-3 py-1.5 border border-gray-300 rounded-md text-sm hover:bg-gray-50"),a(ue,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(q,"class","block text-sm font-medium text-gray-600 mb-3"),a(ne,"class","space-y-1 mb-4"),a(Me,"for","new-language-code"),a(Me,"class","block text-xs text-gray-500 mb-1"),a(Ze,"id","new-language-code"),a(Ze,"placeholder","e.g. zh-Hans"),a(Ze,"class","w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500"),a(Fe,"class","flex-1"),a(He,"for","new-language-name"),a(He,"class","block text-xs text-gray-500 mb-1"),a(tt,"id","new-language-name"),a(tt,"placeholder","e.g. Chinese (Simplified)"),a(tt,"class","w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500"),a(Xe,"class","flex-1"),a(we,"class","px-4 py-2 bg-indigo-600 text-white text-sm rounded-md hover:bg-indigo-700 disabled:opacity-50"),we.disabled=ae=!e[8].trim()||!e[9].trim(),a(Ce,"class","flex gap-2 items-end"),a(le,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(xe,"class","block text-sm font-medium text-gray-700 mb-2"),a(ve,"class","text-xs text-gray-500 mb-3"),a(Gt,"class",Lt="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(e[14]?"translate-x-6":"translate-x-1")),a(ht,"class",Xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(e[14]?"bg-indigo-600":"bg-gray-300")),a(ht,"role","switch"),a(ht,"aria-checked",e[14]),a(Qt,"class","text-sm text-gray-700"),a(Ke,"class","flex items-center gap-3 cursor-pointer"),a(Ae,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(gt,"class","block text-sm font-medium text-gray-700 mb-2"),a(lt,"class","text-xs text-gray-500 mb-3"),a(ze,"class",Ve="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(e[15]?"translate-x-6":"translate-x-1")),a(Oe,"class",xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(e[15]?"bg-indigo-600":"bg-gray-300")),a(Oe,"role","switch"),a(Oe,"aria-checked",e[15]),a(Hn,"class","text-sm text-gray-700"),a(Je,"class","flex items-center gap-3 cursor-pointer"),a(nt,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(Zn,"class","text-sm font-medium text-gray-700"),a(ln,"class","px-3 py-1.5 bg-indigo-600 text-white text-xs rounded-md hover:bg-indigo-700 disabled:opacity-50 flex items-center gap-1.5"),ln.disabled=e[20],a(vn,"class","flex items-center justify-between mb-3"),a(Yn,"class","text-xs text-gray-400 mb-3"),a(Nt,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(Vn,"class","block text-sm font-medium text-red-600 mb-2"),a(qn,"class","text-xs text-gray-500 mb-3"),a(dn,"class","px-4 py-2 bg-red-600 text-white text-sm rounded-md hover:bg-red-700 disabled:opacity-50"),dn.disabled=e[16],a(Ie,"class","my-4 border-red-100"),a(ot,"class","text-xs text-gray-500 mb-3"),a(mt,"class","px-4 py-2 bg-red-700 text-white text-sm rounded-md hover:bg-red-800 disabled:opacity-50"),mt.disabled=e[17],a(Ct,"class","bg-white rounded-lg border border-red-200 p-5 mb-4"),a(Xr,"class","text-sm font-medium text-gray-600"),a(Qr,"class","text-gray-400 text-xs"),a(Tn,"class","flex items-center justify-between w-full text-left"),a(An,"class","bg-white rounded-lg border border-gray-200 p-5 mb-4"),a(t,"class","max-w-2xl")},m(Te,qe){B(Te,t,qe),c(t,n),c(t,r),c(t,i),c(i,l),c(i,o),c(i,s),c(s,u),Ee(u,e[0]),c(s,f),c(s,d),c(d,g),c(t,_),c(t,m),c(m,y),c(m,v),c(m,w),c(w,C),c(C,A),c(w,M),c(w,z),c(z,P),c(m,I),c(m,D),c(D,N),c(t,k),c(t,F),c(F,re),c(F,V),c(F,oe),c(F,Y),c(F,ie),c(ie,Z),on.m(Z,null),c(Z,H),c(Z,ce),c(ce,ee),c(ie,_e),c(ie,fe),c(fe,G),c(t,de),c(t,ue),c(ue,te),c(ue,Se),c(ue,S),c(ue,X),c(ue,J),c(J,O),c(t,W),c(t,le),c(le,q),c(le,K),c(le,ne);for(let wt=0;wt<Mt.length;wt+=1)Mt[wt]&&Mt[wt].m(ne,null);c(le,ke),jt&&jt.m(le,null),c(le,ge),c(le,Ce),c(Ce,Fe),c(Fe,Me),c(Fe,We),c(Fe,Ze),Ee(Ze,e[8]),c(Ce,Pe),c(Ce,Xe),c(Xe,He),c(Xe,et),c(Xe,tt),Ee(tt,e[9]),c(Ce,rt),c(Ce,we),c(we,be),c(t,Ne),c(t,Ae),c(Ae,xe),c(Ae,Re),c(Ae,ve),c(Ae,Ye),c(Ae,Ke),c(Ke,ht),c(ht,Gt),c(Ke,Wt),c(Ke,Qt),c(Qt,De),c(t,Ue),c(t,nt),c(nt,gt),c(nt,ft),c(nt,lt),c(nt,dt),c(nt,Je),c(Je,Oe),c(Oe,ze),c(Je,Qe),c(Je,Hn),c(Hn,vr),c(t,Zr),c(t,Nt),c(Nt,vn),c(vn,Zn),c(vn,Yr),c(vn,ln),wn.m(ln,null),c(Nt,Vr),c(Nt,Yn),c(Nt,qr),zt&&zt.m(Nt,null),c(Nt,wr),It&&It.m(Nt,null),c(t,Kr),c(t,Ct),c(Ct,Vn),c(Ct,Jr),c(Ct,qn),c(Ct,Gr),c(Ct,dn),c(dn,kr),c(Ct,he),c(Ct,Ie),c(Ct,Ge),c(Ct,ot),c(Ct,St),c(Ct,mt),c(mt,Qi),c(t,$l),c(t,An),c(An,Tn),c(Tn,Xr),c(Tn,eo),c(Tn,Qr),c(Qr,$i),c(An,to),Pt&&Pt.m(An,null),B(Te,el,qe),Dt&&Dt.m(Te,qe),B(Te,xr,qe),Ot&&Ot.m(Te,qe),B(Te,Cr,qe),Ft&&Ft.m(Te,qe),B(Te,Sr,qe),tl||(no=[Q(u,"input",e[47]),Q(d,"click",e[30]),Q(z,"click",e[48]),Q(D,"click",e[31]),Q(ce,"click",e[51]),Q(fe,"click",e[29]),Q(J,"click",e[52]),Q(Ze,"input",e[54]),Q(tt,"input",e[55]),Q(we,"click",e[32]),Q(ht,"click",e[40]),Q(Oe,"click",e[39]),Q(ln,"click",e[44]),Q(dn,"click",e[41]),Q(mt,"click",e[42]),Q(Tn,"click",e[57])],tl=!0)},p(Te,qe){if(qe[0]&1&&u.value!==Te[0]&&Ee(u,Te[0]),qe[0]&4&&h!==(h=Te[2]?"Saving…":"Save")&&$(g,h),qe[0]&33554437&&p!==(p=Te[2]||Te[0]===Te[25].name)&&(d.disabled=p),qe[0]&33554432&&x!==(x=Te[25].api_key+"")&&$(A,x),qe[0]&2&&E!==(E=Te[1]==="key"?"Copied":"Copy")&&$(P,E),qe[0]&8&&T!==(T=Te[3]?"Regenerating…":"Regenerate API Key")&&$(N,T),qe[0]&8&&(D.disabled=Te[3]),ei===(ei=ro(Te))&&on?on.p(Te,qe):(on.d(1),on=ei(Te),on&&(on.c(),on.m(Z,H))),qe[0]&64&&se!==(se=Te[6]?"🙈":"👁️")&&$(ee,se),qe[0]&32&&ye!==(ye=Te[5]?"Saving…":"Save")&&$(G,ye),qe[0]&32&&(fe.disabled=Te[5]),qe[0]&2&&U!==(U=Te[1]==="snippet"?"Copied":"Copy Snippet")&&$(O,U),qe[0]&128|qe[1]&4){Jn=Le(Te[7]);let wt;for(wt=0;wt<Jn.length;wt+=1){const oo=ia(Te,Jn,wt);Mt[wt]?Mt[wt].p(oo,qe):(Mt[wt]=la(oo),Mt[wt].c(),Mt[wt].m(ne,null))}for(;wt<Mt.length;wt+=1)Mt[wt].d(1);Mt.length=Jn.length}Te[7].length===0?jt||(jt=oa(),jt.c(),jt.m(le,ge)):jt&&(jt.d(1),jt=null),qe[0]&256&&Ze.value!==Te[8]&&Ee(Ze,Te[8]),qe[0]&512&&tt.value!==Te[9]&&Ee(tt,Te[9]),qe[0]&768&&ae!==(ae=!Te[8].trim()||!Te[9].trim())&&(we.disabled=ae),qe[0]&16384&&Lt!==(Lt="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(Te[14]?"translate-x-6":"translate-x-1"))&&a(Gt,"class",Lt),qe[0]&16384&&Xt!==(Xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(Te[14]?"bg-indigo-600":"bg-gray-300"))&&a(ht,"class",Xt),qe[0]&16384&&a(ht,"aria-checked",Te[14]),qe[0]&16384&&me!==(me=Te[14]?"Enabled":"Disabled")&&$(De,me),qe[0]&32768&&Ve!==(Ve="inline-block h-4 w-4 transform rounded-full bg-white transition-transform "+(Te[15]?"translate-x-6":"translate-x-1"))&&a(ze,"class",Ve),qe[0]&32768&&xt!==(xt="relative inline-flex h-6 w-11 items-center rounded-full transition-colors "+(Te[15]?"bg-indigo-600":"bg-gray-300"))&&a(Oe,"class",xt),qe[0]&32768&&a(Oe,"aria-checked",Te[15]),qe[0]&32768&&Wn!==(Wn=Te[15]?"Enabled":"Disabled")&&$(vr,Wn),ti!==(ti=io(Te))&&(wn.d(1),wn=ti(Te),wn&&(wn.c(),wn.m(ln,null))),qe[0]&1048576&&(ln.disabled=Te[20]),!Te[18].length&&!Te[19]?zt?zt.p(Te,qe):(zt=sa(Te),zt.c(),zt.m(Nt,wr)):zt&&(zt.d(1),zt=null),Gn===(Gn=lo(Te))&&It?It.p(Te,qe):(It&&It.d(1),It=Gn&&Gn(Te),It&&(It.c(),It.m(Nt,null))),qe[0]&65536&&Kn!==(Kn=Te[16]?"Clearing…":"Clear All Pending")&&$(kr,Kn),qe[0]&65536&&(dn.disabled=Te[16]),qe[0]&131072&&Zt!==(Zt=Te[17]?"Resetting…":"Reset Entire Database")&&$(Qi,Zt),qe[0]&131072&&(mt.disabled=Te[17]),qe[0]&1024&&$r!==($r=Te[10]?"▲":"▼")&&$($i,$r),Te[10]?Pt?Pt.p(Te,qe):(Pt=ua(Te),Pt.c(),Pt.m(An,null)):Pt&&(Pt.d(1),Pt=null),Te[24]?Dt?Dt.p(Te,qe):(Dt=ga(Te),Dt.c(),Dt.m(xr.parentNode,xr)):Dt&&(Dt.d(1),Dt=null),Te[23]?Ot?Ot.p(Te,qe):(Ot=ma(Te),Ot.c(),Ot.m(Cr.parentNode,Cr)):Ot&&(Ot.d(1),Ot=null),Te[22]?Ft?Ft.p(Te,qe):(Ft=_a(Te),Ft.c(),Ft.m(Sr.parentNode,Sr)):Ft&&(Ft.d(1),Ft=null)},i:Be,o:Be,d(Te){Te&&(R(t),R(el),R(xr),R(Cr),R(Sr)),on.d(),it(Mt,Te),jt&&jt.d(),wn.d(),zt&&zt.d(),It&&It.d(),Pt&&Pt.d(),Dt&&Dt.d(Te),Ot&&Ot.d(Te),Ft&&Ft.d(Te),tl=!1,$e(no)}}}function ba(e){return e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB"}function ya(e){return new Date(e).toLocaleString()}function Gd(e,t,n){let r;Or(e,Yt,be=>n(25,r=be));const i=[{code:"zh-Hans",name:"Chinese (Simplified)"},{code:"zh-Hant",name:"Chinese (Traditional)"},{code:"es",name:"Spanish"},{code:"fr",name:"French"},{code:"de",name:"German"},{code:"ja",name:"Japanese"},{code:"ko",name:"Korean"},{code:"pt",name:"Portuguese"}],l={blockedTags:["SCRIPT","STYLE","NOSCRIPT","IFRAME","CODE","SVG","AUDIO","VIDEO","LINK"],inlineTags:["VAR","STRONG","EM","B","I","SPAN","A","ABBR","MARK","SMALL","SUB","SUP","U","S","TIME"],domContextSelectors:["h1","h2","h3","h4","h5","h6","label","legend","caption","figcaption","nav","header","footer","main","section","article","form",".portlet-header",".admin-card",".wc_win_title",".miewin_title_bar",".ui-dialog-title",".ui-dialog-titlebar",".wc_tab_title"]},o=[{key:"blockedTags",title:"Blocked Tags",desc:"HTML tags to skip during text extraction.",placeholder:"e.g. CANVAS"},{key:"inlineTags",title:"Inline Tags",desc:"Tags treated as inline content in mixed-content extraction.",placeholder:"e.g. CITE"},{key:"domContextSelectors",title:"DOM Context Selectors",desc:"CSS selectors used to build context breadcrumbs for each phrase.",placeholder:"e.g. .my-header"}];let s="",u="",f=!1,d=!1,h={},g="",p=!1,_=!1,m=[],y="",v="",w=!1,C={blockedTags:{disabled:[],custom:[]},inlineTags:{disabled:[],custom:[]},domContextSelectors:{disabled:[],custom:[]}},x={blockedTags:"",inlineTags:"",domContextSelectors:""},A=0,M=!0,z=!0,E=!1,P=!1,I=[],D=!1,T=!1,N=null,k=!1,F=!1,re=!1;br(()=>{n(0,s=r.name||"");try{h=JSON.parse(r.settings||"{}")}catch{h={}}n(7,m=h.languages||i.map(be=>({...be}))),n(4,g=h.bluehiveApiKey||""),n(11,C={blockedTags:{disabled:[],custom:[],...h.blockedTags||{}},inlineTags:{disabled:[],custom:[],...h.inlineTags||{}},domContextSelectors:{disabled:[],custom:[],...h.domContextSelectors||{}}}),n(13,A=typeof h.contextDepth=="number"?h.contextDepth:0),n(14,M=h.domContextEnabled!==!1),n(15,z=h.screenshotsEnabled!==!1)});function V(){const be=window.location.pathname.replace(/\/dashboard\/?$/,""),ae=window.location.origin+be;return`<script src="${ae}/cdn/loco.js"><\/script>
62
62
  <script>Loco.init({ apiUrl: '${ae}', apiKey: '${r.api_key}' });<\/script>`}async function oe(){n(5,p=!0),h.bluehiveApiKey=g.trim();const be=await je("../api/project/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:h})});Xn(Yt,r=await be.json(),r),n(5,p=!1)}async function Y(){n(2,f=!0);const be=await je("../api/project",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s})});Xn(Yt,r=await be.json(),r),n(2,f=!1)}async function ie(){if(!confirm("Are you sure? This will invalidate the current API key. All pages using the old key will stop receiving translations."))return;n(3,d=!0);const be=await je("../api/project/regenerate-key",{method:"POST"});Xn(Yt,r=await be.json(),r),r&&r.api_key&&cc(r.api_key),n(3,d=!1)}async function Z(){h.languages=m;const be=await je("../api/project/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:h})});Xn(Yt,r=await be.json(),r)}function H(){const be=y.trim(),ae=v.trim();!be||!ae||m.some(Ne=>Ne.code===be)||(n(7,m=[...m,{code:be,name:ae}]),n(8,y=""),n(9,v=""),Z())}function ce(be){n(7,m=m.filter(ae=>ae.code!==be)),Z()}async function se(){h.blockedTags=C.blockedTags,h.inlineTags=C.inlineTags,h.domContextSelectors=C.domContextSelectors,h.contextDepth=A;const be=await je("../api/project/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:h})});Xn(Yt,r=await be.json(),r)}function ee(be,ae){const Ne=C[be].disabled,Ae=Ne.indexOf(ae);Ae>=0?Ne.splice(Ae,1):Ne.push(ae),n(11,C),se()}function _e(be){const ae=x[be].trim();!ae||C[be].custom.includes(ae)||(n(11,C[be].custom=[...C[be].custom,ae],C),n(12,x[be]="",x),n(12,x),se())}function fe(be,ae){n(11,C[be].custom=C[be].custom.filter(Ne=>Ne!==ae),C),n(11,C),se()}function ye(be,ae){return!C[be].disabled.includes(ae)}async function G(){n(15,z=!z),h.screenshotsEnabled=z,await je("../api/project/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:h})})}async function de(){n(14,M=!M),h.domContextEnabled=M;const be=await je("../api/project/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:h})});Xn(Yt,r=await be.json(),r)}async function ue(){if(confirm("Delete ALL pending text nodes? This cannot be undone.")){n(16,E=!0),n(24,re="clearing");try{await je("../api/textnodes/clear-pending",{method:"POST"}),n(24,re="success"),await new Promise(be=>setTimeout(be,1500))}catch{}n(24,re=!1),n(16,E=!1)}}async function te(){if(confirm("This will permanently delete ALL text nodes, translations, and screenshots. This cannot be undone. Are you sure?")){n(17,P=!0),n(23,F="resetting");try{await je("../api/project/reset-database",{method:"POST"}),n(23,F="success"),await new Promise(be=>setTimeout(be,1500))}catch{}n(23,F=!1),n(17,P=!1)}}async function Se(){n(19,D=!0);try{const be=await je("../api/backups");n(18,I=await be.json())}catch{n(18,I=[])}n(19,D=!1)}async function S(){n(20,T=!0),n(22,k="backing-up");try{await je("../api/backups",{method:"POST"}),await Se(),n(22,k="success"),await new Promise(be=>setTimeout(be,1500))}catch{}n(22,k=!1),n(20,T=!1)}async function X(be){if(confirm(`Delete backup "${be}"? This cannot be undone.`)){n(21,N=be);try{await je(`../api/backups/${encodeURIComponent(be)}`,{method:"DELETE"}),await Se()}catch{}n(21,N=null)}}async function J(be,ae){await navigator.clipboard.writeText(be),n(1,u=ae),setTimeout(()=>{n(1,u="")},2e3)}function U(){s=this.value,n(0,s)}const O=()=>J(r.api_key,"key");function W(){g=this.value,n(4,g)}function le(){g=this.value,n(4,g)}const q=()=>n(6,_=!_),K=()=>J(V(),"snippet"),ne=be=>ce(be.code);function ke(){y=this.value,n(8,y)}function ge(){v=this.value,n(9,v)}const Ce=be=>X(be.filename),Fe=()=>n(10,w=!w),Me=()=>{n(13,A=0),se()},We=()=>{A===0&&(n(13,A=5),se())},Ze=()=>{n(13,A=Math.max(1,A-1)),se()};function Pe(){A=ic(this.value),n(13,A)}const Xe=()=>{n(13,A=A+1),se()},He=(be,ae)=>ee(be.key,ae),et=(be,ae)=>fe(be.key,ae);function tt(be){x[be.key]=this.value,n(12,x)}return[s,u,f,d,g,p,_,m,y,v,w,C,x,A,M,z,E,P,I,D,T,N,k,F,re,r,l,o,V,oe,Y,ie,H,ce,se,ee,_e,fe,ye,G,de,ue,te,Se,S,X,J,U,O,W,le,q,K,ne,ke,ge,Ce,Fe,Me,We,Ze,Pe,Xe,He,et,tt,(be,ae)=>{ae.key==="Enter"&&_e(be.key)},be=>_e(be.key)]}class Xd extends nn{constructor(t){super(),tn(this,t,Gd,Jd,Jt,{},null,[-1,-1,-1])}}function hi(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Qd(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Dl(e){let t,n,r;e.length!==2?(t=hi,n=(s,u)=>hi(e(s),u),r=(s,u)=>e(s)-u):(t=e===hi||e===Qd?e:$d,n=e,r=e);function i(s,u,f=0,d=s.length){if(f<d){if(t(u,u)!==0)return d;do{const h=f+d>>>1;n(s[h],u)<0?f=h+1:d=h}while(f<d)}return f}function l(s,u,f=0,d=s.length){if(f<d){if(t(u,u)!==0)return d;do{const h=f+d>>>1;n(s[h],u)<=0?f=h+1:d=h}while(f<d)}return f}function o(s,u,f=0,d=s.length){const h=i(s,u,f,d-1);return h>f&&r(s[h-1],u)>-r(s[h],u)?h-1:h}return{left:i,center:o,right:l}}function $d(){return 0}function e0(e){return e===null?NaN:+e}const t0=Dl(hi),n0=t0.right;Dl(e0).center;function r0(e,t){let n,r;if(t===void 0)for(const i of e)i!=null&&(n===void 0?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)));else{let i=-1;for(let l of e)(l=t(l,++i,e))!=null&&(n===void 0?l>=l&&(n=r=l):(n>l&&(n=l),r<l&&(r=l)))}return[n,r]}class va extends Map{constructor(t,n=o0){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,i]of t)this.set(r,i)}get(t){return super.get(wa(this,t))}has(t){return super.has(wa(this,t))}set(t,n){return super.set(i0(this,t),n)}delete(t){return super.delete(l0(this,t))}}function wa({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function i0({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function l0({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function o0(e){return e!==null&&typeof e=="object"?e.valueOf():e}const s0=Math.sqrt(50),a0=Math.sqrt(10),u0=Math.sqrt(2);function Ci(e,t,n){const r=(t-e)/Math.max(0,n),i=Math.floor(Math.log10(r)),l=r/Math.pow(10,i),o=l>=s0?10:l>=a0?5:l>=u0?2:1;let s,u,f;return i<0?(f=Math.pow(10,-i)/o,s=Math.round(e*f),u=Math.round(t*f),s/f<e&&++s,u/f>t&&--u,f=-f):(f=Math.pow(10,i)*o,s=Math.round(e/f),u=Math.round(t/f),s*f<e&&++s,u*f>t&&--u),u<s&&.5<=n&&n<2?Ci(e,t,n*2):[s,u,f]}function c0(e,t,n){if(t=+t,e=+e,n=+n,!(n>0))return[];if(e===t)return[e];const r=t<e,[i,l,o]=r?Ci(t,e,n):Ci(e,t,n);if(!(l>=i))return[];const s=l-i+1,u=new Array(s);if(r)if(o<0)for(let f=0;f<s;++f)u[f]=(l-f)/-o;else for(let f=0;f<s;++f)u[f]=(l-f)*o;else if(o<0)for(let f=0;f<s;++f)u[f]=(i+f)/-o;else for(let f=0;f<s;++f)u[f]=(i+f)*o;return u}function _l(e,t,n){return t=+t,e=+e,n=+n,Ci(e,t,n)[2]}function bl(e,t,n){t=+t,e=+e,n=+n;const r=t<e,i=r?_l(t,e,n):_l(e,t,n);return(r?-1:1)*(i<0?1/-i:i)}function oi(e,t){let n;if(t===void 0)for(const r of e)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of e)(i=t(i,++r,e))!=null&&(n<i||n===void 0&&i>=i)&&(n=i)}return n}function f0(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((t-e)/n))|0,l=new Array(i);++r<i;)l[r]=e+r*n;return l}function d0(e){return e}var rl=1,il=2,yl=3,Lr=4,ka=1e-6;function h0(e){return"translate("+e+",0)"}function p0(e){return"translate(0,"+e+")"}function g0(e){return t=>+e(t)}function m0(e,t){return t=Math.max(0,e.bandwidth()-t*2)/2,e.round()&&(t=Math.round(t)),n=>+e(n)+t}function _0(){return!this.__axis}function pc(e,t){var n=[],r=null,i=null,l=6,o=6,s=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,f=e===rl||e===Lr?-1:1,d=e===Lr||e===il?"x":"y",h=e===rl||e===yl?h0:p0;function g(p){var _=r??(t.ticks?t.ticks.apply(t,n):t.domain()),m=i??(t.tickFormat?t.tickFormat.apply(t,n):d0),y=Math.max(l,0)+s,v=t.range(),w=+v[0]+u,C=+v[v.length-1]+u,x=(t.bandwidth?m0:g0)(t.copy(),u),A=p.selection?p.selection():p,M=A.selectAll(".domain").data([null]),z=A.selectAll(".tick").data(_,t).order(),E=z.exit(),P=z.enter().append("g").attr("class","tick"),I=z.select("line"),D=z.select("text");M=M.merge(M.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),z=z.merge(P),I=I.merge(P.append("line").attr("stroke","currentColor").attr(d+"2",f*l)),D=D.merge(P.append("text").attr("fill","currentColor").attr(d,f*y).attr("dy",e===rl?"0em":e===yl?"0.71em":"0.32em")),p!==A&&(M=M.transition(p),z=z.transition(p),I=I.transition(p),D=D.transition(p),E=E.transition(p).attr("opacity",ka).attr("transform",function(T){return isFinite(T=x(T))?h(T+u):this.getAttribute("transform")}),P.attr("opacity",ka).attr("transform",function(T){var N=this.parentNode.__axis;return h((N&&isFinite(N=N(T))?N:x(T))+u)})),E.remove(),M.attr("d",e===Lr||e===il?o?"M"+f*o+","+w+"H"+u+"V"+C+"H"+f*o:"M"+u+","+w+"V"+C:o?"M"+w+","+f*o+"V"+u+"H"+C+"V"+f*o:"M"+w+","+u+"H"+C),z.attr("opacity",1).attr("transform",function(T){return h(x(T)+u)}),I.attr(d+"2",f*l),D.attr(d,f*y).text(m),A.filter(_0).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===il?"start":e===Lr?"end":"middle"),A.each(function(){this.__axis=x})}return g.scale=function(p){return arguments.length?(t=p,g):t},g.ticks=function(){return n=Array.from(arguments),g},g.tickArguments=function(p){return arguments.length?(n=p==null?[]:Array.from(p),g):n.slice()},g.tickValues=function(p){return arguments.length?(r=p==null?null:Array.from(p),g):r&&r.slice()},g.tickFormat=function(p){return arguments.length?(i=p,g):i},g.tickSize=function(p){return arguments.length?(l=o=+p,g):l},g.tickSizeInner=function(p){return arguments.length?(l=+p,g):l},g.tickSizeOuter=function(p){return arguments.length?(o=+p,g):o},g.tickPadding=function(p){return arguments.length?(s=+p,g):s},g.offset=function(p){return arguments.length?(u=+p,g):u},g}function xa(e){return pc(yl,e)}function Ca(e){return pc(Lr,e)}var b0={value:()=>{}};function gc(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+"")||r in n||/[\s.]/.test(r))throw new Error("illegal type: "+r);n[r]=[]}return new pi(n)}function pi(e){this._=e}function y0(e,t){return e.trim().split(/^|\s+/).map(function(n){var r="",i=n.indexOf(".");if(i>=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}pi.prototype=gc.prototype={constructor:pi,on:function(e,t){var n=this._,r=y0(e+"",n),i,l=-1,o=r.length;if(arguments.length<2){for(;++l<o;)if((i=(e=r[l]).type)&&(i=v0(n[i],e.name)))return i;return}if(t!=null&&typeof t!="function")throw new Error("invalid callback: "+t);for(;++l<o;)if(i=(e=r[l]).type)n[i]=Sa(n[i],e.name,t);else if(t==null)for(i in n)n[i]=Sa(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new pi(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=new Array(i),r=0,i,l;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(l=this._[e],r=0,i=l.length;r<i;++r)l[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var r=this._[e],i=0,l=r.length;i<l;++i)r[i].value.apply(t,n)}};function v0(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function Sa(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=b0,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var vl="http://www.w3.org/1999/xhtml";const Aa={svg:"http://www.w3.org/2000/svg",xhtml:vl,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Wi(e){var t=e+="",n=t.indexOf(":");return n>=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),Aa.hasOwnProperty(t)?{space:Aa[t],local:e}:e}function w0(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===vl&&t.documentElement.namespaceURI===vl?t.createElement(e):t.createElementNS(n,e)}}function k0(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function mc(e){var t=Wi(e);return(t.local?k0:w0)(t)}function x0(){}function Ol(e){return e==null?x0:function(){return this.querySelector(e)}}function C0(e){typeof e!="function"&&(e=Ol(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i<n;++i)for(var l=t[i],o=l.length,s=r[i]=new Array(o),u,f,d=0;d<o;++d)(u=l[d])&&(f=e.call(u,u.__data__,d,l))&&("__data__"in u&&(f.__data__=u.__data__),s[d]=f);return new Ht(r,this._parents)}function S0(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function A0(){return[]}function _c(e){return e==null?A0:function(){return this.querySelectorAll(e)}}function T0(e){return function(){return S0(e.apply(this,arguments))}}function M0(e){typeof e=="function"?e=T0(e):e=_c(e);for(var t=this._groups,n=t.length,r=[],i=[],l=0;l<n;++l)for(var o=t[l],s=o.length,u,f=0;f<s;++f)(u=o[f])&&(r.push(e.call(u,u.__data__,f,o)),i.push(u));return new Ht(r,i)}function bc(e){return function(){return this.matches(e)}}function yc(e){return function(t){return t.matches(e)}}var E0=Array.prototype.find;function L0(e){return function(){return E0.call(this.children,e)}}function N0(){return this.firstElementChild}function z0(e){return this.select(e==null?N0:L0(typeof e=="function"?e:yc(e)))}var I0=Array.prototype.filter;function P0(){return Array.from(this.children)}function D0(e){return function(){return I0.call(this.children,e)}}function O0(e){return this.selectAll(e==null?P0:D0(typeof e=="function"?e:yc(e)))}function F0(e){typeof e!="function"&&(e=bc(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i<n;++i)for(var l=t[i],o=l.length,s=r[i]=[],u,f=0;f<o;++f)(u=l[f])&&e.call(u,u.__data__,f,l)&&s.push(u);return new Ht(r,this._parents)}function vc(e){return new Array(e.length)}function R0(){return new Ht(this._enter||this._groups.map(vc),this._parents)}function Si(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}Si.prototype={constructor:Si,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function B0(e){return function(){return e}}function j0(e,t,n,r,i,l){for(var o=0,s,u=t.length,f=l.length;o<f;++o)(s=t[o])?(s.__data__=l[o],r[o]=s):n[o]=new Si(e,l[o]);for(;o<u;++o)(s=t[o])&&(i[o]=s)}function U0(e,t,n,r,i,l,o){var s,u,f=new Map,d=t.length,h=l.length,g=new Array(d),p;for(s=0;s<d;++s)(u=t[s])&&(g[s]=p=o.call(u,u.__data__,s,t)+"",f.has(p)?i[s]=u:f.set(p,u));for(s=0;s<h;++s)p=o.call(e,l[s],s,l)+"",(u=f.get(p))?(r[s]=u,u.__data__=l[s],f.delete(p)):n[s]=new Si(e,l[s]);for(s=0;s<d;++s)(u=t[s])&&f.get(g[s])===u&&(i[s]=u)}function H0(e){return e.__data__}function W0(e,t){if(!arguments.length)return Array.from(this,H0);var n=t?U0:j0,r=this._parents,i=this._groups;typeof e!="function"&&(e=B0(e));for(var l=i.length,o=new Array(l),s=new Array(l),u=new Array(l),f=0;f<l;++f){var d=r[f],h=i[f],g=h.length,p=Z0(e.call(d,d&&d.__data__,f,r)),_=p.length,m=s[f]=new Array(_),y=o[f]=new Array(_),v=u[f]=new Array(g);n(d,h,m,y,v,p,t);for(var w=0,C=0,x,A;w<_;++w)if(x=m[w]){for(w>=C&&(C=w+1);!(A=y[C])&&++C<_;);x._next=A||null}}return o=new Ht(o,r),o._enter=s,o._exit=u,o}function Z0(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Y0(){return new Ht(this._exit||this._groups.map(vc),this._parents)}function V0(e,t,n){var r=this.enter(),i=this,l=this.exit();return typeof e=="function"?(r=e(r),r&&(r=r.selection())):r=r.append(e+""),t!=null&&(i=t(i),i&&(i=i.selection())),n==null?l.remove():n(l),r&&i?r.merge(i).order():i}function q0(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,l=r.length,o=Math.min(i,l),s=new Array(i),u=0;u<o;++u)for(var f=n[u],d=r[u],h=f.length,g=s[u]=new Array(h),p,_=0;_<h;++_)(p=f[_]||d[_])&&(g[_]=p);for(;u<i;++u)s[u]=n[u];return new Ht(s,this._parents)}function K0(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,l=r[i],o;--i>=0;)(o=r[i])&&(l&&o.compareDocumentPosition(l)^4&&l.parentNode.insertBefore(o,l),l=o);return this}function J0(e){e||(e=G0);function t(h,g){return h&&g?e(h.__data__,g.__data__):!h-!g}for(var n=this._groups,r=n.length,i=new Array(r),l=0;l<r;++l){for(var o=n[l],s=o.length,u=i[l]=new Array(s),f,d=0;d<s;++d)(f=o[d])&&(u[d]=f);u.sort(t)}return new Ht(i,this._parents).order()}function G0(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function X0(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Q0(){return Array.from(this)}function $0(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,l=r.length;i<l;++i){var o=r[i];if(o)return o}return null}function eh(){let e=0;for(const t of this)++e;return e}function th(){return!this.node()}function nh(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],l=0,o=i.length,s;l<o;++l)(s=i[l])&&e.call(s,s.__data__,l,i);return this}function rh(e){return function(){this.removeAttribute(e)}}function ih(e){return function(){this.removeAttributeNS(e.space,e.local)}}function lh(e,t){return function(){this.setAttribute(e,t)}}function oh(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function sh(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function ah(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function uh(e,t){var n=Wi(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?ih:rh:typeof t=="function"?n.local?ah:sh:n.local?oh:lh)(n,t))}function wc(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function ch(e){return function(){this.style.removeProperty(e)}}function fh(e,t,n){return function(){this.style.setProperty(e,t,n)}}function dh(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function hh(e,t,n){return arguments.length>1?this.each((t==null?ch:typeof t=="function"?dh:fh)(e,t,n??"")):dr(this.node(),e)}function dr(e,t){return e.style.getPropertyValue(t)||wc(e).getComputedStyle(e,null).getPropertyValue(t)}function ph(e){return function(){delete this[e]}}function gh(e,t){return function(){this[e]=t}}function mh(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function _h(e,t){return arguments.length>1?this.each((t==null?ph:typeof t=="function"?mh:gh)(e,t)):this.node()[e]}function kc(e){return e.trim().split(/^|\s+/)}function Fl(e){return e.classList||new xc(e)}function xc(e){this._node=e,this._names=kc(e.getAttribute("class")||"")}xc.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function Cc(e,t){for(var n=Fl(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function Sc(e,t){for(var n=Fl(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function bh(e){return function(){Cc(this,e)}}function yh(e){return function(){Sc(this,e)}}function vh(e,t){return function(){(t.apply(this,arguments)?Cc:Sc)(this,e)}}function wh(e,t){var n=kc(e+"");if(arguments.length<2){for(var r=Fl(this.node()),i=-1,l=n.length;++i<l;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t=="function"?vh:t?bh:yh)(n,t))}function kh(){this.textContent=""}function xh(e){return function(){this.textContent=e}}function Ch(e){return function(){var t=e.apply(this,arguments);this.textContent=t??""}}function Sh(e){return arguments.length?this.each(e==null?kh:(typeof e=="function"?Ch:xh)(e)):this.node().textContent}function Ah(){this.innerHTML=""}function Th(e){return function(){this.innerHTML=e}}function Mh(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??""}}function Eh(e){return arguments.length?this.each(e==null?Ah:(typeof e=="function"?Mh:Th)(e)):this.node().innerHTML}function Lh(){this.nextSibling&&this.parentNode.appendChild(this)}function Nh(){return this.each(Lh)}function zh(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Ih(){return this.each(zh)}function Ph(e){var t=typeof e=="function"?e:mc(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function Dh(){return null}function Oh(e,t){var n=typeof e=="function"?e:mc(e),r=t==null?Dh:typeof t=="function"?t:Ol(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function Fh(){var e=this.parentNode;e&&e.removeChild(this)}function Rh(){return this.each(Fh)}function Bh(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function jh(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function Uh(e){return this.select(e?jh:Bh)}function Hh(e){return arguments.length?this.property("__data__",e):this.node().__data__}function Wh(e){return function(t){e.call(this,t,this.__data__)}}function Zh(e){return e.trim().split(/^|\s+/).map(function(t){var n="",r=t.indexOf(".");return r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function Yh(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,l;n<i;++n)l=t[n],(!e.type||l.type===e.type)&&l.name===e.name?this.removeEventListener(l.type,l.listener,l.options):t[++r]=l;++r?t.length=r:delete this.__on}}}function Vh(e,t,n){return function(){var r=this.__on,i,l=Wh(t);if(r){for(var o=0,s=r.length;o<s;++o)if((i=r[o]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=l,i.options=n),i.value=t;return}}this.addEventListener(e.type,l,n),i={type:e.type,name:e.name,value:t,listener:l,options:n},r?r.push(i):this.__on=[i]}}function qh(e,t,n){var r=Zh(e+""),i,l=r.length,o;if(arguments.length<2){var s=this.node().__on;if(s){for(var u=0,f=s.length,d;u<f;++u)for(i=0,d=s[u];i<l;++i)if((o=r[i]).type===d.type&&o.name===d.name)return d.value}return}for(s=t?Vh:Yh,i=0;i<l;++i)this.each(s(r[i],t,n));return this}function Ac(e,t,n){var r=wc(e),i=r.CustomEvent;typeof i=="function"?i=new i(t,n):(i=r.document.createEvent("Event"),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function Kh(e,t){return function(){return Ac(this,e,t)}}function Jh(e,t){return function(){return Ac(this,e,t.apply(this,arguments))}}function Gh(e,t){return this.each((typeof t=="function"?Jh:Kh)(e,t))}function*Xh(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,l=r.length,o;i<l;++i)(o=r[i])&&(yield o)}var Tc=[null];function Ht(e,t){this._groups=e,this._parents=t}function Hr(){return new Ht([[document.documentElement]],Tc)}function Qh(){return this}Ht.prototype=Hr.prototype={constructor:Ht,select:C0,selectAll:M0,selectChild:z0,selectChildren:O0,filter:F0,data:W0,enter:R0,exit:Y0,join:V0,merge:q0,selection:Qh,order:K0,sort:J0,call:X0,nodes:Q0,node:$0,size:eh,empty:th,each:nh,attr:uh,style:hh,property:_h,classed:wh,text:Sh,html:Eh,raise:Nh,lower:Ih,append:Ph,insert:Oh,remove:Rh,clone:Uh,datum:Hh,on:qh,dispatch:Gh,[Symbol.iterator]:Xh};function Ut(e){return typeof e=="string"?new Ht([[document.querySelector(e)]],[document.documentElement]):new Ht([[e]],Tc)}function Zi(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Rl(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function yr(){}var On=.7,hr=1/On,sr="\\s*([+-]?\\d+)\\s*",Rr="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",an="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",$h=/^#([0-9a-f]{3,8})$/,ep=new RegExp(`^rgb\\(${sr},${sr},${sr}\\)$`),tp=new RegExp(`^rgb\\(${an},${an},${an}\\)$`),np=new RegExp(`^rgba\\(${sr},${sr},${sr},${Rr}\\)$`),rp=new RegExp(`^rgba\\(${an},${an},${an},${Rr}\\)$`),ip=new RegExp(`^hsl\\(${Rr},${an},${an}\\)$`),lp=new RegExp(`^hsla\\(${Rr},${an},${an},${Rr}\\)$`),Ta={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Zi(yr,Fn,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:Ma,formatHex:Ma,formatHex8:op,formatHsl:sp,formatRgb:Ea,toString:Ea});function Ma(){return this.rgb().formatHex()}function op(){return this.rgb().formatHex8()}function sp(){return Ec(this).formatHsl()}function Ea(){return this.rgb().formatRgb()}function Fn(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=$h.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?La(t):n===3?new Tt(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?si(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?si(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=ep.exec(e))?new Tt(t[1],t[2],t[3],1):(t=tp.exec(e))?new Tt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=np.exec(e))?si(t[1],t[2],t[3],t[4]):(t=rp.exec(e))?si(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=ip.exec(e))?Ia(t[1],t[2]/100,t[3]/100,1):(t=lp.exec(e))?Ia(t[1],t[2]/100,t[3]/100,t[4]):Ta.hasOwnProperty(e)?La(Ta[e]):e==="transparent"?new Tt(NaN,NaN,NaN,0):null}function La(e){return new Tt(e>>16&255,e>>8&255,e&255,1)}function si(e,t,n,r){return r<=0&&(e=t=n=NaN),new Tt(e,t,n,r)}function Mc(e){return e instanceof yr||(e=Fn(e)),e?(e=e.rgb(),new Tt(e.r,e.g,e.b,e.opacity)):new Tt}function wl(e,t,n,r){return arguments.length===1?Mc(e):new Tt(e,t,n,r??1)}function Tt(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Zi(Tt,wl,Rl(yr,{brighter(e){return e=e==null?hr:Math.pow(hr,e),new Tt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?On:Math.pow(On,e),new Tt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Tt(Pn(this.r),Pn(this.g),Pn(this.b),Ai(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Na,formatHex:Na,formatHex8:ap,formatRgb:za,toString:za}));function Na(){return`#${zn(this.r)}${zn(this.g)}${zn(this.b)}`}function ap(){return`#${zn(this.r)}${zn(this.g)}${zn(this.b)}${zn((isNaN(this.opacity)?1:this.opacity)*255)}`}function za(){const e=Ai(this.opacity);return`${e===1?"rgb(":"rgba("}${Pn(this.r)}, ${Pn(this.g)}, ${Pn(this.b)}${e===1?")":`, ${e})`}`}function Ai(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Pn(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function zn(e){return e=Pn(e),(e<16?"0":"")+e.toString(16)}function Ia(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new en(e,t,n,r)}function Ec(e){if(e instanceof en)return new en(e.h,e.s,e.l,e.opacity);if(e instanceof yr||(e=Fn(e)),!e)return new en;if(e instanceof en)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),l=Math.max(t,n,r),o=NaN,s=l-i,u=(l+i)/2;return s?(t===l?o=(n-r)/s+(n<r)*6:n===l?o=(r-t)/s+2:o=(t-n)/s+4,s/=u<.5?l+i:2-l-i,o*=60):s=u>0&&u<1?0:o,new en(o,s,u,e.opacity)}function up(e,t,n,r){return arguments.length===1?Ec(e):new en(e,t,n,r??1)}function en(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Zi(en,up,Rl(yr,{brighter(e){return e=e==null?hr:Math.pow(hr,e),new en(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?On:Math.pow(On,e),new en(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Tt(ll(e>=240?e-240:e+120,i,r),ll(e,i,r),ll(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new en(Pa(this.h),ai(this.s),ai(this.l),Ai(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Ai(this.opacity);return`${e===1?"hsl(":"hsla("}${Pa(this.h)}, ${ai(this.s)*100}%, ${ai(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Pa(e){return e=(e||0)%360,e<0?e+360:e}function ai(e){return Math.max(0,Math.min(1,e||0))}function ll(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const cp=Math.PI/180,fp=180/Math.PI;var Lc=-.14861,Bl=1.78277,jl=-.29227,Yi=-.90649,Br=1.97294,Da=Br*Yi,Oa=Br*Bl,Fa=Bl*jl-Yi*Lc;function dp(e){if(e instanceof Dn)return new Dn(e.h,e.s,e.l,e.opacity);e instanceof Tt||(e=Mc(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(Fa*r+Da*t-Oa*n)/(Fa+Da-Oa),l=r-i,o=(Br*(n-i)-jl*l)/Yi,s=Math.sqrt(o*o+l*l)/(Br*i*(1-i)),u=s?Math.atan2(o,l)*fp-120:NaN;return new Dn(u<0?u+360:u,s,i,e.opacity)}function Sn(e,t,n,r){return arguments.length===1?dp(e):new Dn(e,t,n,r??1)}function Dn(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Zi(Dn,Sn,Rl(yr,{brighter(e){return e=e==null?hr:Math.pow(hr,e),new Dn(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?On:Math.pow(On,e),new Dn(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=isNaN(this.h)?0:(this.h+120)*cp,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Tt(255*(t+n*(Lc*r+Bl*i)),255*(t+n*(jl*r+Yi*i)),255*(t+n*(Br*r)),this.opacity)}}));const Vi=e=>()=>e;function Nc(e,t){return function(n){return e+n*t}}function hp(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function pp(e,t){var n=t-e;return n?Nc(e,n>180||n<-180?n-360*Math.round(n/360):n):Vi(isNaN(e)?t:e)}function gp(e){return(e=+e)==1?ar:function(t,n){return n-t?hp(t,n,e):Vi(isNaN(t)?n:t)}}function ar(e,t){var n=t-e;return n?Nc(e,n):Vi(isNaN(e)?t:e)}const Ti=function e(t){var n=gp(t);function r(i,l){var o=n((i=wl(i)).r,(l=wl(l)).r),s=n(i.g,l.g),u=n(i.b,l.b),f=ar(i.opacity,l.opacity);return function(d){return i.r=o(d),i.g=s(d),i.b=u(d),i.opacity=f(d),i+""}}return r.gamma=e,r}(1);function mp(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(l){for(i=0;i<n;++i)r[i]=e[i]*(1-l)+t[i]*l;return r}}function _p(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function bp(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=new Array(r),l=new Array(n),o;for(o=0;o<r;++o)i[o]=qi(e[o],t[o]);for(;o<n;++o)l[o]=t[o];return function(s){for(o=0;o<r;++o)l[o]=i[o](s);return l}}function yp(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function $t(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function vp(e,t){var n={},r={},i;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(i in t)i in e?n[i]=qi(e[i],t[i]):r[i]=t[i];return function(l){for(i in n)r[i]=n[i](l);return r}}var kl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ol=new RegExp(kl.source,"g");function wp(e){return function(){return e}}function kp(e){return function(t){return e(t)+""}}function zc(e,t){var n=kl.lastIndex=ol.lastIndex=0,r,i,l,o=-1,s=[],u=[];for(e=e+"",t=t+"";(r=kl.exec(e))&&(i=ol.exec(t));)(l=i.index)>n&&(l=t.slice(n,l),s[o]?s[o]+=l:s[++o]=l),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,u.push({i:o,x:$t(r,i)})),n=ol.lastIndex;return n<t.length&&(l=t.slice(n),s[o]?s[o]+=l:s[++o]=l),s.length<2?u[0]?kp(u[0].x):wp(t):(t=u.length,function(f){for(var d=0,h;d<t;++d)s[(h=u[d]).i]=h.x(f);return s.join("")})}function qi(e,t){var n=typeof t,r;return t==null||n==="boolean"?Vi(t):(n==="number"?$t:n==="string"?(r=Fn(t))?(t=r,Ti):zc:t instanceof Fn?Ti:t instanceof Date?yp:_p(t)?mp:Array.isArray(t)?bp:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?vp:$t)(e,t)}function Ic(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}var Ra=180/Math.PI,xl={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Pc(e,t,n,r,i,l){var o,s,u;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(u=e*n+t*r)&&(n-=e*u,r-=t*u),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,u/=s),e*r<t*n&&(e=-e,t=-t,u=-u,o=-o),{translateX:i,translateY:l,rotate:Math.atan2(t,e)*Ra,skewX:Math.atan(u)*Ra,scaleX:o,scaleY:s}}var ui;function xp(e){const t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?xl:Pc(t.a,t.b,t.c,t.d,t.e,t.f)}function Cp(e){return e==null||(ui||(ui=document.createElementNS("http://www.w3.org/2000/svg","g")),ui.setAttribute("transform",e),!(e=ui.transform.baseVal.consolidate()))?xl:(e=e.matrix,Pc(e.a,e.b,e.c,e.d,e.e,e.f))}function Dc(e,t,n,r){function i(f){return f.length?f.pop()+" ":""}function l(f,d,h,g,p,_){if(f!==h||d!==g){var m=p.push("translate(",null,t,null,n);_.push({i:m-4,x:$t(f,h)},{i:m-2,x:$t(d,g)})}else(h||g)&&p.push("translate("+h+t+g+n)}function o(f,d,h,g){f!==d?(f-d>180?d+=360:d-f>180&&(f+=360),g.push({i:h.push(i(h)+"rotate(",null,r)-2,x:$t(f,d)})):d&&h.push(i(h)+"rotate("+d+r)}function s(f,d,h,g){f!==d?g.push({i:h.push(i(h)+"skewX(",null,r)-2,x:$t(f,d)}):d&&h.push(i(h)+"skewX("+d+r)}function u(f,d,h,g,p,_){if(f!==h||d!==g){var m=p.push(i(p)+"scale(",null,",",null,")");_.push({i:m-4,x:$t(f,h)},{i:m-2,x:$t(d,g)})}else(h!==1||g!==1)&&p.push(i(p)+"scale("+h+","+g+")")}return function(f,d){var h=[],g=[];return f=e(f),d=e(d),l(f.translateX,f.translateY,d.translateX,d.translateY,h,g),o(f.rotate,d.rotate,h,g),s(f.skewX,d.skewX,h,g),u(f.scaleX,f.scaleY,d.scaleX,d.scaleY,h,g),f=d=null,function(p){for(var _=-1,m=g.length,y;++_<m;)h[(y=g[_]).i]=y.x(p);return h.join("")}}}var Sp=Dc(xp,"px, ","px)","deg)"),Ap=Dc(Cp,", ",")",")");function Oc(e){return function t(n){n=+n;function r(i,l){var o=e((i=Sn(i)).h,(l=Sn(l)).h),s=ar(i.s,l.s),u=ar(i.l,l.l),f=ar(i.opacity,l.opacity);return function(d){return i.h=o(d),i.s=s(d),i.l=u(Math.pow(d,n)),i.opacity=f(d),i+""}}return r.gamma=t,r}(1)}Oc(pp);var Fc=Oc(ar),pr=0,Nr=0,Ar=0,Rc=1e3,Mi,zr,Ei=0,Rn=0,Ki=0,jr=typeof performance=="object"&&performance.now?performance:Date,Bc=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Ul(){return Rn||(Bc(Tp),Rn=jr.now()+Ki)}function Tp(){Rn=0}function Li(){this._call=this._time=this._next=null}Li.prototype=jc.prototype={constructor:Li,restart:function(e,t,n){if(typeof e!="function")throw new TypeError("callback is not a function");n=(n==null?Ul():+n)+(t==null?0:+t),!this._next&&zr!==this&&(zr?zr._next=this:Mi=this,zr=this),this._call=e,this._time=n,Cl()},stop:function(){this._call&&(this._call=null,this._time=1/0,Cl())}};function jc(e,t,n){var r=new Li;return r.restart(e,t,n),r}function Mp(){Ul(),++pr;for(var e=Mi,t;e;)(t=Rn-e._time)>=0&&e._call.call(void 0,t),e=e._next;--pr}function Ba(){Rn=(Ei=jr.now())+Ki,pr=Nr=0;try{Mp()}finally{pr=0,Lp(),Rn=0}}function Ep(){var e=jr.now(),t=e-Ei;t>Rc&&(Ki-=t,Ei=e)}function Lp(){for(var e,t=Mi,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Mi=n);zr=e,Cl(r)}function Cl(e){if(!pr){Nr&&(Nr=clearTimeout(Nr));var t=e-Rn;t>24?(e<1/0&&(Nr=setTimeout(Ba,e-jr.now()-Ki)),Ar&&(Ar=clearInterval(Ar))):(Ar||(Ei=jr.now(),Ar=setInterval(Ep,Rc)),pr=1,Bc(Ba))}}function ja(e,t,n){var r=new Li;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var Np=gc("start","end","cancel","interrupt"),zp=[],Uc=0,Ua=1,Sl=2,gi=3,Ha=4,Al=5,mi=6;function Ji(e,t,n,r,i,l){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;Ip(e,n,{name:t,index:r,group:i,on:Np,tween:zp,time:l.time,delay:l.delay,duration:l.duration,ease:l.ease,timer:null,state:Uc})}function Hl(e,t){var n=rn(e,t);if(n.state>Uc)throw new Error("too late; already scheduled");return n}function fn(e,t){var n=rn(e,t);if(n.state>gi)throw new Error("too late; already running");return n}function rn(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Ip(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=jc(l,0,n.time);function l(f){n.state=Ua,n.timer.restart(o,n.delay,n.time),n.delay<=f&&o(f-n.delay)}function o(f){var d,h,g,p;if(n.state!==Ua)return u();for(d in r)if(p=r[d],p.name===n.name){if(p.state===gi)return ja(o);p.state===Ha?(p.state=mi,p.timer.stop(),p.on.call("interrupt",e,e.__data__,p.index,p.group),delete r[d]):+d<t&&(p.state=mi,p.timer.stop(),p.on.call("cancel",e,e.__data__,p.index,p.group),delete r[d])}if(ja(function(){n.state===gi&&(n.state=Ha,n.timer.restart(s,n.delay,n.time),s(f))}),n.state=Sl,n.on.call("start",e,e.__data__,n.index,n.group),n.state===Sl){for(n.state=gi,i=new Array(g=n.tween.length),d=0,h=-1;d<g;++d)(p=n.tween[d].value.call(e,e.__data__,n.index,n.group))&&(i[++h]=p);i.length=h+1}}function s(f){for(var d=f<n.duration?n.ease.call(null,f/n.duration):(n.timer.restart(u),n.state=Al,1),h=-1,g=i.length;++h<g;)i[h].call(e,d);n.state===Al&&(n.on.call("end",e,e.__data__,n.index,n.group),u())}function u(){n.state=mi,n.timer.stop(),delete r[t];for(var f in r)return;delete e.__transition}}function Pp(e,t){var n=e.__transition,r,i,l=!0,o;if(n){t=t==null?null:t+"";for(o in n){if((r=n[o]).name!==t){l=!1;continue}i=r.state>Sl&&r.state<Al,r.state=mi,r.timer.stop(),r.on.call(i?"interrupt":"cancel",e,e.__data__,r.index,r.group),delete n[o]}l&&delete e.__transition}}function Dp(e){return this.each(function(){Pp(this,e)})}function Op(e,t){var n,r;return function(){var i=fn(this,e),l=i.tween;if(l!==n){r=n=l;for(var o=0,s=r.length;o<s;++o)if(r[o].name===t){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function Fp(e,t,n){var r,i;if(typeof n!="function")throw new Error;return function(){var l=fn(this,e),o=l.tween;if(o!==r){i=(r=o).slice();for(var s={name:t,value:n},u=0,f=i.length;u<f;++u)if(i[u].name===t){i[u]=s;break}u===f&&i.push(s)}l.tween=i}}function Rp(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r=rn(this.node(),n).tween,i=0,l=r.length,o;i<l;++i)if((o=r[i]).name===e)return o.value;return null}return this.each((t==null?Op:Fp)(n,e,t))}function Wl(e,t,n){var r=e._id;return e.each(function(){var i=fn(this,r);(i.value||(i.value={}))[t]=n.apply(this,arguments)}),function(i){return rn(i,r).value[t]}}function Hc(e,t){var n;return(typeof t=="number"?$t:t instanceof Fn?Ti:(n=Fn(t))?(t=n,Ti):zc)(e,t)}function Bp(e){return function(){this.removeAttribute(e)}}function jp(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Up(e,t,n){var r,i=n+"",l;return function(){var o=this.getAttribute(e);return o===i?null:o===r?l:l=t(r=o,n)}}function Hp(e,t,n){var r,i=n+"",l;return function(){var o=this.getAttributeNS(e.space,e.local);return o===i?null:o===r?l:l=t(r=o,n)}}function Wp(e,t,n){var r,i,l;return function(){var o,s=n(this),u;return s==null?void this.removeAttribute(e):(o=this.getAttribute(e),u=s+"",o===u?null:o===r&&u===i?l:(i=u,l=t(r=o,s)))}}function Zp(e,t,n){var r,i,l;return function(){var o,s=n(this),u;return s==null?void this.removeAttributeNS(e.space,e.local):(o=this.getAttributeNS(e.space,e.local),u=s+"",o===u?null:o===r&&u===i?l:(i=u,l=t(r=o,s)))}}function Yp(e,t){var n=Wi(e),r=n==="transform"?Ap:Hc;return this.attrTween(e,typeof t=="function"?(n.local?Zp:Wp)(n,r,Wl(this,"attr."+e,t)):t==null?(n.local?jp:Bp)(n):(n.local?Hp:Up)(n,r,t))}function Vp(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function qp(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function Kp(e,t){var n,r;function i(){var l=t.apply(this,arguments);return l!==r&&(n=(r=l)&&qp(e,l)),n}return i._value=t,i}function Jp(e,t){var n,r;function i(){var l=t.apply(this,arguments);return l!==r&&(n=(r=l)&&Vp(e,l)),n}return i._value=t,i}function Gp(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!="function")throw new Error;var r=Wi(e);return this.tween(n,(r.local?Kp:Jp)(r,t))}function Xp(e,t){return function(){Hl(this,e).delay=+t.apply(this,arguments)}}function Qp(e,t){return t=+t,function(){Hl(this,e).delay=t}}function $p(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?Xp:Qp)(t,e)):rn(this.node(),t).delay}function e1(e,t){return function(){fn(this,e).duration=+t.apply(this,arguments)}}function t1(e,t){return t=+t,function(){fn(this,e).duration=t}}function n1(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?e1:t1)(t,e)):rn(this.node(),t).duration}function r1(e,t){if(typeof t!="function")throw new Error;return function(){fn(this,e).ease=t}}function i1(e){var t=this._id;return arguments.length?this.each(r1(t,e)):rn(this.node(),t).ease}function l1(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!="function")throw new Error;fn(this,e).ease=n}}function o1(e){if(typeof e!="function")throw new Error;return this.each(l1(this._id,e))}function s1(e){typeof e!="function"&&(e=bc(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i<n;++i)for(var l=t[i],o=l.length,s=r[i]=[],u,f=0;f<o;++f)(u=l[f])&&e.call(u,u.__data__,f,l)&&s.push(u);return new _n(r,this._parents,this._name,this._id)}function a1(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,r=t.length,i=n.length,l=Math.min(r,i),o=new Array(r),s=0;s<l;++s)for(var u=t[s],f=n[s],d=u.length,h=o[s]=new Array(d),g,p=0;p<d;++p)(g=u[p]||f[p])&&(h[p]=g);for(;s<r;++s)o[s]=t[s];return new _n(o,this._parents,this._name,this._id)}function u1(e){return(e+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||t==="start"})}function c1(e,t,n){var r,i,l=u1(t)?Hl:fn;return function(){var o=l(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function f1(e,t){var n=this._id;return arguments.length<2?rn(this.node(),n).on.on(e):this.each(c1(n,e,t))}function d1(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function h1(){return this.on("end.remove",d1(this._id))}function p1(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Ol(e));for(var r=this._groups,i=r.length,l=new Array(i),o=0;o<i;++o)for(var s=r[o],u=s.length,f=l[o]=new Array(u),d,h,g=0;g<u;++g)(d=s[g])&&(h=e.call(d,d.__data__,g,s))&&("__data__"in d&&(h.__data__=d.__data__),f[g]=h,Ji(f[g],t,n,g,f,rn(d,n)));return new _n(l,this._parents,t,n)}function g1(e){var t=this._name,n=this._id;typeof e!="function"&&(e=_c(e));for(var r=this._groups,i=r.length,l=[],o=[],s=0;s<i;++s)for(var u=r[s],f=u.length,d,h=0;h<f;++h)if(d=u[h]){for(var g=e.call(d,d.__data__,h,u),p,_=rn(d,n),m=0,y=g.length;m<y;++m)(p=g[m])&&Ji(p,t,n,m,g,_);l.push(g),o.push(d)}return new _n(l,o,t,n)}var m1=Hr.prototype.constructor;function _1(){return new m1(this._groups,this._parents)}function b1(e,t){var n,r,i;return function(){var l=dr(this,e),o=(this.style.removeProperty(e),dr(this,e));return l===o?null:l===n&&o===r?i:i=t(n=l,r=o)}}function Wc(e){return function(){this.style.removeProperty(e)}}function y1(e,t,n){var r,i=n+"",l;return function(){var o=dr(this,e);return o===i?null:o===r?l:l=t(r=o,n)}}function v1(e,t,n){var r,i,l;return function(){var o=dr(this,e),s=n(this),u=s+"";return s==null&&(u=s=(this.style.removeProperty(e),dr(this,e))),o===u?null:o===r&&u===i?l:(i=u,l=t(r=o,s))}}function w1(e,t){var n,r,i,l="style."+t,o="end."+l,s;return function(){var u=fn(this,e),f=u.on,d=u.value[l]==null?s||(s=Wc(t)):void 0;(f!==n||i!==d)&&(r=(n=f).copy()).on(o,i=d),u.on=r}}function k1(e,t,n){var r=(e+="")=="transform"?Sp:Hc;return t==null?this.styleTween(e,b1(e,r)).on("end.style."+e,Wc(e)):typeof t=="function"?this.styleTween(e,v1(e,r,Wl(this,"style."+e,t))).each(w1(this._id,e)):this.styleTween(e,y1(e,r,t),n).on("end.style."+e,null)}function x1(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function C1(e,t,n){var r,i;function l(){var o=t.apply(this,arguments);return o!==i&&(r=(i=o)&&x1(e,o,n)),r}return l._value=t,l}function S1(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!="function")throw new Error;return this.tween(r,C1(e,t,n??""))}function A1(e){return function(){this.textContent=e}}function T1(e){return function(){var t=e(this);this.textContent=t??""}}function M1(e){return this.tween("text",typeof e=="function"?T1(Wl(this,"text",e)):A1(e==null?"":e+""))}function E1(e){return function(t){this.textContent=e.call(this,t)}}function L1(e){var t,n;function r(){var i=e.apply(this,arguments);return i!==n&&(t=(n=i)&&E1(i)),t}return r._value=e,r}function N1(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!="function")throw new Error;return this.tween(t,L1(e))}function z1(){for(var e=this._name,t=this._id,n=Zc(),r=this._groups,i=r.length,l=0;l<i;++l)for(var o=r[l],s=o.length,u,f=0;f<s;++f)if(u=o[f]){var d=rn(u,t);Ji(u,e,n,f,o,{time:d.time+d.delay+d.duration,delay:0,duration:d.duration,ease:d.ease})}return new _n(r,this._parents,e,n)}function I1(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(l,o){var s={value:o},u={value:function(){--i===0&&l()}};n.each(function(){var f=fn(this,r),d=f.on;d!==e&&(t=(e=d).copy(),t._.cancel.push(s),t._.interrupt.push(s),t._.end.push(u)),f.on=t}),i===0&&l()})}var P1=0;function _n(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Zc(){return++P1}var hn=Hr.prototype;_n.prototype={constructor:_n,select:p1,selectAll:g1,selectChild:hn.selectChild,selectChildren:hn.selectChildren,filter:s1,merge:a1,selection:_1,transition:z1,call:hn.call,nodes:hn.nodes,node:hn.node,size:hn.size,empty:hn.empty,each:hn.each,on:f1,attr:Yp,attrTween:Gp,style:k1,styleTween:S1,text:M1,textTween:N1,remove:h1,tween:Rp,delay:$p,duration:n1,ease:i1,easeVarying:o1,end:I1,[Symbol.iterator]:hn[Symbol.iterator]};function D1(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var O1={time:null,delay:0,duration:250,ease:D1};function F1(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return n}function R1(e){var t,n;e instanceof _n?(t=e._id,e=e._name):(t=Zc(),(n=O1).time=Ul(),e=e==null?null:e+"");for(var r=this._groups,i=r.length,l=0;l<i;++l)for(var o=r[l],s=o.length,u,f=0;f<s;++f)(u=o[f])&&Ji(u,e,t,f,o,n||F1(u,t));return new _n(r,this._parents,e,t)}Hr.prototype.interrupt=Dp;Hr.prototype.transition=R1;const Tl=Math.PI,Ml=2*Tl,En=1e-6,B1=Ml-En;function Yc(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=arguments[t]+e[t]}function j1(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Yc;const n=10**t;return function(r){this._+=r[0];for(let i=1,l=r.length;i<l;++i)this._+=Math.round(arguments[i]*n)/n+r[i]}}class U1{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?Yc:j1(t)}moveTo(t,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,n){this._append`L${this._x1=+t},${this._y1=+n}`}quadraticCurveTo(t,n,r,i){this._append`Q${+t},${+n},${this._x1=+r},${this._y1=+i}`}bezierCurveTo(t,n,r,i,l,o){this._append`C${+t},${+n},${+r},${+i},${this._x1=+l},${this._y1=+o}`}arcTo(t,n,r,i,l){if(t=+t,n=+n,r=+r,i=+i,l=+l,l<0)throw new Error(`negative radius: ${l}`);let o=this._x1,s=this._y1,u=r-t,f=i-n,d=o-t,h=s-n,g=d*d+h*h;if(this._x1===null)this._append`M${this._x1=t},${this._y1=n}`;else if(g>En)if(!(Math.abs(h*u-f*d)>En)||!l)this._append`L${this._x1=t},${this._y1=n}`;else{let p=r-o,_=i-s,m=u*u+f*f,y=p*p+_*_,v=Math.sqrt(m),w=Math.sqrt(g),C=l*Math.tan((Tl-Math.acos((m+g-y)/(2*v*w)))/2),x=C/w,A=C/v;Math.abs(x-1)>En&&this._append`L${t+x*d},${n+x*h}`,this._append`A${l},${l},0,0,${+(h*p>d*_)},${this._x1=t+A*u},${this._y1=n+A*f}`}}arc(t,n,r,i,l,o){if(t=+t,n=+n,r=+r,o=!!o,r<0)throw new Error(`negative radius: ${r}`);let s=r*Math.cos(i),u=r*Math.sin(i),f=t+s,d=n+u,h=1^o,g=o?i-l:l-i;this._x1===null?this._append`M${f},${d}`:(Math.abs(this._x1-f)>En||Math.abs(this._y1-d)>En)&&this._append`L${f},${d}`,r&&(g<0&&(g=g%Ml+Ml),g>B1?this._append`A${r},${r},0,1,${h},${t-s},${n-u}A${r},${r},0,1,${h},${this._x1=f},${this._y1=d}`:g>En&&this._append`A${r},${r},0,${+(g>=Tl)},${h},${this._x1=t+r*Math.cos(l)},${this._y1=n+r*Math.sin(l)}`)}rect(t,n,r,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+i}h${-r}Z`}toString(){return this._}}function H1(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Ni(e,t){if(!isFinite(e)||e===0)return null;var n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function gr(e){return e=Ni(Math.abs(e)),e?e[1]:NaN}function W1(e,t){return function(n,r){for(var i=n.length,l=[],o=0,s=e[0],u=0;i>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),l.push(n.substring(i-=s,i+s)),!((u+=s+1)>r));)s=e[o=(o+1)%e.length];return l.reverse().join(t)}}function Z1(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var Y1=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function zi(e){if(!(t=Y1.exec(e)))throw new Error("invalid format: "+e);var t;return new Zl({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}zi.prototype=Zl.prototype;function Zl(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}Zl.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function V1(e){e:for(var t=e.length,n=1,r=-1,i;n<t;++n)switch(e[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+e[n])break e;r>0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(i+1):e}var Ii;function q1(e,t){var n=Ni(e,t);if(!n)return Ii=void 0,e.toPrecision(t);var r=n[0],i=n[1],l=i-(Ii=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return l===o?r:l>o?r+new Array(l-o+1).join("0"):l>0?r.slice(0,l)+"."+r.slice(l):"0."+new Array(1-l).join("0")+Ni(e,Math.max(0,t+l-1))[0]}function Wa(e,t){var n=Ni(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const Za={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:H1,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Wa(e*100,t),r:Wa,s:q1,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Ya(e){return e}var Va=Array.prototype.map,qa=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function K1(e){var t=e.grouping===void 0||e.thousands===void 0?Ya:W1(Va.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",l=e.numerals===void 0?Ya:Z1(Va.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",u=e.nan===void 0?"NaN":e.nan+"";function f(h,g){h=zi(h);var p=h.fill,_=h.align,m=h.sign,y=h.symbol,v=h.zero,w=h.width,C=h.comma,x=h.precision,A=h.trim,M=h.type;M==="n"?(C=!0,M="g"):Za[M]||(x===void 0&&(x=12),A=!0,M="g"),(v||p==="0"&&_==="=")&&(v=!0,p="0",_="=");var z=(g&&g.prefix!==void 0?g.prefix:"")+(y==="$"?n:y==="#"&&/[boxX]/.test(M)?"0"+M.toLowerCase():""),E=(y==="$"?r:/[%p]/.test(M)?o:"")+(g&&g.suffix!==void 0?g.suffix:""),P=Za[M],I=/[defgprs%]/.test(M);x=x===void 0?6:/[gprs]/.test(M)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function D(T){var N=z,k=E,F,re,V;if(M==="c")k=P(T)+k,T="";else{T=+T;var oe=T<0||1/T<0;if(T=isNaN(T)?u:P(Math.abs(T),x),A&&(T=V1(T)),oe&&+T==0&&m!=="+"&&(oe=!1),N=(oe?m==="("?m:s:m==="-"||m==="("?"":m)+N,k=(M==="s"&&!isNaN(T)&&Ii!==void 0?qa[8+Ii/3]:"")+k+(oe&&m==="("?")":""),I){for(F=-1,re=T.length;++F<re;)if(V=T.charCodeAt(F),48>V||V>57){k=(V===46?i+T.slice(F+1):T.slice(F))+k,T=T.slice(0,F);break}}}C&&!v&&(T=t(T,1/0));var Y=N.length+T.length+k.length,ie=Y<w?new Array(w-Y+1).join(p):"";switch(C&&v&&(T=t(ie+T,ie.length?w-k.length:1/0),ie=""),_){case"<":T=N+T+k+ie;break;case"=":T=N+ie+T+k;break;case"^":T=ie.slice(0,Y=ie.length>>1)+N+T+k+ie.slice(Y);break;default:T=ie+N+T+k;break}return l(T)}return D.toString=function(){return h+""},D}function d(h,g){var p=Math.max(-8,Math.min(8,Math.floor(gr(g)/3)))*3,_=Math.pow(10,-p),m=f((h=zi(h),h.type="f",h),{suffix:qa[8+p/3]});return function(y){return m(_*y)}}return{format:f,formatPrefix:d}}var ci,Pi,Vc;J1({thousands:",",grouping:[3],currency:["$",""]});function J1(e){return ci=K1(e),Pi=ci.format,Vc=ci.formatPrefix,ci}function G1(e){return Math.max(0,-gr(Math.abs(e)))}function X1(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(gr(t)/3)))*3-gr(Math.abs(e)))}function Q1(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,gr(t)-gr(e))+1}function Gi(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function $1(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const Ka=Symbol("implicit");function qc(){var e=new va,t=[],n=[],r=Ka;function i(l){let o=e.get(l);if(o===void 0){if(r!==Ka)return r;e.set(l,o=t.push(l)-1)}return n[o%n.length]}return i.domain=function(l){if(!arguments.length)return t.slice();t=[],e=new va;for(const o of l)e.has(o)||e.set(o,t.push(o)-1);return i},i.range=function(l){return arguments.length?(n=Array.from(l),i):n.slice()},i.unknown=function(l){return arguments.length?(r=l,i):r},i.copy=function(){return qc(t,n).unknown(r)},Gi.apply(i,arguments),i}function Kc(){var e=qc().unknown(void 0),t=e.domain,n=e.range,r=0,i=1,l,o,s=!1,u=0,f=0,d=.5;delete e.unknown;function h(){var g=t().length,p=i<r,_=p?i:r,m=p?r:i;l=(m-_)/Math.max(1,g-u+f*2),s&&(l=Math.floor(l)),_+=(m-_-l*(g-u))*d,o=l*(1-u),s&&(_=Math.round(_),o=Math.round(o));var y=f0(g).map(function(v){return _+l*v});return n(p?y.reverse():y)}return e.domain=function(g){return arguments.length?(t(g),h()):t()},e.range=function(g){return arguments.length?([r,i]=g,r=+r,i=+i,h()):[r,i]},e.rangeRound=function(g){return[r,i]=g,r=+r,i=+i,s=!0,h()},e.bandwidth=function(){return o},e.step=function(){return l},e.round=function(g){return arguments.length?(s=!!g,h()):s},e.padding=function(g){return arguments.length?(u=Math.min(1,f=+g),h()):u},e.paddingInner=function(g){return arguments.length?(u=Math.min(1,g),h()):u},e.paddingOuter=function(g){return arguments.length?(f=+g,h()):f},e.align=function(g){return arguments.length?(d=Math.max(0,Math.min(1,g)),h()):d},e.copy=function(){return Kc(t(),[r,i]).round(s).paddingInner(u).paddingOuter(f).align(d)},Gi.apply(h(),arguments)}function eg(e){return function(){return e}}function tg(e){return+e}var Ja=[0,1];function Cn(e){return e}function El(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:eg(isNaN(t)?NaN:.5)}function ng(e,t){var n;return e>t&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function rg(e,t,n){var r=e[0],i=e[1],l=t[0],o=t[1];return i<r?(r=El(i,r),l=n(o,l)):(r=El(r,i),l=n(l,o)),function(s){return l(r(s))}}function ig(e,t,n){var r=Math.min(e.length,t.length)-1,i=new Array(r),l=new Array(r),o=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++o<r;)i[o]=El(e[o],e[o+1]),l[o]=n(t[o],t[o+1]);return function(s){var u=n0(e,s,1,r)-1;return l[u](i[u](s))}}function Jc(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function lg(){var e=Ja,t=Ja,n=qi,r,i,l,o=Cn,s,u,f;function d(){var g=Math.min(e.length,t.length);return o!==Cn&&(o=ng(e[0],e[g-1])),s=g>2?ig:rg,u=f=null,h}function h(g){return g==null||isNaN(g=+g)?l:(u||(u=s(e.map(r),t,n)))(r(o(g)))}return h.invert=function(g){return o(i((f||(f=s(t,e.map(r),$t)))(g)))},h.domain=function(g){return arguments.length?(e=Array.from(g,tg),d()):e.slice()},h.range=function(g){return arguments.length?(t=Array.from(g),d()):t.slice()},h.rangeRound=function(g){return t=Array.from(g),n=Ic,d()},h.clamp=function(g){return arguments.length?(o=g?!0:Cn,d()):o!==Cn},h.interpolate=function(g){return arguments.length?(n=g,d()):n},h.unknown=function(g){return arguments.length?(l=g,h):l},function(g,p){return r=g,i=p,d()}}function Gc(){return lg()(Cn,Cn)}function og(e,t,n,r){var i=bl(e,t,n),l;switch(r=zi(r??",f"),r.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(l=X1(i,o))&&(r.precision=l),Vc(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(l=Q1(i,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=l-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(l=G1(i))&&(r.precision=l-(r.type==="%")*2);break}}return Pi(r)}function Xc(e){var t=e.domain;return e.ticks=function(n){var r=t();return c0(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var i=t();return og(i[0],i[i.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),i=0,l=r.length-1,o=r[i],s=r[l],u,f,d=10;for(s<o&&(f=o,o=s,s=f,f=i,i=l,l=f);d-- >0;){if(f=_l(o,s,n),f===u)return r[i]=o,r[l]=s,t(r);if(f>0)o=Math.floor(o/f)*f,s=Math.ceil(s/f)*f;else if(f<0)o=Math.ceil(o*f)/f,s=Math.floor(s*f)/f;else break;u=f}return e},e}function Ir(){var e=Gc();return e.copy=function(){return Jc(e,Ir())},Gi.apply(e,arguments),Xc(e)}function sg(e,t){e=e.slice();var n=0,r=e.length-1,i=e[n],l=e[r],o;return l<i&&(o=n,n=r,r=o,o=i,i=l,l=o),e[n]=t.floor(i),e[r]=t.ceil(l),e}const sl=new Date,al=new Date;function yt(e,t,n,r){function i(l){return e(l=arguments.length===0?new Date:new Date(+l)),l}return i.floor=l=>(e(l=new Date(+l)),l),i.ceil=l=>(e(l=new Date(l-1)),t(l,1),e(l),l),i.round=l=>{const o=i(l),s=i.ceil(l);return l-o<s-l?o:s},i.offset=(l,o)=>(t(l=new Date(+l),o==null?1:Math.floor(o)),l),i.range=(l,o,s)=>{const u=[];if(l=i.ceil(l),s=s==null?1:Math.floor(s),!(l<o)||!(s>0))return u;let f;do u.push(f=new Date(+l)),t(l,s),e(l);while(f<l&&l<o);return u},i.filter=l=>yt(o=>{if(o>=o)for(;e(o),!l(o);)o.setTime(o-1)},(o,s)=>{if(o>=o)if(s<0)for(;++s<=0;)for(;t(o,-1),!l(o););else for(;--s>=0;)for(;t(o,1),!l(o););}),n&&(i.count=(l,o)=>(sl.setTime(+l),al.setTime(+o),e(sl),e(al),Math.floor(n(sl,al))),i.every=l=>(l=Math.floor(l),!isFinite(l)||!(l>0)?null:l>1?i.filter(r?o=>r(o)%l===0:o=>i.count(0,o)%l===0):i)),i}const Di=yt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Di.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?yt(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Di);Di.range;const pn=1e3,Kt=pn*60,gn=Kt*60,bn=gn*24,Yl=bn*7,Ga=bn*30,ul=bn*365,rr=yt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*pn)},(e,t)=>(t-e)/pn,e=>e.getUTCSeconds());rr.range;const Vl=yt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*pn)},(e,t)=>{e.setTime(+e+t*Kt)},(e,t)=>(t-e)/Kt,e=>e.getMinutes());Vl.range;const ag=yt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Kt)},(e,t)=>(t-e)/Kt,e=>e.getUTCMinutes());ag.range;const ql=yt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*pn-e.getMinutes()*Kt)},(e,t)=>{e.setTime(+e+t*gn)},(e,t)=>(t-e)/gn,e=>e.getHours());ql.range;const ug=yt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*gn)},(e,t)=>(t-e)/gn,e=>e.getUTCHours());ug.range;const Wr=yt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Kt)/bn,e=>e.getDate()-1);Wr.range;const Kl=yt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/bn,e=>e.getUTCDate()-1);Kl.range;const cg=yt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/bn,e=>Math.floor(e/bn));cg.range;function jn(e){return yt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Kt)/Yl)}const Xi=jn(0),Oi=jn(1),fg=jn(2),dg=jn(3),mr=jn(4),hg=jn(5),pg=jn(6);Xi.range;Oi.range;fg.range;dg.range;mr.range;hg.range;pg.range;function Un(e){return yt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/Yl)}const Qc=Un(0),Fi=Un(1),gg=Un(2),mg=Un(3),_r=Un(4),_g=Un(5),bg=Un(6);Qc.range;Fi.range;gg.range;mg.range;_r.range;_g.range;bg.range;const Jl=yt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Jl.range;const yg=yt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());yg.range;const yn=yt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());yn.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:yt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});yn.range;const Bn=yt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Bn.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:yt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});Bn.range;function vg(e,t,n,r,i,l){const o=[[rr,1,pn],[rr,5,5*pn],[rr,15,15*pn],[rr,30,30*pn],[l,1,Kt],[l,5,5*Kt],[l,15,15*Kt],[l,30,30*Kt],[i,1,gn],[i,3,3*gn],[i,6,6*gn],[i,12,12*gn],[r,1,bn],[r,2,2*bn],[n,1,Yl],[t,1,Ga],[t,3,3*Ga],[e,1,ul]];function s(f,d,h){const g=d<f;g&&([f,d]=[d,f]);const p=h&&typeof h.range=="function"?h:u(f,d,h),_=p?p.range(f,+d+1):[];return g?_.reverse():_}function u(f,d,h){const g=Math.abs(d-f)/h,p=Dl(([,,y])=>y).right(o,g);if(p===o.length)return e.every(bl(f/ul,d/ul,h));if(p===0)return Di.every(Math.max(bl(f,d,h),1));const[_,m]=o[g/o[p-1][2]<o[p][2]/g?p-1:p];return _.every(m)}return[s,u]}const[wg,kg]=vg(yn,Jl,Xi,Wr,ql,Vl);function cl(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function fl(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function Tr(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function xg(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,l=e.days,o=e.shortDays,s=e.months,u=e.shortMonths,f=Mr(i),d=Er(i),h=Mr(l),g=Er(l),p=Mr(o),_=Er(o),m=Mr(s),y=Er(s),v=Mr(u),w=Er(u),C={a:V,A:oe,b:Y,B:ie,c:null,d:nu,e:nu,f:Vg,g:nm,G:im,H:Wg,I:Zg,j:Yg,L:$c,m:qg,M:Kg,p:Z,q:H,Q:lu,s:ou,S:Jg,u:Gg,U:Xg,V:Qg,w:$g,W:em,x:null,X:null,y:tm,Y:rm,Z:lm,"%":iu},x={a:ce,A:se,b:ee,B:_e,c:null,d:ru,e:ru,f:um,g:ym,G:wm,H:om,I:sm,j:am,L:tf,m:cm,M:fm,p:fe,q:ye,Q:lu,s:ou,S:dm,u:hm,U:pm,V:gm,w:mm,W:_m,x:null,X:null,y:bm,Y:vm,Z:km,"%":iu},A={a:I,A:D,b:T,B:N,c:k,d:eu,e:eu,f:Bg,g:$a,G:Qa,H:tu,I:tu,j:Dg,L:Rg,m:Pg,M:Og,p:P,q:Ig,Q:Ug,s:Hg,S:Fg,u:Mg,U:Eg,V:Lg,w:Tg,W:Ng,x:F,X:re,y:$a,Y:Qa,Z:zg,"%":jg};C.x=M(n,C),C.X=M(r,C),C.c=M(t,C),x.x=M(n,x),x.X=M(r,x),x.c=M(t,x);function M(G,de){return function(ue){var te=[],Se=-1,S=0,X=G.length,J,U,O;for(ue instanceof Date||(ue=new Date(+ue));++Se<X;)G.charCodeAt(Se)===37&&(te.push(G.slice(S,Se)),(U=Xa[J=G.charAt(++Se)])!=null?J=G.charAt(++Se):U=J==="e"?" ":"0",(O=de[J])&&(J=O(ue,U)),te.push(J),S=Se+1);return te.push(G.slice(S,Se)),te.join("")}}function z(G,de){return function(ue){var te=Tr(1900,void 0,1),Se=E(te,G,ue+="",0),S,X;if(Se!=ue.length)return null;if("Q"in te)return new Date(te.Q);if("s"in te)return new Date(te.s*1e3+("L"in te?te.L:0));if(de&&!("Z"in te)&&(te.Z=0),"p"in te&&(te.H=te.H%12+te.p*12),te.m===void 0&&(te.m="q"in te?te.q:0),"V"in te){if(te.V<1||te.V>53)return null;"w"in te||(te.w=1),"Z"in te?(S=fl(Tr(te.y,0,1)),X=S.getUTCDay(),S=X>4||X===0?Fi.ceil(S):Fi(S),S=Kl.offset(S,(te.V-1)*7),te.y=S.getUTCFullYear(),te.m=S.getUTCMonth(),te.d=S.getUTCDate()+(te.w+6)%7):(S=cl(Tr(te.y,0,1)),X=S.getDay(),S=X>4||X===0?Oi.ceil(S):Oi(S),S=Wr.offset(S,(te.V-1)*7),te.y=S.getFullYear(),te.m=S.getMonth(),te.d=S.getDate()+(te.w+6)%7)}else("W"in te||"U"in te)&&("w"in te||(te.w="u"in te?te.u%7:"W"in te?1:0),X="Z"in te?fl(Tr(te.y,0,1)).getUTCDay():cl(Tr(te.y,0,1)).getDay(),te.m=0,te.d="W"in te?(te.w+6)%7+te.W*7-(X+5)%7:te.w+te.U*7-(X+6)%7);return"Z"in te?(te.H+=te.Z/100|0,te.M+=te.Z%100,fl(te)):cl(te)}}function E(G,de,ue,te){for(var Se=0,S=de.length,X=ue.length,J,U;Se<S;){if(te>=X)return-1;if(J=de.charCodeAt(Se++),J===37){if(J=de.charAt(Se++),U=A[J in Xa?de.charAt(Se++):J],!U||(te=U(G,ue,te))<0)return-1}else if(J!=ue.charCodeAt(te++))return-1}return te}function P(G,de,ue){var te=f.exec(de.slice(ue));return te?(G.p=d.get(te[0].toLowerCase()),ue+te[0].length):-1}function I(G,de,ue){var te=p.exec(de.slice(ue));return te?(G.w=_.get(te[0].toLowerCase()),ue+te[0].length):-1}function D(G,de,ue){var te=h.exec(de.slice(ue));return te?(G.w=g.get(te[0].toLowerCase()),ue+te[0].length):-1}function T(G,de,ue){var te=v.exec(de.slice(ue));return te?(G.m=w.get(te[0].toLowerCase()),ue+te[0].length):-1}function N(G,de,ue){var te=m.exec(de.slice(ue));return te?(G.m=y.get(te[0].toLowerCase()),ue+te[0].length):-1}function k(G,de,ue){return E(G,t,de,ue)}function F(G,de,ue){return E(G,n,de,ue)}function re(G,de,ue){return E(G,r,de,ue)}function V(G){return o[G.getDay()]}function oe(G){return l[G.getDay()]}function Y(G){return u[G.getMonth()]}function ie(G){return s[G.getMonth()]}function Z(G){return i[+(G.getHours()>=12)]}function H(G){return 1+~~(G.getMonth()/3)}function ce(G){return o[G.getUTCDay()]}function se(G){return l[G.getUTCDay()]}function ee(G){return u[G.getUTCMonth()]}function _e(G){return s[G.getUTCMonth()]}function fe(G){return i[+(G.getUTCHours()>=12)]}function ye(G){return 1+~~(G.getUTCMonth()/3)}return{format:function(G){var de=M(G+="",C);return de.toString=function(){return G},de},parse:function(G){var de=z(G+="",!1);return de.toString=function(){return G},de},utcFormat:function(G){var de=M(G+="",x);return de.toString=function(){return G},de},utcParse:function(G){var de=z(G+="",!0);return de.toString=function(){return G},de}}}var Xa={"-":"",_:" ",0:"0"},vt=/^\s*\d+/,Cg=/^%/,Sg=/[\\^$*+?|[\]().{}]/g;function ut(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",l=i.length;return r+(l<n?new Array(n-l+1).join(t)+i:i)}function Ag(e){return e.replace(Sg,"\\$&")}function Mr(e){return new RegExp("^(?:"+e.map(Ag).join("|")+")","i")}function Er(e){return new Map(e.map((t,n)=>[t.toLowerCase(),n]))}function Tg(e,t,n){var r=vt.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function Mg(e,t,n){var r=vt.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function Eg(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function Lg(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function Ng(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function Qa(e,t,n){var r=vt.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function $a(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function zg(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Ig(e,t,n){var r=vt.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function Pg(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function eu(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function Dg(e,t,n){var r=vt.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function tu(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function Og(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function Fg(e,t,n){var r=vt.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function Rg(e,t,n){var r=vt.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function Bg(e,t,n){var r=vt.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function jg(e,t,n){var r=Cg.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function Ug(e,t,n){var r=vt.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function Hg(e,t,n){var r=vt.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function nu(e,t){return ut(e.getDate(),t,2)}function Wg(e,t){return ut(e.getHours(),t,2)}function Zg(e,t){return ut(e.getHours()%12||12,t,2)}function Yg(e,t){return ut(1+Wr.count(yn(e),e),t,3)}function $c(e,t){return ut(e.getMilliseconds(),t,3)}function Vg(e,t){return $c(e,t)+"000"}function qg(e,t){return ut(e.getMonth()+1,t,2)}function Kg(e,t){return ut(e.getMinutes(),t,2)}function Jg(e,t){return ut(e.getSeconds(),t,2)}function Gg(e){var t=e.getDay();return t===0?7:t}function Xg(e,t){return ut(Xi.count(yn(e)-1,e),t,2)}function ef(e){var t=e.getDay();return t>=4||t===0?mr(e):mr.ceil(e)}function Qg(e,t){return e=ef(e),ut(mr.count(yn(e),e)+(yn(e).getDay()===4),t,2)}function $g(e){return e.getDay()}function em(e,t){return ut(Oi.count(yn(e)-1,e),t,2)}function tm(e,t){return ut(e.getFullYear()%100,t,2)}function nm(e,t){return e=ef(e),ut(e.getFullYear()%100,t,2)}function rm(e,t){return ut(e.getFullYear()%1e4,t,4)}function im(e,t){var n=e.getDay();return e=n>=4||n===0?mr(e):mr.ceil(e),ut(e.getFullYear()%1e4,t,4)}function lm(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+ut(t/60|0,"0",2)+ut(t%60,"0",2)}function ru(e,t){return ut(e.getUTCDate(),t,2)}function om(e,t){return ut(e.getUTCHours(),t,2)}function sm(e,t){return ut(e.getUTCHours()%12||12,t,2)}function am(e,t){return ut(1+Kl.count(Bn(e),e),t,3)}function tf(e,t){return ut(e.getUTCMilliseconds(),t,3)}function um(e,t){return tf(e,t)+"000"}function cm(e,t){return ut(e.getUTCMonth()+1,t,2)}function fm(e,t){return ut(e.getUTCMinutes(),t,2)}function dm(e,t){return ut(e.getUTCSeconds(),t,2)}function hm(e){var t=e.getUTCDay();return t===0?7:t}function pm(e,t){return ut(Qc.count(Bn(e)-1,e),t,2)}function nf(e){var t=e.getUTCDay();return t>=4||t===0?_r(e):_r.ceil(e)}function gm(e,t){return e=nf(e),ut(_r.count(Bn(e),e)+(Bn(e).getUTCDay()===4),t,2)}function mm(e){return e.getUTCDay()}function _m(e,t){return ut(Fi.count(Bn(e)-1,e),t,2)}function bm(e,t){return ut(e.getUTCFullYear()%100,t,2)}function ym(e,t){return e=nf(e),ut(e.getUTCFullYear()%100,t,2)}function vm(e,t){return ut(e.getUTCFullYear()%1e4,t,4)}function wm(e,t){var n=e.getUTCDay();return e=n>=4||n===0?_r(e):_r.ceil(e),ut(e.getUTCFullYear()%1e4,t,4)}function km(){return"+0000"}function iu(){return"%"}function lu(e){return+e}function ou(e){return Math.floor(+e/1e3)}var er,Gl,rf;xm({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function xm(e){return er=xg(e),Gl=er.format,rf=er.parse,er.utcFormat,er.utcParse,er}function Cm(e){return new Date(e)}function Sm(e){return e instanceof Date?+e:+new Date(+e)}function lf(e,t,n,r,i,l,o,s,u,f){var d=Gc(),h=d.invert,g=d.domain,p=f(".%L"),_=f(":%S"),m=f("%I:%M"),y=f("%I %p"),v=f("%a %d"),w=f("%b %d"),C=f("%B"),x=f("%Y");function A(M){return(u(M)<M?p:s(M)<M?_:o(M)<M?m:l(M)<M?y:r(M)<M?i(M)<M?v:w:n(M)<M?C:x)(M)}return d.invert=function(M){return new Date(h(M))},d.domain=function(M){return arguments.length?g(Array.from(M,Sm)):g().map(Cm)},d.ticks=function(M){var z=g();return e(z[0],z[z.length-1],M??10)},d.tickFormat=function(M,z){return z==null?A:f(z)},d.nice=function(M){var z=g();return(!M||typeof M.range!="function")&&(M=t(z[0],z[z.length-1],M??10)),M?g(sg(z,M)):d},d.copy=function(){return Jc(d,lf(e,t,n,r,i,l,o,s,u,f))},d}function Am(){return Gi.apply(lf(wg,kg,yn,Jl,Xi,Wr,ql,Vl,rr,Gl).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Tm(){var e=0,t=1,n,r,i,l,o=Cn,s=!1,u;function f(h){return h==null||isNaN(h=+h)?u:o(i===0?.5:(h=(l(h)-n)*i,s?Math.max(0,Math.min(1,h)):h))}f.domain=function(h){return arguments.length?([e,t]=h,n=l(e=+e),r=l(t=+t),i=n===r?0:1/(r-n),f):[e,t]},f.clamp=function(h){return arguments.length?(s=!!h,f):s},f.interpolator=function(h){return arguments.length?(o=h,f):o};function d(h){return function(g){var p,_;return arguments.length?([p,_]=g,o=h(p,_),f):[o(0),o(1)]}}return f.range=d(qi),f.rangeRound=d(Ic),f.unknown=function(h){return arguments.length?(u=h,f):u},function(h){return l=h,n=h(e),r=h(t),i=n===r?0:1/(r-n),f}}function Mm(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function of(){var e=Xc(Tm()(Cn));return e.copy=function(){return Mm(e,of())},$1.apply(e,arguments)}Fc(Sn(-100,.75,.35),Sn(80,1.5,.8));var Em=Fc(Sn(260,.75,.35),Sn(80,1.5,.8));Sn();function at(e){return function(){return e}}const su=Math.abs,At=Math.atan2,Mn=Math.cos,Lm=Math.max,dl=Math.min,sn=Math.sin,ir=Math.sqrt,Rt=1e-12,Ur=Math.PI,Ri=Ur/2,_i=2*Ur;function Nm(e){return e>1?0:e<-1?Ur:Math.acos(e)}function au(e){return e>=1?Ri:e<=-1?-Ri:Math.asin(e)}function Xl(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new U1(t)}function zm(e){return e.innerRadius}function Im(e){return e.outerRadius}function Pm(e){return e.startAngle}function Dm(e){return e.endAngle}function Om(e){return e&&e.padAngle}function Fm(e,t,n,r,i,l,o,s){var u=n-e,f=r-t,d=o-i,h=s-l,g=h*u-d*f;if(!(g*g<Rt))return g=(d*(t-l)-h*(e-i))/g,[e+g*u,t+g*f]}function fi(e,t,n,r,i,l,o){var s=e-n,u=t-r,f=(o?l:-l)/ir(s*s+u*u),d=f*u,h=-f*s,g=e+d,p=t+h,_=n+d,m=r+h,y=(g+_)/2,v=(p+m)/2,w=_-g,C=m-p,x=w*w+C*C,A=i-l,M=g*m-_*p,z=(C<0?-1:1)*ir(Lm(0,A*A*x-M*M)),E=(M*C-w*z)/x,P=(-M*w-C*z)/x,I=(M*C+w*z)/x,D=(-M*w+C*z)/x,T=E-y,N=P-v,k=I-y,F=D-v;return T*T+N*N>k*k+F*F&&(E=I,P=D),{cx:E,cy:P,x01:-d,y01:-h,x11:E*(i/A-1),y11:P*(i/A-1)}}function uu(){var e=zm,t=Im,n=at(0),r=null,i=Pm,l=Dm,o=Om,s=null,u=Xl(f);function f(){var d,h,g=+e.apply(this,arguments),p=+t.apply(this,arguments),_=i.apply(this,arguments)-Ri,m=l.apply(this,arguments)-Ri,y=su(m-_),v=m>_;if(s||(s=d=u()),p<g&&(h=p,p=g,g=h),!(p>Rt))s.moveTo(0,0);else if(y>_i-Rt)s.moveTo(p*Mn(_),p*sn(_)),s.arc(0,0,p,_,m,!v),g>Rt&&(s.moveTo(g*Mn(m),g*sn(m)),s.arc(0,0,g,m,_,v));else{var w=_,C=m,x=_,A=m,M=y,z=y,E=o.apply(this,arguments)/2,P=E>Rt&&(r?+r.apply(this,arguments):ir(g*g+p*p)),I=dl(su(p-g)/2,+n.apply(this,arguments)),D=I,T=I,N,k;if(P>Rt){var F=au(P/g*sn(E)),re=au(P/p*sn(E));(M-=F*2)>Rt?(F*=v?1:-1,x+=F,A-=F):(M=0,x=A=(_+m)/2),(z-=re*2)>Rt?(re*=v?1:-1,w+=re,C-=re):(z=0,w=C=(_+m)/2)}var V=p*Mn(w),oe=p*sn(w),Y=g*Mn(A),ie=g*sn(A);if(I>Rt){var Z=p*Mn(C),H=p*sn(C),ce=g*Mn(x),se=g*sn(x),ee;if(y<Ur)if(ee=Fm(V,oe,ce,se,Z,H,Y,ie)){var _e=V-ee[0],fe=oe-ee[1],ye=Z-ee[0],G=H-ee[1],de=1/sn(Nm((_e*ye+fe*G)/(ir(_e*_e+fe*fe)*ir(ye*ye+G*G)))/2),ue=ir(ee[0]*ee[0]+ee[1]*ee[1]);D=dl(I,(g-ue)/(de-1)),T=dl(I,(p-ue)/(de+1))}else D=T=0}z>Rt?T>Rt?(N=fi(ce,se,V,oe,p,T,v),k=fi(Z,H,Y,ie,p,T,v),s.moveTo(N.cx+N.x01,N.cy+N.y01),T<I?s.arc(N.cx,N.cy,T,At(N.y01,N.x01),At(k.y01,k.x01),!v):(s.arc(N.cx,N.cy,T,At(N.y01,N.x01),At(N.y11,N.x11),!v),s.arc(0,0,p,At(N.cy+N.y11,N.cx+N.x11),At(k.cy+k.y11,k.cx+k.x11),!v),s.arc(k.cx,k.cy,T,At(k.y11,k.x11),At(k.y01,k.x01),!v))):(s.moveTo(V,oe),s.arc(0,0,p,w,C,!v)):s.moveTo(V,oe),!(g>Rt)||!(M>Rt)?s.lineTo(Y,ie):D>Rt?(N=fi(Y,ie,Z,H,g,-D,v),k=fi(V,oe,ce,se,g,-D,v),s.lineTo(N.cx+N.x01,N.cy+N.y01),D<I?s.arc(N.cx,N.cy,D,At(N.y01,N.x01),At(k.y01,k.x01),!v):(s.arc(N.cx,N.cy,D,At(N.y01,N.x01),At(N.y11,N.x11),!v),s.arc(0,0,g,At(N.cy+N.y11,N.cx+N.x11),At(k.cy+k.y11,k.cx+k.x11),v),s.arc(k.cx,k.cy,D,At(k.y11,k.x11),At(k.y01,k.x01),!v))):s.arc(0,0,g,A,x,v)}if(s.closePath(),d)return s=null,d+""||null}return f.centroid=function(){var d=(+e.apply(this,arguments)+ +t.apply(this,arguments))/2,h=(+i.apply(this,arguments)+ +l.apply(this,arguments))/2-Ur/2;return[Mn(h)*d,sn(h)*d]},f.innerRadius=function(d){return arguments.length?(e=typeof d=="function"?d:at(+d),f):e},f.outerRadius=function(d){return arguments.length?(t=typeof d=="function"?d:at(+d),f):t},f.cornerRadius=function(d){return arguments.length?(n=typeof d=="function"?d:at(+d),f):n},f.padRadius=function(d){return arguments.length?(r=d==null?null:typeof d=="function"?d:at(+d),f):r},f.startAngle=function(d){return arguments.length?(i=typeof d=="function"?d:at(+d),f):i},f.endAngle=function(d){return arguments.length?(l=typeof d=="function"?d:at(+d),f):l},f.padAngle=function(d){return arguments.length?(o=typeof d=="function"?d:at(+d),f):o},f.context=function(d){return arguments.length?(s=d??null,f):s},f}function Ql(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function sf(e){this._context=e}sf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function af(e){return new sf(e)}function uf(e){return e[0]}function cf(e){return e[1]}function ff(e,t){var n=at(!0),r=null,i=af,l=null,o=Xl(s);e=typeof e=="function"?e:e===void 0?uf:at(e),t=typeof t=="function"?t:t===void 0?cf:at(t);function s(u){var f,d=(u=Ql(u)).length,h,g=!1,p;for(r==null&&(l=i(p=o())),f=0;f<=d;++f)!(f<d&&n(h=u[f],f,u))===g&&((g=!g)?l.lineStart():l.lineEnd()),g&&l.point(+e(h,f,u),+t(h,f,u));if(p)return l=null,p+""||null}return s.x=function(u){return arguments.length?(e=typeof u=="function"?u:at(+u),s):e},s.y=function(u){return arguments.length?(t=typeof u=="function"?u:at(+u),s):t},s.defined=function(u){return arguments.length?(n=typeof u=="function"?u:at(!!u),s):n},s.curve=function(u){return arguments.length?(i=u,r!=null&&(l=i(r)),s):i},s.context=function(u){return arguments.length?(u==null?r=l=null:l=i(r=u),s):r},s}function Rm(e,t,n){var r=null,i=at(!0),l=null,o=af,s=null,u=Xl(f);e=typeof e=="function"?e:e===void 0?uf:at(+e),t=typeof t=="function"?t:at(t===void 0?0:+t),n=typeof n=="function"?n:n===void 0?cf:at(+n);function f(h){var g,p,_,m=(h=Ql(h)).length,y,v=!1,w,C=new Array(m),x=new Array(m);for(l==null&&(s=o(w=u())),g=0;g<=m;++g){if(!(g<m&&i(y=h[g],g,h))===v)if(v=!v)p=g,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),_=g-1;_>=p;--_)s.point(C[_],x[_]);s.lineEnd(),s.areaEnd()}v&&(C[g]=+e(y,g,h),x[g]=+t(y,g,h),s.point(r?+r(y,g,h):C[g],n?+n(y,g,h):x[g]))}if(w)return s=null,w+""||null}function d(){return ff().defined(i).curve(o).context(l)}return f.x=function(h){return arguments.length?(e=typeof h=="function"?h:at(+h),r=null,f):e},f.x0=function(h){return arguments.length?(e=typeof h=="function"?h:at(+h),f):e},f.x1=function(h){return arguments.length?(r=h==null?null:typeof h=="function"?h:at(+h),f):r},f.y=function(h){return arguments.length?(t=typeof h=="function"?h:at(+h),n=null,f):t},f.y0=function(h){return arguments.length?(t=typeof h=="function"?h:at(+h),f):t},f.y1=function(h){return arguments.length?(n=h==null?null:typeof h=="function"?h:at(+h),f):n},f.lineX0=f.lineY0=function(){return d().x(e).y(t)},f.lineY1=function(){return d().x(e).y(n)},f.lineX1=function(){return d().x(r).y(t)},f.defined=function(h){return arguments.length?(i=typeof h=="function"?h:at(!!h),f):i},f.curve=function(h){return arguments.length?(o=h,l!=null&&(s=o(l)),f):o},f.context=function(h){return arguments.length?(h==null?l=s=null:s=o(l=h),f):l},f}function Bm(e,t){return t<e?-1:t>e?1:t>=e?0:NaN}function jm(e){return e}function Um(){var e=jm,t=Bm,n=null,r=at(0),i=at(_i),l=at(0);function o(s){var u,f=(s=Ql(s)).length,d,h,g=0,p=new Array(f),_=new Array(f),m=+r.apply(this,arguments),y=Math.min(_i,Math.max(-_i,i.apply(this,arguments)-m)),v,w=Math.min(Math.abs(y)/f,l.apply(this,arguments)),C=w*(y<0?-1:1),x;for(u=0;u<f;++u)(x=_[p[u]=u]=+e(s[u],u,s))>0&&(g+=x);for(t!=null?p.sort(function(A,M){return t(_[A],_[M])}):n!=null&&p.sort(function(A,M){return n(s[A],s[M])}),u=0,h=g?(y-f*C)/g:0;u<f;++u,m=v)d=p[u],x=_[d],v=m+(x>0?x*h:0)+C,_[d]={data:s[d],index:u,value:x,startAngle:m,endAngle:v,padAngle:w};return _}return o.value=function(s){return arguments.length?(e=typeof s=="function"?s:at(+s),o):e},o.sortValues=function(s){return arguments.length?(t=s,n=null,o):t},o.sort=function(s){return arguments.length?(n=s,t=null,o):n},o.startAngle=function(s){return arguments.length?(r=typeof s=="function"?s:at(+s),o):r},o.endAngle=function(s){return arguments.length?(i=typeof s=="function"?s:at(+s),o):i},o.padAngle=function(s){return arguments.length?(l=typeof s=="function"?s:at(+s),o):l},o}function cu(e){return e<0?-1:1}function fu(e,t,n){var r=e._x1-e._x0,i=t-e._x1,l=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),s=(l*i+o*r)/(r+i);return(cu(l)+cu(o))*Math.min(Math.abs(l),Math.abs(o),.5*Math.abs(s))||0}function du(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function hl(e,t,n){var r=e._x0,i=e._y0,l=e._x1,o=e._y1,s=(l-r)/3;e._context.bezierCurveTo(r+s,i+s*t,l-s,o-s*n,l,o)}function Bi(e){this._context=e}Bi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:hl(this,this._t0,du(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,hl(this,du(this,n=fu(this,e,t)),n);break;default:hl(this,this._t0,n=fu(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};Object.create(Bi.prototype).point=function(e,t){Bi.prototype.point.call(this,t,e)};function hu(e){return new Bi(e)}function Pr(e,t,n){this.k=e,this.x=t,this.y=n}Pr.prototype={constructor:Pr,scale:function(e){return e===1?this:new Pr(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Pr(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};Pr.prototype;function pu(e,t,n){const r=e.slice();return r[88]=t[n],r}function pl(e){const t=e.slice(),n=new Set(t[24].translations.map(i=>i.lang));t[86]=n;const r=t[5].filter(function(...l){return e[74](t[86],...l)});return t[87]=r,t}function gu(e,t,n){const r=e.slice();return r[91]=t[n],r}function mu(e,t,n){const r=e.slice();return r[88]=t[n],r}function _u(e,t,n){const r=e.slice();return r[114]=t[n],r[116]=n,r}function bu(e,t,n){const r=e.slice();r[99]=t[n];const i=h2(r[99].url);r[100]=i;const l=r[99].phraseCount>0?Math.round(r[99].approved/r[99].phraseCount*100):0;return r[101]=l,r}function yu(e,t,n){const r=e.slice();return r[104]=t[n],r}function vu(e,t,n){const r=e.slice();return r[88]=t[n],r}function wu(e,t,n){const r=e.slice();return r[109]=t[n],r}function ku(e,t,n){const r=e.slice();return r[96]=t[n],r}function xu(e,t,n){const r=e.slice();return r[96]=t[n],r}function Cu(e,t,n){const r=e.slice();return r[117]=t[n][0],r[118]=t[n][1],r}function Su(e){let t,n=st(e[4].totalPhrases)+"",r,i,l=st(e[4].uniqueUrls)+"",o,s,u=st(e[4].languageCount)+"",f,d;return{c(){t=b("span"),r=j(n),i=j(" phrases · "),o=j(l),s=j(" pages · "),f=j(u),d=j(" languages"),a(t,"class","text-xs text-gray-500 bg-gray-800 px-3 py-1.5 rounded-lg border border-gray-700")},m(h,g){B(h,t,g),c(t,r),c(t,i),c(t,o),c(t,s),c(t,f),c(t,d)},p(h,g){g[0]&16&&n!==(n=st(h[4].totalPhrases)+"")&&$(r,n),g[0]&16&&l!==(l=st(h[4].uniqueUrls)+"")&&$(o,l),g[0]&16&&u!==(u=st(h[4].languageCount)+"")&&$(f,u)},d(h){h&&R(t)}}}function Hm(e){let t,n,r,i=Le([["overview","Overview"],["pages","Pages & URLs"],["languages","Languages"]]),l=[];for(let f=0;f<3;f+=1)l[f]=Au(Cu(e,i,f));function o(f,d){if(f[27]==="overview")return Vm;if(f[27]==="pages")return Ym;if(f[27]==="languages")return Zm}let s=o(e),u=s&&s(e);return{c(){t=b("div");for(let f=0;f<3;f+=1)l[f].c();n=L(),u&&u.c(),r=bt(),a(t,"class","flex gap-1 bg-gray-800 border border-gray-700 rounded-lg p-1 w-fit")},m(f,d){B(f,t,d);for(let h=0;h<3;h+=1)l[h]&&l[h].m(t,null);B(f,n,d),u&&u.m(f,d),B(f,r,d)},p(f,d){if(d[0]&134217728|d[1]&32768){i=Le([["overview","Overview"],["pages","Pages & URLs"],["languages","Languages"]]);let h;for(h=0;h<3;h+=1){const g=Cu(f,i,h);l[h]?l[h].p(g,d):(l[h]=Au(g),l[h].c(),l[h].m(t,null))}for(;h<3;h+=1)l[h].d(1)}s===(s=o(f))&&u?u.p(f,d):(u&&u.d(1),u=s&&s(f),u&&(u.c(),u.m(r.parentNode,r)))},d(f){f&&(R(t),R(n),R(r)),it(l,f),u&&u.d(f)}}}function Wm(e){let t;return{c(){t=b("div"),t.innerHTML=`<svg class="animate-spin w-5 h-5 mr-2" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" stroke-dasharray="60 20"></circle></svg>
63
63
  Loading analytics…`,a(t,"class","flex items-center justify-center py-24 text-gray-500")},m(n,r){B(n,t,r)},p:Be,d(n){n&&R(t)}}}function Au(e){let t,n,r,i,l;function o(){return e[48](e[117])}return{c(){t=b("button"),n=j(e[118]),a(t,"class",r="px-4 py-1.5 rounded-md text-xs font-medium transition-colors "+(e[27]===e[117]?"bg-indigo-600 text-white":"text-gray-400 hover:text-white"))},m(s,u){B(s,t,u),c(t,n),i||(l=Q(t,"click",o),i=!0)},p(s,u){e=s,u[0]&134217728&&r!==(r="px-4 py-1.5 rounded-md text-xs font-medium transition-colors "+(e[27]===e[117]?"bg-indigo-600 text-white":"text-gray-400 hover:text-white"))&&a(t,"class",r)},d(s){s&&R(t),i=!1,l()}}}function Zm(e){let t,n,r,i,l,o,s,u,f,d,h,g=Le(e[5]),p=[];for(let _=0;_<g.length;_+=1)p[_]=Tu(_u(e,g,_));return{c(){t=b("div"),n=b("div"),r=b("h3"),r.textContent="Translations per Language",i=L(),l=b("div"),o=L(),s=b("div"),u=b("table"),f=b("thead"),f.innerHTML='<tr class="text-gray-400 uppercase text-[10px]"><th class="text-left px-4 py-2.5">Language</th> <th class="text-right px-4 py-2.5 w-28">Translated</th> <th class="text-left px-4 py-2.5">Coverage</th></tr>',d=L(),h=b("tbody");for(let _=0;_<p.length;_+=1)p[_].c();a(r,"class","text-xs font-semibold text-gray-400 uppercase mb-3"),a(l,"class","w-full"),ct(l,"min-height","200px"),a(n,"class","bg-gray-800 border border-gray-700 rounded-xl p-4 lg:col-span-2"),a(t,"class","grid grid-cols-1 lg:grid-cols-2 gap-4"),a(f,"class","border-b border-gray-700"),a(u,"class","w-full text-xs"),a(s,"class","bg-gray-800 border border-gray-700 rounded-xl overflow-hidden")},m(_,m){B(_,t,m),c(t,n),c(n,r),c(n,i),c(n,l),e[70](l),B(_,o,m),B(_,s,m),c(s,u),c(u,f),c(u,d),c(u,h);for(let y=0;y<p.length;y+=1)p[y]&&p[y].m(h,null)},p(_,m){if(m[0]&32){g=Le(_[5]);let y;for(y=0;y<g.length;y+=1){const v=_u(_,g,y);p[y]?p[y].p(v,m):(p[y]=Tu(v),p[y].c(),p[y].m(h,null))}for(;y<p.length;y+=1)p[y].d(1);p.length=g.length}},d(_){_&&(R(t),R(o),R(s)),e[70](null),it(p,_)}}}function Ym(e){let t,n,r,i,l,o,s,u,f,d,h,g,p=st(e[9])+"",_,m,y,v,w,C,x=Le(e[6]),A=[];for(let D=0;D<x.length;D+=1)A[D]=Mu(ku(e,x,D));let M=Le(e[7].filter(Ju)),z=[];for(let D=0;D<M.length;D+=1)z[D]=Eu(wu(e,M,D));function E(D,T){return D[11]?Jm:D[8].length===0?Km:qm}let P=E(e),I=P(e);return{c(){t=b("div"),n=b("div"),r=pe("svg"),i=pe("path"),l=L(),o=b("input"),s=L(),u=b("div");for(let D=0;D<A.length;D+=1)A[D].c();f=L(),d=b("div");for(let D=0;D<z.length;D+=1)z[D].c();h=L(),g=b("span"),_=j(p),m=j(" pages"),y=L(),I.c(),v=bt(),a(i,"fill-rule","evenodd"),a(i,"d","M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"),a(i,"clip-rule","evenodd"),a(r,"class","absolute left-2.5 top-2 w-4 h-4 text-gray-500"),a(r,"viewBox","0 0 20 20"),a(r,"fill","currentColor"),a(o,"class","bg-gray-800 border border-gray-700 rounded-lg pl-8 pr-3 py-1.5 text-sm text-gray-200 placeholder-gray-500 focus:outline-none focus:border-indigo-500 w-56"),a(o,"placeholder","Search URLs…"),a(n,"class","relative"),a(u,"class","flex gap-1.5 flex-wrap"),a(d,"class","flex gap-1.5 flex-wrap"),a(g,"class","text-xs text-gray-500 ml-auto"),a(t,"class","flex flex-wrap items-center gap-2")},m(D,T){B(D,t,T),c(t,n),c(n,r),c(r,i),c(n,l),c(n,o),Ee(o,e[12]),c(t,s),c(t,u);for(let N=0;N<A.length;N+=1)A[N]&&A[N].m(u,null);c(t,f),c(t,d);for(let N=0;N<z.length;N+=1)z[N]&&z[N].m(d,null);c(t,h),c(t,g),c(g,_),c(g,m),B(D,y,T),I.m(D,T),B(D,v,T),w||(C=[Q(o,"input",e[54]),Q(o,"input",e[41])],w=!0)},p(D,T){if(T[0]&4096&&o.value!==D[12]&&Ee(o,D[12]),T[0]&16448|T[1]&2048){x=Le(D[6]);let N;for(N=0;N<x.length;N+=1){const k=ku(D,x,N);A[N]?A[N].p(k,T):(A[N]=Mu(k),A[N].c(),A[N].m(u,null))}for(;N<A.length;N+=1)A[N].d(1);A.length=x.length}if(T[0]&32896|T[1]&4096){M=Le(D[7].filter(Ju));let N;for(N=0;N<M.length;N+=1){const k=wu(D,M,N);z[N]?z[N].p(k,T):(z[N]=Eu(k),z[N].c(),z[N].m(d,null))}for(;N<z.length;N+=1)z[N].d(1);z.length=M.length}T[0]&512&&p!==(p=st(D[9])+"")&&$(_,p),P===(P=E(D))&&I?I.p(D,T):(I.d(1),I=P(D),I&&(I.c(),I.m(v.parentNode,v)))},d(D){D&&(R(t),R(y),R(v)),it(A,D),it(z,D),I.d(D),w=!1,$e(C)}}}function Vm(e){let t,n,r,i,l,o=Vt(e[4].totalPhrases)+"",s,u,f,d=st(e[4].phrasesWithSlots)+"",h,g,p,_,m,y,v,w=Vt(e[4].approvedPhrases)+"",C,x,A,M=(e[4].totalPhrases?Math.round(e[4].approvedPhrases/e[4].totalPhrases*100):0)+"",z,E,P,I,D,T,N,k=e[4].languageCount+"",F,re,V,oe=Vt(e[4].totalTranslations)+"",Y,ie,Z,H,ce,se,ee,_e=st(e[4].uniqueUrls)+"",fe,ye,G,de,ue,te,Se,S,X,J,U,O,W,le,q,K,ne,ke,ge=st(e[4].pendingPhrases)+"",Ce,Fe,Me,We,Ze,Pe,Xe,He,et=st(e[4].approvedPhrases)+"",tt,rt,we,be,ae,Ne,Ae,xe,Re,ve,Ye,Ke,ht,Gt,Lt,Xt,Wt,Qt,me,De,Ue,nt,gt,ft,lt=e[4].trashPhrases>0&&Bu(e),dt=Le(e[6]),Je=[];for(let Oe=0;Oe<dt.length;Oe+=1)Je[Oe]=ju(xu(e,dt,Oe));return{c(){t=b("div"),n=b("div"),r=b("p"),r.textContent="Total Phrases",i=L(),l=b("p"),s=j(o),u=L(),f=b("p"),h=j(d),g=j(" with var-slots"),p=L(),_=b("div"),m=b("p"),m.textContent="Approved",y=L(),v=b("p"),C=j(w),x=L(),A=b("p"),z=j(M),E=j("% coverage"),P=L(),I=b("div"),D=b("p"),D.textContent="Languages",T=L(),N=b("p"),F=j(k),re=L(),V=b("p"),Y=j(oe),ie=j(" total translations"),Z=L(),H=b("div"),ce=b("p"),ce.textContent="Pages Crawled",se=L(),ee=b("p"),fe=j(_e),ye=L(),G=b("p"),G.textContent="unique URLs",de=L(),ue=b("div"),te=b("div"),Se=b("h3"),Se.textContent="Phrase Status",S=L(),X=b("div"),J=b("div"),U=L(),O=b("div"),W=b("div"),le=b("span"),q=L(),K=b("span"),K.textContent="Pending",ne=L(),ke=b("span"),Ce=j(ge),Fe=L(),Me=b("div"),We=b("span"),Ze=L(),Pe=b("span"),Pe.textContent="Approved",Xe=L(),He=b("span"),tt=j(et),rt=L(),lt&&lt.c(),we=L(),be=b("div"),ae=b("h3"),ae.textContent="Discovery Activity (phrases per day)",Ne=L(),Ae=b("div"),xe=L(),Re=b("div"),ve=b("div"),Ye=b("h3"),Ye.textContent="Phrases by Page Section",Ke=L(),ht=b("p"),ht.innerHTML="Grouped by <code>f=</code> URL parameter. Click a bar to filter pages.",Gt=L(),Lt=b("div"),Xt=L(),Wt=b("div");for(let Oe=0;Oe<Je.length;Oe+=1)Je[Oe].c();Qt=L(),me=b("div"),De=b("h3"),De.textContent="Phrases by WebChart Instance",Ue=L(),nt=b("p"),nt.innerHTML=`<span class="text-emerald-400">■</span> approved  
64
64
  <span class="text-blue-400 opacity-40">■</span> total — click to filter pages`,gt=L(),ft=b("div"),a(r,"class","text-xs text-gray-400 uppercase tracking-wide"),a(l,"class","text-3xl font-bold text-white mt-1"),a(f,"class","text-xs text-gray-500 mt-1"),a(n,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(m,"class","text-xs text-gray-400 uppercase tracking-wide"),a(v,"class","text-3xl font-bold text-emerald-400 mt-1"),a(A,"class","text-xs text-gray-500 mt-1"),a(_,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(D,"class","text-xs text-gray-400 uppercase tracking-wide"),a(N,"class","text-3xl font-bold text-indigo-400 mt-1"),a(V,"class","text-xs text-gray-500 mt-1"),a(I,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(ce,"class","text-xs text-gray-400 uppercase tracking-wide"),a(ee,"class","text-3xl font-bold text-blue-400 mt-1"),a(G,"class","text-xs text-gray-500 mt-1"),a(H,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(t,"class","grid grid-cols-2 lg:grid-cols-4 gap-3"),a(Se,"class","text-xs font-semibold text-gray-400 uppercase mb-3"),a(J,"class","relative"),ct(J,"width","160px"),ct(J,"height","160px"),ct(J,"flex-shrink","0"),a(le,"class","w-2.5 h-2.5 rounded-full bg-yellow-400 shrink-0"),a(K,"class","text-gray-400"),a(ke,"class","ml-auto font-mono text-gray-200"),a(W,"class","flex items-center gap-2 text-xs"),a(We,"class","w-2.5 h-2.5 rounded-full bg-emerald-500 shrink-0"),a(Pe,"class","text-gray-400"),a(He,"class","ml-auto font-mono text-gray-200"),a(Me,"class","flex items-center gap-2 text-xs"),a(O,"class","space-y-2"),a(X,"class","flex items-center gap-6"),a(te,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(ae,"class","text-xs font-semibold text-gray-400 uppercase mb-3"),a(Ae,"class","w-full"),ct(Ae,"min-height","130px"),a(be,"class","lg:col-span-2 bg-gray-800 border border-gray-700 rounded-xl p-4"),a(ue,"class","grid grid-cols-1 lg:grid-cols-3 gap-4"),a(Ye,"class","text-xs font-semibold text-gray-400 uppercase mb-1"),a(ht,"class","text-xs text-gray-500 mb-3"),a(Lt,"class","w-full"),ct(Lt,"min-height","180px"),a(Wt,"class","flex flex-wrap gap-2 mt-3"),a(ve,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(De,"class","text-xs font-semibold text-gray-400 uppercase mb-1"),a(nt,"class","text-xs text-gray-500 mb-3"),a(ft,"class","w-full"),ct(ft,"min-height","160px"),a(me,"class","bg-gray-800 border border-gray-700 rounded-xl p-4"),a(Re,"class","grid grid-cols-1 lg:grid-cols-2 gap-4")},m(Oe,ze){B(Oe,t,ze),c(t,n),c(n,r),c(n,i),c(n,l),c(l,s),c(n,u),c(n,f),c(f,h),c(f,g),c(t,p),c(t,_),c(_,m),c(_,y),c(_,v),c(v,C),c(_,x),c(_,A),c(A,z),c(A,E),c(t,P),c(t,I),c(I,D),c(I,T),c(I,N),c(N,F),c(I,re),c(I,V),c(V,Y),c(V,ie),c(t,Z),c(t,H),c(H,ce),c(H,se),c(H,ee),c(ee,fe),c(H,ye),c(H,G),B(Oe,de,ze),B(Oe,ue,ze),c(ue,te),c(te,Se),c(te,S),c(te,X),c(X,J),e[49](J),c(X,U),c(X,O),c(O,W),c(W,le),c(W,q),c(W,K),c(W,ne),c(W,ke),c(ke,Ce),c(O,Fe),c(O,Me),c(Me,We),c(Me,Ze),c(Me,Pe),c(Me,Xe),c(Me,He),c(He,tt),c(O,rt),lt&&lt.m(O,null),c(ue,we),c(ue,be),c(be,ae),c(be,Ne),c(be,Ae),e[50](Ae),B(Oe,xe,ze),B(Oe,Re,ze),c(Re,ve),c(ve,Ye),c(ve,Ke),c(ve,ht),c(ve,Gt),c(ve,Lt),e[51](Lt),c(ve,Xt),c(ve,Wt);for(let Ve=0;Ve<Je.length;Ve+=1)Je[Ve]&&Je[Ve].m(Wt,null);c(Re,Qt),c(Re,me),c(me,De),c(me,Ue),c(me,nt),c(me,gt),c(me,ft),e[53](ft)},p(Oe,ze){if(ze[0]&16&&o!==(o=Vt(Oe[4].totalPhrases)+"")&&$(s,o),ze[0]&16&&d!==(d=st(Oe[4].phrasesWithSlots)+"")&&$(h,d),ze[0]&16&&w!==(w=Vt(Oe[4].approvedPhrases)+"")&&$(C,w),ze[0]&16&&M!==(M=(Oe[4].totalPhrases?Math.round(Oe[4].approvedPhrases/Oe[4].totalPhrases*100):0)+"")&&$(z,M),ze[0]&16&&k!==(k=Oe[4].languageCount+"")&&$(F,k),ze[0]&16&&oe!==(oe=Vt(Oe[4].totalTranslations)+"")&&$(Y,oe),ze[0]&16&&_e!==(_e=st(Oe[4].uniqueUrls)+"")&&$(fe,_e),ze[0]&16&&ge!==(ge=st(Oe[4].pendingPhrases)+"")&&$(Ce,ge),ze[0]&16&&et!==(et=st(Oe[4].approvedPhrases)+"")&&$(tt,et),Oe[4].trashPhrases>0?lt?lt.p(Oe,ze):(lt=Bu(Oe),lt.c(),lt.m(O,null)):lt&&(lt.d(1),lt=null),ze[0]&16448|ze[1]&2048){dt=Le(Oe[6]);let Ve;for(Ve=0;Ve<dt.length;Ve+=1){const xt=xu(Oe,dt,Ve);Je[Ve]?Je[Ve].p(xt,ze):(Je[Ve]=ju(xt),Je[Ve].c(),Je[Ve].m(Wt,null))}for(;Ve<Je.length;Ve+=1)Je[Ve].d(1);Je.length=dt.length}},d(Oe){Oe&&(R(t),R(de),R(ue),R(xe),R(Re)),e[49](null),lt&&lt.d(),e[50](null),e[51](null),it(Je,Oe),e[53](null)}}}function Tu(e){let t,n,r=e[114].lang+"",i,l,o,s=st(e[114].translated)+"",u,f,d,h,g,p,_,m,y=e[114].coverage+"",v,w,C;return{c(){t=b("tr"),n=b("td"),i=j(r),l=L(),o=b("td"),u=j(s),f=L(),d=b("td"),h=b("div"),g=b("div"),p=b("div"),_=L(),m=b("span"),v=j(y),w=j("%"),C=L(),a(n,"class","px-4 py-2.5 font-mono text-indigo-300"),a(o,"class","px-4 py-2.5 text-right font-mono text-gray-200"),a(p,"class","h-1.5 rounded-full transition-all"),ct(p,"width",e[114].coverage+"%"),ct(p,"background",e[114].coverage>80?"#10b981":e[114].coverage>40?"#6366f1":"#f59e0b"),a(g,"class","flex-1 bg-gray-700 rounded-full h-1.5 max-w-xs"),a(m,"class","text-gray-400 w-10 text-right"),a(h,"class","flex items-center gap-2"),a(d,"class","px-4 py-2.5"),a(t,"class","border-b border-gray-700/40")},m(x,A){B(x,t,A),c(t,n),c(n,i),c(t,l),c(t,o),c(o,u),c(t,f),c(t,d),c(d,h),c(h,g),c(g,p),c(h,_),c(h,m),c(m,v),c(m,w),c(t,C)},p(x,A){A[0]&32&&r!==(r=x[114].lang+"")&&$(i,r),A[0]&32&&s!==(s=st(x[114].translated)+"")&&$(u,s),A[0]&32&&ct(p,"width",x[114].coverage+"%"),A[0]&32&&ct(p,"background",x[114].coverage>80?"#10b981":x[114].coverage>40?"#6366f1":"#f59e0b"),A[0]&32&&y!==(y=x[114].coverage+"")&&$(v,y)},d(x){x&&R(t)}}}function Mu(e){let t,n=e[96].section+"",r,i,l,o;function s(){return e[55](e[96])}return{c(){t=b("button"),r=j(n),a(t,"class",i="text-xs px-2 py-1 rounded-full border transition-colors "+(e[14]===e[96].section?"bg-indigo-600 border-indigo-500 text-white":"border-gray-600 text-gray-400 hover:border-gray-400 hover:text-gray-200"))},m(u,f){B(u,t,f),c(t,r),l||(o=Q(t,"click",s),l=!0)},p(u,f){e=u,f[0]&64&&n!==(n=e[96].section+"")&&$(r,n),f[0]&16448&&i!==(i="text-xs px-2 py-1 rounded-full border transition-colors "+(e[14]===e[96].section?"bg-indigo-600 border-indigo-500 text-white":"border-gray-600 text-gray-400 hover:border-gray-400 hover:text-gray-200"))&&a(t,"class",i)},d(u){u&&R(t),l=!1,o()}}}function Eu(e){let t,n=e[109].instance+"",r,i,l,o;function s(){return e[56](e[109])}return{c(){t=b("button"),r=j(n),a(t,"class",i="text-xs px-2 py-1 rounded-full border transition-colors font-mono "+(e[15]===e[109].instance?"bg-blue-700 border-blue-500 text-white":"border-gray-700 text-gray-500 hover:border-gray-500 hover:text-gray-300"))},m(u,f){B(u,t,f),c(t,r),l||(o=Q(t,"click",s),l=!0)},p(u,f){e=u,f[0]&128&&n!==(n=e[109].instance+"")&&$(r,n),f[0]&32896&&i!==(i="text-xs px-2 py-1 rounded-full border transition-colors font-mono "+(e[15]===e[109].instance?"bg-blue-700 border-blue-500 text-white":"border-gray-700 text-gray-500 hover:border-gray-500 hover:text-gray-300"))&&a(t,"class",i)},d(u){u&&R(t),l=!1,o()}}}function qm(e){let t,n,r,i,l,o,s,u,f,d=e[13]+1+"",h,g,p=Math.min(e[13]+In,e[9])+"",_,m,y=st(e[9])+"",v,w,C,x,A,M,z,E,P,I,D,T,N=Le(e[8]),k=[];for(let F=0;F<N.length;F+=1)k[F]=Ru(bu(e,N,F));return{c(){t=b("div"),n=b("table"),r=b("thead"),r.innerHTML='<tr class="text-gray-400 uppercase text-[10px]"><th class="text-left px-4 py-2.5">Page</th> <th class="text-right px-3 py-2.5 w-24">Phrases</th> <th class="text-right px-3 py-2.5 w-24">Approved</th> <th class="text-right px-3 py-2.5 w-20">Coverage</th> <th class="px-3 py-2.5 w-10"></th></tr>',i=L(),l=b("tbody");for(let F=0;F<k.length;F+=1)k[F].c();o=L(),s=b("div"),u=b("span"),f=j("Showing "),h=j(d),g=j("–"),_=j(p),m=j(" of "),v=j(y),w=L(),C=b("div"),x=b("button"),A=j("← Prev"),z=L(),E=b("button"),P=j("Next →"),a(r,"class","border-b border-gray-700 bg-gray-850"),a(n,"class","w-full text-xs"),a(t,"class","bg-gray-800 border border-gray-700 rounded-xl overflow-hidden"),a(x,"class","px-3 py-1 rounded bg-gray-800 border border-gray-700 hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed text-gray-300"),x.disabled=M=e[13]===0,a(E,"class","px-3 py-1 rounded bg-gray-800 border border-gray-700 hover:bg-gray-700 disabled:opacity-40 disabled:cursor-not-allowed text-gray-300"),E.disabled=I=e[13]+In>=e[9],a(C,"class","flex gap-2"),a(s,"class","flex items-center justify-between text-xs text-gray-500")},m(F,re){B(F,t,re),c(t,n),c(n,r),c(n,i),c(n,l);for(let V=0;V<k.length;V+=1)k[V]&&k[V].m(l,null);B(F,o,re),B(F,s,re),c(s,u),c(u,f),c(u,h),c(u,g),c(u,_),c(u,m),c(u,v),c(s,w),c(s,C),c(C,x),c(x,A),c(C,z),c(C,E),c(E,P),D||(T=[Q(x,"click",e[44]),Q(E,"click",e[45])],D=!0)},p(F,re){if(re[0]&33489199|re[1]&1012){N=Le(F[8]);let V;for(V=0;V<N.length;V+=1){const oe=bu(F,N,V);k[V]?k[V].p(oe,re):(k[V]=Ru(oe),k[V].c(),k[V].m(l,null))}for(;V<k.length;V+=1)k[V].d(1);k.length=N.length}re[0]&8192&&d!==(d=F[13]+1+"")&&$(h,d),re[0]&8704&&p!==(p=Math.min(F[13]+In,F[9])+"")&&$(_,p),re[0]&512&&y!==(y=st(F[9])+"")&&$(v,y),re[0]&8192&&M!==(M=F[13]===0)&&(x.disabled=M),re[0]&8704&&I!==(I=F[13]+In>=F[9])&&(E.disabled=I)},d(F){F&&(R(t),R(o),R(s)),it(k,F),D=!1,$e(T)}}}function Km(e){let t;return{c(){t=b("div"),t.textContent="No pages match your filter",a(t,"class","text-center py-10 text-gray-500 text-xs")},m(n,r){B(n,t,r)},p:Be,d(n){n&&R(t)}}}function Jm(e){let t;return{c(){t=b("div"),t.textContent="Loading…",a(t,"class","text-center py-10 text-gray-500 text-xs")},m(n,r){B(n,t,r)},p:Be,d(n){n&&R(t)}}}function Lu(e){let t,n,r;function i(s,u){if(s[17])return Xm;if(s[0])return Gm}let l=i(e),o=l&&l(e);return{c(){t=b("tr"),n=b("td"),o&&o.c(),r=L(),a(n,"colspan","5"),a(n,"class","px-4 pb-4 pt-3 border-b border-indigo-900"),a(t,"class","bg-gray-900/80")},m(s,u){B(s,t,u),c(t,n),o&&o.m(n,null),c(t,r)},p(s,u){l===(l=i(s))&&o?o.p(s,u):(o&&o.d(1),o=l&&l(s),o&&(o.c(),o.m(n,null)))},d(s){s&&R(t),o&&o.d()}}}function Gm(e){let t,n,r,i=st(e[0].totalPhrases)+"",l,o,s,u,f=st(e[0].approved)+"",d,h,g,p,_=st(e[0].pending)+"",m,y,v,w,C,x,A,M,z,E,P,I,D,T,N,k,F,re=e[21]?"Queued…":`Translate all pending (${st(e[0].pending)})`,V,oe,Y,ie,Z,H,ce,se,ee,_e,fe,ye,G,de,ue,te,Se,S,X,J,U,O,W,le,q,K=e[33].length+"",ne,ke,ge=e[0].topPhrases.length+"",Ce,Fe,Me=e[0].topPhrases.length===200?"(200 max)":"",We,Ze,Pe,Xe,He,et,tt,rt=Le(e[5]),we=[];for(let ve=0;ve<rt.length;ve+=1)we[ve]=Nu(vu(e,rt,ve));let be=e[20].size>0&&zu(e),ae=e[22]&&Iu(e),Ne=Le(e[33]),Ae=[];for(let ve=0;ve<Ne.length;ve+=1)Ae[ve]=Ou(yu(e,Ne,ve));let xe=null;Ne.length||(xe=Pu());let Re=e[0].topPhrases.length===200&&Fu();return{c(){t=b("div"),n=b("div"),r=b("span"),l=j(i),o=j(" total"),s=L(),u=b("span"),d=j(f),h=j(" approved"),g=L(),p=b("span"),m=j(_),y=j(" pending"),v=L(),w=b("a"),C=pe("svg"),x=pe("path"),A=j(`
package/dist/index.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Loco — Translation Manager</title>
7
- <script type="module" crossorigin src="/dashboard/assets/index-DizuFheF.js"></script>
7
+ <script type="module" crossorigin src="/dashboard/assets/index-CH8BKF3V.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/dashboard/assets/index-Gi0NZUhz.css">
9
9
  </head>
10
10
  <body>
@@ -3,7 +3,7 @@ export declare const PORT: number;
3
3
  export declare const BASE_PATH: string;
4
4
  export declare const DATA_DIR: string;
5
5
  export declare const AI_CONFIG: {
6
- readonly HOSTNAME: "ai.bluehive.com";
6
+ readonly HOSTNAME: "app.ozwell.ai";
7
7
  readonly PORT: 443;
8
8
  readonly PATH: "/api/v1/completion";
9
9
  };
@@ -28,7 +28,7 @@ const _defaultDataDir = _isDevSource
28
28
  : join(process.cwd(), '.loco');
29
29
  export const DATA_DIR = process.env.LOCO_DATA_DIR || _defaultDataDir;
30
30
  export const AI_CONFIG = {
31
- HOSTNAME: 'ai.bluehive.com',
31
+ HOSTNAME: 'app.ozwell.ai',
32
32
  PORT: 443,
33
33
  PATH: '/api/v1/completion',
34
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,6EAA6E;AAC7E,0FAA0F;AAC1F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAElD,qDAAqD;AACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,6CAA6C;AAEnG,sDAAsD;AACtD,oEAAoE;AACpE,yEAAyE;AACzE,gDAAgD;AAChD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1E,MAAM,eAAe,GAAG,YAAY;IAClC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC;IACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,eAAe,CAAC;AAErE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,iBAAiB;IAC3B,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,oBAAoB;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,MAAM;IAC3B,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;CACV,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,6EAA6E;AAC7E,0FAA0F;AAC1F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAElD,qDAAqD;AACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,6CAA6C;AAEnG,sDAAsD;AACtD,oEAAoE;AACpE,yEAAyE;AACzE,gDAAgD;AAChD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1E,MAAM,eAAe,GAAG,YAAY;IAClC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC;IACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,eAAe,CAAC;AAErE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,eAAe;IACzB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,oBAAoB;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,MAAM;IAC3B,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;CACV,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hkonda/loco-translate",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Self-hosted translation manager — auto-discovers text, AI translations, Svelte dashboard, CDN client.",
5
5
  "type": "module",
6
6
  "bin": {
package/public/loco.js CHANGED
@@ -1690,8 +1690,59 @@ var Loco = function() {
1690
1690
  }
1691
1691
  return l;
1692
1692
  });
1693
+ var FALLBACK_LANGUAGE_NAMES = {
1694
+ "zh-Hans": "Chinese (Simplified)",
1695
+ "zh-Hant": "Chinese (Traditional)"
1696
+ };
1697
+ function normalizeCode(code) {
1698
+ return String(code || "").trim().replace(/_/g, "-");
1699
+ }
1700
+ function titleCaseWord(word) {
1701
+ if (!word) return word;
1702
+ return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
1703
+ }
1704
+ function canonicalizeCode(code) {
1705
+ var normalized = normalizeCode(code);
1706
+ if (!normalized) return "";
1707
+ var parts = normalized.split("-").filter(Boolean);
1708
+ if (parts.length === 0) return "";
1709
+ parts[0] = parts[0].toLowerCase();
1710
+ for (var i = 1; i < parts.length; i++) {
1711
+ if (parts[i].length === 2) {
1712
+ parts[i] = parts[i].toUpperCase();
1713
+ } else if (parts[i].length === 4) {
1714
+ parts[i] = titleCaseWord(parts[i]);
1715
+ } else {
1716
+ parts[i] = parts[i].toLowerCase();
1717
+ }
1718
+ }
1719
+ return parts.join("-");
1720
+ }
1721
+ function inferLanguageName(code) {
1722
+ var canonical = canonicalizeCode(code);
1723
+ if (!canonical) return "";
1724
+ if (FALLBACK_LANGUAGE_NAMES[canonical]) return FALLBACK_LANGUAGE_NAMES[canonical];
1725
+ if (canonical.indexOf("-") === -1) return "";
1726
+ try {
1727
+ if (typeof Intl !== "undefined" && typeof Intl.DisplayNames === "function") {
1728
+ var dn = new Intl.DisplayNames([navigator.language || "en", "en"], { type: "language" });
1729
+ var label = dn.of(canonical);
1730
+ if (label && label !== canonical) return label;
1731
+ }
1732
+ } catch (e) {
1733
+ }
1734
+ return "";
1735
+ }
1736
+ function isSameAsCode(label, code) {
1737
+ if (!label) return true;
1738
+ return canonicalizeCode(label) === canonicalizeCode(code);
1739
+ }
1693
1740
  function getLabel2(code) {
1694
- return customLabels[code] || code;
1741
+ var direct = customLabels[code] || customLabels[canonicalizeCode(code)] || "";
1742
+ if (direct && !isSameAsCode(direct, code)) return direct;
1743
+ var canonical = canonicalizeCode(code);
1744
+ if (FALLBACK_LANGUAGE_NAMES[canonical]) return FALLBACK_LANGUAGE_NAMES[canonical];
1745
+ return inferLanguageName(code) || code;
1695
1746
  }
1696
1747
  var currentLang = getSavedLang() || null;
1697
1748
  var container = document.createElement("div");
@@ -2190,11 +2241,29 @@ var Loco = function() {
2190
2241
  }).catch(function() {
2191
2242
  });
2192
2243
  }
2244
+ function resolveLanguageName(code, languageNames) {
2245
+ if (!code || !languageNames) return "";
2246
+ var direct = languageNames[code];
2247
+ if (direct) return direct;
2248
+ var normalized = String(code).replace(/_/g, "-");
2249
+ if (languageNames[normalized]) return languageNames[normalized];
2250
+ var lower = normalized.toLowerCase();
2251
+ if (languageNames[lower]) return languageNames[lower];
2252
+ var title = lower.split("-").map(function(part, idx) {
2253
+ if (idx === 0) return part;
2254
+ if (part.length === 2) return part.toUpperCase();
2255
+ if (part.length === 4) return part.charAt(0).toUpperCase() + part.slice(1);
2256
+ return part;
2257
+ }).join("-");
2258
+ if (languageNames[title]) return languageNames[title];
2259
+ return "";
2260
+ }
2193
2261
  function buildWidgetLangs(languages, languageNames) {
2194
2262
  languages = languages || [];
2195
2263
  languageNames = languageNames || {};
2196
2264
  return languages.map(function(c) {
2197
- return languageNames[c] ? { code: c, name: languageNames[c] } : c;
2265
+ var name = resolveLanguageName(c, languageNames);
2266
+ return name ? { code: c, name } : c;
2198
2267
  });
2199
2268
  }
2200
2269
  function isPhraseActive(p) {
@@ -2215,7 +2284,7 @@ var Loco = function() {
2215
2284
  var Loco2 = {
2216
2285
  // Version is injected by Vite at build time from versions.json.
2217
2286
  // In-browser: Loco.version → e.g. "1.0.8"
2218
- version: "1.1.2",
2287
+ version: "1.1.4",
2219
2288
  init: function(config) {
2220
2289
  if (!config) {
2221
2290
  console.warn("[loco] Loco.init() requires a config object");
@@ -2506,7 +2575,8 @@ var Loco = function() {
2506
2575
  var codes = state.fileData ? state.fileData.languages || [] : [];
2507
2576
  var names = state.fileData && state.fileData.languageNames || {};
2508
2577
  return codes.map(function(c) {
2509
- return names[c] ? { code: c, name: names[c] } : c;
2578
+ var name = resolveLanguageName(c, names);
2579
+ return name ? { code: c, name } : c;
2510
2580
  });
2511
2581
  };
2512
2582
  if (!state.fileData && state.fileReady) {
@@ -1,4 +1,4 @@
1
- var Loco=function(){"use strict";var o={apiKey:null,apiBase:null,phrases:[],currentLang:null,translations:{},observer:null,fileMode:!1,fileData:null,fileReadyResolve:null,fileReady:null,fileUrl:null,fileUrls:[],scanStopped:!1,loadedFromCache:!1,screenshotsEnabled:!0,widgetPosition:null,ariaRules:{}},Re=["SCRIPT","STYLE","NOSCRIPT","IFRAME","CODE","SVG","AUDIO","VIDEO","LINK"],Ce=["VAR","STRONG","EM","B","I","SPAN","A","ABBR","MARK","SMALL","SUB","SUP","U","S","TIME"],Pe=["h1","h2","h3","h4","h5","h6","label","legend","caption","figcaption","nav","header","footer","main","section","article","form"],I=new Set(Re),X=new Set(Ce),we=[].concat(Pe),Ne=0,Te=!0,U=1e3,Z=1e4,Ae="loco-lang";function Y(){try{return localStorage.getItem(Ae)}catch{return null}}function le(e){try{e?localStorage.setItem(Ae,e):localStorage.removeItem(Ae)}catch{}}function Je(e){if(e.blockedTags){var n=e.blockedTags.disabled||[],t=e.blockedTags.custom||[];I=new Set(Re.filter(function(a){return n.indexOf(a)<0})),t.forEach(function(a){I.add(a.toUpperCase())})}if(e.inlineTags){var n=e.inlineTags.disabled||[],t=e.inlineTags.custom||[];X=new Set(Ce.filter(function(i){return n.indexOf(i)<0})),t.forEach(function(i){X.add(i.toUpperCase())})}if(e.domContextSelectors){var n=e.domContextSelectors.disabled||[],t=e.domContextSelectors.custom||[];we=Pe.filter(function(i){return n.indexOf(i)<0}).concat(t)}e.screenshotsEnabled===!1&&(o.screenshotsEnabled=!1),typeof e.contextDepth=="number"&&(Ne=e.contextDepth),e.domContextEnabled===!1&&(Te=!1)}function N(e){return e.trim().replace(/\s+/g," ")}function b(e){return!/[a-zA-Z\u00C0-\u024F\u0900-\u097F\u0600-\u06FF]/.test(e)}function se(e){var n=e.replace(/\{\{(?:text|number|decimal|date):\d+\}\}/g,"");return!n.trim()||b(n)}function De(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function ee(e){var t;if(!e||e.nodeType!==1)return!1;const n=(t=e.tagName)==null?void 0:t.toUpperCase();return I.has(n)||e.hasAttribute("notranslate")||e.hasAttribute("data-notranslate")||e.hasAttribute("data-loco-translated")||e.getAttribute("translate")==="no"||e.isContentEditable}var W=new WeakMap;function Ie(e){let n=e.parentElement;for(;n&&n!==document.body;){if(W.has(n))return W.get(n);if(ee(n))return W.set(n,!0),!0;n=n.parentElement}for(n=e.parentElement;n&&n!==document.body&&!W.has(n);)W.set(n,!1),n=n.parentElement;return!1}function ze(){W=new WeakMap}const _e=new Set(["H1","H2","H3","H4","H5","H6"]),Ze=new Set(["SCRIPT","STYLE","NOSCRIPT","CODE"]);let Q=new WeakMap,$=new WeakMap,q=null;function ke(){if(Te){q=new Set;var e=we.slice();try{var n=e.join(",");document.querySelectorAll(n).forEach(function(t){q.add(t)})}catch{e.forEach(function(a){try{document.querySelectorAll(a).forEach(function(r){q.add(r)})}catch{}})}q.forEach(function(t){$.has(t)||ne(t)})}}function te(e){return q?q.has(e):_e.has(e.tagName)?!0:we.some(function(n){try{return e.matches(n)}catch{return!1}})}function Ye(e){let n="";for(const t of e.childNodes)if(t.nodeType===Node.TEXT_NODE){const a=t.textContent.trim();a&&(n+=(n?" ":"")+a)}return n}function et(e,n){for(var t="",a=document.createTreeWalker(e,NodeFilter.SHOW_ALL,{acceptNode:function(i){return i.nodeType===Node.ELEMENT_NODE?Ze.has(i.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT}}),r;(r=a.nextNode())&&!(r.nodeType===Node.TEXT_NODE&&(t+=r.textContent,t.length>=n)););return t.trim()}function ne(e){if($.has(e))return $.get(e);let n=null;const t=Ye(e);if(t)return n=t.substring(0,60),$.set(e,n),n;if(_e.has(e.tagName)){const r=(e.textContent||"").trim().replace(/\s+/g," ");if(r)return n=r.substring(0,60),$.set(e,n),n}var a=et(e,200);if(a){const r=a.split(/\n/)[0].trim().replace(/\s+/g," ");r.length>=2&&!b(r)&&(n=r.substring(0,60))}return $.set(e,n),n}function k(e){if(!e||!Te)return"";if(Q.has(e))return Q.get(e);var n=e.parentElement;if(n&&n!==document.body&&Q.has(n)&&!te(e)){var t=Q.get(n);return Q.set(e,t),t}const a=[],r=new Set;let i=e,l=0;if(e&&e.tagName==="TD"){var g=e.closest("table");if(g){var p=g.querySelector("thead tr th:nth-child("+(e.cellIndex+1)+")");if(p){var c=ne(p);c&&(r.add(c),a.push(c))}}}for(;i&&i!==document.body&&!(Ne>0&&l>=Ne);){l++;let f=i.previousElementSibling;for(;f;){var u=f.tagName.toUpperCase();if(I.has(u)){f=f.previousElementSibling;continue}if(u==="ARTICLE"||u==="MAIN"){f=f.previousElementSibling;continue}if(te(f)){const d=ne(f);d&&!r.has(d)&&(r.add(d),a.unshift(d));break}let s=null;for(const d of f.children)if(te(d)){s=d;break}if(!s)for(const d of f.children){for(const v of d.children)if(te(v)){s=v;break}if(s)break}if(s){const d=ne(s);d&&!r.has(d)&&(r.add(d),a.unshift(d));break}f=f.previousElementSibling}if(te(i)){const s=ne(i);s&&!r.has(s)&&(r.add(s),a.unshift(s))}var h=i.tagName;if(h==="ARTICLE"||h==="MAIN")break;i=i.parentElement}const m=a.join(" > ");return Q.set(e,m),m}function tt(e){return/^\d+$/.test(e)?"number":/^\d+\.\d+$/.test(e)?"decimal":"text"}function nt(e,n){for(var t=n.split(/(\{\{(?:text|number|decimal|date):\d+\}\})/),a=[],r=e,i=0;i<t.length;i++){var l=t[i],g=l.match(/^\{\{(text|number|decimal|date):(\d+)\}\}$/);if(g)if(r.indexOf(l)===0)a.push({type:g[1],index:parseInt(g[2]),originalText:l}),r=r.substring(l.length);else{for(var p="",c=i+1;c<t.length;c++){var u=t[c];if(/^\{\{(?:text|number|decimal|date):\d+\}\}$/.test(u)){if(r.indexOf(u)>=0){p=u;break}}else if(u!==""){p=u;break}}var h;if(p==="")h=r,r="";else{var m=r.indexOf(p);m>=0?(h=r.substring(0,m),r=r.substring(m)):(h=r,r="")}a.push({type:g[1],index:parseInt(g[2]),originalText:h})}else r.indexOf(l)===0&&(r=r.substring(l.length))}return a}function ce(e,n){e.forEach(function(t){if(!(t.varSlots&&t.varSlots.length>0)){var a=n[t.key];a&&(t.varSlots=nt(t.key,a),t.key=a)}})}function rt(e,n){for(var t=n.split(/\{\{(?:text|number|decimal|date):\d+\}\}/g),a=e,r=[],i=0;i<t.length;i++)if(i===0)a.indexOf(t[i])===0&&(a=a.substring(t[i].length));else if(t[i]===""&&i===t.length-1)r.push(a),a="";else{var l=a.indexOf(t[i]);l>=0&&(r.push(a.substring(0,l)),a=a.substring(l+t[i].length))}return r.length>0&&r.every(function(g){return/^[a-zA-Z\s]+$/.test(g.trim())})}function at(e){for(var n=0,t=/\{\{(text|number|decimal|date):\d+\}\}/g,a;(a=t.exec(e))!==null;)switch(a[1]){case"number":n+=3;break;case"decimal":n+=3;break;case"date":n+=2;break;default:n+=1;break}return n}function V(e,n){for(var t=[],a=0;a<n.length;a++){var r=n[a];if(!(r.indexOf("{{text:")<0&&r.indexOf("{{number:")<0&&r.indexOf("{{decimal:")<0&&r.indexOf("{{date:")<0)){for(var i=[],l=[],g=0,p=/\{\{(text|number|decimal|date):\d+\}\}/g,c;(c=p.exec(r))!==null;)i.push(r.substring(g,c.index)),l.push(c[1]),g=p.lastIndex;i.push(r.substring(g));for(var u="",h=0;h<i.length;h++)if(u+=i[h].replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),h<l.length)switch(l[h]){case"number":u+="\\d+";break;case"decimal":u+="\\d+\\.\\d+";break;default:u+=".+";break}t.push({pattern:r,regex:new RegExp("^"+u+"$"),specificity:at(r)})}}if(t.length!==0){t.sort(function(s,d){return d.specificity-s.specificity});for(var m={},f={},a=0;a<n.length;a++)f[n[a]]=!0;return e.forEach(function(s){if(!f[s.key]&&!(s.key.length>U)){for(var d=0;d<t.length;d++)if(t[d].regex.test(s.key)&&!rt(s.key,t[d].pattern)){m[s.key]=t[d].pattern;break}}}),ce(e,m),m}}var re=new WeakMap;function _(e){if(re.has(e))return re.get(e);let n=!1,t=!1;for(const r of e.childNodes)if(r.nodeType===Node.TEXT_NODE&&r.textContent.trim()&&(n=!0),r.nodeType===Node.ELEMENT_NODE){const i=r.tagName.toUpperCase();if(i==="BR")return re.set(e,!1),!1;(i==="VAR"||i==="TIME"&&r.hasAttribute("datetime")||X.has(i))&&(t=!0)}var a=n&&t;return re.set(e,a),a}function ot(){re=new WeakMap}function ue(e){let n="";const t=[];for(const a of e.childNodes){if(a.nodeType===Node.TEXT_NODE){const r=N(a.textContent);r&&(n+=r);continue}if(a.nodeType===Node.ELEMENT_NODE){const r=a.tagName.toUpperCase();if(r==="TIME"&&a.hasAttribute("datetime")){const i=t.length;t.push({type:"date",index:i,raw:a.getAttribute("datetime"),display:a.textContent,node:a}),n+=`{{date:${i}}}`;continue}if(r==="VAR"||X.has(r)){const i=N(a.textContent);if(i){const l=t.length,g=tt(i);t.push({type:g,index:l,tag:r,value:i,node:a}),n+=`{{${g}:${l}}}`}continue}}}return{key:N(n),slots:t}}var fe=["title","placeholder","aria-label"];function Me(e){const n=[],t=new Set;if(e.nodeType===Node.ELEMENT_NODE&&!ee(e)&&_(e)){const{key:c,slots:u}=ue(e);if(c&&c.length<=U)if(se(c))u.forEach(function(h){if(h.type==="text"&&h.value&&h.value.length>=2&&!b(h.value)){var m=k(h.node||e),f=h.value+"\0"+m;t.has(f)||(t.add(f),n.push({type:"text",key:h.value,slots:[],textNode:h.node?h.node.firstChild:null,element:h.node||e,context:m,original:h.value}))}});else{var a=k(e),r=c+"\0"+a;t.has(r)||t.add(r);const h=u.some(m=>m.type==="date")?"mixed-date":u.some(m=>m.type==="text")?"mixed-text":"mixed";n.push({type:h,key:c,slots:u,element:e,context:a,original:c,originalHTML:e.innerHTML})}}const i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,{acceptNode(c){var v,y,x;if(c.nodeType===Node.TEXT_NODE){const E=N(c.textContent);if(!E||E.length<2||E.length>U||b(E)||/\{\{(?:text|number|decimal|date):\d+\}\}/.test(E)||Ie(c))return NodeFilter.FILTER_SKIP;const T=(y=(v=c.parentElement)==null?void 0:v.tagName)==null?void 0:y.toUpperCase();if(I.has(T)||_(c.parentElement))return NodeFilter.FILTER_SKIP;for(var u=c.parentElement,h=0;u&&h<3;){var m=(x=u.tagName)==null?void 0:x.toUpperCase();if((m==="VAR"||m==="TIME"||X.has(m))&&u.parentElement&&_(u.parentElement))return NodeFilter.FILTER_SKIP;u=u.parentElement,h++}return NodeFilter.FILTER_ACCEPT}if(c.nodeType===Node.ELEMENT_NODE){const E=c.tagName.toUpperCase();if(I.has(E)||ee(c))return NodeFilter.FILTER_REJECT;if(E==="INPUT"){var f=(c.getAttribute("type")||"").toLowerCase();if(f==="button"||f==="submit"||f==="reset"){var s=N(c.value);if(s&&s.length>=2&&!b(s))return NodeFilter.FILTER_ACCEPT}var d=fe.some(function(T){var A=N(c.getAttribute(T)||"");return A&&A.length>=2&&!b(A)});return d?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return _(c)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return NodeFilter.FILTER_SKIP}});let l;for(;l=i.nextNode();){if(l.nodeType===Node.TEXT_NODE){const c=N(l.textContent);if(!c)continue;var a=k(l.parentElement),r=c+"\0"+a;t.has(r)||t.add(r),n.push({type:"text",key:c,slots:[],textNode:l,element:l.parentElement,context:a,original:c});continue}if(l.nodeType===Node.ELEMENT_NODE&&l.tagName.toUpperCase()==="INPUT"){var g=(l.getAttribute("type")||"").toLowerCase(),a=k(l);if(g==="button"||g==="submit"||g==="reset"){var p=N(l.value);if(p&&p.length>=2&&!b(p)){var r=p+"\0"+a;t.has(r)||t.add(r),n.push({type:"input-value",key:p,slots:[],element:l,context:a,original:p})}}fe.forEach(function(u){var h=N(l.getAttribute(u)||"");if(!(!h||h.length<2||b(h))){var m=h+"\0"+a+"\0"+u;t.has(m)||(t.add(m),n.push({type:"input-attr",key:h,attr:u,slots:[],element:l,context:a,original:h}))}});continue}if(l.nodeType===Node.ELEMENT_NODE){const{key:c,slots:u}=ue(l);if(!c||c.length>U)continue;if(se(c)){u.forEach(function(s){if(s.type==="text"&&s.value&&s.value.length>=2&&!b(s.value)){var d=k(s.node||l),v=s.value+"\0"+d;t.has(v)||(t.add(v),n.push({type:"text",key:s.value,slots:[],textNode:s.node?s.node.firstChild:null,element:s.node||l,context:d,original:s.value}))}});continue}var a=k(l),r=c+"\0"+a;t.has(r)||t.add(r);const f=u.some(s=>s.type==="date")?"mixed-date":u.some(s=>s.type==="text")?"mixed-text":"mixed";n.push({type:f,key:c,slots:u,element:l,context:a,original:c,originalHTML:l.innerHTML})}}return n}async function ae(e,n){n||(n=100);const t=[],a=new Set;if(ze(),ot(),ke(),e.nodeType===Node.ELEMENT_NODE&&!ee(e)&&_(e)){const{key:f,slots:s}=ue(e);if(f&&f.length<=U)if(se(f))s.forEach(function(d){if(d.type==="text"&&d.value&&d.value.length>=2&&!b(d.value)){var v=k(d.node||e),y=d.value+"\0"+v;a.has(y)||(a.add(y),t.push({type:"text",key:d.value,slots:[],textNode:d.node?d.node.firstChild:null,element:d.node||e,context:v,original:d.value}))}});else{var r=k(e),i=f+"\0"+r;a.has(i)||a.add(i);const d=s.some(v=>v.type==="date")?"mixed-date":s.some(v=>v.type==="text")?"mixed-text":"mixed";t.push({type:d,key:f,slots:s,element:e,context:r,original:f,originalHTML:e.innerHTML})}}const l=[],g=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,{acceptNode(f){var T,A,M;if(f.nodeType===Node.TEXT_NODE){const w=N(f.textContent);if(!w||w.length<2||w.length>U||b(w)||/\{\{(?:text|number|decimal|date):\d+\}\}/.test(w)||Ie(f))return NodeFilter.FILTER_SKIP;const L=(A=(T=f.parentElement)==null?void 0:T.tagName)==null?void 0:A.toUpperCase();if(I.has(L)||_(f.parentElement))return NodeFilter.FILTER_SKIP;for(var s=f.parentElement,d=0;s&&d<3;){var v=(M=s.tagName)==null?void 0:M.toUpperCase();if((v==="VAR"||v==="TIME"||X.has(v))&&s.parentElement&&_(s.parentElement))return NodeFilter.FILTER_SKIP;s=s.parentElement,d++}return NodeFilter.FILTER_ACCEPT}if(f.nodeType===Node.ELEMENT_NODE){const w=f.tagName.toUpperCase();if(I.has(w)||ee(f))return NodeFilter.FILTER_REJECT;if(w==="INPUT"){var y=(f.getAttribute("type")||"").toLowerCase();if(y==="button"||y==="submit"||y==="reset"){var x=N(f.value);if(x&&x.length>=2&&!b(x))return NodeFilter.FILTER_ACCEPT}var E=fe.some(function(L){var O=N(f.getAttribute(L)||"");return O&&O.length>=2&&!b(O)});return E?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return _(f)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return NodeFilter.FILTER_SKIP}});for(var p;p=g.nextNode();)l.push(p);for(var c=0;c<l.length;c++){c>0&&c%n===0&&await new Promise(function(f){setTimeout(f,0)});var u=l[c];if(u.nodeType===Node.TEXT_NODE){const f=N(u.textContent);if(!f)continue;var r=k(u.parentElement),i=f+"\0"+r;a.has(i)||a.add(i),t.push({type:"text",key:f,slots:[],textNode:u,element:u.parentElement,context:r,original:f});continue}if(u.nodeType===Node.ELEMENT_NODE&&u.tagName.toUpperCase()==="INPUT"){var h=(u.getAttribute("type")||"").toLowerCase(),r=k(u);if(h==="button"||h==="submit"||h==="reset"){var m=N(u.value);if(m&&m.length>=2&&!b(m)){var i=m+"\0"+r;a.has(i)||a.add(i),t.push({type:"input-value",key:m,slots:[],element:u,context:r,original:m})}}fe.forEach(function(s){var d=N(u.getAttribute(s)||"");if(!(!d||d.length<2||b(d))){var v=d+"\0"+r+"\0"+s;a.has(v)||(a.add(v),t.push({type:"input-attr",key:d,attr:s,slots:[],element:u,context:r,original:d}))}});continue}if(u.nodeType===Node.ELEMENT_NODE){const{key:f,slots:s}=ue(u);if(!f||f.length>U)continue;if(se(f)){s.forEach(function(x){if(x.type==="text"&&x.value&&x.value.length>=2&&!b(x.value)){var E=k(x.node||u),T=x.value+"\0"+E;a.has(T)||(a.add(T),t.push({type:"text",key:x.value,slots:[],textNode:x.node?x.node.firstChild:null,element:x.node||u,context:E,original:x.value}))}});continue}var r=k(u),i=f+"\0"+r;a.has(i)||a.add(i);const y=s.some(x=>x.type==="date")?"mixed-date":s.some(x=>x.type==="text")?"mixed-text":"mixed";t.push({type:y,key:f,slots:s,element:u,context:r,original:f,originalHTML:u.innerHTML})}}return t}function de(e){if(o.scanStopped)return Promise.resolve({ok:!0,registered:0,keyMap:{}});var n=new Set,t=[];return e.forEach(function(a){var r=a.key+"\0"+(a.context||"");n.has(r)||a.varSlots&&a.varSlots.length>0&&/\{\{(?:text|number|decimal|date):\d+\}\}/.test(a.key)||(n.add(r),t.push({key:a.key,context:a.context||""}),a.slots&&a.slots.length>0&&a.slots.forEach(function(i){if(i.type==="text"&&i.value&&!b(i.value)){var l=i.value+"\0";n.has(l)||(n.add(l),t.push({key:i.value,context:""}))}}))}),fetch(o.apiBase+"/api/textnodes",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":o.apiKey},body:JSON.stringify({keys:t,url:window.location.href})}).then(function(a){return a.json()})}function it(e){var n=o.apiBase+"/api/translations?lang="+encodeURIComponent(e);return fetch(n,{headers:{"X-API-Key":o.apiKey}}).then(function(t){return t.json()}).then(function(t){var a={};return Array.isArray(t)?t.forEach(function(r){a[r.key+"\0"+(r.context||"")]=r.value,a.hasOwnProperty(r.key)||(a[r.key]=r.value)}):a=t,a})}function lt(){if(!(o.fileMode||!o.screenshotsEnabled)){var e=document.createElement("script");e.src=o.apiBase+"/cdn/html2canvas.min.js",e.onload=function(){typeof html2canvas=="function"&&html2canvas(document.body,{scale:.35,logging:!1,useCORS:!0,allowTaint:!0,width:window.innerWidth,height:window.innerHeight,windowWidth:window.innerWidth,windowHeight:window.innerHeight}).then(function(n){var t=n.toDataURL("image/jpeg",.5),a=t.split(",")[1];!a||a.length>5e5||fetch(o.apiBase+"/api/screenshots",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":o.apiKey},body:JSON.stringify({url:window.location.href,screenshot:a})}).catch(function(){})}).catch(function(){})},e.onerror=function(){},document.head.appendChild(e)}}function st(e,n){return e.replace(/\{\{(text|number|decimal|date):(\d+)\}\}/g,(t,a,r)=>{const i=n[parseInt(r)];return i?a==="date"?i.display:i.value:t})}function Ke(e){if(!Array.isArray(e))return e;var n={};return e.forEach(function(t){n[t.key+"\0"+(t.context||"")]=t.value,n.hasOwnProperty(t.key)||(n[t.key]=t.value)}),n}function Le(e,n){let t=0,a=0;return e.forEach(r=>{const i=r.key+"\0"+(r.context||"");var l=n[i]||n[r.key];if(!l&&r.slots&&r.slots.length>0){var g=r.slots.some(function(h){if(h.type!=="text"||!h.value)return!1;var m=h.value+"\0"+(r.context||""),f=h.value+"\0";return n.hasOwnProperty(m)||n.hasOwnProperty(f)||n.hasOwnProperty(h.value)});g&&(l=r.key)}if(!l){a++;return}if(r.type==="input-value"&&r.element)try{r.element.value=l,r.element.setAttribute("data-loco-translated",""),t++;return}catch(h){console.warn("[translate] Could not write to input value",h),a++;return}if(r.type==="input-attr"&&r.element&&r.attr)try{r.element.setAttribute(r.attr,l),r.element.setAttribute("data-loco-translated",""),t++;return}catch(h){console.warn("[translate] Could not write to input attr",h),a++;return}if(r.type==="text"&&r.textNode)try{var p=l;r.varSlots&&r.varSlots.length>0&&(p=p.replace(/\{\{(text|number|decimal|date):(\d+)\}\}/g,function(h,m,f){var s=r.varSlots.find(function(d){return(d.type||"text")===m&&d.index===+f});return s||(s=r.varSlots[+f]),s?s.originalText:h})),p=p.replace(/\{\{(?:text|number|decimal|date):\d+\}\}/g,""),r.textNode.nodeValue=p,r.textNode.parentElement&&r.textNode.parentElement.setAttribute("data-loco-translated",""),t++;return}catch(h){console.warn("[translate] Could not write to text node",h),a++;return}if(r.element){try{const h=st(l,r.slots);let m=l;var c={};r.slots.forEach(f=>{const s=`{{${f.type}:${f.index}}}`;if(f.type==="date"&&f.node)f.node.textContent=f.display,c[s]=f.node.outerHTML;else if(f.node){if(f.type==="text"&&f.value){var d=f.value+"\0"+(r.context||""),v=f.value+"\0",y=n[d]||n[v]||n[f.value];y&&(f.node.textContent=y)}c[s]=f.node.outerHTML}}),r.varSlots&&r.varSlots.length>0&&r.varSlots.forEach(function(f){var s="{{"+f.type+":"+f.index+"}}";c.hasOwnProperty(s)||(c[s]=De(f.originalText))});var u=m.split(/(\{\{(?:text|number|decimal|date):\d+\}\})/g);m=u.map(function(f){return c.hasOwnProperty(f)?c[f]:/^\{\{(?:text|number|decimal|date):\d+\}\}$/.test(f)?"":De(f)}).join(""),r.element.innerHTML=m,r.element.setAttribute("data-loco-translated",""),t++}catch(h){console.warn("[translate] Could not apply mixed translation",h),a++}return}a++}),{applied:t,skipped:a}}async function he(e,n,t){t||(t=100);for(var a=0,r=0,i=performance.now(),l=0;l<e.length;l+=t){l>0&&performance.now()-i>16&&(await new Promise(function(c){requestAnimationFrame(c)}),i=performance.now());var g=e.slice(l,l+t),p=Le(g,n);a+=p.applied,r+=p.skipped}return{applied:a,skipped:r}}function j(e){let n=0;e.forEach(t=>{try{t.type==="input-value"&&t.element?(t.element.value=t.original,t.element.removeAttribute("data-loco-translated"),n++):t.type==="input-attr"&&t.element&&t.attr?(t.element.setAttribute(t.attr,t.original),t.element.removeAttribute("data-loco-translated"),n++):t.type==="text"&&t.textNode&&(t.textNode.nodeValue=t.original,t.textNode.parentElement&&t.textNode.parentElement.removeAttribute("data-loco-translated"),n++)}catch(a){console.warn("[translate] Could not restore text node",a)}}),e.forEach(t=>{if(t.type!=="text")try{t.element&&t.originalHTML!==void 0&&(t.element.innerHTML=t.originalHTML,t.element.removeAttribute("data-loco-translated"),n++)}catch(a){console.warn("[translate] Could not restore node",a)}}),console.log("[loco] untranslated "+n+" phrase(s)")}function pe(e,n){const t=new Set(e),a=[];Object.values(n).forEach(function(s){if(s&&(t.add(s),/\{\{(text|number|decimal|date):\d+\}\}/.test(s))){var d=s.split(/\{\{(?:text|number|decimal|date):\d+\}\}/g),v=d.map(function(y){return y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")});a.push(new RegExp("^"+v.join(".+")+"$"))}});function r(s){if(t.has(s))return!0;for(var d=0;d<a.length;d++)if(a[d].test(s))return!0;return!1}let i=[],l=null,g=null,p=new Set,c=null,u=!1;function h(){if(i.length!==0){var s=i.splice(0);o.fileMode||de(s).then(function(d){d&&d.keyMap&&(ce(s,d.keyMap),u=!0,Le(s,n),c&&c.takeRecords(),u=!1)}).catch(function(){})}}function m(s){const d=Me(s);d.forEach(v=>{var y=v.key+"\0"+(v.context||"");r(v.key)||t.has(y)||(t.add(y),t.add(v.key),i.push(v),o.phrases.push(v))}),V(d,Object.keys(n)),u=!0,Le(d,n),c&&c.takeRecords(),u=!1,o.fileMode||(clearTimeout(l),l=setTimeout(h,500))}function f(s){p.add(s),g||(g=requestAnimationFrame(function(){g=null;var d=Array.from(p);p.clear(),d.forEach(function(v){v.isConnected&&m(v)})}))}return c=new MutationObserver(s=>{if(!u){var d=[],v=new Set;for(const x of s)for(const E of x.addedNodes)if(E.nodeType===Node.ELEMENT_NODE)d.push(E);else if(E.nodeType===Node.TEXT_NODE){var y=E.parentElement;y&&y.isConnected&&v.add(y)}d.forEach(function(x){m(x)}),v.forEach(function(x){f(x)})}}),c.observe(document.body,{childList:!0,subtree:!0}),c}var Be=["aria-labelledby","aria-label","aria-describedby","role","aria-hidden","alt","title"],Ue="\0";function ct(e){var n={};return!e||typeof e!="object"||Be.forEach(function(t){if(Object.prototype.hasOwnProperty.call(e,t)){var a=e[t];typeof a=="string"&&a.trim()!==""&&(n[t]=a.trim())}}),n}function je(e){var n={};return Array.isArray(e)&&e.forEach(function(t){if(!(!t||typeof t.key!="string")){var a=typeof t.context=="string"?t.context:"",r=ct(t.attributes);Object.keys(r).length!==0&&(n[t.key+Ue+a]=r,Object.prototype.hasOwnProperty.call(n,t.key)||(n[t.key]=r))}}),n}function ut(e){return e.element?e.element:e.textNode&&e.textNode.parentElement?e.textNode.parentElement:null}function He(){return!o.apiKey||!o.apiBase?Promise.resolve({}):fetch(o.apiBase+"/api/aria",{headers:{"X-API-Key":o.apiKey}}).then(function(e){return e.json()}).then(function(e){return je(e)}).catch(function(e){return console.warn("[loco] Failed to fetch ARIA rules:",e),{}})}function ft(e,n){if(!e||!n)return!1;var t=e.__locoAriaPrev||{},a=!1;return Be.forEach(function(r){if(Object.prototype.hasOwnProperty.call(n,r)){var i=n[r];if(!(typeof i!="string"||i.trim()==="")){Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e.hasAttribute(r)?e.getAttribute(r):null);try{e.setAttribute(r,i.trim()),a=!0}catch(l){console.warn("[loco] Could not set "+r,l)}}}}),a&&(e.__locoAriaPrev=t,e.setAttribute("data-loco-aria","")),a}function G(e,n){if(!n)return{applied:0};var t=0;return e.forEach(function(a){var r=a.key+Ue+(a.context||""),i=n[r]||n[a.key];if(i){var l=ut(a);l&&ft(l,i)&&t++}}),{applied:t}}var Xe="loco",dt=2;function oe(){return new Promise(function(e,n){try{var t=indexedDB.open(Xe,dt);t.onupgradeneeded=function(a){var r=a.target.result;r.objectStoreNames.contains("meta")&&a.oldVersion<2&&r.deleteObjectStore("meta"),r.objectStoreNames.contains("meta")||r.createObjectStore("meta",{keyPath:"key"}),r.objectStoreNames.contains("translations")||r.createObjectStore("translations",{keyPath:"lang"})},t.onsuccess=function(a){e(a.target.result)},t.onerror=function(){n(t.error)}}catch(a){n(a)}})}function ge(){return oe().then(function(e){return new Promise(function(n,t){var a=e.transaction("meta","readonly"),r=a.objectStore("meta").get("registry");r.onsuccess=function(){e.close();var i=r.result;n(i?{languages:i.languages||[],languageNames:i.languageNames||{}}:null)},r.onerror=function(){e.close(),t(r.error)}})})}function We(e){var n="source:"+e;return oe().then(function(t){return new Promise(function(a,r){var i=t.transaction("meta","readonly"),l=i.objectStore("meta").get(n);l.onsuccess=function(){t.close();var g=l.result;a(g?{url:g.url,timestamp:g.timestamp,storedAt:g.storedAt}:null)},l.onerror=function(){t.close(),r(l.error)}})})}function ht(e){return oe().then(function(n){return new Promise(function(t,a){var r=n.transaction("translations","readonly"),i=r.objectStore("translations").get(e);i.onsuccess=function(){n.close();var l=i.result;t(l?l.data:null)},i.onerror=function(){n.close(),a(i.error)}})})}function pt(){return oe().then(function(e){return new Promise(function(n,t){var a=e.transaction(["meta","translations"],"readonly"),r=a.objectStore("meta"),i=r.get("registry");i.onsuccess=function(){var l=i.result;if(!l||!l.languages||l.languages.length===0){e.close(),n(null);return}var g=Y(),p=g||l.languages[0],c=a.objectStore("translations").get(p);c.onsuccess=function(){e.close();var u=c.result;if(!u||!u.data){n(null);return}var h={};h[p]=u.data;var m=a.objectStore("meta").get("aria");m.onsuccess=function(){n({languages:l.languages,languageNames:l.languageNames||{},translations:h,aria:Array.isArray(m.result&&m.result.rules)?m.result.rules:[]})},m.onerror=function(){n({languages:l.languages,languageNames:l.languageNames||{},translations:h,aria:[]})}},c.onerror=function(){e.close(),t(c.error)}},i.onerror=function(){e.close(),t(i.error)}})})}function me(e,n,t){var a=n.languages||[],r=n.languageNames||{},i=n.translations||{},l=Array.isArray(n.aria)?n.aria:[],g=n.timestamp||0;return oe().then(function(p){return new Promise(function(c,u){var h=p.transaction(["meta","translations"],"readwrite"),m=h.objectStore("meta"),f=h.objectStore("translations"),s=m.get("registry");s.onsuccess=function(){var d=s.result,v,y;if(t&&d){var x=d.languages||[];v=x.slice();for(var E=0;E<a.length;E++)v.indexOf(a[E])===-1&&v.push(a[E]);y={};var T=d.languageNames||{},A;for(A in T)y[A]=T[A];for(A in r)y[A]=r[A]}else v=a,y=r;m.put({key:"registry",languages:v,languageNames:y}),m.put({key:"source:"+e,url:e,timestamp:g,storedAt:Date.now()});var M=m.get("aria");M.onsuccess=function(){var L=l;if(t&&M.result&&Array.isArray(M.result.rules)){for(var O="\0",F={},R=[],K=M.result.rules,z=0;z<K.length;z++){var S=K[z];if(!(!S||typeof S.key!="string")){var B=S.key+O+(S.context||"");F.hasOwnProperty(B)||R.push(B),F[B]=S}}for(var C=0;C<l.length;C++){var P=l[C];if(!(!P||typeof P.key!="string")){var D=P.key+O+(P.context||"");F.hasOwnProperty(D)||R.push(D),F[D]=P}}L=R.map(function(ie){return F[ie]})}m.put({key:"aria",rules:L})},M.onerror=function(){m.put({key:"aria",rules:l})};for(var w=0;w<a.length;w++)i[a[w]]&&(t&&Array.isArray(i[a[w]])?function(L){var O=f.get(L);O.onsuccess=function(){var F=O.result,R=F&&Array.isArray(F.data)?F.data:null,K=i[L];if(R){for(var z="\0",S={},B=[],C=0;C<R.length;C++){var P=R[C].key+z+(R[C].context||"");S.hasOwnProperty(P)||B.push(P),S[P]=R[C]}for(var D=0;D<K.length;D++){var ie=K[D].key+z+(K[D].context||"");S.hasOwnProperty(ie)||B.push(ie),S[ie]=K[D]}for(var Ge=[],Fe=0;Fe<B.length;Fe++)Ge.push(S[B[Fe]]);f.put({lang:L,data:Ge})}else f.put({lang:L,data:K})}}(a[w]):f.put({lang:a[w],data:i[a[w]]}))},h.oncomplete=function(){p.close(),c()},h.onerror=function(){p.close(),u(h.error)}})})}function gt(){return new Promise(function(e){var n=indexedDB.deleteDatabase(Xe);n.onsuccess=function(){e()},n.onerror=function(){e()},n.onblocked=function(){e()}})}var mt='<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><clipPath id="loco-wc"><circle cx="100" cy="100" r="90"/></clipPath></defs><circle cx="100" cy="100" r="90" fill="#1a1f2e"/><g clip-path="url(#loco-wc)"><g transform="translate(100,108) scale(0.72) translate(-334,-198)"><ellipse cx="310" cy="318" rx="10" ry="38" fill="#2ECC88" transform="rotate(-18 310 318)"/><ellipse cx="326" cy="326" rx="9" ry="42" fill="#34D99A" transform="rotate(-6 326 326)"/><ellipse cx="342" cy="328" rx="9" ry="42" fill="#7BC74A" transform="rotate(6 342 328)"/><ellipse cx="357" cy="320" rx="9" ry="36" fill="#F07040" transform="rotate(18 357 320)"/><ellipse cx="334" cy="240" rx="62" ry="80" fill="#2ECC88"/><ellipse cx="334" cy="252" rx="36" ry="52" fill="#D4F4B0"/><path d="M275 220 Q228 190 232 265 Q248 295 280 285 Q268 255 275 220Z" fill="#3A8FE0"/><path d="M277 225 Q238 208 240 262 Q252 285 278 277 Q268 252 277 225Z" fill="#6BB3FF" opacity="0.7"/><path d="M393 220 Q440 190 436 265 Q420 295 388 285 Q400 255 393 220Z" fill="#3A8FE0"/><path d="M391 225 Q430 208 428 262 Q416 285 390 277 Q400 252 391 225Z" fill="#6BB3FF" opacity="0.7"/><ellipse cx="334" cy="172" rx="38" ry="30" fill="#2ECC88"/><circle cx="334" cy="148" r="52" fill="#2ECC88"/><ellipse cx="334" cy="118" rx="30" ry="18" fill="#FFB833"/><circle cx="312" cy="138" r="14" fill="white"/><circle cx="315" cy="140" r="9" fill="#2C2C2A"/><circle cx="315" cy="140" r="4" fill="#04342C"/><circle cx="319" cy="136" r="3.5" fill="white"/><circle cx="356" cy="138" r="14" fill="white"/><circle cx="353" cy="140" r="9" fill="#2C2C2A"/><circle cx="353" cy="140" r="4" fill="#04342C"/><circle cx="357" cy="136" r="3.5" fill="white"/><path d="M326 155 Q334 144 342 155 Q342 170 334 173 Q326 170 326 155Z" fill="#E8A020"/><path d="M328 165 Q334 158 340 165 Q340 174 334 176 Q328 174 328 165Z" fill="#A06010"/><ellipse cx="302" cy="152" rx="12" ry="8" fill="#F07040" opacity="0.8"/><ellipse cx="366" cy="152" rx="12" ry="8" fill="#F07040" opacity="0.8"/><path d="M320 100 Q316 68 308 52" stroke="#FFB833" stroke-width="6" fill="none" stroke-linecap="round"/><path d="M334 97 Q334 64 334 46" stroke="#7BC74A" stroke-width="6" fill="none" stroke-linecap="round"/><path d="M348 100 Q352 68 360 52" stroke="#F07040" stroke-width="6" fill="none" stroke-linecap="round"/><circle cx="308" cy="50" r="8" fill="#FFB833"/><circle cx="334" cy="44" r="8" fill="#7BC74A"/><circle cx="360" cy="50" r="8" fill="#F07040"/><rect x="260" y="330" width="168" height="10" rx="5" fill="#8B5E20"/><path d="M310 330 L300 350 M310 330 L315 352 M310 330 L325 348" stroke="#A07030" stroke-width="4" fill="none" stroke-linecap="round"/><path d="M360 330 L350 350 M360 330 L365 352 M360 330 L375 348" stroke="#A07030" stroke-width="4" fill="none" stroke-linecap="round"/></g></g></svg>',Se=null;function ve(e,n){Se=n;var t=document.getElementById("loco-lang-widget");t&&t.remove();var a={},r=e.map(function(s){return typeof s=="object"&&s.code?(s.name&&(a[s.code]=s.name),s.code):s});function i(s){return a[s]||s}var l=Y()||null,g=document.createElement("div");g.id="loco-lang-widget",g.setAttribute("data-notranslate","");var p={"bottom-right":"bottom:20px;right:20px;","bottom-left":"bottom:20px;left:20px;","top-right":"top:20px;right:20px;","top-left":"top:20px;left:20px;"};g.style.cssText='position:fixed;z-index:2147483647;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:14px;'+(p[n]||p["bottom-right"]);var c=document.createElement("button");c.innerHTML=mt,c.style.cssText="width:52px;height:52px;border-radius:50%;border:none;background:#1a1f2e;color:#fff;font-size:22px;cursor:pointer;box-shadow:0 4px 14px rgba(0,0,0,0.25);display:flex;align-items:center;justify-content:center;transition:transform 0.2s,box-shadow 0.2s;overflow:hidden;padding:0;",c.onmouseenter=function(){c.style.transform="scale(1.1)",c.style.boxShadow="0 6px 20px rgba(0,0,0,0.35)"},c.onmouseleave=function(){c.style.transform="scale(1)",c.style.boxShadow="0 4px 14px rgba(0,0,0,0.25)"};var u=document.createElement("div");u.style.cssText="display:none;position:absolute;"+(n.indexOf("bottom")===0?"bottom:56px;":"top:56px;")+(n.indexOf("right")>=0?"right:0;":"left:0;")+"background:#fff;border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,0.18);min-width:200px;max-height:320px;overflow-y:auto;padding:6px 0;";var h=document.createElement("div");h.textContent="Original",h.style.cssText="padding:10px 16px;cursor:pointer;color:#333;transition:background 0.15s;font-weight:600;border-bottom:1px solid #eee;",h.onmouseenter=function(){h.style.background="#f5f5f5"},h.onmouseleave=function(){h.style.background="transparent"},h.onclick=function(){l=null,window.Loco.restore(),f(),u.style.display="none"},u.appendChild(h);var m=[];r.forEach(function(s){var d=document.createElement("div");d.textContent=i(s),d.setAttribute("data-lang",s),d.style.cssText="padding:10px 16px;cursor:pointer;color:#333;transition:background 0.15s;",d.onmouseenter=function(){d.style.background="#f5f5f5"},d.onmouseleave=function(){d.style.background=l===s?"#e8f0fe":"transparent"},d.onclick=function(){l=s,window.Loco.apply(s),f(),u.style.display="none"},u.appendChild(d),m.push({el:d,code:s})});function f(){h.style.background=l===null?"#e8f0fe":"transparent",h.style.fontWeight=l===null?"600":"400",m.forEach(function(s){s.el.style.background=l===s.code?"#e8f0fe":"transparent",s.el.style.fontWeight=l===s.code?"600":"400"})}c.onclick=function(s){s.stopPropagation(),u.style.display=u.style.display==="none"?"block":"none"},document.addEventListener("click",function(s){g.contains(s.target)||(u.style.display="none")}),f(),g.appendChild(u),g.appendChild(c),document.body.appendChild(g)}function vt(e){Se&&(!e||e.length===0||ve(e,Se))}var H={__proto__:1,constructor:1,prototype:1};function Qe(e){if(!e||typeof e!="string")return!1;if(e.charAt(0)==="/"||e.charAt(0)===".")return!0;try{var n=new URL(e,window.location.origin);return n.protocol==="http:"||n.protocol==="https:"}catch{return!1}}function ye(e){if(!e||typeof e!="object"||Array.isArray(e))return null;if(Array.isArray(e._raw)){for(var n={},t={},a=0;a<e._raw.length;a++){var r=e._raw[a];!r||typeof r.l!="string"||typeof r.k!="string"||typeof r.v!="string"||(n[r.l]||(n[r.l]=!0,t[r.l]=[]),t[r.l].push({key:r.k,context:typeof r.c=="string"?r.c:"",value:r.v}))}e={languages:Object.keys(n).sort(),languageNames:{},translations:t,timestamp:0}}var i={};if(!Array.isArray(e.languages))return null;i.languages=[];for(var l=0;l<e.languages.length;l++){if(typeof e.languages[l]!="string"||e.languages[l].length>20)return null;i.languages.push(e.languages[l])}if(i.timestamp=typeof e.timestamp=="number"&&isFinite(e.timestamp)?e.timestamp:0,i.languageNames={},e.languageNames&&typeof e.languageNames=="object"&&!Array.isArray(e.languageNames))for(var g in e.languageNames)!e.languageNames.hasOwnProperty(g)||H[g]||typeof e.languageNames[g]=="string"&&e.languageNames[g].length<=100&&(i.languageNames[g]=e.languageNames[g]);if(i.translations={},e.translations&&typeof e.translations=="object"&&!Array.isArray(e.translations)){for(var p in e.translations)if(!(!e.translations.hasOwnProperty(p)||H[p])&&i.languages.indexOf(p)!==-1){var c=e.translations[p];if(Array.isArray(c)){for(var u=[],h=0;h<c.length;h++){var m=c[h];!m||typeof m!="object"||typeof m.key!="string"||typeof m.value!="string"||m.key.length>Z||m.value.length>Z||H[m.key]||u.push({key:m.key,value:m.value,context:typeof m.context=="string"?m.context:""})}i.translations[p]=u}else if(typeof c=="object"){var f={};for(var s in c)!c.hasOwnProperty(s)||H[s]||typeof c[s]=="string"&&(s.length>Z||c[s].length>Z||(f[s]=c[s]));i.translations[p]=f}}}if(i.aria=[],Array.isArray(e.aria))for(var d=0;d<e.aria.length;d++){var r=e.aria[d];if(!(!r||typeof r!="object")&&!(typeof r.key!="string"||r.key.length>Z)&&!H[r.key]){var v=typeof r.context=="string"?r.context:"",y=r.attributes;!y||typeof y!="object"||Array.isArray(y)||i.aria.push({key:r.key,context:v,attributes:y})}}return i}async function $e(){try{var e=await fetch(o.apiBase+"/api/project/crawler-config",{headers:{"X-API-Key":o.apiKey}});e.ok&&Je(await e.json())}catch{}ke(),o.phrases=await ae(document.body),de(o.phrases).then(function(t){t&&t.keyMap&&ce(o.phrases,t.keyMap)}).catch(function(t){console.warn("[loco] Failed to register keys:",t)}),He().then(function(t){o.ariaRules=t||{};var a=G(o.phrases,o.ariaRules);a.applied>0&&console.log("[loco] applied ARIA rules to "+a.applied+" element(s)")}).catch(function(){}),!o.scanStopped&&o.screenshotsEnabled&&setTimeout(lt,3e3),console.log("[loco] "+o.phrases.length+" text nodes discovered"),console.log(` Loco.textnodes() — list all discovered text nodes
1
+ var Loco=function(){"use strict";var i={apiKey:null,apiBase:null,phrases:[],currentLang:null,translations:{},observer:null,fileMode:!1,fileData:null,fileReadyResolve:null,fileReady:null,fileUrl:null,fileUrls:[],scanStopped:!1,loadedFromCache:!1,screenshotsEnabled:!0,widgetPosition:null,ariaRules:{}},Fe=["SCRIPT","STYLE","NOSCRIPT","IFRAME","CODE","SVG","AUDIO","VIDEO","LINK"],Re=["VAR","STRONG","EM","B","I","SPAN","A","ABBR","MARK","SMALL","SUB","SUP","U","S","TIME"],Pe=["h1","h2","h3","h4","h5","h6","label","legend","caption","figcaption","nav","header","footer","main","section","article","form"],_=new Set(Fe),W=new Set(Re),we=[].concat(Pe),Ne=0,Te=!0,B=1e3,Z=1e4,Ae="loco-lang";function Y(){try{return localStorage.getItem(Ae)}catch{return null}}function le(e){try{e?localStorage.setItem(Ae,e):localStorage.removeItem(Ae)}catch{}}function Je(e){if(e.blockedTags){var n=e.blockedTags.disabled||[],t=e.blockedTags.custom||[];_=new Set(Fe.filter(function(a){return n.indexOf(a)<0})),t.forEach(function(a){_.add(a.toUpperCase())})}if(e.inlineTags){var n=e.inlineTags.disabled||[],t=e.inlineTags.custom||[];W=new Set(Re.filter(function(o){return n.indexOf(o)<0})),t.forEach(function(o){W.add(o.toUpperCase())})}if(e.domContextSelectors){var n=e.domContextSelectors.disabled||[],t=e.domContextSelectors.custom||[];we=Pe.filter(function(o){return n.indexOf(o)<0}).concat(t)}e.screenshotsEnabled===!1&&(i.screenshotsEnabled=!1),typeof e.contextDepth=="number"&&(Ne=e.contextDepth),e.domContextEnabled===!1&&(Te=!1)}function L(e){return e.trim().replace(/\s+/g," ")}function A(e){return!/[a-zA-Z\u00C0-\u024F\u0900-\u097F\u0600-\u06FF]/.test(e)}function se(e){var n=e.replace(/\{\{(?:text|number|decimal|date):\d+\}\}/g,"");return!n.trim()||A(n)}function De(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function ee(e){var t;if(!e||e.nodeType!==1)return!1;const n=(t=e.tagName)==null?void 0:t.toUpperCase();return _.has(n)||e.hasAttribute("notranslate")||e.hasAttribute("data-notranslate")||e.hasAttribute("data-loco-translated")||e.getAttribute("translate")==="no"||e.isContentEditable}var X=new WeakMap;function Ie(e){let n=e.parentElement;for(;n&&n!==document.body;){if(X.has(n))return X.get(n);if(ee(n))return X.set(n,!0),!0;n=n.parentElement}for(n=e.parentElement;n&&n!==document.body&&!X.has(n);)X.set(n,!1),n=n.parentElement;return!1}function Ze(){X=new WeakMap}const _e=new Set(["H1","H2","H3","H4","H5","H6"]),Ye=new Set(["SCRIPT","STYLE","NOSCRIPT","CODE"]);let Q=new WeakMap,$=new WeakMap,q=null;function Le(){if(Te){q=new Set;var e=we.slice();try{var n=e.join(",");document.querySelectorAll(n).forEach(function(t){q.add(t)})}catch{e.forEach(function(a){try{document.querySelectorAll(a).forEach(function(r){q.add(r)})}catch{}})}q.forEach(function(t){$.has(t)||ne(t)})}}function te(e){return q?q.has(e):_e.has(e.tagName)?!0:we.some(function(n){try{return e.matches(n)}catch{return!1}})}function et(e){let n="";for(const t of e.childNodes)if(t.nodeType===Node.TEXT_NODE){const a=t.textContent.trim();a&&(n+=(n?" ":"")+a)}return n}function tt(e,n){for(var t="",a=document.createTreeWalker(e,NodeFilter.SHOW_ALL,{acceptNode:function(o){return o.nodeType===Node.ELEMENT_NODE?Ye.has(o.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT}}),r;(r=a.nextNode())&&!(r.nodeType===Node.TEXT_NODE&&(t+=r.textContent,t.length>=n)););return t.trim()}function ne(e){if($.has(e))return $.get(e);let n=null;const t=et(e);if(t)return n=t.substring(0,60),$.set(e,n),n;if(_e.has(e.tagName)){const r=(e.textContent||"").trim().replace(/\s+/g," ");if(r)return n=r.substring(0,60),$.set(e,n),n}var a=tt(e,200);if(a){const r=a.split(/\n/)[0].trim().replace(/\s+/g," ");r.length>=2&&!A(r)&&(n=r.substring(0,60))}return $.set(e,n),n}function k(e){if(!e||!Te)return"";if(Q.has(e))return Q.get(e);var n=e.parentElement;if(n&&n!==document.body&&Q.has(n)&&!te(e)){var t=Q.get(n);return Q.set(e,t),t}const a=[],r=new Set;let o=e,l=0;if(e&&e.tagName==="TD"){var v=e.closest("table");if(v){var p=v.querySelector("thead tr th:nth-child("+(e.cellIndex+1)+")");if(p){var s=ne(p);s&&(r.add(s),a.push(s))}}}for(;o&&o!==document.body&&!(Ne>0&&l>=Ne);){l++;let c=o.previousElementSibling;for(;c;){var f=c.tagName.toUpperCase();if(_.has(f)){c=c.previousElementSibling;continue}if(f==="ARTICLE"||f==="MAIN"){c=c.previousElementSibling;continue}if(te(c)){const d=ne(c);d&&!r.has(d)&&(r.add(d),a.unshift(d));break}let u=null;for(const d of c.children)if(te(d)){u=d;break}if(!u)for(const d of c.children){for(const m of d.children)if(te(m)){u=m;break}if(u)break}if(u){const d=ne(u);d&&!r.has(d)&&(r.add(d),a.unshift(d));break}c=c.previousElementSibling}if(te(o)){const u=ne(o);u&&!r.has(u)&&(r.add(u),a.unshift(u))}var h=o.tagName;if(h==="ARTICLE"||h==="MAIN")break;o=o.parentElement}const g=a.join(" > ");return Q.set(e,g),g}function nt(e){return/^\d+$/.test(e)?"number":/^\d+\.\d+$/.test(e)?"decimal":"text"}function rt(e,n){for(var t=n.split(/(\{\{(?:text|number|decimal|date):\d+\}\})/),a=[],r=e,o=0;o<t.length;o++){var l=t[o],v=l.match(/^\{\{(text|number|decimal|date):(\d+)\}\}$/);if(v)if(r.indexOf(l)===0)a.push({type:v[1],index:parseInt(v[2]),originalText:l}),r=r.substring(l.length);else{for(var p="",s=o+1;s<t.length;s++){var f=t[s];if(/^\{\{(?:text|number|decimal|date):\d+\}\}$/.test(f)){if(r.indexOf(f)>=0){p=f;break}}else if(f!==""){p=f;break}}var h;if(p==="")h=r,r="";else{var g=r.indexOf(p);g>=0?(h=r.substring(0,g),r=r.substring(g)):(h=r,r="")}a.push({type:v[1],index:parseInt(v[2]),originalText:h})}else r.indexOf(l)===0&&(r=r.substring(l.length))}return a}function ce(e,n){e.forEach(function(t){if(!(t.varSlots&&t.varSlots.length>0)){var a=n[t.key];a&&(t.varSlots=rt(t.key,a),t.key=a)}})}function at(e,n){for(var t=n.split(/\{\{(?:text|number|decimal|date):\d+\}\}/g),a=e,r=[],o=0;o<t.length;o++)if(o===0)a.indexOf(t[o])===0&&(a=a.substring(t[o].length));else if(t[o]===""&&o===t.length-1)r.push(a),a="";else{var l=a.indexOf(t[o]);l>=0&&(r.push(a.substring(0,l)),a=a.substring(l+t[o].length))}return r.length>0&&r.every(function(v){return/^[a-zA-Z\s]+$/.test(v.trim())})}function it(e){for(var n=0,t=/\{\{(text|number|decimal|date):\d+\}\}/g,a;(a=t.exec(e))!==null;)switch(a[1]){case"number":n+=3;break;case"decimal":n+=3;break;case"date":n+=2;break;default:n+=1;break}return n}function G(e,n){for(var t=[],a=0;a<n.length;a++){var r=n[a];if(!(r.indexOf("{{text:")<0&&r.indexOf("{{number:")<0&&r.indexOf("{{decimal:")<0&&r.indexOf("{{date:")<0)){for(var o=[],l=[],v=0,p=/\{\{(text|number|decimal|date):\d+\}\}/g,s;(s=p.exec(r))!==null;)o.push(r.substring(v,s.index)),l.push(s[1]),v=p.lastIndex;o.push(r.substring(v));for(var f="",h=0;h<o.length;h++)if(f+=o[h].replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),h<l.length)switch(l[h]){case"number":f+="\\d+";break;case"decimal":f+="\\d+\\.\\d+";break;default:f+=".+";break}t.push({pattern:r,regex:new RegExp("^"+f+"$"),specificity:it(r)})}}if(t.length!==0){t.sort(function(u,d){return d.specificity-u.specificity});for(var g={},c={},a=0;a<n.length;a++)c[n[a]]=!0;return e.forEach(function(u){if(!c[u.key]&&!(u.key.length>B)){for(var d=0;d<t.length;d++)if(t[d].regex.test(u.key)&&!at(u.key,t[d].pattern)){g[u.key]=t[d].pattern;break}}}),ce(e,g),g}}var re=new WeakMap;function M(e){if(re.has(e))return re.get(e);let n=!1,t=!1;for(const r of e.childNodes)if(r.nodeType===Node.TEXT_NODE&&r.textContent.trim()&&(n=!0),r.nodeType===Node.ELEMENT_NODE){const o=r.tagName.toUpperCase();if(o==="BR")return re.set(e,!1),!1;(o==="VAR"||o==="TIME"&&r.hasAttribute("datetime")||W.has(o))&&(t=!0)}var a=n&&t;return re.set(e,a),a}function ot(){re=new WeakMap}function ue(e){let n="";const t=[];for(const a of e.childNodes){if(a.nodeType===Node.TEXT_NODE){const r=L(a.textContent);r&&(n+=r);continue}if(a.nodeType===Node.ELEMENT_NODE){const r=a.tagName.toUpperCase();if(r==="TIME"&&a.hasAttribute("datetime")){const o=t.length;t.push({type:"date",index:o,raw:a.getAttribute("datetime"),display:a.textContent,node:a}),n+=`{{date:${o}}}`;continue}if(r==="VAR"||W.has(r)){const o=L(a.textContent);if(o){const l=t.length,v=nt(o);t.push({type:v,index:l,tag:r,value:o,node:a}),n+=`{{${v}:${l}}}`}continue}}}return{key:L(n),slots:t}}var fe=["title","placeholder","aria-label"];function Me(e){const n=[],t=new Set;if(e.nodeType===Node.ELEMENT_NODE&&!ee(e)&&M(e)){const{key:s,slots:f}=ue(e);if(s&&s.length<=B)if(se(s))f.forEach(function(h){if(h.type==="text"&&h.value&&h.value.length>=2&&!A(h.value)){var g=k(h.node||e),c=h.value+"\0"+g;t.has(c)||(t.add(c),n.push({type:"text",key:h.value,slots:[],textNode:h.node?h.node.firstChild:null,element:h.node||e,context:g,original:h.value}))}});else{var a=k(e),r=s+"\0"+a;t.has(r)||t.add(r);const h=f.some(g=>g.type==="date")?"mixed-date":f.some(g=>g.type==="text")?"mixed-text":"mixed";n.push({type:h,key:s,slots:f,element:e,context:a,original:s,originalHTML:e.innerHTML})}}const o=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,{acceptNode(s){var m,x,b;if(s.nodeType===Node.TEXT_NODE){const w=L(s.textContent);if(!w||w.length<2||w.length>B||A(w)||/\{\{(?:text|number|decimal|date):\d+\}\}/.test(w)||Ie(s))return NodeFilter.FILTER_SKIP;const y=(x=(m=s.parentElement)==null?void 0:m.tagName)==null?void 0:x.toUpperCase();if(_.has(y)||M(s.parentElement))return NodeFilter.FILTER_SKIP;for(var f=s.parentElement,h=0;f&&h<3;){var g=(b=f.tagName)==null?void 0:b.toUpperCase();if((g==="VAR"||g==="TIME"||W.has(g))&&f.parentElement&&M(f.parentElement))return NodeFilter.FILTER_SKIP;f=f.parentElement,h++}return NodeFilter.FILTER_ACCEPT}if(s.nodeType===Node.ELEMENT_NODE){const w=s.tagName.toUpperCase();if(_.has(w)||ee(s))return NodeFilter.FILTER_REJECT;if(w==="INPUT"){var c=(s.getAttribute("type")||"").toLowerCase();if(c==="button"||c==="submit"||c==="reset"){var u=L(s.value);if(u&&u.length>=2&&!A(u))return NodeFilter.FILTER_ACCEPT}var d=fe.some(function(y){var E=L(s.getAttribute(y)||"");return E&&E.length>=2&&!A(E)});return d?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return M(s)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return NodeFilter.FILTER_SKIP}});let l;for(;l=o.nextNode();){if(l.nodeType===Node.TEXT_NODE){const s=L(l.textContent);if(!s)continue;var a=k(l.parentElement),r=s+"\0"+a;t.has(r)||t.add(r),n.push({type:"text",key:s,slots:[],textNode:l,element:l.parentElement,context:a,original:s});continue}if(l.nodeType===Node.ELEMENT_NODE&&l.tagName.toUpperCase()==="INPUT"){var v=(l.getAttribute("type")||"").toLowerCase(),a=k(l);if(v==="button"||v==="submit"||v==="reset"){var p=L(l.value);if(p&&p.length>=2&&!A(p)){var r=p+"\0"+a;t.has(r)||t.add(r),n.push({type:"input-value",key:p,slots:[],element:l,context:a,original:p})}}fe.forEach(function(f){var h=L(l.getAttribute(f)||"");if(!(!h||h.length<2||A(h))){var g=h+"\0"+a+"\0"+f;t.has(g)||(t.add(g),n.push({type:"input-attr",key:h,attr:f,slots:[],element:l,context:a,original:h}))}});continue}if(l.nodeType===Node.ELEMENT_NODE){const{key:s,slots:f}=ue(l);if(!s||s.length>B)continue;if(se(s)){f.forEach(function(u){if(u.type==="text"&&u.value&&u.value.length>=2&&!A(u.value)){var d=k(u.node||l),m=u.value+"\0"+d;t.has(m)||(t.add(m),n.push({type:"text",key:u.value,slots:[],textNode:u.node?u.node.firstChild:null,element:u.node||l,context:d,original:u.value}))}});continue}var a=k(l),r=s+"\0"+a;t.has(r)||t.add(r);const c=f.some(u=>u.type==="date")?"mixed-date":f.some(u=>u.type==="text")?"mixed-text":"mixed";n.push({type:c,key:s,slots:f,element:l,context:a,original:s,originalHTML:l.innerHTML})}}return n}async function ae(e,n){n||(n=100);const t=[],a=new Set;if(Ze(),ot(),Le(),e.nodeType===Node.ELEMENT_NODE&&!ee(e)&&M(e)){const{key:c,slots:u}=ue(e);if(c&&c.length<=B)if(se(c))u.forEach(function(d){if(d.type==="text"&&d.value&&d.value.length>=2&&!A(d.value)){var m=k(d.node||e),x=d.value+"\0"+m;a.has(x)||(a.add(x),t.push({type:"text",key:d.value,slots:[],textNode:d.node?d.node.firstChild:null,element:d.node||e,context:m,original:d.value}))}});else{var r=k(e),o=c+"\0"+r;a.has(o)||a.add(o);const d=u.some(m=>m.type==="date")?"mixed-date":u.some(m=>m.type==="text")?"mixed-text":"mixed";t.push({type:d,key:c,slots:u,element:e,context:r,original:c,originalHTML:e.innerHTML})}}const l=[],v=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,{acceptNode(c){var y,E,T;if(c.nodeType===Node.TEXT_NODE){const N=L(c.textContent);if(!N||N.length<2||N.length>B||A(N)||/\{\{(?:text|number|decimal|date):\d+\}\}/.test(N)||Ie(c))return NodeFilter.FILTER_SKIP;const S=(E=(y=c.parentElement)==null?void 0:y.tagName)==null?void 0:E.toUpperCase();if(_.has(S)||M(c.parentElement))return NodeFilter.FILTER_SKIP;for(var u=c.parentElement,d=0;u&&d<3;){var m=(T=u.tagName)==null?void 0:T.toUpperCase();if((m==="VAR"||m==="TIME"||W.has(m))&&u.parentElement&&M(u.parentElement))return NodeFilter.FILTER_SKIP;u=u.parentElement,d++}return NodeFilter.FILTER_ACCEPT}if(c.nodeType===Node.ELEMENT_NODE){const N=c.tagName.toUpperCase();if(_.has(N)||ee(c))return NodeFilter.FILTER_REJECT;if(N==="INPUT"){var x=(c.getAttribute("type")||"").toLowerCase();if(x==="button"||x==="submit"||x==="reset"){var b=L(c.value);if(b&&b.length>=2&&!A(b))return NodeFilter.FILTER_ACCEPT}var w=fe.some(function(S){var O=L(c.getAttribute(S)||"");return O&&O.length>=2&&!A(O)});return w?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return M(c)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}return NodeFilter.FILTER_SKIP}});for(var p;p=v.nextNode();)l.push(p);for(var s=0;s<l.length;s++){s>0&&s%n===0&&await new Promise(function(c){setTimeout(c,0)});var f=l[s];if(f.nodeType===Node.TEXT_NODE){const c=L(f.textContent);if(!c)continue;var r=k(f.parentElement),o=c+"\0"+r;a.has(o)||a.add(o),t.push({type:"text",key:c,slots:[],textNode:f,element:f.parentElement,context:r,original:c});continue}if(f.nodeType===Node.ELEMENT_NODE&&f.tagName.toUpperCase()==="INPUT"){var h=(f.getAttribute("type")||"").toLowerCase(),r=k(f);if(h==="button"||h==="submit"||h==="reset"){var g=L(f.value);if(g&&g.length>=2&&!A(g)){var o=g+"\0"+r;a.has(o)||a.add(o),t.push({type:"input-value",key:g,slots:[],element:f,context:r,original:g})}}fe.forEach(function(u){var d=L(f.getAttribute(u)||"");if(!(!d||d.length<2||A(d))){var m=d+"\0"+r+"\0"+u;a.has(m)||(a.add(m),t.push({type:"input-attr",key:d,attr:u,slots:[],element:f,context:r,original:d}))}});continue}if(f.nodeType===Node.ELEMENT_NODE){const{key:c,slots:u}=ue(f);if(!c||c.length>B)continue;if(se(c)){u.forEach(function(b){if(b.type==="text"&&b.value&&b.value.length>=2&&!A(b.value)){var w=k(b.node||f),y=b.value+"\0"+w;a.has(y)||(a.add(y),t.push({type:"text",key:b.value,slots:[],textNode:b.node?b.node.firstChild:null,element:b.node||f,context:w,original:b.value}))}});continue}var r=k(f),o=c+"\0"+r;a.has(o)||a.add(o);const x=u.some(b=>b.type==="date")?"mixed-date":u.some(b=>b.type==="text")?"mixed-text":"mixed";t.push({type:x,key:c,slots:u,element:f,context:r,original:c,originalHTML:f.innerHTML})}}return t}function de(e){if(i.scanStopped)return Promise.resolve({ok:!0,registered:0,keyMap:{}});var n=new Set,t=[];return e.forEach(function(a){var r=a.key+"\0"+(a.context||"");n.has(r)||a.varSlots&&a.varSlots.length>0&&/\{\{(?:text|number|decimal|date):\d+\}\}/.test(a.key)||(n.add(r),t.push({key:a.key,context:a.context||""}),a.slots&&a.slots.length>0&&a.slots.forEach(function(o){if(o.type==="text"&&o.value&&!A(o.value)){var l=o.value+"\0";n.has(l)||(n.add(l),t.push({key:o.value,context:""}))}}))}),fetch(i.apiBase+"/api/textnodes",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":i.apiKey},body:JSON.stringify({keys:t,url:window.location.href})}).then(function(a){return a.json()})}function lt(e){var n=i.apiBase+"/api/translations?lang="+encodeURIComponent(e);return fetch(n,{headers:{"X-API-Key":i.apiKey}}).then(function(t){return t.json()}).then(function(t){var a={};return Array.isArray(t)?t.forEach(function(r){a[r.key+"\0"+(r.context||"")]=r.value,a.hasOwnProperty(r.key)||(a[r.key]=r.value)}):a=t,a})}function st(){if(!(i.fileMode||!i.screenshotsEnabled)){var e=document.createElement("script");e.src=i.apiBase+"/cdn/html2canvas.min.js",e.onload=function(){typeof html2canvas=="function"&&html2canvas(document.body,{scale:.35,logging:!1,useCORS:!0,allowTaint:!0,width:window.innerWidth,height:window.innerHeight,windowWidth:window.innerWidth,windowHeight:window.innerHeight}).then(function(n){var t=n.toDataURL("image/jpeg",.5),a=t.split(",")[1];!a||a.length>5e5||fetch(i.apiBase+"/api/screenshots",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":i.apiKey},body:JSON.stringify({url:window.location.href,screenshot:a})}).catch(function(){})}).catch(function(){})},e.onerror=function(){},document.head.appendChild(e)}}function ct(e,n){return e.replace(/\{\{(text|number|decimal|date):(\d+)\}\}/g,(t,a,r)=>{const o=n[parseInt(r)];return o?a==="date"?o.display:o.value:t})}function Ke(e){if(!Array.isArray(e))return e;var n={};return e.forEach(function(t){n[t.key+"\0"+(t.context||"")]=t.value,n.hasOwnProperty(t.key)||(n[t.key]=t.value)}),n}function ke(e,n){let t=0,a=0;return e.forEach(r=>{const o=r.key+"\0"+(r.context||"");var l=n[o]||n[r.key];if(!l&&r.slots&&r.slots.length>0){var v=r.slots.some(function(h){if(h.type!=="text"||!h.value)return!1;var g=h.value+"\0"+(r.context||""),c=h.value+"\0";return n.hasOwnProperty(g)||n.hasOwnProperty(c)||n.hasOwnProperty(h.value)});v&&(l=r.key)}if(!l){a++;return}if(r.type==="input-value"&&r.element)try{r.element.value=l,r.element.setAttribute("data-loco-translated",""),t++;return}catch(h){console.warn("[translate] Could not write to input value",h),a++;return}if(r.type==="input-attr"&&r.element&&r.attr)try{r.element.setAttribute(r.attr,l),r.element.setAttribute("data-loco-translated",""),t++;return}catch(h){console.warn("[translate] Could not write to input attr",h),a++;return}if(r.type==="text"&&r.textNode)try{var p=l;r.varSlots&&r.varSlots.length>0&&(p=p.replace(/\{\{(text|number|decimal|date):(\d+)\}\}/g,function(h,g,c){var u=r.varSlots.find(function(d){return(d.type||"text")===g&&d.index===+c});return u||(u=r.varSlots[+c]),u?u.originalText:h})),p=p.replace(/\{\{(?:text|number|decimal|date):\d+\}\}/g,""),r.textNode.nodeValue=p,r.textNode.parentElement&&r.textNode.parentElement.setAttribute("data-loco-translated",""),t++;return}catch(h){console.warn("[translate] Could not write to text node",h),a++;return}if(r.element){try{const h=ct(l,r.slots);let g=l;var s={};r.slots.forEach(c=>{const u=`{{${c.type}:${c.index}}}`;if(c.type==="date"&&c.node)c.node.textContent=c.display,s[u]=c.node.outerHTML;else if(c.node){if(c.type==="text"&&c.value){var d=c.value+"\0"+(r.context||""),m=c.value+"\0",x=n[d]||n[m]||n[c.value];x&&(c.node.textContent=x)}s[u]=c.node.outerHTML}}),r.varSlots&&r.varSlots.length>0&&r.varSlots.forEach(function(c){var u="{{"+c.type+":"+c.index+"}}";s.hasOwnProperty(u)||(s[u]=De(c.originalText))});var f=g.split(/(\{\{(?:text|number|decimal|date):\d+\}\})/g);g=f.map(function(c){return s.hasOwnProperty(c)?s[c]:/^\{\{(?:text|number|decimal|date):\d+\}\}$/.test(c)?"":De(c)}).join(""),r.element.innerHTML=g,r.element.setAttribute("data-loco-translated",""),t++}catch(h){console.warn("[translate] Could not apply mixed translation",h),a++}return}a++}),{applied:t,skipped:a}}async function he(e,n,t){t||(t=100);for(var a=0,r=0,o=performance.now(),l=0;l<e.length;l+=t){l>0&&performance.now()-o>16&&(await new Promise(function(s){requestAnimationFrame(s)}),o=performance.now());var v=e.slice(l,l+t),p=ke(v,n);a+=p.applied,r+=p.skipped}return{applied:a,skipped:r}}function j(e){let n=0;e.forEach(t=>{try{t.type==="input-value"&&t.element?(t.element.value=t.original,t.element.removeAttribute("data-loco-translated"),n++):t.type==="input-attr"&&t.element&&t.attr?(t.element.setAttribute(t.attr,t.original),t.element.removeAttribute("data-loco-translated"),n++):t.type==="text"&&t.textNode&&(t.textNode.nodeValue=t.original,t.textNode.parentElement&&t.textNode.parentElement.removeAttribute("data-loco-translated"),n++)}catch(a){console.warn("[translate] Could not restore text node",a)}}),e.forEach(t=>{if(t.type!=="text")try{t.element&&t.originalHTML!==void 0&&(t.element.innerHTML=t.originalHTML,t.element.removeAttribute("data-loco-translated"),n++)}catch(a){console.warn("[translate] Could not restore node",a)}}),console.log("[loco] untranslated "+n+" phrase(s)")}function pe(e,n){const t=new Set(e),a=[];Object.values(n).forEach(function(u){if(u&&(t.add(u),/\{\{(text|number|decimal|date):\d+\}\}/.test(u))){var d=u.split(/\{\{(?:text|number|decimal|date):\d+\}\}/g),m=d.map(function(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")});a.push(new RegExp("^"+m.join(".+")+"$"))}});function r(u){if(t.has(u))return!0;for(var d=0;d<a.length;d++)if(a[d].test(u))return!0;return!1}let o=[],l=null,v=null,p=new Set,s=null,f=!1;function h(){if(o.length!==0){var u=o.splice(0);i.fileMode||de(u).then(function(d){d&&d.keyMap&&(ce(u,d.keyMap),f=!0,ke(u,n),s&&s.takeRecords(),f=!1)}).catch(function(){})}}function g(u){const d=Me(u);d.forEach(m=>{var x=m.key+"\0"+(m.context||"");r(m.key)||t.has(x)||(t.add(x),t.add(m.key),o.push(m),i.phrases.push(m))}),G(d,Object.keys(n)),f=!0,ke(d,n),s&&s.takeRecords(),f=!1,i.fileMode||(clearTimeout(l),l=setTimeout(h,500))}function c(u){p.add(u),v||(v=requestAnimationFrame(function(){v=null;var d=Array.from(p);p.clear(),d.forEach(function(m){m.isConnected&&g(m)})}))}return s=new MutationObserver(u=>{if(!f){var d=[],m=new Set;for(const b of u)for(const w of b.addedNodes)if(w.nodeType===Node.ELEMENT_NODE)d.push(w);else if(w.nodeType===Node.TEXT_NODE){var x=w.parentElement;x&&x.isConnected&&m.add(x)}d.forEach(function(b){g(b)}),m.forEach(function(b){c(b)})}}),s.observe(document.body,{childList:!0,subtree:!0}),s}var Ue=["aria-labelledby","aria-label","aria-describedby","role","aria-hidden","alt","title"],Be="\0";function ut(e){var n={};return!e||typeof e!="object"||Ue.forEach(function(t){if(Object.prototype.hasOwnProperty.call(e,t)){var a=e[t];typeof a=="string"&&a.trim()!==""&&(n[t]=a.trim())}}),n}function je(e){var n={};return Array.isArray(e)&&e.forEach(function(t){if(!(!t||typeof t.key!="string")){var a=typeof t.context=="string"?t.context:"",r=ut(t.attributes);Object.keys(r).length!==0&&(n[t.key+Be+a]=r,Object.prototype.hasOwnProperty.call(n,t.key)||(n[t.key]=r))}}),n}function ft(e){return e.element?e.element:e.textNode&&e.textNode.parentElement?e.textNode.parentElement:null}function He(){return!i.apiKey||!i.apiBase?Promise.resolve({}):fetch(i.apiBase+"/api/aria",{headers:{"X-API-Key":i.apiKey}}).then(function(e){return e.json()}).then(function(e){return je(e)}).catch(function(e){return console.warn("[loco] Failed to fetch ARIA rules:",e),{}})}function dt(e,n){if(!e||!n)return!1;var t=e.__locoAriaPrev||{},a=!1;return Ue.forEach(function(r){if(Object.prototype.hasOwnProperty.call(n,r)){var o=n[r];if(!(typeof o!="string"||o.trim()==="")){Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e.hasAttribute(r)?e.getAttribute(r):null);try{e.setAttribute(r,o.trim()),a=!0}catch(l){console.warn("[loco] Could not set "+r,l)}}}}),a&&(e.__locoAriaPrev=t,e.setAttribute("data-loco-aria","")),a}function V(e,n){if(!n)return{applied:0};var t=0;return e.forEach(function(a){var r=a.key+Be+(a.context||""),o=n[r]||n[a.key];if(o){var l=ft(a);l&&dt(l,o)&&t++}}),{applied:t}}var We="loco",ht=2;function ie(){return new Promise(function(e,n){try{var t=indexedDB.open(We,ht);t.onupgradeneeded=function(a){var r=a.target.result;r.objectStoreNames.contains("meta")&&a.oldVersion<2&&r.deleteObjectStore("meta"),r.objectStoreNames.contains("meta")||r.createObjectStore("meta",{keyPath:"key"}),r.objectStoreNames.contains("translations")||r.createObjectStore("translations",{keyPath:"lang"})},t.onsuccess=function(a){e(a.target.result)},t.onerror=function(){n(t.error)}}catch(a){n(a)}})}function ge(){return ie().then(function(e){return new Promise(function(n,t){var a=e.transaction("meta","readonly"),r=a.objectStore("meta").get("registry");r.onsuccess=function(){e.close();var o=r.result;n(o?{languages:o.languages||[],languageNames:o.languageNames||{}}:null)},r.onerror=function(){e.close(),t(r.error)}})})}function Xe(e){var n="source:"+e;return ie().then(function(t){return new Promise(function(a,r){var o=t.transaction("meta","readonly"),l=o.objectStore("meta").get(n);l.onsuccess=function(){t.close();var v=l.result;a(v?{url:v.url,timestamp:v.timestamp,storedAt:v.storedAt}:null)},l.onerror=function(){t.close(),r(l.error)}})})}function pt(e){return ie().then(function(n){return new Promise(function(t,a){var r=n.transaction("translations","readonly"),o=r.objectStore("translations").get(e);o.onsuccess=function(){n.close();var l=o.result;t(l?l.data:null)},o.onerror=function(){n.close(),a(o.error)}})})}function gt(){return ie().then(function(e){return new Promise(function(n,t){var a=e.transaction(["meta","translations"],"readonly"),r=a.objectStore("meta"),o=r.get("registry");o.onsuccess=function(){var l=o.result;if(!l||!l.languages||l.languages.length===0){e.close(),n(null);return}var v=Y(),p=v||l.languages[0],s=a.objectStore("translations").get(p);s.onsuccess=function(){e.close();var f=s.result;if(!f||!f.data){n(null);return}var h={};h[p]=f.data;var g=a.objectStore("meta").get("aria");g.onsuccess=function(){n({languages:l.languages,languageNames:l.languageNames||{},translations:h,aria:Array.isArray(g.result&&g.result.rules)?g.result.rules:[]})},g.onerror=function(){n({languages:l.languages,languageNames:l.languageNames||{},translations:h,aria:[]})}},s.onerror=function(){e.close(),t(s.error)}},o.onerror=function(){e.close(),t(o.error)}})})}function ve(e,n,t){var a=n.languages||[],r=n.languageNames||{},o=n.translations||{},l=Array.isArray(n.aria)?n.aria:[],v=n.timestamp||0;return ie().then(function(p){return new Promise(function(s,f){var h=p.transaction(["meta","translations"],"readwrite"),g=h.objectStore("meta"),c=h.objectStore("translations"),u=g.get("registry");u.onsuccess=function(){var d=u.result,m,x;if(t&&d){var b=d.languages||[];m=b.slice();for(var w=0;w<a.length;w++)m.indexOf(a[w])===-1&&m.push(a[w]);x={};var y=d.languageNames||{},E;for(E in y)x[E]=y[E];for(E in r)x[E]=r[E]}else m=a,x=r;g.put({key:"registry",languages:m,languageNames:x}),g.put({key:"source:"+e,url:e,timestamp:v,storedAt:Date.now()});var T=g.get("aria");T.onsuccess=function(){var S=l;if(t&&T.result&&Array.isArray(T.result.rules)){for(var O="\0",F={},R=[],K=T.result.rules,J=0;J<K.length;J++){var C=K[J];if(!(!C||typeof C.key!="string")){var U=C.key+O+(C.context||"");F.hasOwnProperty(U)||R.push(U),F[U]=C}}for(var P=0;P<l.length;P++){var D=l[P];if(!(!D||typeof D.key!="string")){var I=D.key+O+(D.context||"");F.hasOwnProperty(I)||R.push(I),F[I]=D}}S=R.map(function(oe){return F[oe]})}g.put({key:"aria",rules:S})},T.onerror=function(){g.put({key:"aria",rules:l})};for(var N=0;N<a.length;N++)o[a[N]]&&(t&&Array.isArray(o[a[N]])?function(S){var O=c.get(S);O.onsuccess=function(){var F=O.result,R=F&&Array.isArray(F.data)?F.data:null,K=o[S];if(R){for(var J="\0",C={},U=[],P=0;P<R.length;P++){var D=R[P].key+J+(R[P].context||"");C.hasOwnProperty(D)||U.push(D),C[D]=R[P]}for(var I=0;I<K.length;I++){var oe=K[I].key+J+(K[I].context||"");C.hasOwnProperty(oe)||U.push(oe),C[oe]=K[I]}for(var ze=[],Oe=0;Oe<U.length;Oe++)ze.push(C[U[Oe]]);c.put({lang:S,data:ze})}else c.put({lang:S,data:K})}}(a[N]):c.put({lang:a[N],data:o[a[N]]}))},h.oncomplete=function(){p.close(),s()},h.onerror=function(){p.close(),f(h.error)}})})}function vt(){return new Promise(function(e){var n=indexedDB.deleteDatabase(We);n.onsuccess=function(){e()},n.onerror=function(){e()},n.onblocked=function(){e()}})}var mt='<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" width="32" height="32"><defs><clipPath id="loco-wc"><circle cx="100" cy="100" r="90"/></clipPath></defs><circle cx="100" cy="100" r="90" fill="#1a1f2e"/><g clip-path="url(#loco-wc)"><g transform="translate(100,108) scale(0.72) translate(-334,-198)"><ellipse cx="310" cy="318" rx="10" ry="38" fill="#2ECC88" transform="rotate(-18 310 318)"/><ellipse cx="326" cy="326" rx="9" ry="42" fill="#34D99A" transform="rotate(-6 326 326)"/><ellipse cx="342" cy="328" rx="9" ry="42" fill="#7BC74A" transform="rotate(6 342 328)"/><ellipse cx="357" cy="320" rx="9" ry="36" fill="#F07040" transform="rotate(18 357 320)"/><ellipse cx="334" cy="240" rx="62" ry="80" fill="#2ECC88"/><ellipse cx="334" cy="252" rx="36" ry="52" fill="#D4F4B0"/><path d="M275 220 Q228 190 232 265 Q248 295 280 285 Q268 255 275 220Z" fill="#3A8FE0"/><path d="M277 225 Q238 208 240 262 Q252 285 278 277 Q268 252 277 225Z" fill="#6BB3FF" opacity="0.7"/><path d="M393 220 Q440 190 436 265 Q420 295 388 285 Q400 255 393 220Z" fill="#3A8FE0"/><path d="M391 225 Q430 208 428 262 Q416 285 390 277 Q400 252 391 225Z" fill="#6BB3FF" opacity="0.7"/><ellipse cx="334" cy="172" rx="38" ry="30" fill="#2ECC88"/><circle cx="334" cy="148" r="52" fill="#2ECC88"/><ellipse cx="334" cy="118" rx="30" ry="18" fill="#FFB833"/><circle cx="312" cy="138" r="14" fill="white"/><circle cx="315" cy="140" r="9" fill="#2C2C2A"/><circle cx="315" cy="140" r="4" fill="#04342C"/><circle cx="319" cy="136" r="3.5" fill="white"/><circle cx="356" cy="138" r="14" fill="white"/><circle cx="353" cy="140" r="9" fill="#2C2C2A"/><circle cx="353" cy="140" r="4" fill="#04342C"/><circle cx="357" cy="136" r="3.5" fill="white"/><path d="M326 155 Q334 144 342 155 Q342 170 334 173 Q326 170 326 155Z" fill="#E8A020"/><path d="M328 165 Q334 158 340 165 Q340 174 334 176 Q328 174 328 165Z" fill="#A06010"/><ellipse cx="302" cy="152" rx="12" ry="8" fill="#F07040" opacity="0.8"/><ellipse cx="366" cy="152" rx="12" ry="8" fill="#F07040" opacity="0.8"/><path d="M320 100 Q316 68 308 52" stroke="#FFB833" stroke-width="6" fill="none" stroke-linecap="round"/><path d="M334 97 Q334 64 334 46" stroke="#7BC74A" stroke-width="6" fill="none" stroke-linecap="round"/><path d="M348 100 Q352 68 360 52" stroke="#F07040" stroke-width="6" fill="none" stroke-linecap="round"/><circle cx="308" cy="50" r="8" fill="#FFB833"/><circle cx="334" cy="44" r="8" fill="#7BC74A"/><circle cx="360" cy="50" r="8" fill="#F07040"/><rect x="260" y="330" width="168" height="10" rx="5" fill="#8B5E20"/><path d="M310 330 L300 350 M310 330 L315 352 M310 330 L325 348" stroke="#A07030" stroke-width="4" fill="none" stroke-linecap="round"/><path d="M360 330 L350 350 M360 330 L365 352 M360 330 L375 348" stroke="#A07030" stroke-width="4" fill="none" stroke-linecap="round"/></g></g></svg>',Se=null;function me(e,n){Se=n;var t=document.getElementById("loco-lang-widget");t&&t.remove();var a={},r=e.map(function(y){return typeof y=="object"&&y.code?(y.name&&(a[y.code]=y.name),y.code):y}),o={"zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)"};function l(y){return String(y||"").trim().replace(/_/g,"-")}function v(y){return y&&y.charAt(0).toUpperCase()+y.slice(1).toLowerCase()}function p(y){var E=l(y);if(!E)return"";var T=E.split("-").filter(Boolean);if(T.length===0)return"";T[0]=T[0].toLowerCase();for(var N=1;N<T.length;N++)T[N].length===2?T[N]=T[N].toUpperCase():T[N].length===4?T[N]=v(T[N]):T[N]=T[N].toLowerCase();return T.join("-")}function s(y){var E=p(y);if(!E)return"";if(o[E])return o[E];if(E.indexOf("-")===-1)return"";try{if(typeof Intl<"u"&&typeof Intl.DisplayNames=="function"){var T=new Intl.DisplayNames([navigator.language||"en","en"],{type:"language"}),N=T.of(E);if(N&&N!==E)return N}}catch{}return""}function f(y,E){return y?p(y)===p(E):!0}function h(y){var E=a[y]||a[p(y)]||"";if(E&&!f(E,y))return E;var T=p(y);return o[T]?o[T]:s(y)||y}var g=Y()||null,c=document.createElement("div");c.id="loco-lang-widget",c.setAttribute("data-notranslate","");var u={"bottom-right":"bottom:20px;right:20px;","bottom-left":"bottom:20px;left:20px;","top-right":"top:20px;right:20px;","top-left":"top:20px;left:20px;"};c.style.cssText='position:fixed;z-index:2147483647;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:14px;'+(u[n]||u["bottom-right"]);var d=document.createElement("button");d.innerHTML=mt,d.style.cssText="width:52px;height:52px;border-radius:50%;border:none;background:#1a1f2e;color:#fff;font-size:22px;cursor:pointer;box-shadow:0 4px 14px rgba(0,0,0,0.25);display:flex;align-items:center;justify-content:center;transition:transform 0.2s,box-shadow 0.2s;overflow:hidden;padding:0;",d.onmouseenter=function(){d.style.transform="scale(1.1)",d.style.boxShadow="0 6px 20px rgba(0,0,0,0.35)"},d.onmouseleave=function(){d.style.transform="scale(1)",d.style.boxShadow="0 4px 14px rgba(0,0,0,0.25)"};var m=document.createElement("div");m.style.cssText="display:none;position:absolute;"+(n.indexOf("bottom")===0?"bottom:56px;":"top:56px;")+(n.indexOf("right")>=0?"right:0;":"left:0;")+"background:#fff;border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,0.18);min-width:200px;max-height:320px;overflow-y:auto;padding:6px 0;";var x=document.createElement("div");x.textContent="Original",x.style.cssText="padding:10px 16px;cursor:pointer;color:#333;transition:background 0.15s;font-weight:600;border-bottom:1px solid #eee;",x.onmouseenter=function(){x.style.background="#f5f5f5"},x.onmouseleave=function(){x.style.background="transparent"},x.onclick=function(){g=null,window.Loco.restore(),w(),m.style.display="none"},m.appendChild(x);var b=[];r.forEach(function(y){var E=document.createElement("div");E.textContent=h(y),E.setAttribute("data-lang",y),E.style.cssText="padding:10px 16px;cursor:pointer;color:#333;transition:background 0.15s;",E.onmouseenter=function(){E.style.background="#f5f5f5"},E.onmouseleave=function(){E.style.background=g===y?"#e8f0fe":"transparent"},E.onclick=function(){g=y,window.Loco.apply(y),w(),m.style.display="none"},m.appendChild(E),b.push({el:E,code:y})});function w(){x.style.background=g===null?"#e8f0fe":"transparent",x.style.fontWeight=g===null?"600":"400",b.forEach(function(y){y.el.style.background=g===y.code?"#e8f0fe":"transparent",y.el.style.fontWeight=g===y.code?"600":"400"})}d.onclick=function(y){y.stopPropagation(),m.style.display=m.style.display==="none"?"block":"none"},document.addEventListener("click",function(y){c.contains(y.target)||(m.style.display="none")}),w(),c.appendChild(m),c.appendChild(d),document.body.appendChild(c)}function yt(e){Se&&(!e||e.length===0||me(e,Se))}var H={__proto__:1,constructor:1,prototype:1};function Qe(e){if(!e||typeof e!="string")return!1;if(e.charAt(0)==="/"||e.charAt(0)===".")return!0;try{var n=new URL(e,window.location.origin);return n.protocol==="http:"||n.protocol==="https:"}catch{return!1}}function ye(e){if(!e||typeof e!="object"||Array.isArray(e))return null;if(Array.isArray(e._raw)){for(var n={},t={},a=0;a<e._raw.length;a++){var r=e._raw[a];!r||typeof r.l!="string"||typeof r.k!="string"||typeof r.v!="string"||(n[r.l]||(n[r.l]=!0,t[r.l]=[]),t[r.l].push({key:r.k,context:typeof r.c=="string"?r.c:"",value:r.v}))}e={languages:Object.keys(n).sort(),languageNames:{},translations:t,timestamp:0}}var o={};if(!Array.isArray(e.languages))return null;o.languages=[];for(var l=0;l<e.languages.length;l++){if(typeof e.languages[l]!="string"||e.languages[l].length>20)return null;o.languages.push(e.languages[l])}if(o.timestamp=typeof e.timestamp=="number"&&isFinite(e.timestamp)?e.timestamp:0,o.languageNames={},e.languageNames&&typeof e.languageNames=="object"&&!Array.isArray(e.languageNames))for(var v in e.languageNames)!e.languageNames.hasOwnProperty(v)||H[v]||typeof e.languageNames[v]=="string"&&e.languageNames[v].length<=100&&(o.languageNames[v]=e.languageNames[v]);if(o.translations={},e.translations&&typeof e.translations=="object"&&!Array.isArray(e.translations)){for(var p in e.translations)if(!(!e.translations.hasOwnProperty(p)||H[p])&&o.languages.indexOf(p)!==-1){var s=e.translations[p];if(Array.isArray(s)){for(var f=[],h=0;h<s.length;h++){var g=s[h];!g||typeof g!="object"||typeof g.key!="string"||typeof g.value!="string"||g.key.length>Z||g.value.length>Z||H[g.key]||f.push({key:g.key,value:g.value,context:typeof g.context=="string"?g.context:""})}o.translations[p]=f}else if(typeof s=="object"){var c={};for(var u in s)!s.hasOwnProperty(u)||H[u]||typeof s[u]=="string"&&(u.length>Z||s[u].length>Z||(c[u]=s[u]));o.translations[p]=c}}}if(o.aria=[],Array.isArray(e.aria))for(var d=0;d<e.aria.length;d++){var r=e.aria[d];if(!(!r||typeof r!="object")&&!(typeof r.key!="string"||r.key.length>Z)&&!H[r.key]){var m=typeof r.context=="string"?r.context:"",x=r.attributes;!x||typeof x!="object"||Array.isArray(x)||o.aria.push({key:r.key,context:m,attributes:x})}}return o}async function $e(){try{var e=await fetch(i.apiBase+"/api/project/crawler-config",{headers:{"X-API-Key":i.apiKey}});e.ok&&Je(await e.json())}catch{}Le(),i.phrases=await ae(document.body),de(i.phrases).then(function(t){t&&t.keyMap&&ce(i.phrases,t.keyMap)}).catch(function(t){console.warn("[loco] Failed to register keys:",t)}),He().then(function(t){i.ariaRules=t||{};var a=V(i.phrases,i.ariaRules);a.applied>0&&console.log("[loco] applied ARIA rules to "+a.applied+" element(s)")}).catch(function(){}),!i.scanStopped&&i.screenshotsEnabled&&setTimeout(st,3e3),console.log("[loco] "+i.phrases.length+" text nodes discovered"),console.log(` Loco.textnodes() — list all discovered text nodes
2
2
  Loco.apply("zh-Hans") — apply translations for a language
3
3
  Loco.restore() — revert to original text
4
- Loco.rescan() — re-scan DOM for new nodes`);var n=Y();n?J.apply(n):o.observer=pe(o.phrases.map(function(t){return t.key+"\0"+(t.context||"")}),{})}function yt(e,n){for(var t="\0",a={},r=[],i=0;i<e.length;i++){var l=e[i],g=l.key+t+(l.context||"");a.hasOwnProperty(g)||r.push(g),a[g]=l}for(var p=0;p<n.length;p++){var c=n[p],u=c.key+t+(c.context||"");a.hasOwnProperty(u)||r.push(u),a[u]=c}for(var h=[],m=0;m<r.length;m++)h.push(a[r[m]]);return h}async function xe(e){o.screenshotsEnabled=!1,ke(),o.phrases=await ae(document.body);var n=[],t=o.fileData.translations||{},a=(o.fileData.languages||[])[0];a&&t[a]&&(t[a]=Ke(t[a]),n=Object.keys(t[a]));var r=V(o.phrases,n),i=r?Object.keys(r).length:0,l=(o.fileData.languages||[]).length;console.log("[loco] (file mode) "+o.phrases.length+" text nodes discovered, "+l+" language(s) available"+(i?", "+i+" var-remapped":"")+" ["+e+"]"),console.log(" Languages: "+(o.fileData.languages||[]).join(", "));var g=Y();g?J.apply(g):o.observer=pe(o.phrases.map(function(p){return p.key+"\0"+(p.context||"")}),{}),o.ariaRules=je(o.fileData.aria||[]),Object.keys(o.ariaRules).length>0&&G(o.phrases,o.ariaRules)}async function qe(e){try{indexedDB.deleteDatabase("loco-translations")}catch{}try{indexedDB.deleteDatabase("loco-meta")}catch{}try{indexedDB.databases&&indexedDB.databases().then(function(t){t.forEach(function(a){if(a.name&&a.name.indexOf("loco-tr-")===0)try{indexedDB.deleteDatabase(a.name)}catch{}})}).catch(function(){})}catch{}o.fileUrls=e;var n=null;try{n=await pt()}catch{}n&&n.translations?(o.fileData={languages:n.languages,languageNames:n.languageNames||{},translations:n.translations,aria:n.aria||[],timestamp:0},o.loadedFromCache=!0,await xe("cache"),o.fileReadyResolve&&(o.fileReadyResolve(),o.fileReadyResolve=null),Et(e)):(await xt(e),await xe("network"),o.fileReadyResolve&&(o.fileReadyResolve(),o.fileReadyResolve=null))}async function xt(e){for(var n=e.map(function(p){return fetch(p).then(function(c){if(!c.ok)throw new Error("HTTP "+c.status+" for "+p);return c.text()}).then(function(c){if(!c||!c.trim())return null;var u;try{u=JSON.parse(c)}catch{return null}var h=ye(u);return h?{url:p,data:h}:(console.warn("[loco] File rejected (invalid schema): "+p),null)}).catch(function(c){return console.warn("[loco] Failed to load "+p+":",c),null})}),t=await Promise.all(n),a=!0,r=0;r<t.length;r++)if(t[r]){var i=t[r].url,l=t[r].data,g=!a||(l.languages||[]).length===1;Ee(l,a),a=!1;try{await me(i,l,g)}catch{}}o.loadedFromCache=!1}function Ee(e,n){if(!o.fileData||n){o.fileData={languages:(e.languages||[]).slice(),languageNames:Object.assign({},e.languageNames||{}),translations:Object.assign({},e.translations||{}),aria:(e.aria||[]).slice(),timestamp:e.timestamp||0},o.fileData.aria||(o.fileData.aria=[]);var t=e.aria||[];if(t.length>0){for(var a="\0",r={},i=[],l=0;l<o.fileData.aria.length;l++){var g=o.fileData.aria[l];if(!(!g||typeof g.key!="string")){var p=g.key+a+(g.context||"");r.hasOwnProperty(p)||i.push(p),r[p]=g}}for(var c=0;c<t.length;c++){var u=t[c];if(!(!u||typeof u.key!="string")){var h=u.key+a+(u.context||"");r.hasOwnProperty(h)||i.push(h),r[h]=u}}o.fileData.aria=i.map(function(T){return r[T]})}return}for(var m=e.languages||[],f=0;f<m.length;f++)o.fileData.languages.indexOf(m[f])===-1&&o.fileData.languages.push(m[f]);var s=e.languageNames||{};o.fileData.languageNames||(o.fileData.languageNames={});for(var d in s)!s.hasOwnProperty(d)||H[d]||(o.fileData.languageNames[d]=s[d]);var v=e.translations||{};o.fileData.translations||(o.fileData.translations={});for(var y in v)if(!(!v.hasOwnProperty(y)||H[y])){var x=o.fileData.translations[y],E=v[y];!x||!Array.isArray(x)||!Array.isArray(E)?o.fileData.translations[y]=E:o.fileData.translations[y]=yt(x,E)}e.timestamp&&e.timestamp>o.fileData.timestamp&&(o.fileData.timestamp=e.timestamp)}function Et(e){var n=e.map(function(t){return Promise.all([We(t).catch(function(){return null}),fetch(t).then(function(a){return a.ok?a.text():null}).catch(function(){return null})]).then(function(a){var r=a[0],i=a[1];if(!i||!i.trim())return null;var l;try{l=JSON.parse(i)}catch{return null}if(l=ye(l),!l)return null;var g=l.timestamp||0,p=r&&r.timestamp||0;if(g!==p){var c=e.length>1||(l.languages||[]).length===1;return me(t,l,c).catch(function(){}),l}return null})});Promise.all(n).then(function(t){for(var a=!1,r=0;r<t.length;r++)t[r]&&(Ee(t[r],!1),a=!0);a&&(o.loadedFromCache=!1,o.observer&&(o.observer.disconnect(),o.observer=null),j(o.phrases),xe("network — updated").then(function(){Oe()}),console.log("[loco] translations refreshed from file(s) (timestamp changed)"))}).catch(function(){console.log("[loco] using cached translations (network unavailable)")})}function Oe(){o.widgetPosition&&ge().then(function(e){if(e){var n=be(e.languages,e.languageNames);vt(n)}}).catch(function(){})}function be(e,n){return e=e||[],n=n||{},e.map(function(t){return n[t]?{code:t,name:n[t]}:t})}function bt(e){return e?e.type==="text"?!!(e.textNode&&e.textNode.parentElement&&e.textNode.isConnected):!!(e.element&&e.element.isConnected):!1}function Ve(){if(!Array.isArray(o.phrases)||o.phrases.length===0)return[];var e=o.phrases.filter(bt);return e.length!==o.phrases.length&&(o.phrases=e),o.phrases}var J={version:"1.1.2",init:function(e){if(!e){console.warn("[loco] Loco.init() requires a config object");return}if(e.file||e.files){o.fileMode=!0,o.fileReady=new Promise(function(a){o.fileReadyResolve=a});for(var n=e.files?e.files.slice():[e.file],t=0;t<n.length;t++)if(!Qe(n[t])){console.warn("[loco] Blocked unsafe URL: "+n[t]);return}o.fileUrl=n[0],document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){qe(n)}):qe(n);return}if(!e.apiKey){console.warn("[loco] Loco.init() requires { apiKey } or { file }");return}if(!e.apiUrl){console.warn("[loco] Loco.init() requires { apiUrl }");return}o.apiKey=e.apiKey,o.apiBase=e.apiUrl.replace(/\/+$/,""),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",$e):$e()},apply:async function(e){var n=typeof window<"u"&&window.__locoPerfMode;if(n&&(performance.clearMarks(),performance.clearMeasures(),performance.mark("loco-apply-start")),!e){console.warn('[loco] Loco.apply() requires a language code, e.g. Loco.apply("zh-Hans")');return}if(typeof e!="string"||e.length>20||!/^[a-zA-Z0-9\-_]+$/.test(e)){console.warn("[loco] Invalid language code: "+e);return}if(o.fileMode){if(!o.fileData){console.warn("[loco] File not loaded yet. Call Loco.init({ file }) first.");return}if(!o.fileData.translations||!o.fileData.translations[e])try{var t=await ht(e);if(!t||Object.keys(t).length===0){console.warn('[loco] No translations for "'+e+'" in file data or cache');return}return o.fileData.translations||(o.fileData.translations={}),o.fileData.translations[e]=t,o.fileData.languages.indexOf(e)===-1&&o.fileData.languages.push(e),J.apply(e)}catch(p){console.warn('[loco] Failed to load translations for "'+e+'" from cache:',p);return}o.observer&&(o.observer.disconnect(),o.observer=null),j(o.phrases),o.translations=Ke(o.fileData.translations[e]),o.fileData.translations[e]=o.translations,n&&performance.mark("loco-collect-start");var a=Ve();a.length===0&&(o.phrases=await ae(document.body)),n&&(performance.mark("loco-collect-end"),performance.measure("loco-collection-time","loco-collect-start","loco-collect-end"));var r=Object.keys(o.translations);V(o.phrases,r),n&&performance.mark("loco-dom-start");var i=await he(o.phrases,o.translations);return n&&(performance.mark("loco-dom-end"),performance.measure("loco-dom-write-time","loco-dom-start","loco-dom-end"),performance.measure("loco-apply-total","loco-apply-start","loco-dom-end")),o.ariaRules&&Object.keys(o.ariaRules).length>0&&G(o.phrases,o.ariaRules),o.observer=pe(o.phrases.map(function(p){return p.key+"\0"+(p.context||"")}),o.translations),o.currentLang=e,le(e),console.log("[loco] (file) applied "+i.applied+" translation(s), "+i.skipped+" pending"),i}if(!o.apiKey||!o.apiBase){console.warn("[loco] Call Loco.init() first");return}o.observer&&(o.observer.disconnect(),o.observer=null),j(o.phrases);try{var l=await it(e);o.translations=l||{},n&&performance.mark("loco-collect-start");var g=Ve();g.length===0&&(o.phrases=await ae(document.body)),n&&(performance.mark("loco-collect-end"),performance.measure("loco-collection-time","loco-collect-start","loco-collect-end")),V(o.phrases,Object.keys(o.translations)),de(o.phrases).then(function(c){c&&c.keyMap&&(ce(o.phrases,c.keyMap),he(o.phrases,o.translations))}).catch(function(){}),n&&performance.mark("loco-dom-start");var i=await he(o.phrases,o.translations);return n&&(performance.mark("loco-dom-end"),performance.measure("loco-dom-write-time","loco-dom-start","loco-dom-end"),performance.measure("loco-apply-total","loco-apply-start","loco-dom-end")),o.ariaRules&&Object.keys(o.ariaRules).length>0&&G(o.phrases,o.ariaRules),o.observer=pe(o.phrases.map(function(c){return c.key+"\0"+(c.context||"")}),o.translations),o.currentLang=e,le(e),console.log("[loco] applied "+i.applied+" translation(s), "+i.skipped+" pending"),i}catch(p){console.warn("[loco] Failed to fetch translations:",p)}},restore:function(){j(o.phrases),o.observer&&o.observer.disconnect(),o.currentLang=null,le(null)},rescan:async function(){var e=Object.keys(o.translations).length>0;e&&j(o.phrases),o.currentLang=null,o.phrases=await ae(document.body),o.fileMode||de(o.phrases).catch(function(){}),o.ariaRules&&Object.keys(o.ariaRules).length>0&&G(o.phrases,o.ariaRules),e&&(V(o.phrases,Object.keys(o.translations)),await he(o.phrases,o.translations))},textnodes:function(){return o.phrases.map(function(e){return{key:e.key,context:e.context||"",element:e.element}})},aria:async function(){var e=await He();o.ariaRules=e||{};var n=G(o.phrases,o.ariaRules);return console.log("[loco] applied ARIA rules to "+n.applied+" element(s)"),n},stopScan:function(){o.scanStopped=!0,o.observer&&(o.observer.disconnect(),o.observer=null),console.log("[loco] scanning stopped, no further nodes will be sent to dashboard")},startScan:function(){o.scanStopped=!1,console.log("[loco] scanning resumed")},isFileMode:function(){return o.fileMode},languages:function(){if(o.fileMode){var e=function(){var n=o.fileData?o.fileData.languages||[]:[],t=o.fileData&&o.fileData.languageNames||{};return n.map(function(a){return{code:a,name:t[a]||a}})};return!o.fileData&&o.fileReady?o.fileReady.then(function(){return ge().then(function(n){return n&&n.languages&&n.languages.length>0?be(n.languages,n.languageNames):e()}).catch(function(){return e()})}):ge().then(function(n){return n&&n.languages&&n.languages.length>0?be(n.languages,n.languageNames):e()}).catch(function(){return e()})}return!o.apiKey||!o.apiBase?Promise.resolve([]):fetch(o.apiBase+"/api/languages",{headers:{"X-API-Key":o.apiKey}}).then(function(n){return n.json()}).then(function(n){return Array.isArray(n)?n:[]}).catch(function(){return[]})},widget:function(e){e=e||{};var n=e.position||"bottom-right";if(o.widgetPosition=n,o.fileMode){let t=function(){ge().then(function(r){var i;if(r&&r.languages&&r.languages.length>0?i=be(r.languages,r.languageNames):i=a(),i.length===0){console.warn("[loco] No languages found in translation file or cache");return}ve(i,n)}).catch(function(){var r=a();if(r.length===0){console.warn("[loco] No languages found in translation file");return}ve(r,n)})},a=function(){var r=o.fileData?o.fileData.languages||[]:[],i=o.fileData&&o.fileData.languageNames||{};return r.map(function(l){return i[l]?{code:l,name:i[l]}:l})};if(!o.fileData&&o.fileReady){o.fileReady.then(t);return}t();return}if(!o.apiKey||!o.apiBase){console.warn("[loco] Call Loco.init() first");return}fetch(o.apiBase+"/api/languages",{headers:{"X-API-Key":o.apiKey}}).then(function(t){return t.json()}).then(function(t){if(!Array.isArray(t)||t.length===0){console.warn("[loco] No languages found — add translations in the dashboard first");return}ve(t,n)}).catch(function(t){console.warn("[loco] Failed to fetch languages:",t)})},clearCache:function(){return o.fileMode?gt().then(function(){o.fileData&&(o.fileData.translations={},o.fileData.timestamp=0),o.currentLang=null,o.loadedFromCache=!1,le(null),j(o.phrases),o.observer&&(o.observer.disconnect(),o.observer=null),console.log("[loco] IndexedDB cache cleared — call pullLatest() to re-fetch")}).catch(function(e){console.warn("[loco] Failed to clear cache:",e)}):(console.warn("[loco] clearCache() is only available in file mode"),Promise.resolve())},addFile:function(e){return o.fileMode?e?Qe(e)?(o.fileUrls.indexOf(e)===-1&&o.fileUrls.push(e),fetch(e).then(function(n){if(!n.ok)throw new Error("HTTP "+n.status);return n.text()}).then(function(n){if(!n||!n.trim())throw new Error("Empty file");var t;try{t=JSON.parse(n)}catch{throw new Error("Invalid JSON")}if(t=ye(t),!t)throw new Error("Invalid file schema");var a=!o.fileData||!o.fileData.languages||o.fileData.languages.length===0,r=!a||(t.languages||[]).length===1;return Ee(t,a),me(e,t,r).catch(function(){}),Oe(),console.log("[loco] added file: "+e+" ("+(t.languages||[]).join(", ")+")"),{status:"added",languages:t.languages||[]}}).catch(function(n){return console.warn("[loco] addFile() failed:",n),{status:"error",reason:n.message}})):(console.warn("[loco] Blocked unsafe URL: "+e),Promise.resolve({status:"error",reason:"unsafe URL"})):Promise.resolve({status:"error",reason:"no URL provided"}):(console.warn("[loco] addFile() is only available in file mode"),Promise.resolve({status:"error",reason:"not in file mode"}))},pullLatest:function(){if(!o.fileMode)return console.warn("[loco] pullLatest() is only available in file mode"),Promise.resolve({status:"skipped",reason:"not in file mode"});var e=o.fileUrls.length>0?o.fileUrls:o.fileUrl?[o.fileUrl]:[];if(e.length===0)return console.warn("[loco] No file URL(s) configured. Call Loco.init({ file }) first."),Promise.resolve({status:"error",reason:"no file URLs"});var n=e.map(function(t){return Promise.all([We(t).catch(function(){return null}),fetch(t).then(function(a){if(!a.ok)throw new Error("HTTP "+a.status);return a.text()})]).then(function(a){var r=a[0],i=a[1];if(!i||!i.trim())return{url:t,status:"current",reason:"empty"};var l;try{l=JSON.parse(i)}catch{throw new Error("Invalid JSON in "+t)}if(l=ye(l),!l)throw new Error("Invalid file schema in "+t);var g=l.timestamp||0,p=r&&r.timestamp||0;if(g===p&&p!==0){var c=o.fileData&&o.fileData.translations,u=l.languages||[],h=!c||u.some(function(s){return!o.fileData.translations[s]});if(!h)return{url:t,status:"current",timestamp:p}}var m=!o.fileData||!o.fileData.languages||o.fileData.languages.length===0,f=!m||(l.languages||[]).length===1;return Ee(l,m),me(t,l,f).catch(function(){}),{url:t,status:"updated",timestamp:g,previousTimestamp:p}}).catch(function(a){return{url:t,status:"error",reason:a.message}})});return Promise.all(n).then(async function(t){var a=t.some(function(u){return u.status==="updated"});if(a){o.loadedFromCache=!1,o.currentLang=null;var r=Y();if(r)o.observer&&(o.observer.disconnect(),o.observer=null),j(o.phrases),await xe("pullLatest");else{o.phrases=Me(document.body);var i=o.fileData.translations||{},l=(o.fileData.languages||[])[0];l&&i[l]&&V(o.phrases,Object.keys(i[l]))}Oe()}if(t.length===1){var g=t[0];return console.log("[loco] pullLatest: "+g.status+(g.timestamp?" (timestamp: "+g.timestamp+")":"")),g}var p=t.filter(function(u){return u.status==="updated"}).map(function(u){return u.url}),c=t.filter(function(u){return u.status==="current"}).map(function(u){return u.url});return console.log("[loco] pullLatest: "+p.length+" updated, "+c.length+" current"),{status:a?"updated":"current",results:t}}).catch(function(t){return console.warn("[loco] pullLatest() failed:",t),{status:"error",reason:t.message}})}};return window.Loco=J,Object.defineProperty(J,"_state",{value:o,writable:!1,enumerable:!1,configurable:!1}),J}();
4
+ Loco.rescan() — re-scan DOM for new nodes`);var n=Y();n?z.apply(n):i.observer=pe(i.phrases.map(function(t){return t.key+"\0"+(t.context||"")}),{})}function xt(e,n){for(var t="\0",a={},r=[],o=0;o<e.length;o++){var l=e[o],v=l.key+t+(l.context||"");a.hasOwnProperty(v)||r.push(v),a[v]=l}for(var p=0;p<n.length;p++){var s=n[p],f=s.key+t+(s.context||"");a.hasOwnProperty(f)||r.push(f),a[f]=s}for(var h=[],g=0;g<r.length;g++)h.push(a[r[g]]);return h}async function xe(e){i.screenshotsEnabled=!1,Le(),i.phrases=await ae(document.body);var n=[],t=i.fileData.translations||{},a=(i.fileData.languages||[])[0];a&&t[a]&&(t[a]=Ke(t[a]),n=Object.keys(t[a]));var r=G(i.phrases,n),o=r?Object.keys(r).length:0,l=(i.fileData.languages||[]).length;console.log("[loco] (file mode) "+i.phrases.length+" text nodes discovered, "+l+" language(s) available"+(o?", "+o+" var-remapped":"")+" ["+e+"]"),console.log(" Languages: "+(i.fileData.languages||[]).join(", "));var v=Y();v?z.apply(v):i.observer=pe(i.phrases.map(function(p){return p.key+"\0"+(p.context||"")}),{}),i.ariaRules=je(i.fileData.aria||[]),Object.keys(i.ariaRules).length>0&&V(i.phrases,i.ariaRules)}async function qe(e){try{indexedDB.deleteDatabase("loco-translations")}catch{}try{indexedDB.deleteDatabase("loco-meta")}catch{}try{indexedDB.databases&&indexedDB.databases().then(function(t){t.forEach(function(a){if(a.name&&a.name.indexOf("loco-tr-")===0)try{indexedDB.deleteDatabase(a.name)}catch{}})}).catch(function(){})}catch{}i.fileUrls=e;var n=null;try{n=await gt()}catch{}n&&n.translations?(i.fileData={languages:n.languages,languageNames:n.languageNames||{},translations:n.translations,aria:n.aria||[],timestamp:0},i.loadedFromCache=!0,await xe("cache"),i.fileReadyResolve&&(i.fileReadyResolve(),i.fileReadyResolve=null),bt(e)):(await Et(e),await xe("network"),i.fileReadyResolve&&(i.fileReadyResolve(),i.fileReadyResolve=null))}async function Et(e){for(var n=e.map(function(p){return fetch(p).then(function(s){if(!s.ok)throw new Error("HTTP "+s.status+" for "+p);return s.text()}).then(function(s){if(!s||!s.trim())return null;var f;try{f=JSON.parse(s)}catch{return null}var h=ye(f);return h?{url:p,data:h}:(console.warn("[loco] File rejected (invalid schema): "+p),null)}).catch(function(s){return console.warn("[loco] Failed to load "+p+":",s),null})}),t=await Promise.all(n),a=!0,r=0;r<t.length;r++)if(t[r]){var o=t[r].url,l=t[r].data,v=!a||(l.languages||[]).length===1;Ee(l,a),a=!1;try{await ve(o,l,v)}catch{}}i.loadedFromCache=!1}function Ee(e,n){if(!i.fileData||n){i.fileData={languages:(e.languages||[]).slice(),languageNames:Object.assign({},e.languageNames||{}),translations:Object.assign({},e.translations||{}),aria:(e.aria||[]).slice(),timestamp:e.timestamp||0},i.fileData.aria||(i.fileData.aria=[]);var t=e.aria||[];if(t.length>0){for(var a="\0",r={},o=[],l=0;l<i.fileData.aria.length;l++){var v=i.fileData.aria[l];if(!(!v||typeof v.key!="string")){var p=v.key+a+(v.context||"");r.hasOwnProperty(p)||o.push(p),r[p]=v}}for(var s=0;s<t.length;s++){var f=t[s];if(!(!f||typeof f.key!="string")){var h=f.key+a+(f.context||"");r.hasOwnProperty(h)||o.push(h),r[h]=f}}i.fileData.aria=o.map(function(y){return r[y]})}return}for(var g=e.languages||[],c=0;c<g.length;c++)i.fileData.languages.indexOf(g[c])===-1&&i.fileData.languages.push(g[c]);var u=e.languageNames||{};i.fileData.languageNames||(i.fileData.languageNames={});for(var d in u)!u.hasOwnProperty(d)||H[d]||(i.fileData.languageNames[d]=u[d]);var m=e.translations||{};i.fileData.translations||(i.fileData.translations={});for(var x in m)if(!(!m.hasOwnProperty(x)||H[x])){var b=i.fileData.translations[x],w=m[x];!b||!Array.isArray(b)||!Array.isArray(w)?i.fileData.translations[x]=w:i.fileData.translations[x]=xt(b,w)}e.timestamp&&e.timestamp>i.fileData.timestamp&&(i.fileData.timestamp=e.timestamp)}function bt(e){var n=e.map(function(t){return Promise.all([Xe(t).catch(function(){return null}),fetch(t).then(function(a){return a.ok?a.text():null}).catch(function(){return null})]).then(function(a){var r=a[0],o=a[1];if(!o||!o.trim())return null;var l;try{l=JSON.parse(o)}catch{return null}if(l=ye(l),!l)return null;var v=l.timestamp||0,p=r&&r.timestamp||0;if(v!==p){var s=e.length>1||(l.languages||[]).length===1;return ve(t,l,s).catch(function(){}),l}return null})});Promise.all(n).then(function(t){for(var a=!1,r=0;r<t.length;r++)t[r]&&(Ee(t[r],!1),a=!0);a&&(i.loadedFromCache=!1,i.observer&&(i.observer.disconnect(),i.observer=null),j(i.phrases),xe("network — updated").then(function(){Ce()}),console.log("[loco] translations refreshed from file(s) (timestamp changed)"))}).catch(function(){console.log("[loco] using cached translations (network unavailable)")})}function Ce(){i.widgetPosition&&ge().then(function(e){if(e){var n=be(e.languages,e.languageNames);yt(n)}}).catch(function(){})}function Ge(e,n){if(!e||!n)return"";var t=n[e];if(t)return t;var a=String(e).replace(/_/g,"-");if(n[a])return n[a];var r=a.toLowerCase();if(n[r])return n[r];var o=r.split("-").map(function(l,v){return v===0?l:l.length===2?l.toUpperCase():l.length===4?l.charAt(0).toUpperCase()+l.slice(1):l}).join("-");return n[o]?n[o]:""}function be(e,n){return e=e||[],n=n||{},e.map(function(t){var a=Ge(t,n);return a?{code:t,name:a}:t})}function wt(e){return e?e.type==="text"?!!(e.textNode&&e.textNode.parentElement&&e.textNode.isConnected):!!(e.element&&e.element.isConnected):!1}function Ve(){if(!Array.isArray(i.phrases)||i.phrases.length===0)return[];var e=i.phrases.filter(wt);return e.length!==i.phrases.length&&(i.phrases=e),i.phrases}var z={version:"1.1.4",init:function(e){if(!e){console.warn("[loco] Loco.init() requires a config object");return}if(e.file||e.files){i.fileMode=!0,i.fileReady=new Promise(function(a){i.fileReadyResolve=a});for(var n=e.files?e.files.slice():[e.file],t=0;t<n.length;t++)if(!Qe(n[t])){console.warn("[loco] Blocked unsafe URL: "+n[t]);return}i.fileUrl=n[0],document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){qe(n)}):qe(n);return}if(!e.apiKey){console.warn("[loco] Loco.init() requires { apiKey } or { file }");return}if(!e.apiUrl){console.warn("[loco] Loco.init() requires { apiUrl }");return}i.apiKey=e.apiKey,i.apiBase=e.apiUrl.replace(/\/+$/,""),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",$e):$e()},apply:async function(e){var n=typeof window<"u"&&window.__locoPerfMode;if(n&&(performance.clearMarks(),performance.clearMeasures(),performance.mark("loco-apply-start")),!e){console.warn('[loco] Loco.apply() requires a language code, e.g. Loco.apply("zh-Hans")');return}if(typeof e!="string"||e.length>20||!/^[a-zA-Z0-9\-_]+$/.test(e)){console.warn("[loco] Invalid language code: "+e);return}if(i.fileMode){if(!i.fileData){console.warn("[loco] File not loaded yet. Call Loco.init({ file }) first.");return}if(!i.fileData.translations||!i.fileData.translations[e])try{var t=await pt(e);if(!t||Object.keys(t).length===0){console.warn('[loco] No translations for "'+e+'" in file data or cache');return}return i.fileData.translations||(i.fileData.translations={}),i.fileData.translations[e]=t,i.fileData.languages.indexOf(e)===-1&&i.fileData.languages.push(e),z.apply(e)}catch(p){console.warn('[loco] Failed to load translations for "'+e+'" from cache:',p);return}i.observer&&(i.observer.disconnect(),i.observer=null),j(i.phrases),i.translations=Ke(i.fileData.translations[e]),i.fileData.translations[e]=i.translations,n&&performance.mark("loco-collect-start");var a=Ve();a.length===0&&(i.phrases=await ae(document.body)),n&&(performance.mark("loco-collect-end"),performance.measure("loco-collection-time","loco-collect-start","loco-collect-end"));var r=Object.keys(i.translations);G(i.phrases,r),n&&performance.mark("loco-dom-start");var o=await he(i.phrases,i.translations);return n&&(performance.mark("loco-dom-end"),performance.measure("loco-dom-write-time","loco-dom-start","loco-dom-end"),performance.measure("loco-apply-total","loco-apply-start","loco-dom-end")),i.ariaRules&&Object.keys(i.ariaRules).length>0&&V(i.phrases,i.ariaRules),i.observer=pe(i.phrases.map(function(p){return p.key+"\0"+(p.context||"")}),i.translations),i.currentLang=e,le(e),console.log("[loco] (file) applied "+o.applied+" translation(s), "+o.skipped+" pending"),o}if(!i.apiKey||!i.apiBase){console.warn("[loco] Call Loco.init() first");return}i.observer&&(i.observer.disconnect(),i.observer=null),j(i.phrases);try{var l=await lt(e);i.translations=l||{},n&&performance.mark("loco-collect-start");var v=Ve();v.length===0&&(i.phrases=await ae(document.body)),n&&(performance.mark("loco-collect-end"),performance.measure("loco-collection-time","loco-collect-start","loco-collect-end")),G(i.phrases,Object.keys(i.translations)),de(i.phrases).then(function(s){s&&s.keyMap&&(ce(i.phrases,s.keyMap),he(i.phrases,i.translations))}).catch(function(){}),n&&performance.mark("loco-dom-start");var o=await he(i.phrases,i.translations);return n&&(performance.mark("loco-dom-end"),performance.measure("loco-dom-write-time","loco-dom-start","loco-dom-end"),performance.measure("loco-apply-total","loco-apply-start","loco-dom-end")),i.ariaRules&&Object.keys(i.ariaRules).length>0&&V(i.phrases,i.ariaRules),i.observer=pe(i.phrases.map(function(s){return s.key+"\0"+(s.context||"")}),i.translations),i.currentLang=e,le(e),console.log("[loco] applied "+o.applied+" translation(s), "+o.skipped+" pending"),o}catch(p){console.warn("[loco] Failed to fetch translations:",p)}},restore:function(){j(i.phrases),i.observer&&i.observer.disconnect(),i.currentLang=null,le(null)},rescan:async function(){var e=Object.keys(i.translations).length>0;e&&j(i.phrases),i.currentLang=null,i.phrases=await ae(document.body),i.fileMode||de(i.phrases).catch(function(){}),i.ariaRules&&Object.keys(i.ariaRules).length>0&&V(i.phrases,i.ariaRules),e&&(G(i.phrases,Object.keys(i.translations)),await he(i.phrases,i.translations))},textnodes:function(){return i.phrases.map(function(e){return{key:e.key,context:e.context||"",element:e.element}})},aria:async function(){var e=await He();i.ariaRules=e||{};var n=V(i.phrases,i.ariaRules);return console.log("[loco] applied ARIA rules to "+n.applied+" element(s)"),n},stopScan:function(){i.scanStopped=!0,i.observer&&(i.observer.disconnect(),i.observer=null),console.log("[loco] scanning stopped, no further nodes will be sent to dashboard")},startScan:function(){i.scanStopped=!1,console.log("[loco] scanning resumed")},isFileMode:function(){return i.fileMode},languages:function(){if(i.fileMode){var e=function(){var n=i.fileData?i.fileData.languages||[]:[],t=i.fileData&&i.fileData.languageNames||{};return n.map(function(a){return{code:a,name:t[a]||a}})};return!i.fileData&&i.fileReady?i.fileReady.then(function(){return ge().then(function(n){return n&&n.languages&&n.languages.length>0?be(n.languages,n.languageNames):e()}).catch(function(){return e()})}):ge().then(function(n){return n&&n.languages&&n.languages.length>0?be(n.languages,n.languageNames):e()}).catch(function(){return e()})}return!i.apiKey||!i.apiBase?Promise.resolve([]):fetch(i.apiBase+"/api/languages",{headers:{"X-API-Key":i.apiKey}}).then(function(n){return n.json()}).then(function(n){return Array.isArray(n)?n:[]}).catch(function(){return[]})},widget:function(e){e=e||{};var n=e.position||"bottom-right";if(i.widgetPosition=n,i.fileMode){let t=function(){ge().then(function(r){var o;if(r&&r.languages&&r.languages.length>0?o=be(r.languages,r.languageNames):o=a(),o.length===0){console.warn("[loco] No languages found in translation file or cache");return}me(o,n)}).catch(function(){var r=a();if(r.length===0){console.warn("[loco] No languages found in translation file");return}me(r,n)})},a=function(){var r=i.fileData?i.fileData.languages||[]:[],o=i.fileData&&i.fileData.languageNames||{};return r.map(function(l){var v=Ge(l,o);return v?{code:l,name:v}:l})};if(!i.fileData&&i.fileReady){i.fileReady.then(t);return}t();return}if(!i.apiKey||!i.apiBase){console.warn("[loco] Call Loco.init() first");return}fetch(i.apiBase+"/api/languages",{headers:{"X-API-Key":i.apiKey}}).then(function(t){return t.json()}).then(function(t){if(!Array.isArray(t)||t.length===0){console.warn("[loco] No languages found — add translations in the dashboard first");return}me(t,n)}).catch(function(t){console.warn("[loco] Failed to fetch languages:",t)})},clearCache:function(){return i.fileMode?vt().then(function(){i.fileData&&(i.fileData.translations={},i.fileData.timestamp=0),i.currentLang=null,i.loadedFromCache=!1,le(null),j(i.phrases),i.observer&&(i.observer.disconnect(),i.observer=null),console.log("[loco] IndexedDB cache cleared — call pullLatest() to re-fetch")}).catch(function(e){console.warn("[loco] Failed to clear cache:",e)}):(console.warn("[loco] clearCache() is only available in file mode"),Promise.resolve())},addFile:function(e){return i.fileMode?e?Qe(e)?(i.fileUrls.indexOf(e)===-1&&i.fileUrls.push(e),fetch(e).then(function(n){if(!n.ok)throw new Error("HTTP "+n.status);return n.text()}).then(function(n){if(!n||!n.trim())throw new Error("Empty file");var t;try{t=JSON.parse(n)}catch{throw new Error("Invalid JSON")}if(t=ye(t),!t)throw new Error("Invalid file schema");var a=!i.fileData||!i.fileData.languages||i.fileData.languages.length===0,r=!a||(t.languages||[]).length===1;return Ee(t,a),ve(e,t,r).catch(function(){}),Ce(),console.log("[loco] added file: "+e+" ("+(t.languages||[]).join(", ")+")"),{status:"added",languages:t.languages||[]}}).catch(function(n){return console.warn("[loco] addFile() failed:",n),{status:"error",reason:n.message}})):(console.warn("[loco] Blocked unsafe URL: "+e),Promise.resolve({status:"error",reason:"unsafe URL"})):Promise.resolve({status:"error",reason:"no URL provided"}):(console.warn("[loco] addFile() is only available in file mode"),Promise.resolve({status:"error",reason:"not in file mode"}))},pullLatest:function(){if(!i.fileMode)return console.warn("[loco] pullLatest() is only available in file mode"),Promise.resolve({status:"skipped",reason:"not in file mode"});var e=i.fileUrls.length>0?i.fileUrls:i.fileUrl?[i.fileUrl]:[];if(e.length===0)return console.warn("[loco] No file URL(s) configured. Call Loco.init({ file }) first."),Promise.resolve({status:"error",reason:"no file URLs"});var n=e.map(function(t){return Promise.all([Xe(t).catch(function(){return null}),fetch(t).then(function(a){if(!a.ok)throw new Error("HTTP "+a.status);return a.text()})]).then(function(a){var r=a[0],o=a[1];if(!o||!o.trim())return{url:t,status:"current",reason:"empty"};var l;try{l=JSON.parse(o)}catch{throw new Error("Invalid JSON in "+t)}if(l=ye(l),!l)throw new Error("Invalid file schema in "+t);var v=l.timestamp||0,p=r&&r.timestamp||0;if(v===p&&p!==0){var s=i.fileData&&i.fileData.translations,f=l.languages||[],h=!s||f.some(function(u){return!i.fileData.translations[u]});if(!h)return{url:t,status:"current",timestamp:p}}var g=!i.fileData||!i.fileData.languages||i.fileData.languages.length===0,c=!g||(l.languages||[]).length===1;return Ee(l,g),ve(t,l,c).catch(function(){}),{url:t,status:"updated",timestamp:v,previousTimestamp:p}}).catch(function(a){return{url:t,status:"error",reason:a.message}})});return Promise.all(n).then(async function(t){var a=t.some(function(f){return f.status==="updated"});if(a){i.loadedFromCache=!1,i.currentLang=null;var r=Y();if(r)i.observer&&(i.observer.disconnect(),i.observer=null),j(i.phrases),await xe("pullLatest");else{i.phrases=Me(document.body);var o=i.fileData.translations||{},l=(i.fileData.languages||[])[0];l&&o[l]&&G(i.phrases,Object.keys(o[l]))}Ce()}if(t.length===1){var v=t[0];return console.log("[loco] pullLatest: "+v.status+(v.timestamp?" (timestamp: "+v.timestamp+")":"")),v}var p=t.filter(function(f){return f.status==="updated"}).map(function(f){return f.url}),s=t.filter(function(f){return f.status==="current"}).map(function(f){return f.url});return console.log("[loco] pullLatest: "+p.length+" updated, "+s.length+" current"),{status:a?"updated":"current",results:t}}).catch(function(t){return console.warn("[loco] pullLatest() failed:",t),{status:"error",reason:t.message}})}};return window.Loco=z,Object.defineProperty(z,"_state",{value:i,writable:!1,enumerable:!1,configurable:!1}),z}();
package/versions.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "1.1.2"
2
+ "version": "1.1.4"
3
3
  }