- • ${Ai.properties.advert.node_name||"Unknown Node"} (${Ai.properties.advert.contact_type})
+ `),we.value.push(gi)},200)};ps()},Fo)},ma=()=>{if(!Ct||!re)return;const Ya=Ct.getBounds(),oo=Math.floor(Ct.getZoom());ae.value.forEach(Ks=>{Ct&&Ks.remove()}),ae.value.clear(),we.value.forEach(Ks=>{Ct&&Ks.remove()}),we.value.length=0,re.getClusters([Ya.getWest(),Ya.getSouth(),Ya.getEast(),Ya.getNorth()],oo).forEach(Ks=>{const[Fo,$a]=Ks.geometry.coordinates,La=Ks.properties;if(La.cluster){const ha=Em.marker([$a,Fo],{icon:Zn(La.point_count||0)}).addTo(Ct);ha.on("click",()=>{if(Ct&&re){const Mi=re.getClusterExpansionZoom(La.cluster_id);Ct.setView([$a,Fo],Mi)}});const vo=re.getLeaves(La.cluster_id,1/0).map(Mi=>`
+ • ${Mi.properties.advert.node_name||"Unknown Node"} (${Mi.properties.advert.contact_type})
`).join("");ha.bindPopup(`
-
Cluster: ${Ea.point_count} nodes
+
Cluster: ${La.point_count} nodes
- ${mo}
+ ${vo}
Click to zoom in and separate nodes
- `),oe.value.set(`cluster-${Ea.cluster_id}`,ha);const Jo=Qn($n,ni,$a,Fo),Oo=Math.min(Math.floor(Jo*5),200),gi={node_name:`Cluster of ${Ea.point_count} nodes`,contact_type:"Cluster",route_type:2,rssi:null,snr:null,jittered_latitude:$a,jittered_longitude:Fo,latitude:$a,longitude:Fo};Hn(gi,$n,ni,"#AAE8E8",Oo)}else{const ha=Ea.advert,oo=Pn[ha.contact_type]||Pn.Unknown,mo=Dn(oo),Jo=$a,Oo=Fo,gi=Qn($n,ni,Jo,Oo),Ai=Sm.marker([Jo,Oo],{icon:mo}).addTo(zt).bindPopup(`
+ `),ae.value.set(`cluster-${La.cluster_id}`,ha);const Jo=Xn(tn,En,$a,Fo),Oo=Math.min(Math.floor(Jo*5),200),vi={node_name:`Cluster of ${La.point_count} nodes`,contact_type:"Cluster",route_type:2,rssi:null,snr:null,jittered_latitude:$a,jittered_longitude:Fo,latitude:$a,longitude:Fo};Yn(vi,tn,En,"#AAE8E8",Oo)}else{const ha=La.advert,so=Dn[ha.contact_type]||Dn.Unknown,vo=Nn(so),Jo=$a,Oo=Fo,vi=Xn(tn,En,Jo,Oo),Mi=Em.marker([Jo,Oo],{icon:vo}).addTo(Ct).bindPopup(`
- ${ha.node_name||"Unknown Node"}
+ ${ha.node_name||"Unknown Node"}
Type: ${ha.contact_type}
- Distance: ${gi.toFixed(2)} km
- Signal: ${hn(ha.rssi)} / ${Dt(ha.snr)}
- Route: ${on(ha.route_type)}
- Last Seen: ${Dr(ha.last_seen)}
+ Distance: ${vi.toFixed(2)} km
+ Signal: ${Kr(ha.rssi)} / ${zt(ha.snr)}
+ Route: ${sn(ha.route_type)}
+ Last Seen: ${Cr(ha.last_seen)}
${ha.jittered_latitude?'
Position adjusted to separate overlapping nodes':""}
- `);jt.value.set(ha.pubkey,Ai),oe.value.set(`node-${ha.pubkey}`,Ai);const pi=Math.min(Math.floor(gi*5),200),go={...ha,jittered_latitude:Jo,jittered_longitude:Oo};Hn(go,$n,ni,oo,pi)}})},ul=(Ya,ao)=>{let Wa=0;ei(B.adverts).forEach(Fo=>{const $a=Fo.properties.advert;if($a.latitude!==null&&$a.longitude!==null){const Ea=Pn[$a.contact_type]||Pn.Unknown,ha=Dn(Ea),oo=$a.jittered_latitude||$a.latitude,mo=$a.jittered_longitude||$a.longitude,Jo=Sm.marker([oo,mo],{icon:ha}).addTo(zt).bindPopup(`
+ `);jt.value.set(ha.pubkey,Mi),ae.value.set(`node-${ha.pubkey}`,Mi);const gi=Math.min(Math.floor(vi*5),200),yo={...ha,jittered_latitude:Jo,jittered_longitude:Oo};Yn(yo,tn,En,so,gi)}})},ul=(Ya,oo)=>{let Wa=0;ni(B.adverts).forEach(Fo=>{const $a=Fo.properties.advert;if($a.latitude!==null&&$a.longitude!==null){const La=Dn[$a.contact_type]||Dn.Unknown,ha=Nn(La),so=$a.jittered_latitude||$a.latitude,vo=$a.jittered_longitude||$a.longitude,Jo=Em.marker([so,vo],{icon:ha}).addTo(Ct).bindPopup(`
- ${$a.node_name||"Unknown Node"}
+ ${$a.node_name||"Unknown Node"}
Type: ${$a.contact_type}
- Distance: ${Qn(Ya,ao,oo,mo).toFixed(2)} km
- Signal: ${hn($a.rssi)} / ${Dt($a.snr)}
- Route: ${on($a.route_type)}
- Last Seen: ${Dr($a.last_seen)}
+ Distance: ${Xn(Ya,oo,so,vo).toFixed(2)} km
+ Signal: ${Kr($a.rssi)} / ${zt($a.snr)}
+ Route: ${sn($a.route_type)}
+ Last Seen: ${Cr($a.last_seen)}
${$a.jittered_latitude?'
Position adjusted to separate overlapping nodes':""}
- `);jt.value.set($a.pubkey,Jo);const Oo=Jo.getElement();Oo&&(Oo.style.opacity="0",Oo.style.transition="opacity 0.5s ease-out"),Hn($a,Ya,ao,Ea,Wa),setTimeout(()=>{Oo&&(Oo.style.opacity="1")},Wa+1e3),Wa+=100}})};if(tr.value&&B.adverts.length>0)try{const Ya=ei(B.adverts);Ri(Ya);const ao=Math.min(14,zt.getZoom());zt.setZoom(ao),setTimeout(()=>{try{ma()}catch(Wa){console.warn("Error updating clusters:",Wa),ul($n,ni)}},100),zt.on("moveend",()=>{try{ma()}catch(Wa){console.warn("Error updating clusters on move:",Wa)}}),zt.on("zoomend",()=>{try{ma()}catch(Wa){console.warn("Error updating clusters on zoom:",Wa)}})}catch(Ya){console.warn("Error initializing clustering:",Ya),ul($n,ni)}else ul($n,ni);setTimeout(()=>{zt&&zt.invalidateSize()},1e3)}catch(Dn){console.error("Error initializing map:",Dn)}};return s({highlightNode:$n=>{const ni=jt.value.get($n);if(ni){const Dn=ni.getElement();if(Dn){const Vn=Dn.querySelector("div");Vn&&Vn.classList.add("marker-highlight")}}},unhighlightNode:$n=>{const ni=jt.value.get($n);if(ni){const Dn=ni.getElement();if(Dn){const Vn=Dn.querySelector("div");Vn&&Vn.classList.remove("marker-highlight")}}},initializeOpenStreetMap:qi}),Em(()=>B.adverts,()=>{zt&&xr.value&&setTimeout(()=>{qi()},100)},{immediate:!1}),sp(()=>{xr.value&&B.adverts.length>0&&setTimeout(()=>{qi()},300)}),Oy(()=>{Wn()}),($n,ni)=>(ii(),fi("div",Pst,[xr.value?(ii(),fi("div",{key:1,ref_key:"mapContainer",ref:_t,class:"leaflet-map-container h-96 w-full bg-dark-card/30 backdrop-blur border border-white/10 rounded-[15px] overflow-hidden",style:{"min-height":"384px",position:"relative"}},null,512)):(ii(),fi("div",zst,ni[0]||(ni[0]=[lf('
No valid coordinates available
Configure base station location to view map
',1)]))),xr.value&&$n.adverts.length>0?(ii(),fi("button",{key:2,onClick:dt,class:"absolute bottom-3 right-3 z-[1001] flex items-center gap-2 px-3 py-2 bg-black/40 border border-white/10 rounded-lg text-white/80 hover:bg-white/10 hover:text-white transition-colors text-sm backdrop-blur-sm"},[ni[1]||(ni[1]=ie("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[ie("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})],-1)),ie("span",Ist,mi($n.showLegend?"Hide":"Show"),1)])):Mo("",!0),xr.value&&$n.adverts.length>0&&$n.showLegend?(ii(),fi("div",Ost,[ni[2]||(ni[2]=lf('
',2)),ie("div",Dst,mi($n.adverts.length)+" node"+mi($n.adverts.length!==1?"s":"")+" visible ",1)])):Mo("",!0),xr.value?(ii(),fi("div",Fst," © OpenStreetMap contributors © CARTO ")):Mo("",!0)]))}}),Bst=Rf(Rst,[["__scopeId","data-v-9c7dd490"]]),Nst={class:"relative","data-menu-container":""},oP=Cc({__name:"NeighborMenu",props:{neighbor:{},canPing:{type:Boolean}},emits:["ping","delete"],setup(d,{emit:s}){const C=window.__neighborMenuManager||{activeMenu:null,setActiveMenu:Mr=>{if(C.activeMenu&&C.activeMenu!==Mr)try{C.activeMenu.closeMenu()}catch(xr){console.warn("Error closing previous menu:",xr)}C.activeMenu=Mr}};window.__neighborMenuManager=C;const B=d,K=s,dt=Ba(!1),_t=Ba(),zt=Ba({top:0,left:0}),jt=()=>{dt.value=!1,document.removeEventListener("click",we,!0),document.removeEventListener("keydown",tr),C.activeMenu===re&&(C.activeMenu=null)},re={closeMenu:jt},oe=()=>{jt(),K("delete",B.neighbor)},we=Mr=>{Mr.target.closest("[data-menu-container]")||jt()},tr=Mr=>{Mr.key==="Escape"&&jt()},fr=async()=>{if(!dt.value&&_t.value){C.setActiveMenu(re);const Mr=_t.value.getBoundingClientRect(),xr=window.innerWidth,Dr=144,hn=xr<1024,Dt=Mr.left+Dr>xr-16;let on=Mr.left;hn&&Dt&&(on=Mr.right-Dr),on=Math.max(8,on),zt.value={top:Mr.bottom+4,left:on},dt.value=!0,await S0(),document.addEventListener("click",we,!0),document.addEventListener("keydown",tr)}else jt()};return Oy(()=>{jt()}),(Mr,xr)=>(ii(),fi("div",Nst,[ie("button",{ref_key:"buttonRef",ref:_t,onClick:fr,class:yo(["p-1 rounded hover:bg-white/10 transition-colors text-white/60 hover:text-white/80",{"bg-white/10 text-white/80":dt.value}]),"data-menu-container":""},xr[0]||(xr[0]=[ie("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[ie("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z"})],-1)]),2),(ii(),Y0(tM,{to:"body"},[dt.value?(ii(),fi("div",{key:0,class:"fixed w-36 bg-dark-card/90 backdrop-blur-lg border border-white/20 rounded-[15px] shadow-2xl z-[999999]",style:G0({top:zt.value.top+"px",left:zt.value.left+"px"}),"data-menu-container":""},[ie("div",{class:"py-2"},[ie("button",{onClick:oe,class:"flex items-center gap-3 w-full px-4 py-3 text-sm text-accent-red hover:bg-accent-red/10 transition-colors"},xr[1]||(xr[1]=[ie("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[ie("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1),ie("span",{class:"font-medium"},"Delete",-1)]))])],4)):Mo("",!0)]))]))}}),jst={class:"bg-dark-card/30 backdrop-blur border border-white/10 rounded-[15px] p-6"},Ust={class:"flex items-center justify-between mb-4"},Vst={class:"flex items-center gap-3"},Hst={class:"text-white text-lg font-semibold"},Wst={class:"bg-white/10 text-white text-xs px-2 py-1 rounded-full"},qst={key:0,class:"text-white/60"},$st={key:0,class:"hidden lg:flex bg-dark-card/30 backdrop-blur rounded-lg border border-white/10 p-1"},Zst={class:"hidden lg:block overflow-x-auto"},Gst={class:"w-full"},Yst={class:"bg-dark-bg/50"},Kst={class:"bg-dark-bg/30"},Xst=["onMouseenter","onMouseleave"],Jst=["onClick","title"],Qst={key:0,class:"ml-1 text-xs"},tlt={key:0,class:"flex items-center gap-3"},elt={class:"text-white/70"},rlt={class:"flex gap-1"},nlt=["onClick"],ilt=["onClick"],alt={key:1,class:"text-dark-text"},olt={class:"flex items-center gap-2"},slt={class:"flex items-end gap-0.5"},llt={class:"flex items-center gap-2"},ult=["title"],clt=["title"],hlt={class:"lg:hidden space-y-3"},flt=["onClick"],dlt={class:"flex items-center justify-between mb-3"},plt={class:"flex items-center gap-3"},mlt={class:"text-white font-medium text-base"},glt={class:"flex items-center gap-2"},vlt={class:"grid grid-cols-1 gap-3"},ylt={class:"grid grid-cols-2 gap-4"},xlt=["onClick","title"],_lt={key:0,class:"ml-1 text-xs"},blt={class:"flex items-center gap-2 justify-end"},wlt={class:"flex items-end gap-0.5"},klt={class:"grid grid-cols-2 gap-4"},Tlt={class:"flex items-center gap-2"},Alt=["title"],Mlt={class:"text-white text-sm block text-right"},Slt={key:0,class:"border-t border-white/10 pt-3"},Clt={class:"flex items-center justify-between"},Elt={class:"text-white/70 text-sm font-mono"},Llt={class:"flex gap-2"},Plt=["onClick"],zlt=["onClick"],Ilt={class:"grid grid-cols-3 gap-4 pt-3 border-t border-white/10"},Olt={class:"text-center"},Dlt={class:"text-white text-sm font-medium"},Flt={class:"text-center"},Rlt={class:"text-white text-sm font-medium"},Blt={class:"text-center"},Nlt=["title"],jlt=Cc({__name:"NeighborTable",props:{contactType:{},contactTypeKey:{},adverts:{},originalCount:{default:0},color:{},baseLatitude:{default:null},baseLongitude:{default:null},isCompactView:{type:Boolean,default:!1},isFirstTable:{type:Boolean,default:!1},showViewToggle:{type:Boolean,default:!1}},emits:["highlight-node","unhighlight-node","menu-ping","menu-delete","toggle-view"],setup(d,{emit:s}){const C=Ba(null),B=d,K=s,dt=nn=>new Date(nn*1e3).toLocaleString(),_t=nn=>`${nn.slice(0,4)}...${nn.slice(-4)}`,zt=nn=>{switch(nn){case 2:return{text:"Direct",bgColor:"bg-green-500/20",borderColor:"border-green-400/30",textColor:"text-green-400"};case 3:return{text:"Transport Direct",bgColor:"bg-green-600/20",borderColor:"border-green-500/30",textColor:"text-green-500"};case 1:return{text:"Flood",bgColor:"bg-yellow-500/20",borderColor:"border-yellow-400/30",textColor:"text-yellow-400"};case 0:return{text:"Transport Flood",bgColor:"bg-orange-500/20",borderColor:"border-orange-400/30",textColor:"text-orange-400"};default:return{text:"Unknown",bgColor:"bg-gray-500/20",borderColor:"border-gray-400/30",textColor:"text-gray-400"}}},jt=nn=>nn?`${nn} dBm`:"N/A",re=nn=>nn?`${nn} dB`:"N/A",oe=(nn,Bi,$n,ni)=>{const Vn=($n-nn)*Math.PI/180,Ci=(ni-Bi)*Math.PI/180,Pn=Math.sin(Vn/2)*Math.sin(Vn/2)+Math.cos(nn*Math.PI/180)*Math.cos($n*Math.PI/180)*Math.sin(Ci/2)*Math.sin(Ci/2);return 6371*(2*Math.atan2(Math.sqrt(Pn),Math.sqrt(1-Pn)))},we=nn=>B.baseLatitude===null||B.baseLongitude===null||nn.latitude===null||nn.longitude===null?"N/A":`${oe(B.baseLatitude,B.baseLongitude,nn.latitude,nn.longitude).toFixed(1)} km`,tr=async nn=>{try{return await navigator.clipboard.writeText(nn),!0}catch{const Bi=document.createElement("textarea");return Bi.value=nn,document.body.appendChild(Bi),Bi.select(),document.execCommand("copy"),document.body.removeChild(Bi),!0}},fr=nn=>{const Bi=Date.now(),$n=nn*1e3,ni=Bi-$n,Dn=Math.floor(ni/1e3),Vn=Math.floor(Dn/60),Ci=Math.floor(Vn/60),Pn=Math.floor(Ci/24);return Dn<60?`${Dn}s ago`:Vn<60?`${Vn}m ago`:Ci<24?`${Ci}h ago`:`${Pn}d ago`},Mr=nn=>{const Bi=Date.now(),$n=nn*1e3,ni=Bi-$n,Dn=Math.floor(ni/(1e3*60*60));return Dn<1?{color:"text-green-400"}:Dn<26?{color:"text-yellow-400"}:{color:"text-red-400"}},xr=async(nn,Bi)=>{const $n=`${nn.toFixed(6)}, ${Bi.toFixed(6)}`;await tr($n)},Dr=(nn,Bi)=>{const $n=`https://www.google.com/maps?q=${nn},${Bi}`;window.open($n,"_blank")},hn=async nn=>{await tr(nn),C.value=nn,setTimeout(()=>{C.value=null},2e3)},Dt=nn=>nn?nn>=-50?{bars:5,color:"text-green-400"}:nn>=-60?{bars:4,color:"text-green-300"}:nn>=-70?{bars:3,color:"text-yellow-400"}:nn>=-80?{bars:2,color:"text-orange-400"}:nn>=-90?{bars:1,color:"text-red-400"}:{bars:0,color:"text-red-500"}:{bars:0,color:"text-gray-400"},on=()=>B.isCompactView?"py-2 px-2":"py-4 px-3",Qn=()=>{K("toggle-view")},Wn=nn=>{K("highlight-node",nn)},ei=nn=>{K("unhighlight-node",nn)},Ri=nn=>{K("menu-ping",nn)},qi=nn=>{K("menu-delete",nn)};return(nn,Bi)=>(ii(),fi("div",jst,[ie("div",Ust,[ie("div",Vst,[ie("div",{class:"w-3 h-3 rounded-full border border-white/20",style:G0({backgroundColor:nn.color})},null,4),ie("h3",Hst,mi(nn.contactType),1),ie("span",Wst,[Iu(mi(nn.adverts.length)+" ",1),nn.originalCount>0&&nn.adverts.length
(ii(),fi("tr",{key:$n.id,class:"hover:bg-white/5 transition-colors",onMouseenter:ni=>Wn($n.pubkey),onMouseleave:ni=>ei($n.pubkey)},[ie("td",{class:yo(on())},[Al(oP,{neighbor:$n,onPing:Ri,onDelete:qi},null,8,["neighbor"])],2),ie("td",{class:yo(`${on()} text-white text-sm`)},mi($n.node_name||"Unknown"),3),ie("td",{class:yo(`${on()} text-white text-sm font-mono`)},[ie("button",{onClick:ni=>hn($n.pubkey),class:yo(["text-white hover:text-primary-light transition-colors cursor-pointer underline underline-offset-2 decoration-white/30 hover:decoration-primary-light/60",C.value===$n.pubkey?"text-green-400 decoration-green-400/60":""]),title:C.value===$n.pubkey?"Copied!":"Click to copy full public key"},[Iu(mi(_t($n.pubkey))+" ",1),C.value===$n.pubkey?(ii(),fi("span",Qst,"✓")):Mo("",!0)],10,Jst)],2),ie("td",{class:yo(`${on()} text-white text-sm`)},[$n.latitude!==null&&$n.longitude!==null?(ii(),fi("div",tlt,[ie("span",elt,mi($n.latitude.toFixed(4))+", "+mi($n.longitude.toFixed(4)),1),ie("div",rlt,[ie("button",{onClick:ni=>xr($n.latitude,$n.longitude),class:"text-white/60 hover:text-white transition-colors cursor-pointer",title:"Copy coordinates to clipboard"},Bi[2]||(Bi[2]=[ie("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[ie("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2",stroke:"currentColor","stroke-width":"2"}),ie("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",stroke:"currentColor","stroke-width":"2"})],-1)]),8,nlt),ie("button",{onClick:ni=>Dr($n.latitude,$n.longitude),class:"text-white/60 hover:text-blue-400 transition-colors cursor-pointer",title:"Open in Google Maps"},Bi[3]||(Bi[3]=[ie("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[ie("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z",stroke:"currentColor","stroke-width":"2"}),ie("circle",{cx:"12",cy:"10",r:"3",stroke:"currentColor","stroke-width":"2"})],-1)]),8,ilt)])])):(ii(),fi("span",alt,"Unknown"))],2),ie("td",{class:yo(`${on()} text-white text-sm`)},mi(we($n)),3),ie("td",{class:yo(`${on()} text-white text-sm`)},[ie("span",{class:yo(["inline-block px-2 py-1 rounded-full text-xs border transition-colors",zt($n.route_type).bgColor,zt($n.route_type).borderColor,zt($n.route_type).textColor])},mi(zt($n.route_type).text),3)],2),ie("td",{class:yo(`${on()} text-white text-sm`)},[ie("span",{class:yo(["inline-block px-2 py-1 rounded-full text-xs border transition-colors",$n.zero_hop?"bg-green-500/20 border-green-400/30 text-green-400":"bg-orange-500/20 border-orange-400/30 text-orange-400"])},mi($n.zero_hop?"Zero Hop":"Multi-Hop"),3)],2),ie("td",{class:yo(`${on()} text-white text-sm`)},[ie("div",olt,[ie("div",slt,[(ii(),fi(cu,null,Yc(5,ni=>ie("div",{key:ni,class:yo(["w-1 transition-colors",ni<=Dt($n.rssi).bars?Dt($n.rssi).color:"text-gray-600"]),style:G0({height:`${4+ni*2}px`})},Bi[4]||(Bi[4]=[ie("div",{class:"w-full h-full bg-current rounded-sm"},null,-1)]),6)),64))]),ie("span",{class:yo(Dt($n.rssi).color)},mi(jt($n.rssi)),3)])],2),ie("td",{class:yo(`${on()} text-white text-sm`)},mi(re($n.snr)),3),ie("td",{class:yo(`${on()} text-white text-sm`)},[ie("div",llt,[ie("div",{class:yo(["w-2 h-2 rounded-full",Mr($n.last_seen).color==="text-green-400"?"bg-green-400":"",Mr($n.last_seen).color==="text-yellow-400"?"bg-yellow-400":"",Mr($n.last_seen).color==="text-red-400"?"bg-red-400":""])},null,2),ie("span",{class:yo([Mr($n.last_seen).color,"cursor-help"]),title:dt($n.last_seen)},mi(fr($n.last_seen)),11,ult)])],2),ie("td",{class:yo(`${on()} text-white text-sm`)},[ie("span",{title:dt($n.first_seen),class:"cursor-help"},mi(fr($n.first_seen)),9,clt)],2),ie("td",{class:yo(`${on()} text-white text-sm text-center`)},mi($n.advert_count),3)],40,Xst))),128))])])]),ie("div",hlt,[(ii(!0),fi(cu,null,Yc(nn.adverts,$n=>(ii(),fi("div",{key:$n.id,class:"bg-dark-bg/30 border border-white/10 rounded-lg p-4 hover:bg-white/5 transition-colors",onClick:ni=>Wn($n.pubkey)},[ie("div",dlt,[ie("div",plt,[ie("h4",mlt,mi($n.node_name||"Unknown Node"),1),ie("div",glt,[ie("span",{class:yo(["inline-block px-2 py-1 rounded-full text-xs border",zt($n.route_type).bgColor,zt($n.route_type).borderColor,zt($n.route_type).textColor])},mi(zt($n.route_type).text),3),ie("span",{class:yo(["inline-block px-2 py-1 rounded-full text-xs border",$n.zero_hop?"bg-green-500/20 border-green-400/30 text-green-400":"bg-orange-500/20 border-orange-400/30 text-orange-400"])},mi($n.zero_hop?"Zero Hop":"Multi-Hop"),3)])]),Al(oP,{neighbor:$n,onPing:Ri,onDelete:qi},null,8,["neighbor"])]),ie("div",vlt,[ie("div",ylt,[ie("div",null,[Bi[5]||(Bi[5]=ie("div",{class:"text-dark-text text-xs mb-1"},"Public Key",-1)),ie("button",{onClick:ni=>hn($n.pubkey),class:yo(["text-white hover:text-primary-light transition-colors cursor-pointer font-mono text-sm underline underline-offset-2 decoration-white/30 hover:decoration-primary-light/60 break-all",C.value===$n.pubkey?"text-green-400 decoration-green-400/60":""]),title:C.value===$n.pubkey?"Copied!":"Click to copy full public key"},[Iu(mi(_t($n.pubkey))+" ",1),C.value===$n.pubkey?(ii(),fi("span",_lt,"✓")):Mo("",!0)],10,xlt)]),ie("div",null,[Bi[7]||(Bi[7]=ie("div",{class:"text-dark-text text-xs mb-1"},"Signal",-1)),ie("div",blt,[ie("div",wlt,[(ii(),fi(cu,null,Yc(5,ni=>ie("div",{key:ni,class:yo(["w-1.5 transition-colors",ni<=Dt($n.rssi).bars?Dt($n.rssi).color:"text-gray-600"]),style:G0({height:`${6+ni*2}px`})},Bi[6]||(Bi[6]=[ie("div",{class:"w-full h-full bg-current rounded-sm"},null,-1)]),6)),64))]),ie("span",{class:yo(`${Dt($n.rssi).color} text-sm font-medium`)},mi(jt($n.rssi)),3)])])]),ie("div",klt,[ie("div",null,[Bi[8]||(Bi[8]=ie("div",{class:"text-dark-text text-xs mb-1"},"Last Seen",-1)),ie("div",Tlt,[ie("div",{class:yo(["w-2 h-2 rounded-full",Mr($n.last_seen).color==="text-green-400"?"bg-green-400":"",Mr($n.last_seen).color==="text-yellow-400"?"bg-yellow-400":"",Mr($n.last_seen).color==="text-red-400"?"bg-red-400":""])},null,2),ie("span",{class:yo(`${Mr($n.last_seen).color} text-sm`),title:dt($n.last_seen)},mi(fr($n.last_seen)),11,Alt)])]),ie("div",null,[Bi[9]||(Bi[9]=ie("div",{class:"text-dark-text text-xs mb-1"},"Distance",-1)),ie("span",Mlt,mi(we($n)),1)])]),$n.latitude!==null&&$n.longitude!==null?(ii(),fi("div",Slt,[Bi[12]||(Bi[12]=ie("div",{class:"text-dark-text text-xs mb-1"},"Location",-1)),ie("div",Clt,[ie("span",Elt,mi($n.latitude.toFixed(4))+", "+mi($n.longitude.toFixed(4)),1),ie("div",Llt,[ie("button",{onClick:ni=>xr($n.latitude,$n.longitude),class:"text-white/60 hover:text-white transition-colors p-2 hover:bg-white/10 rounded-lg",title:"Copy coordinates"},Bi[10]||(Bi[10]=[ie("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[ie("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2",stroke:"currentColor","stroke-width":"2"}),ie("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",stroke:"currentColor","stroke-width":"2"})],-1)]),8,Plt),ie("button",{onClick:ni=>Dr($n.latitude,$n.longitude),class:"text-white/60 hover:text-blue-400 transition-colors p-2 hover:bg-white/10 rounded-lg",title:"Open in Maps"},Bi[11]||(Bi[11]=[ie("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[ie("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z",stroke:"currentColor","stroke-width":"2"}),ie("circle",{cx:"12",cy:"10",r:"3",stroke:"currentColor","stroke-width":"2"})],-1)]),8,zlt)])])])):Mo("",!0),ie("div",Ilt,[ie("div",Olt,[Bi[13]||(Bi[13]=ie("div",{class:"text-dark-text text-xs mb-1"},"SNR",-1)),ie("span",Dlt,mi(re($n.snr)),1)]),ie("div",Flt,[Bi[14]||(Bi[14]=ie("div",{class:"text-dark-text text-xs mb-1"},"Adverts",-1)),ie("span",Rlt,mi($n.advert_count),1)]),ie("div",Blt,[Bi[15]||(Bi[15]=ie("div",{class:"text-dark-text text-xs mb-1"},"First Seen",-1)),ie("span",{class:"text-white text-sm",title:dt($n.first_seen)},mi(fr($n.first_seen)),9,Nlt)])])])],8,flt))),128))])]))}}),Ult={class:"space-y-6"},Vlt={key:0,class:"flex items-center justify-center py-12"},Hlt={key:1,class:"bg-accent-red/10 border border-accent-red/20 rounded-[15px] p-6"},Wlt={class:"flex items-center gap-3"},qlt={class:"text-accent-red/80 text-sm"},$lt={key:0,class:""},Zlt={class:"flex items-center justify-between"},Glt={class:"flex items-center gap-3"},Ylt={class:"hidden lg:flex bg-dark-card/30 backdrop-blur rounded-lg border border-white/10 mb p-1"},Klt={class:"flex items-center gap-2"},Xlt={key:0,class:"ml-1 bg-accent-blue/20 text-accent-blue border border-accent-blue/30 text-xs px-1.5 py-0.5 rounded-full font-medium"},Jlt={class:"bg-dark-bg/30 border border-white/10 rounded-lg p-4 mt-4 space-y-4"},Qlt={class:"grid grid-cols-1 md:grid-cols-3 gap-4"},tut={key:1,class:"text-center py-12"},eut={key:2,class:"text-center py-12"},rut=Cc({name:"NeighborsView",__name:"Neighbors",setup(d){const s=dm(),C={0:"Unknown",1:"Chat Node",2:"Repeater",3:"Room Server",4:"Hybrid Node"},B={0:"#6b7280",1:"#60a5fa",2:"#34d399",3:"#a855f7",4:"#f59e0b"},K=Ba({}),dt=Ba(!0),_t=Ba(null),zt=Ba(!1),jt=Ba(typeof window<"u"?window.innerWidth>=1024:!0),re=Ba(!1),oe=Ba({zeroHop:"all",routeType:"all",searchText:""}),we=Ba(!1),tr=Ba(null),fr=Uo(()=>{if(!tr.value)return null;const Ci=tr.value;return{id:Ci.id,pubkey:Ci.pubkey,node_name:Ci.node_name,contact_type:Ci.contact_type,latitude:Ci.latitude,longitude:Ci.longitude,rssi:Ci.rssi,snr:Ci.snr,route_type:Ci.route_type,last_seen:Ci.last_seen,first_seen:Ci.first_seen,advert_count:Ci.advert_count,timestamp:Ci.timestamp,is_repeater:Ci.is_repeater,is_new_neighbor:Ci.is_new_neighbor,zero_hop:Ci.zero_hop}}),Mr=Uo(()=>s.stats?.config?.repeater?.latitude),xr=Uo(()=>s.stats?.config?.repeater?.longitude),Dr=Ci=>Ci.filter(Pn=>{if(oe.value.zeroHop!=="all"){const Hn=Pn.zero_hop;if(oe.value.zeroHop==="true"&&!Hn||oe.value.zeroHop==="false"&&Hn)return!1}if(oe.value.routeType!=="all"){const Hn=Pn.route_type;if(oe.value.routeType==="direct"&&Hn!==2||oe.value.routeType==="transport_direct"&&Hn!==3||oe.value.routeType==="flood"&&Hn!==1||oe.value.routeType==="transport_flood"&&Hn!==0)return!1}if(oe.value.searchText){const Hn=oe.value.searchText.toLowerCase(),ma=Pn.node_name?.toLowerCase()||"",ul=Pn.pubkey.toLowerCase();if(!ma.includes(Hn)&&!ul.includes(Hn))return!1}return!0}),hn=()=>{oe.value={zeroHop:"all",routeType:"all",searchText:""}},Dt=Uo(()=>oe.value.zeroHop!=="all"||oe.value.routeType!=="all"||oe.value.searchText!==""),on=Uo(()=>{const Ci={};for(const[Pn,Hn]of Object.entries(K.value))Ci[Pn]=Dr(Hn);return Ci}),Qn=Uo(()=>Object.entries(C).filter(([Ci])=>on.value[Ci]?.length>0).sort(([Ci],[Pn])=>parseInt(Ci)-parseInt(Pn))),Wn=Uo(()=>Object.values(K.value).flat().filter(Ci=>{const Pn=Ci.latitude,Hn=Ci.longitude;return Pn!=null&&Pn!==0&&Hn!==null&&Hn!==void 0&&Hn!==0&&typeof Pn=="number"&&typeof Hn=="number"&&!isNaN(Pn)&&!isNaN(Hn)})),ei=async Ci=>{try{const Pn=await oh.get(`/adverts_by_contact_type?contact_type=${encodeURIComponent(Ci)}&hours=168`);return Pn.success&&Array.isArray(Pn.data)?Pn.data:[]}catch(Pn){return console.error(`Error fetching adverts for contact type ${Ci}:`,Pn),[]}},Ri=async()=>{dt.value=!0,_t.value=null;try{K.value={};for(const[Ci,Pn]of Object.entries(C)){const Hn=await ei(Pn);Hn.length>0&&(K.value[Ci]=Hn)}}catch(Ci){console.error("Error loading adverts:",Ci),_t.value=Ci instanceof Error?Ci.message:"Failed to load neighbor data"}finally{dt.value=!1}},qi=Ba(),nn=Ci=>{qi.value?.highlightNode(Ci)},Bi=Ci=>{qi.value?.unhighlightNode(Ci)},$n=async Ci=>{const Pn=Ci;try{const Hn=await oh.post("/ping_neighbor",{pubkey:Pn.pubkey});Hn.success?console.log("Ping sent successfully"):console.error("Failed to ping neighbor:",Hn.error)}catch(Hn){console.error("Error pinging neighbor:",Hn)}},ni=Ci=>{tr.value=Ci,we.value=!0},Dn=()=>{we.value=!1,tr.value=null},Vn=async Ci=>{try{await oh.deleteAdvert(Ci),await Ri(),Dn()}catch(Pn){console.error("Error deleting neighbor:",Pn)}};return sp(async()=>{await Ri()}),(Ci,Pn)=>(ii(),fi("div",Ult,[dt.value?(ii(),fi("div",Vlt,Pn[7]||(Pn[7]=[ie("div",{class:"text-center"},[ie("div",{class:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto mb-4"}),ie("p",{class:"text-dark-text"},"Loading neighbor data...")],-1)]))):_t.value?(ii(),fi("div",Hlt,[ie("div",Wlt,[Pn[9]||(Pn[9]=ie("svg",{class:"w-5 h-5 text-accent-red",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[ie("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z"})],-1)),ie("div",null,[Pn[8]||(Pn[8]=ie("h3",{class:"text-accent-red font-medium"},"Error Loading Neighbors",-1)),ie("p",qlt,mi(_t.value),1)])])])):(ii(),fi(cu,{key:2},[Al(Bst,{ref_key:"networkMapRef",ref:qi,adverts:Wn.value,"base-latitude":Mr.value,"base-longitude":xr.value,"show-legend":jt.value,"onUpdate:showLegend":Pn[0]||(Pn[0]=Hn=>jt.value=Hn)},null,8,["adverts","base-latitude","base-longitude","show-legend"]),Object.keys(K.value).length>0?(ii(),fi("div",$lt,[ie("div",Zlt,[Pn[14]||(Pn[14]=ie("span",{class:"text-white text-lg font-semibold"},null,-1)),ie("div",Glt,[ie("div",Ylt,[ie("button",{onClick:Pn[1]||(Pn[1]=Hn=>zt.value=!1),class:yo(["p-2 rounded-md transition-colors",zt.value?"text-white/60 hover:text-primary hover:bg-primary/10":"bg-primary/20 text-primary border border-primary/30"]),title:"Comfortable view"},Pn[10]||(Pn[10]=[ie("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[ie("rect",{x:"3",y:"3",width:"18",height:"6",rx:"2",stroke:"currentColor","stroke-width":"2"}),ie("rect",{x:"3",y:"12",width:"18",height:"6",rx:"2",stroke:"currentColor","stroke-width":"2"})],-1)]),2),ie("button",{onClick:Pn[2]||(Pn[2]=Hn=>zt.value=!0),class:yo(["p-2 rounded-md transition-colors",zt.value?"bg-primary/20 text-primary border border-primary/30":"text-white/60 hover:text-primary hover:bg-primary/10"]),title:"Compact view"},Pn[11]||(Pn[11]=[ie("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[ie("rect",{x:"3",y:"3",width:"18",height:"4",rx:"2",stroke:"currentColor","stroke-width":"2"}),ie("rect",{x:"3",y:"10",width:"18",height:"4",rx:"2",stroke:"currentColor","stroke-width":"2"}),ie("rect",{x:"3",y:"17",width:"18",height:"4",rx:"2",stroke:"currentColor","stroke-width":"2"})],-1)]),2)]),ie("div",Klt,[ie("button",{onClick:Pn[3]||(Pn[3]=Hn=>re.value=!re.value),class:yo(["px-3 py-1.5 text-xs rounded-lg transition-colors border",Dt.value?"bg-primary/20 text-primary border-primary/30":"bg-white/10 text-white border-white/20 hover:bg-white/20"])},[Pn[12]||(Pn[12]=ie("svg",{class:"w-4 h-4 inline mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[ie("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707v6.586a1 1 0 01-1.447.894l-4-2A1 1 0 717 18.586V13.414a1 1 0 00-.293-.707L.293 6.293A1 1 0 010 5.586V3a1 1 0 011-1z"})],-1)),Pn[13]||(Pn[13]=Iu(" Filters ",-1)),Dt.value?(ii(),fi("span",Xlt," Active ")):Mo("",!0)],2),Dt.value?(ii(),fi("button",{key:0,onClick:hn,class:"px-3 py-1.5 text-xs rounded-lg bg-white/10 text-white border border-white/20 hover:bg-white/20 transition-colors"}," Clear Filters ")):Mo("",!0)])])]),Yd(ie("div",Jlt,[ie("div",Qlt,[ie("div",null,[Pn[16]||(Pn[16]=ie("label",{class:"block text-xs font-medium text-dark-text mb-1"},"Zero Hop",-1)),Yd(ie("select",{"onUpdate:modelValue":Pn[4]||(Pn[4]=Hn=>oe.value.zeroHop=Hn),class:"w-full bg-dark-card/50 border border-white/20 rounded-lg px-3 py-2 text-white text-sm focus:border-primary/50 focus:outline-none"},Pn[15]||(Pn[15]=[ie("option",{value:"all"},"All Nodes",-1),ie("option",{value:"true"},"Zero Hop Only",-1),ie("option",{value:"false"},"Multi-Hop Only",-1)]),512),[[H2,oe.value.zeroHop]])]),ie("div",null,[Pn[18]||(Pn[18]=ie("label",{class:"block text-xs font-medium text-dark-text mb-1"},"Route Type",-1)),Yd(ie("select",{"onUpdate:modelValue":Pn[5]||(Pn[5]=Hn=>oe.value.routeType=Hn),class:"w-full bg-dark-card/50 border border-white/20 rounded-lg px-3 py-2 text-white text-sm focus:border-primary/50 focus:outline-none"},Pn[17]||(Pn[17]=[lf('',5)]),512),[[H2,oe.value.routeType]])]),ie("div",null,[Pn[19]||(Pn[19]=ie("label",{class:"block text-xs font-medium text-dark-text mb-1"},"Search",-1)),Yd(ie("input",{"onUpdate:modelValue":Pn[6]||(Pn[6]=Hn=>oe.value.searchText=Hn),type:"text",placeholder:"Node name or pubkey...",class:"w-full bg-dark-card/50 border border-white/20 rounded-lg px-3 py-2 text-white text-sm focus:border-primary/50 focus:outline-none placeholder-white/40"},null,512),[[H4,oe.value.searchText]])])])],512),[[s_,re.value]])])):Mo("",!0),(ii(!0),fi(cu,null,Yc(Qn.value,([Hn,ma])=>(ii(),fi("div",{key:Hn,class:"space-y-6"},[Al(jlt,{"contact-type":ma,"contact-type-key":Hn,adverts:on.value[Hn],"original-count":K.value[Hn]?.length||0,color:B[parseInt(Hn)],"base-latitude":Mr.value,"base-longitude":xr.value,"is-compact-view":zt.value,"is-first-table":!1,"show-view-toggle":!1,onHighlightNode:nn,onUnhighlightNode:Bi,onMenuPing:$n,onMenuDelete:ni},null,8,["contact-type","contact-type-key","adverts","original-count","color","base-latitude","base-longitude","is-compact-view"])]))),128)),Qn.value.length===0&&Object.keys(K.value).length===0?(ii(),fi("div",tut,[Pn[20]||(Pn[20]=lf('No Neighbors Found
No mesh neighbors have been discovered in your area yet.
',3)),ie("button",{onClick:Ri,class:"mt-4 px-4 py-2 bg-primary/20 text-primary border border-primary/30 rounded-lg hover:bg-primary/30 transition-colors"}," Refresh ")])):Qn.value.length===0&&Dt.value?(ii(),fi("div",eut,[Pn[21]||(Pn[21]=lf('No neighbors match your filters
Try adjusting your filter criteria to see more results.
',3)),ie("button",{onClick:hn,class:"px-4 py-2 bg-primary/20 text-primary border border-primary/30 rounded-lg hover:bg-primary/30 transition-colors"}," Clear Filters ")])):Mo("",!0)],64)),Al(kst,{show:we.value,neighbor:fr.value,onClose:Dn,onDelete:Vn},null,8,["show","neighbor"])]))}});/*!
+ `);jt.value.set($a.pubkey,Jo);const Oo=Jo.getElement();Oo&&(Oo.style.opacity="0",Oo.style.transition="opacity 0.5s ease-out"),Yn($a,Ya,oo,La,Wa),setTimeout(()=>{Oo&&(Oo.style.opacity="1")},Wa+1e3),Wa+=100}})};if(Xe.value&&B.adverts.length>0)try{const Ya=ni(B.adverts);Ci(Ya);const oo=Math.min(14,Ct.getZoom());Ct.setZoom(oo),setTimeout(()=>{try{ma()}catch(Wa){console.warn("Error updating clusters:",Wa),ul(tn,En)}},100),Ct.on("moveend",()=>{try{ma()}catch(Wa){console.warn("Error updating clusters on move:",Wa)}}),Ct.on("zoomend",()=>{try{ma()}catch(Wa){console.warn("Error updating clusters on zoom:",Wa)}})}catch(Ya){console.warn("Error initializing clustering:",Ya),ul(tn,En)}else ul(tn,En);setTimeout(()=>{Ct&&Ct.invalidateSize()},1e3)}catch(Nn){console.error("Error initializing map:",Nn)}};return o({highlightNode:tn=>{const En=jt.value.get(tn);if(En){const Nn=En.getElement();if(Nn){const Zn=Nn.querySelector("div");Zn&&Zn.classList.add("marker-highlight")}}},unhighlightNode:tn=>{const En=jt.value.get(tn);if(En){const Nn=En.getElement();if(Nn){const Zn=Nn.querySelector("div");Zn&&Zn.classList.remove("marker-highlight")}}},initializeOpenStreetMap:Vi}),Pm(()=>B.adverts,()=>{Ct&&mr.value&&setTimeout(()=>{Vi()},100)},{immediate:!1}),Vd(()=>{mr.value&&B.adverts.length>0&&setTimeout(()=>{Vi()},300)}),Fy(()=>{Gn()}),(tn,En)=>(Sn(),On("div",Hst,[mr.value?(Sn(),On("div",{key:1,ref_key:"mapContainer",ref:xt,class:"leaflet-map-container h-96 w-full bg-dark-card/30 backdrop-blur border border-white/10 rounded-[15px] overflow-hidden",style:{"min-height":"384px",position:"relative"}},null,512)):(Sn(),On("div",Wst,En[0]||(En[0]=[uf('No valid coordinates available
Configure base station location to view map
',1)]))),mr.value&&tn.adverts.length>0?(Sn(),On("button",{key:2,onClick:dt,class:"absolute bottom-3 right-3 z-[1001] flex items-center gap-2 px-3 py-2 bg-black/40 border border-white/10 rounded-lg text-white/80 hover:bg-white/10 hover:text-white transition-colors text-sm backdrop-blur-sm"},[En[1]||(En[1]=Ut("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[Ut("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})],-1)),Ut("span",qst,jn(tn.showLegend?"Hide":"Show"),1)])):fo("",!0),mr.value&&tn.adverts.length>0&&tn.showLegend?(Sn(),On("div",$st,[En[2]||(En[2]=uf('',2)),Ut("div",Zst,jn(tn.adverts.length)+" node"+jn(tn.adverts.length!==1?"s":"")+" visible ",1)])):fo("",!0),mr.value?(Sn(),On("div",Gst," © OpenStreetMap contributors © CARTO ")):fo("",!0)]))}}),Kst=Bf(Yst,[["__scopeId","data-v-9c7dd490"]]),Xst={class:"relative","data-menu-container":""},lP=dc({__name:"NeighborMenu",props:{neighbor:{},canPing:{type:Boolean}},emits:["ping","delete"],setup(d,{emit:o}){const C=window.__neighborMenuManager||{activeMenu:null,setActiveMenu:kr=>{if(C.activeMenu&&C.activeMenu!==kr)try{C.activeMenu.closeMenu()}catch(mr){console.warn("Error closing previous menu:",mr)}C.activeMenu=kr}};window.__neighborMenuManager=C;const B=d,Y=o,dt=xa(!1),xt=xa(),Ct=xa({top:0,left:0}),jt=()=>{dt.value=!1,document.removeEventListener("click",we,!0),document.removeEventListener("keydown",Xe),C.activeMenu===re&&(C.activeMenu=null)},re={closeMenu:jt},ae=()=>{jt(),Y("delete",B.neighbor)},we=kr=>{kr.target.closest("[data-menu-container]")||jt()},Xe=kr=>{kr.key==="Escape"&&jt()},fr=async()=>{if(!dt.value&&xt.value){C.setActiveMenu(re);const kr=xt.value.getBoundingClientRect(),mr=window.innerWidth,Cr=144,Kr=mr<1024,zt=kr.left+Cr>mr-16;let sn=kr.left;Kr&&zt&&(sn=kr.right-Cr),sn=Math.max(8,sn),Ct.value={top:kr.bottom+4,left:sn},dt.value=!0,await E0(),document.addEventListener("click",we,!0),document.addEventListener("keydown",Xe)}else jt()};return Fy(()=>{jt()}),(kr,mr)=>(Sn(),On("div",Xst,[Ut("button",{ref_key:"buttonRef",ref:xt,onClick:fr,class:io(["p-1 rounded hover:bg-white/10 transition-colors text-white/60 hover:text-white/80",{"bg-white/10 text-white/80":dt.value}]),"data-menu-container":""},mr[0]||(mr[0]=[Ut("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[Ut("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z"})],-1)]),2),(Sn(),Rp(r7,{to:"body"},[dt.value?(Sn(),On("div",{key:0,class:"fixed w-36 bg-dark-card/90 backdrop-blur-lg border border-white/20 rounded-[15px] shadow-2xl z-[999999]",style:K0({top:Ct.value.top+"px",left:Ct.value.left+"px"}),"data-menu-container":""},[Ut("div",{class:"py-2"},[Ut("button",{onClick:ae,class:"flex items-center gap-3 w-full px-4 py-3 text-sm text-accent-red hover:bg-accent-red/10 transition-colors"},mr[1]||(mr[1]=[Ut("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[Ut("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1),Ut("span",{class:"font-medium"},"Delete",-1)]))])],4)):fo("",!0)]))]))}}),Jst={class:"bg-dark-card/30 backdrop-blur border border-white/10 rounded-[15px] p-6"},Qst={class:"flex items-center justify-between mb-4"},tlt={class:"flex items-center gap-3"},elt={class:"text-white text-lg font-semibold"},rlt={class:"bg-white/10 text-white text-xs px-2 py-1 rounded-full"},nlt={key:0,class:"text-white/60"},ilt={key:0,class:"hidden lg:flex bg-dark-card/30 backdrop-blur rounded-lg border border-white/10 p-1"},alt={class:"hidden lg:block overflow-x-auto"},olt={class:"w-full"},slt={class:"bg-dark-bg/50"},llt={class:"bg-dark-bg/30"},ult=["onMouseenter","onMouseleave"],clt=["onClick","title"],hlt={key:0,class:"ml-1 text-xs"},flt={key:0,class:"flex items-center gap-3"},dlt={class:"text-white/70"},plt={class:"flex gap-1"},mlt=["onClick"],glt=["onClick"],vlt={key:1,class:"text-dark-text"},ylt={class:"flex items-center gap-2"},xlt={class:"flex items-end gap-0.5"},_lt={class:"flex items-center gap-2"},blt=["title"],wlt=["title"],klt={class:"lg:hidden space-y-3"},Tlt=["onClick"],Alt={class:"flex items-center justify-between mb-3"},Mlt={class:"flex items-center gap-3"},Slt={class:"text-white font-medium text-base"},Clt={class:"flex items-center gap-2"},Elt={class:"grid grid-cols-1 gap-3"},Llt={class:"grid grid-cols-2 gap-4"},Plt=["onClick","title"],Ilt={key:0,class:"ml-1 text-xs"},zlt={class:"flex items-center gap-2 justify-end"},Olt={class:"flex items-end gap-0.5"},Dlt={class:"grid grid-cols-2 gap-4"},Flt={class:"flex items-center gap-2"},Rlt=["title"],Blt={class:"text-white text-sm block text-right"},Nlt={key:0,class:"border-t border-white/10 pt-3"},jlt={class:"flex items-center justify-between"},Ult={class:"text-white/70 text-sm font-mono"},Vlt={class:"flex gap-2"},Hlt=["onClick"],Wlt=["onClick"],qlt={class:"grid grid-cols-3 gap-4 pt-3 border-t border-white/10"},$lt={class:"text-center"},Zlt={class:"text-white text-sm font-medium"},Glt={class:"text-center"},Ylt={class:"text-white text-sm font-medium"},Klt={class:"text-center"},Xlt=["title"],Jlt=dc({__name:"NeighborTable",props:{contactType:{},contactTypeKey:{},adverts:{},originalCount:{default:0},color:{},baseLatitude:{default:null},baseLongitude:{default:null},isCompactView:{type:Boolean,default:!1},isFirstTable:{type:Boolean,default:!1},showViewToggle:{type:Boolean,default:!1}},emits:["highlight-node","unhighlight-node","menu-ping","menu-delete","toggle-view"],setup(d,{emit:o}){const C=xa(null),B=d,Y=o,dt=nn=>new Date(nn*1e3).toLocaleString(),xt=nn=>`${nn.slice(0,4)}...${nn.slice(-4)}`,Ct=nn=>{switch(nn){case 2:return{text:"Direct",bgColor:"bg-green-500/20",borderColor:"border-green-400/30",textColor:"text-green-400"};case 3:return{text:"Transport Direct",bgColor:"bg-green-600/20",borderColor:"border-green-500/30",textColor:"text-green-500"};case 1:return{text:"Flood",bgColor:"bg-yellow-500/20",borderColor:"border-yellow-400/30",textColor:"text-yellow-400"};case 0:return{text:"Transport Flood",bgColor:"bg-orange-500/20",borderColor:"border-orange-400/30",textColor:"text-orange-400"};default:return{text:"Unknown",bgColor:"bg-gray-500/20",borderColor:"border-gray-400/30",textColor:"text-gray-400"}}},jt=nn=>nn?`${nn} dBm`:"N/A",re=nn=>nn?`${nn} dB`:"N/A",ae=(nn,si,tn,En)=>{const Zn=(tn-nn)*Math.PI/180,Li=(En-si)*Math.PI/180,Dn=Math.sin(Zn/2)*Math.sin(Zn/2)+Math.cos(nn*Math.PI/180)*Math.cos(tn*Math.PI/180)*Math.sin(Li/2)*Math.sin(Li/2);return 6371*(2*Math.atan2(Math.sqrt(Dn),Math.sqrt(1-Dn)))},we=nn=>B.baseLatitude===null||B.baseLongitude===null||nn.latitude===null||nn.longitude===null?"N/A":`${ae(B.baseLatitude,B.baseLongitude,nn.latitude,nn.longitude).toFixed(1)} km`,Xe=async nn=>{try{return await navigator.clipboard.writeText(nn),!0}catch{const si=document.createElement("textarea");return si.value=nn,document.body.appendChild(si),si.select(),document.execCommand("copy"),document.body.removeChild(si),!0}},fr=nn=>{const si=Date.now(),tn=nn*1e3,En=si-tn,Nn=Math.floor(En/1e3),Zn=Math.floor(Nn/60),Li=Math.floor(Zn/60),Dn=Math.floor(Li/24);return Nn<60?`${Nn}s ago`:Zn<60?`${Zn}m ago`:Li<24?`${Li}h ago`:`${Dn}d ago`},kr=nn=>{const si=Date.now(),tn=nn*1e3,En=si-tn,Nn=Math.floor(En/(1e3*60*60));return Nn<1?{color:"text-green-400"}:Nn<26?{color:"text-yellow-400"}:{color:"text-red-400"}},mr=async(nn,si)=>{const tn=`${nn.toFixed(6)}, ${si.toFixed(6)}`;await Xe(tn)},Cr=(nn,si)=>{const tn=`https://www.google.com/maps?q=${nn},${si}`;window.open(tn,"_blank")},Kr=async nn=>{await Xe(nn),C.value=nn,setTimeout(()=>{C.value=null},2e3)},zt=nn=>nn?nn>=-50?{bars:5,color:"text-green-400"}:nn>=-60?{bars:4,color:"text-green-300"}:nn>=-70?{bars:3,color:"text-yellow-400"}:nn>=-80?{bars:2,color:"text-orange-400"}:nn>=-90?{bars:1,color:"text-red-400"}:{bars:0,color:"text-red-500"}:{bars:0,color:"text-gray-400"},sn=()=>B.isCompactView?"py-2 px-2":"py-4 px-3",Xn=()=>{Y("toggle-view")},Gn=nn=>{Y("highlight-node",nn)},ni=nn=>{Y("unhighlight-node",nn)},Ci=nn=>{Y("menu-ping",nn)},Vi=nn=>{Y("menu-delete",nn)};return(nn,si)=>(Sn(),On("div",Jst,[Ut("div",Qst,[Ut("div",tlt,[Ut("div",{class:"w-3 h-3 rounded-full border border-white/20",style:K0({backgroundColor:nn.color})},null,4),Ut("h3",elt,jn(nn.contactType),1),Ut("span",rlt,[Ql(jn(nn.adverts.length)+" ",1),nn.originalCount>0&&nn.adverts.length(Sn(),On("tr",{key:tn.id,class:"hover:bg-white/5 transition-colors",onMouseenter:En=>Gn(tn.pubkey),onMouseleave:En=>ni(tn.pubkey)},[Ut("td",{class:io(sn())},[_l(lP,{neighbor:tn,onPing:Ci,onDelete:Vi},null,8,["neighbor"])],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},jn(tn.node_name||"Unknown"),3),Ut("td",{class:io(`${sn()} text-white text-sm font-mono`)},[Ut("button",{onClick:En=>Kr(tn.pubkey),class:io(["text-white hover:text-primary-light transition-colors cursor-pointer underline underline-offset-2 decoration-white/30 hover:decoration-primary-light/60",C.value===tn.pubkey?"text-green-400 decoration-green-400/60":""]),title:C.value===tn.pubkey?"Copied!":"Click to copy full public key"},[Ql(jn(xt(tn.pubkey))+" ",1),C.value===tn.pubkey?(Sn(),On("span",hlt,"✓")):fo("",!0)],10,clt)],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},[tn.latitude!==null&&tn.longitude!==null?(Sn(),On("div",flt,[Ut("span",dlt,jn(tn.latitude.toFixed(4))+", "+jn(tn.longitude.toFixed(4)),1),Ut("div",plt,[Ut("button",{onClick:En=>mr(tn.latitude,tn.longitude),class:"text-white/60 hover:text-white transition-colors cursor-pointer",title:"Copy coordinates to clipboard"},si[2]||(si[2]=[Ut("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[Ut("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2",stroke:"currentColor","stroke-width":"2"}),Ut("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",stroke:"currentColor","stroke-width":"2"})],-1)]),8,mlt),Ut("button",{onClick:En=>Cr(tn.latitude,tn.longitude),class:"text-white/60 hover:text-blue-400 transition-colors cursor-pointer",title:"Open in Google Maps"},si[3]||(si[3]=[Ut("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[Ut("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z",stroke:"currentColor","stroke-width":"2"}),Ut("circle",{cx:"12",cy:"10",r:"3",stroke:"currentColor","stroke-width":"2"})],-1)]),8,glt)])])):(Sn(),On("span",vlt,"Unknown"))],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},jn(we(tn)),3),Ut("td",{class:io(`${sn()} text-white text-sm`)},[Ut("span",{class:io(["inline-block px-2 py-1 rounded-full text-xs border transition-colors",Ct(tn.route_type).bgColor,Ct(tn.route_type).borderColor,Ct(tn.route_type).textColor])},jn(Ct(tn.route_type).text),3)],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},[Ut("span",{class:io(["inline-block px-2 py-1 rounded-full text-xs border transition-colors",tn.zero_hop?"bg-green-500/20 border-green-400/30 text-green-400":"bg-orange-500/20 border-orange-400/30 text-orange-400"])},jn(tn.zero_hop?"Zero Hop":"Multi-Hop"),3)],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},[Ut("div",ylt,[Ut("div",xlt,[(Sn(),On(Ml,null,Hu(5,En=>Ut("div",{key:En,class:io(["w-1 transition-colors",En<=zt(tn.rssi).bars?zt(tn.rssi).color:"text-gray-600"]),style:K0({height:`${4+En*2}px`})},si[4]||(si[4]=[Ut("div",{class:"w-full h-full bg-current rounded-sm"},null,-1)]),6)),64))]),Ut("span",{class:io(zt(tn.rssi).color)},jn(jt(tn.rssi)),3)])],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},jn(re(tn.snr)),3),Ut("td",{class:io(`${sn()} text-white text-sm`)},[Ut("div",_lt,[Ut("div",{class:io(["w-2 h-2 rounded-full",kr(tn.last_seen).color==="text-green-400"?"bg-green-400":"",kr(tn.last_seen).color==="text-yellow-400"?"bg-yellow-400":"",kr(tn.last_seen).color==="text-red-400"?"bg-red-400":""])},null,2),Ut("span",{class:io([kr(tn.last_seen).color,"cursor-help"]),title:dt(tn.last_seen)},jn(fr(tn.last_seen)),11,blt)])],2),Ut("td",{class:io(`${sn()} text-white text-sm`)},[Ut("span",{title:dt(tn.first_seen),class:"cursor-help"},jn(fr(tn.first_seen)),9,wlt)],2),Ut("td",{class:io(`${sn()} text-white text-sm text-center`)},jn(tn.advert_count),3)],40,ult))),128))])])]),Ut("div",klt,[(Sn(!0),On(Ml,null,Hu(nn.adverts,tn=>(Sn(),On("div",{key:tn.id,class:"bg-dark-bg/30 border border-white/10 rounded-lg p-4 hover:bg-white/5 transition-colors",onClick:En=>Gn(tn.pubkey)},[Ut("div",Alt,[Ut("div",Mlt,[Ut("h4",Slt,jn(tn.node_name||"Unknown Node"),1),Ut("div",Clt,[Ut("span",{class:io(["inline-block px-2 py-1 rounded-full text-xs border",Ct(tn.route_type).bgColor,Ct(tn.route_type).borderColor,Ct(tn.route_type).textColor])},jn(Ct(tn.route_type).text),3),Ut("span",{class:io(["inline-block px-2 py-1 rounded-full text-xs border",tn.zero_hop?"bg-green-500/20 border-green-400/30 text-green-400":"bg-orange-500/20 border-orange-400/30 text-orange-400"])},jn(tn.zero_hop?"Zero Hop":"Multi-Hop"),3)])]),_l(lP,{neighbor:tn,onPing:Ci,onDelete:Vi},null,8,["neighbor"])]),Ut("div",Elt,[Ut("div",Llt,[Ut("div",null,[si[5]||(si[5]=Ut("div",{class:"text-dark-text text-xs mb-1"},"Public Key",-1)),Ut("button",{onClick:En=>Kr(tn.pubkey),class:io(["text-white hover:text-primary-light transition-colors cursor-pointer font-mono text-sm underline underline-offset-2 decoration-white/30 hover:decoration-primary-light/60 break-all",C.value===tn.pubkey?"text-green-400 decoration-green-400/60":""]),title:C.value===tn.pubkey?"Copied!":"Click to copy full public key"},[Ql(jn(xt(tn.pubkey))+" ",1),C.value===tn.pubkey?(Sn(),On("span",Ilt,"✓")):fo("",!0)],10,Plt)]),Ut("div",null,[si[7]||(si[7]=Ut("div",{class:"text-dark-text text-xs mb-1"},"Signal",-1)),Ut("div",zlt,[Ut("div",Olt,[(Sn(),On(Ml,null,Hu(5,En=>Ut("div",{key:En,class:io(["w-1.5 transition-colors",En<=zt(tn.rssi).bars?zt(tn.rssi).color:"text-gray-600"]),style:K0({height:`${6+En*2}px`})},si[6]||(si[6]=[Ut("div",{class:"w-full h-full bg-current rounded-sm"},null,-1)]),6)),64))]),Ut("span",{class:io(`${zt(tn.rssi).color} text-sm font-medium`)},jn(jt(tn.rssi)),3)])])]),Ut("div",Dlt,[Ut("div",null,[si[8]||(si[8]=Ut("div",{class:"text-dark-text text-xs mb-1"},"Last Seen",-1)),Ut("div",Flt,[Ut("div",{class:io(["w-2 h-2 rounded-full",kr(tn.last_seen).color==="text-green-400"?"bg-green-400":"",kr(tn.last_seen).color==="text-yellow-400"?"bg-yellow-400":"",kr(tn.last_seen).color==="text-red-400"?"bg-red-400":""])},null,2),Ut("span",{class:io(`${kr(tn.last_seen).color} text-sm`),title:dt(tn.last_seen)},jn(fr(tn.last_seen)),11,Rlt)])]),Ut("div",null,[si[9]||(si[9]=Ut("div",{class:"text-dark-text text-xs mb-1"},"Distance",-1)),Ut("span",Blt,jn(we(tn)),1)])]),tn.latitude!==null&&tn.longitude!==null?(Sn(),On("div",Nlt,[si[12]||(si[12]=Ut("div",{class:"text-dark-text text-xs mb-1"},"Location",-1)),Ut("div",jlt,[Ut("span",Ult,jn(tn.latitude.toFixed(4))+", "+jn(tn.longitude.toFixed(4)),1),Ut("div",Vlt,[Ut("button",{onClick:En=>mr(tn.latitude,tn.longitude),class:"text-white/60 hover:text-white transition-colors p-2 hover:bg-white/10 rounded-lg",title:"Copy coordinates"},si[10]||(si[10]=[Ut("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[Ut("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2",stroke:"currentColor","stroke-width":"2"}),Ut("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",stroke:"currentColor","stroke-width":"2"})],-1)]),8,Hlt),Ut("button",{onClick:En=>Cr(tn.latitude,tn.longitude),class:"text-white/60 hover:text-blue-400 transition-colors p-2 hover:bg-white/10 rounded-lg",title:"Open in Maps"},si[11]||(si[11]=[Ut("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[Ut("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z",stroke:"currentColor","stroke-width":"2"}),Ut("circle",{cx:"12",cy:"10",r:"3",stroke:"currentColor","stroke-width":"2"})],-1)]),8,Wlt)])])])):fo("",!0),Ut("div",qlt,[Ut("div",$lt,[si[13]||(si[13]=Ut("div",{class:"text-dark-text text-xs mb-1"},"SNR",-1)),Ut("span",Zlt,jn(re(tn.snr)),1)]),Ut("div",Glt,[si[14]||(si[14]=Ut("div",{class:"text-dark-text text-xs mb-1"},"Adverts",-1)),Ut("span",Ylt,jn(tn.advert_count),1)]),Ut("div",Klt,[si[15]||(si[15]=Ut("div",{class:"text-dark-text text-xs mb-1"},"First Seen",-1)),Ut("span",{class:"text-white text-sm",title:dt(tn.first_seen)},jn(fr(tn.first_seen)),9,Xlt)])])])],8,Tlt))),128))])]))}}),Qlt={class:"space-y-6"},tut={key:0,class:"flex items-center justify-center py-12"},eut={key:1,class:"bg-accent-red/10 border border-accent-red/20 rounded-[15px] p-6"},rut={class:"flex items-center gap-3"},nut={class:"text-accent-red/80 text-sm"},iut={key:0,class:""},aut={class:"flex items-center justify-between"},out={class:"flex items-center gap-3"},sut={class:"hidden lg:flex bg-dark-card/30 backdrop-blur rounded-lg border border-white/10 mb p-1"},lut={class:"flex items-center gap-2"},uut={key:0,class:"ml-1 bg-accent-blue/20 text-accent-blue border border-accent-blue/30 text-xs px-1.5 py-0.5 rounded-full font-medium"},cut={class:"bg-dark-bg/30 border border-white/10 rounded-lg p-4 mt-4 space-y-4"},hut={class:"grid grid-cols-1 md:grid-cols-3 gap-4"},fut={key:1,class:"text-center py-12"},dut={key:2,class:"text-center py-12"},put=dc({name:"NeighborsView",__name:"Neighbors",setup(d){const o=mm(),C={0:"Unknown",1:"Chat Node",2:"Repeater",3:"Room Server",4:"Hybrid Node"},B={0:"#6b7280",1:"#60a5fa",2:"#34d399",3:"#a855f7",4:"#f59e0b"},Y=xa({}),dt=xa(!0),xt=xa(null),Ct=xa(!1),jt=xa(typeof window<"u"?window.innerWidth>=1024:!0),re=xa(!1),ae=xa({zeroHop:"all",routeType:"all",searchText:""}),we=xa(!1),Xe=xa(null),fr=Bo(()=>{if(!Xe.value)return null;const Li=Xe.value;return{id:Li.id,pubkey:Li.pubkey,node_name:Li.node_name,contact_type:Li.contact_type,latitude:Li.latitude,longitude:Li.longitude,rssi:Li.rssi,snr:Li.snr,route_type:Li.route_type,last_seen:Li.last_seen,first_seen:Li.first_seen,advert_count:Li.advert_count,timestamp:Li.timestamp,is_repeater:Li.is_repeater,is_new_neighbor:Li.is_new_neighbor,zero_hop:Li.zero_hop}}),kr=Bo(()=>o.stats?.config?.repeater?.latitude),mr=Bo(()=>o.stats?.config?.repeater?.longitude),Cr=Li=>Li.filter(Dn=>{if(ae.value.zeroHop!=="all"){const Yn=Dn.zero_hop;if(ae.value.zeroHop==="true"&&!Yn||ae.value.zeroHop==="false"&&Yn)return!1}if(ae.value.routeType!=="all"){const Yn=Dn.route_type;if(ae.value.routeType==="direct"&&Yn!==2||ae.value.routeType==="transport_direct"&&Yn!==3||ae.value.routeType==="flood"&&Yn!==1||ae.value.routeType==="transport_flood"&&Yn!==0)return!1}if(ae.value.searchText){const Yn=ae.value.searchText.toLowerCase(),ma=Dn.node_name?.toLowerCase()||"",ul=Dn.pubkey.toLowerCase();if(!ma.includes(Yn)&&!ul.includes(Yn))return!1}return!0}),Kr=()=>{ae.value={zeroHop:"all",routeType:"all",searchText:""}},zt=Bo(()=>ae.value.zeroHop!=="all"||ae.value.routeType!=="all"||ae.value.searchText!==""),sn=Bo(()=>{const Li={};for(const[Dn,Yn]of Object.entries(Y.value))Li[Dn]=Cr(Yn);return Li}),Xn=Bo(()=>Object.entries(C).filter(([Li])=>sn.value[Li]?.length>0).sort(([Li],[Dn])=>parseInt(Li)-parseInt(Dn))),Gn=Bo(()=>Object.values(Y.value).flat().filter(Li=>{const Dn=Li.latitude,Yn=Li.longitude;return Dn!=null&&Dn!==0&&Yn!==null&&Yn!==void 0&&Yn!==0&&typeof Dn=="number"&&typeof Yn=="number"&&!isNaN(Dn)&&!isNaN(Yn)})),ni=async Li=>{try{const Dn=await ec.get(`/adverts_by_contact_type?contact_type=${encodeURIComponent(Li)}&hours=168`);return Dn.success&&Array.isArray(Dn.data)?Dn.data:[]}catch(Dn){return console.error(`Error fetching adverts for contact type ${Li}:`,Dn),[]}},Ci=async()=>{dt.value=!0,xt.value=null;try{Y.value={};for(const[Li,Dn]of Object.entries(C)){const Yn=await ni(Dn);Yn.length>0&&(Y.value[Li]=Yn)}}catch(Li){console.error("Error loading adverts:",Li),xt.value=Li instanceof Error?Li.message:"Failed to load neighbor data"}finally{dt.value=!1}},Vi=xa(),nn=Li=>{Vi.value?.highlightNode(Li)},si=Li=>{Vi.value?.unhighlightNode(Li)},tn=async Li=>{const Dn=Li;try{const Yn=await ec.post("/ping_neighbor",{pubkey:Dn.pubkey});Yn.success?console.log("Ping sent successfully"):console.error("Failed to ping neighbor:",Yn.error)}catch(Yn){console.error("Error pinging neighbor:",Yn)}},En=Li=>{Xe.value=Li,we.value=!0},Nn=()=>{we.value=!1,Xe.value=null},Zn=async Li=>{try{await ec.deleteAdvert(Li),await Ci(),Nn()}catch(Dn){console.error("Error deleting neighbor:",Dn)}};return Vd(async()=>{await Ci()}),(Li,Dn)=>(Sn(),On("div",Qlt,[dt.value?(Sn(),On("div",tut,Dn[7]||(Dn[7]=[Ut("div",{class:"text-center"},[Ut("div",{class:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto mb-4"}),Ut("p",{class:"text-dark-text"},"Loading neighbor data...")],-1)]))):xt.value?(Sn(),On("div",eut,[Ut("div",rut,[Dn[9]||(Dn[9]=Ut("svg",{class:"w-5 h-5 text-accent-red",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[Ut("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z"})],-1)),Ut("div",null,[Dn[8]||(Dn[8]=Ut("h3",{class:"text-accent-red font-medium"},"Error Loading Neighbors",-1)),Ut("p",nut,jn(xt.value),1)])])])):(Sn(),On(Ml,{key:2},[_l(Kst,{ref_key:"networkMapRef",ref:Vi,adverts:Gn.value,"base-latitude":kr.value,"base-longitude":mr.value,"show-legend":jt.value,"onUpdate:showLegend":Dn[0]||(Dn[0]=Yn=>jt.value=Yn)},null,8,["adverts","base-latitude","base-longitude","show-legend"]),Object.keys(Y.value).length>0?(Sn(),On("div",iut,[Ut("div",aut,[Dn[14]||(Dn[14]=Ut("span",{class:"text-white text-lg font-semibold"},null,-1)),Ut("div",out,[Ut("div",sut,[Ut("button",{onClick:Dn[1]||(Dn[1]=Yn=>Ct.value=!1),class:io(["p-2 rounded-md transition-colors",Ct.value?"text-white/60 hover:text-primary hover:bg-primary/10":"bg-primary/20 text-primary border border-primary/30"]),title:"Comfortable view"},Dn[10]||(Dn[10]=[Ut("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[Ut("rect",{x:"3",y:"3",width:"18",height:"6",rx:"2",stroke:"currentColor","stroke-width":"2"}),Ut("rect",{x:"3",y:"12",width:"18",height:"6",rx:"2",stroke:"currentColor","stroke-width":"2"})],-1)]),2),Ut("button",{onClick:Dn[2]||(Dn[2]=Yn=>Ct.value=!0),class:io(["p-2 rounded-md transition-colors",Ct.value?"bg-primary/20 text-primary border border-primary/30":"text-white/60 hover:text-primary hover:bg-primary/10"]),title:"Compact view"},Dn[11]||(Dn[11]=[Ut("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[Ut("rect",{x:"3",y:"3",width:"18",height:"4",rx:"2",stroke:"currentColor","stroke-width":"2"}),Ut("rect",{x:"3",y:"10",width:"18",height:"4",rx:"2",stroke:"currentColor","stroke-width":"2"}),Ut("rect",{x:"3",y:"17",width:"18",height:"4",rx:"2",stroke:"currentColor","stroke-width":"2"})],-1)]),2)]),Ut("div",lut,[Ut("button",{onClick:Dn[3]||(Dn[3]=Yn=>re.value=!re.value),class:io(["px-3 py-1.5 text-xs rounded-lg transition-colors border",zt.value?"bg-primary/20 text-primary border-primary/30":"bg-white/10 text-white border-white/20 hover:bg-white/20"])},[Dn[12]||(Dn[12]=Ut("svg",{class:"w-4 h-4 inline mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[Ut("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707v6.586a1 1 0 01-1.447.894l-4-2A1 1 0 717 18.586V13.414a1 1 0 00-.293-.707L.293 6.293A1 1 0 010 5.586V3a1 1 0 011-1z"})],-1)),Dn[13]||(Dn[13]=Ql(" Filters ",-1)),zt.value?(Sn(),On("span",uut," Active ")):fo("",!0)],2),zt.value?(Sn(),On("button",{key:0,onClick:Kr,class:"px-3 py-1.5 text-xs rounded-lg bg-white/10 text-white border border-white/20 hover:bg-white/20 transition-colors"}," Clear Filters ")):fo("",!0)])])]),Bc(Ut("div",cut,[Ut("div",hut,[Ut("div",null,[Dn[16]||(Dn[16]=Ut("label",{class:"block text-xs font-medium text-dark-text mb-1"},"Zero Hop",-1)),Bc(Ut("select",{"onUpdate:modelValue":Dn[4]||(Dn[4]=Yn=>ae.value.zeroHop=Yn),class:"w-full bg-dark-card/50 border border-white/20 rounded-lg px-3 py-2 text-white text-sm focus:border-primary/50 focus:outline-none"},Dn[15]||(Dn[15]=[Ut("option",{value:"all"},"All Nodes",-1),Ut("option",{value:"true"},"Zero Hop Only",-1),Ut("option",{value:"false"},"Multi-Hop Only",-1)]),512),[[__,ae.value.zeroHop]])]),Ut("div",null,[Dn[18]||(Dn[18]=Ut("label",{class:"block text-xs font-medium text-dark-text mb-1"},"Route Type",-1)),Bc(Ut("select",{"onUpdate:modelValue":Dn[5]||(Dn[5]=Yn=>ae.value.routeType=Yn),class:"w-full bg-dark-card/50 border border-white/20 rounded-lg px-3 py-2 text-white text-sm focus:border-primary/50 focus:outline-none"},Dn[17]||(Dn[17]=[uf('',5)]),512),[[__,ae.value.routeType]])]),Ut("div",null,[Dn[19]||(Dn[19]=Ut("label",{class:"block text-xs font-medium text-dark-text mb-1"},"Search",-1)),Bc(Ut("input",{"onUpdate:modelValue":Dn[6]||(Dn[6]=Yn=>ae.value.searchText=Yn),type:"text",placeholder:"Node name or pubkey...",class:"w-full bg-dark-card/50 border border-white/20 rounded-lg px-3 py-2 text-white text-sm focus:border-primary/50 focus:outline-none placeholder-white/40"},null,512),[[kp,ae.value.searchText]])])])],512),[[u_,re.value]])])):fo("",!0),(Sn(!0),On(Ml,null,Hu(Xn.value,([Yn,ma])=>(Sn(),On("div",{key:Yn,class:"space-y-6"},[_l(Jlt,{"contact-type":ma,"contact-type-key":Yn,adverts:sn.value[Yn],"original-count":Y.value[Yn]?.length||0,color:B[parseInt(Yn)],"base-latitude":kr.value,"base-longitude":mr.value,"is-compact-view":Ct.value,"is-first-table":!1,"show-view-toggle":!1,onHighlightNode:nn,onUnhighlightNode:si,onMenuPing:tn,onMenuDelete:En},null,8,["contact-type","contact-type-key","adverts","original-count","color","base-latitude","base-longitude","is-compact-view"])]))),128)),Xn.value.length===0&&Object.keys(Y.value).length===0?(Sn(),On("div",fut,[Dn[20]||(Dn[20]=uf('No Neighbors Found
No mesh neighbors have been discovered in your area yet.
',3)),Ut("button",{onClick:Ci,class:"mt-4 px-4 py-2 bg-primary/20 text-primary border border-primary/30 rounded-lg hover:bg-primary/30 transition-colors"}," Refresh ")])):Xn.value.length===0&&zt.value?(Sn(),On("div",dut,[Dn[21]||(Dn[21]=uf('No neighbors match your filters
Try adjusting your filter criteria to see more results.
',3)),Ut("button",{onClick:Kr,class:"px-4 py-2 bg-primary/20 text-primary border border-primary/30 rounded-lg hover:bg-primary/30 transition-colors"}," Clear Filters ")])):fo("",!0)],64)),_l(Dst,{show:we.value,neighbor:fr.value,onClose:Nn,onDelete:Zn},null,8,["show","neighbor"])]))}});/*!
* @kurkle/color v0.3.4
* https://github.com/kurkle/color#readme
* (c) 2024 Jukka Kurkela
* Released under the MIT License
- */function uw(d){return d+.5|0}const f1=(d,s,C)=>Math.max(Math.min(d,C),s);function y2(d){return f1(uw(d*2.55),0,255)}function y1(d){return f1(uw(d*255),0,255)}function tv(d){return f1(uw(d/2.55)/100,0,1)}function sP(d){return f1(uw(d*100),0,100)}const sm={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},LA=[..."0123456789ABCDEF"],nut=d=>LA[d&15],iut=d=>LA[(d&240)>>4]+LA[d&15],F5=d=>(d&240)>>4===(d&15),aut=d=>F5(d.r)&&F5(d.g)&&F5(d.b)&&F5(d.a);function out(d){var s=d.length,C;return d[0]==="#"&&(s===4||s===5?C={r:255&sm[d[1]]*17,g:255&sm[d[2]]*17,b:255&sm[d[3]]*17,a:s===5?sm[d[4]]*17:255}:(s===7||s===9)&&(C={r:sm[d[1]]<<4|sm[d[2]],g:sm[d[3]]<<4|sm[d[4]],b:sm[d[5]]<<4|sm[d[6]],a:s===9?sm[d[7]]<<4|sm[d[8]]:255})),C}const sut=(d,s)=>d<255?s(d):"";function lut(d){var s=aut(d)?nut:iut;return d?"#"+s(d.r)+s(d.g)+s(d.b)+sut(d.a,s):void 0}const uut=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function aD(d,s,C){const B=s*Math.min(C,1-C),K=(dt,_t=(dt+d/30)%12)=>C-B*Math.max(Math.min(_t-3,9-_t,1),-1);return[K(0),K(8),K(4)]}function cut(d,s,C){const B=(K,dt=(K+d/60)%6)=>C-C*s*Math.max(Math.min(dt,4-dt,1),0);return[B(5),B(3),B(1)]}function hut(d,s,C){const B=aD(d,1,.5);let K;for(s+C>1&&(K=1/(s+C),s*=K,C*=K),K=0;K<3;K++)B[K]*=1-s-C,B[K]+=s;return B}function fut(d,s,C,B,K){return d===K?(s-C)/B+(s.5?oe/(2-dt-_t):oe/(dt+_t),jt=fut(C,B,K,oe,dt),jt=jt*60+.5),[jt|0,re||0,zt]}function vM(d,s,C,B){return(Array.isArray(s)?d(s[0],s[1],s[2]):d(s,C,B)).map(y1)}function yM(d,s,C){return vM(aD,d,s,C)}function dut(d,s,C){return vM(hut,d,s,C)}function put(d,s,C){return vM(cut,d,s,C)}function oD(d){return(d%360+360)%360}function mut(d){const s=uut.exec(d);let C=255,B;if(!s)return;s[5]!==B&&(C=s[6]?y2(+s[5]):y1(+s[5]));const K=oD(+s[2]),dt=+s[3]/100,_t=+s[4]/100;return s[1]==="hwb"?B=dut(K,dt,_t):s[1]==="hsv"?B=put(K,dt,_t):B=yM(K,dt,_t),{r:B[0],g:B[1],b:B[2],a:C}}function gut(d,s){var C=gM(d);C[0]=oD(C[0]+s),C=yM(C),d.r=C[0],d.g=C[1],d.b=C[2]}function vut(d){if(!d)return;const s=gM(d),C=s[0],B=sP(s[1]),K=sP(s[2]);return d.a<255?`hsla(${C}, ${B}%, ${K}%, ${tv(d.a)})`:`hsl(${C}, ${B}%, ${K}%)`}const lP={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},uP={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function yut(){const d={},s=Object.keys(uP),C=Object.keys(lP);let B,K,dt,_t,zt;for(B=0;B>16&255,dt>>8&255,dt&255]}return d}let R5;function xut(d){R5||(R5=yut(),R5.transparent=[0,0,0,0]);const s=R5[d.toLowerCase()];return s&&{r:s[0],g:s[1],b:s[2],a:s.length===4?s[3]:255}}const _ut=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function but(d){const s=_ut.exec(d);let C=255,B,K,dt;if(s){if(s[7]!==B){const _t=+s[7];C=s[8]?y2(_t):f1(_t*255,0,255)}return B=+s[1],K=+s[3],dt=+s[5],B=255&(s[2]?y2(B):f1(B,0,255)),K=255&(s[4]?y2(K):f1(K,0,255)),dt=255&(s[6]?y2(dt):f1(dt,0,255)),{r:B,g:K,b:dt,a:C}}}function wut(d){return d&&(d.a<255?`rgba(${d.r}, ${d.g}, ${d.b}, ${tv(d.a)})`:`rgb(${d.r}, ${d.g}, ${d.b})`)}const H8=d=>d<=.0031308?d*12.92:Math.pow(d,1/2.4)*1.055-.055,n_=d=>d<=.04045?d/12.92:Math.pow((d+.055)/1.055,2.4);function kut(d,s,C){const B=n_(tv(d.r)),K=n_(tv(d.g)),dt=n_(tv(d.b));return{r:y1(H8(B+C*(n_(tv(s.r))-B))),g:y1(H8(K+C*(n_(tv(s.g))-K))),b:y1(H8(dt+C*(n_(tv(s.b))-dt))),a:d.a+C*(s.a-d.a)}}function B5(d,s,C){if(d){let B=gM(d);B[s]=Math.max(0,Math.min(B[s]+B[s]*C,s===0?360:1)),B=yM(B),d.r=B[0],d.g=B[1],d.b=B[2]}}function sD(d,s){return d&&Object.assign(s||{},d)}function cP(d){var s={r:0,g:0,b:0,a:255};return Array.isArray(d)?d.length>=3&&(s={r:d[0],g:d[1],b:d[2],a:255},d.length>3&&(s.a=y1(d[3]))):(s=sD(d,{r:0,g:0,b:0,a:1}),s.a=y1(s.a)),s}function Tut(d){return d.charAt(0)==="r"?but(d):mut(d)}class $2{constructor(s){if(s instanceof $2)return s;const C=typeof s;let B;C==="object"?B=cP(s):C==="string"&&(B=out(s)||xut(s)||Tut(s)),this._rgb=B,this._valid=!!B}get valid(){return this._valid}get rgb(){var s=sD(this._rgb);return s&&(s.a=tv(s.a)),s}set rgb(s){this._rgb=cP(s)}rgbString(){return this._valid?wut(this._rgb):void 0}hexString(){return this._valid?lut(this._rgb):void 0}hslString(){return this._valid?vut(this._rgb):void 0}mix(s,C){if(s){const B=this.rgb,K=s.rgb;let dt;const _t=C===dt?.5:C,zt=2*_t-1,jt=B.a-K.a,re=((zt*jt===-1?zt:(zt+jt)/(1+zt*jt))+1)/2;dt=1-re,B.r=255&re*B.r+dt*K.r+.5,B.g=255&re*B.g+dt*K.g+.5,B.b=255&re*B.b+dt*K.b+.5,B.a=_t*B.a+(1-_t)*K.a,this.rgb=B}return this}interpolate(s,C){return s&&(this._rgb=kut(this._rgb,s._rgb,C)),this}clone(){return new $2(this.rgb)}alpha(s){return this._rgb.a=y1(s),this}clearer(s){const C=this._rgb;return C.a*=1-s,this}greyscale(){const s=this._rgb,C=uw(s.r*.3+s.g*.59+s.b*.11);return s.r=s.g=s.b=C,this}opaquer(s){const C=this._rgb;return C.a*=1+s,this}negate(){const s=this._rgb;return s.r=255-s.r,s.g=255-s.g,s.b=255-s.b,this}lighten(s){return B5(this._rgb,2,s),this}darken(s){return B5(this._rgb,2,-s),this}saturate(s){return B5(this._rgb,1,s),this}desaturate(s){return B5(this._rgb,1,-s),this}rotate(s){return gut(this._rgb,s),this}}/*!
+ */function hw(d){return d+.5|0}const p1=(d,o,C)=>Math.max(Math.min(d,C),o);function b2(d){return p1(hw(d*2.55),0,255)}function _1(d){return p1(hw(d*255),0,255)}function ev(d){return p1(hw(d/2.55)/100,0,1)}function uP(d){return p1(hw(d*100),0,100)}const um={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},IA=[..."0123456789ABCDEF"],mut=d=>IA[d&15],gut=d=>IA[(d&240)>>4]+IA[d&15],B5=d=>(d&240)>>4===(d&15),vut=d=>B5(d.r)&&B5(d.g)&&B5(d.b)&&B5(d.a);function yut(d){var o=d.length,C;return d[0]==="#"&&(o===4||o===5?C={r:255&um[d[1]]*17,g:255&um[d[2]]*17,b:255&um[d[3]]*17,a:o===5?um[d[4]]*17:255}:(o===7||o===9)&&(C={r:um[d[1]]<<4|um[d[2]],g:um[d[3]]<<4|um[d[4]],b:um[d[5]]<<4|um[d[6]],a:o===9?um[d[7]]<<4|um[d[8]]:255})),C}const xut=(d,o)=>d<255?o(d):"";function _ut(d){var o=vut(d)?mut:gut;return d?"#"+o(d.r)+o(d.g)+o(d.b)+xut(d.a,o):void 0}const but=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function aD(d,o,C){const B=o*Math.min(C,1-C),Y=(dt,xt=(dt+d/30)%12)=>C-B*Math.max(Math.min(xt-3,9-xt,1),-1);return[Y(0),Y(8),Y(4)]}function wut(d,o,C){const B=(Y,dt=(Y+d/60)%6)=>C-C*o*Math.max(Math.min(dt,4-dt,1),0);return[B(5),B(3),B(1)]}function kut(d,o,C){const B=aD(d,1,.5);let Y;for(o+C>1&&(Y=1/(o+C),o*=Y,C*=Y),Y=0;Y<3;Y++)B[Y]*=1-o-C,B[Y]+=o;return B}function Tut(d,o,C,B,Y){return d===Y?(o-C)/B+(o.5?ae/(2-dt-xt):ae/(dt+xt),jt=Tut(C,B,Y,ae,dt),jt=jt*60+.5),[jt|0,re||0,Ct]}function x7(d,o,C,B){return(Array.isArray(o)?d(o[0],o[1],o[2]):d(o,C,B)).map(_1)}function _7(d,o,C){return x7(aD,d,o,C)}function Aut(d,o,C){return x7(kut,d,o,C)}function Mut(d,o,C){return x7(wut,d,o,C)}function oD(d){return(d%360+360)%360}function Sut(d){const o=but.exec(d);let C=255,B;if(!o)return;o[5]!==B&&(C=o[6]?b2(+o[5]):_1(+o[5]));const Y=oD(+o[2]),dt=+o[3]/100,xt=+o[4]/100;return o[1]==="hwb"?B=Aut(Y,dt,xt):o[1]==="hsv"?B=Mut(Y,dt,xt):B=_7(Y,dt,xt),{r:B[0],g:B[1],b:B[2],a:C}}function Cut(d,o){var C=y7(d);C[0]=oD(C[0]+o),C=_7(C),d.r=C[0],d.g=C[1],d.b=C[2]}function Eut(d){if(!d)return;const o=y7(d),C=o[0],B=uP(o[1]),Y=uP(o[2]);return d.a<255?`hsla(${C}, ${B}%, ${Y}%, ${ev(d.a)})`:`hsl(${C}, ${B}%, ${Y}%)`}const cP={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},hP={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function Lut(){const d={},o=Object.keys(hP),C=Object.keys(cP);let B,Y,dt,xt,Ct;for(B=0;B>16&255,dt>>8&255,dt&255]}return d}let N5;function Put(d){N5||(N5=Lut(),N5.transparent=[0,0,0,0]);const o=N5[d.toLowerCase()];return o&&{r:o[0],g:o[1],b:o[2],a:o.length===4?o[3]:255}}const Iut=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function zut(d){const o=Iut.exec(d);let C=255,B,Y,dt;if(o){if(o[7]!==B){const xt=+o[7];C=o[8]?b2(xt):p1(xt*255,0,255)}return B=+o[1],Y=+o[3],dt=+o[5],B=255&(o[2]?b2(B):p1(B,0,255)),Y=255&(o[4]?b2(Y):p1(Y,0,255)),dt=255&(o[6]?b2(dt):p1(dt,0,255)),{r:B,g:Y,b:dt,a:C}}}function Out(d){return d&&(d.a<255?`rgba(${d.r}, ${d.g}, ${d.b}, ${ev(d.a)})`:`rgb(${d.r}, ${d.g}, ${d.b})`)}const q8=d=>d<=.0031308?d*12.92:Math.pow(d,1/2.4)*1.055-.055,a_=d=>d<=.04045?d/12.92:Math.pow((d+.055)/1.055,2.4);function Dut(d,o,C){const B=a_(ev(d.r)),Y=a_(ev(d.g)),dt=a_(ev(d.b));return{r:_1(q8(B+C*(a_(ev(o.r))-B))),g:_1(q8(Y+C*(a_(ev(o.g))-Y))),b:_1(q8(dt+C*(a_(ev(o.b))-dt))),a:d.a+C*(o.a-d.a)}}function j5(d,o,C){if(d){let B=y7(d);B[o]=Math.max(0,Math.min(B[o]+B[o]*C,o===0?360:1)),B=_7(B),d.r=B[0],d.g=B[1],d.b=B[2]}}function sD(d,o){return d&&Object.assign(o||{},d)}function fP(d){var o={r:0,g:0,b:0,a:255};return Array.isArray(d)?d.length>=3&&(o={r:d[0],g:d[1],b:d[2],a:255},d.length>3&&(o.a=_1(d[3]))):(o=sD(d,{r:0,g:0,b:0,a:1}),o.a=_1(o.a)),o}function Fut(d){return d.charAt(0)==="r"?zut(d):Sut(d)}class G2{constructor(o){if(o instanceof G2)return o;const C=typeof o;let B;C==="object"?B=fP(o):C==="string"&&(B=yut(o)||Put(o)||Fut(o)),this._rgb=B,this._valid=!!B}get valid(){return this._valid}get rgb(){var o=sD(this._rgb);return o&&(o.a=ev(o.a)),o}set rgb(o){this._rgb=fP(o)}rgbString(){return this._valid?Out(this._rgb):void 0}hexString(){return this._valid?_ut(this._rgb):void 0}hslString(){return this._valid?Eut(this._rgb):void 0}mix(o,C){if(o){const B=this.rgb,Y=o.rgb;let dt;const xt=C===dt?.5:C,Ct=2*xt-1,jt=B.a-Y.a,re=((Ct*jt===-1?Ct:(Ct+jt)/(1+Ct*jt))+1)/2;dt=1-re,B.r=255&re*B.r+dt*Y.r+.5,B.g=255&re*B.g+dt*Y.g+.5,B.b=255&re*B.b+dt*Y.b+.5,B.a=xt*B.a+(1-xt)*Y.a,this.rgb=B}return this}interpolate(o,C){return o&&(this._rgb=Dut(this._rgb,o._rgb,C)),this}clone(){return new G2(this.rgb)}alpha(o){return this._rgb.a=_1(o),this}clearer(o){const C=this._rgb;return C.a*=1-o,this}greyscale(){const o=this._rgb,C=hw(o.r*.3+o.g*.59+o.b*.11);return o.r=o.g=o.b=C,this}opaquer(o){const C=this._rgb;return C.a*=1+o,this}negate(){const o=this._rgb;return o.r=255-o.r,o.g=255-o.g,o.b=255-o.b,this}lighten(o){return j5(this._rgb,2,o),this}darken(o){return j5(this._rgb,2,-o),this}saturate(o){return j5(this._rgb,1,o),this}desaturate(o){return j5(this._rgb,1,-o),this}rotate(o){return Cut(this._rgb,o),this}}/*!
* Chart.js v4.5.1
* https://www.chartjs.org
* (c) 2025 Chart.js Contributors
* Released under the MIT License
- */function Kg(){}const Aut=(()=>{let d=0;return()=>d++})();function Nh(d){return d==null}function Kd(d){if(Array.isArray&&Array.isArray(d))return!0;const s=Object.prototype.toString.call(d);return s.slice(0,7)==="[object"&&s.slice(-6)==="Array]"}function Sc(d){return d!==null&&Object.prototype.toString.call(d)==="[object Object]"}function t0(d){return(typeof d=="number"||d instanceof Number)&&isFinite(+d)}function og(d,s){return t0(d)?d:s}function cc(d,s){return typeof d>"u"?s:d}const Mut=(d,s)=>typeof d=="string"&&d.endsWith("%")?parseFloat(d)/100:+d/s,lD=(d,s)=>typeof d=="string"&&d.endsWith("%")?parseFloat(d)/100*s:+d;function Ff(d,s,C){if(d&&typeof d.call=="function")return d.apply(C,s)}function Jh(d,s,C,B){let K,dt,_t;if(Kd(d))for(dt=d.length,K=0;Kd,x:d=>d.x,y:d=>d.y};function Eut(d){const s=d.split("."),C=[];let B="";for(const K of s)B+=K,B.endsWith("\\")?B=B.slice(0,-1)+".":(C.push(B),B="");return C}function Lut(d){const s=Eut(d);return C=>{for(const B of s){if(B==="")break;C=C&&C[B]}return C}}function Py(d,s){return(hP[s]||(hP[s]=Lut(s)))(d)}function xM(d){return d.charAt(0).toUpperCase()+d.slice(1)}const G2=d=>typeof d<"u",b1=d=>typeof d=="function",fP=(d,s)=>{if(d.size!==s.size)return!1;for(const C of d)if(!s.has(C))return!1;return!0};function Put(d){return d.type==="mouseup"||d.type==="click"||d.type==="contextmenu"}const Qh=Math.PI,sd=2*Qh,zut=sd+Qh,w4=Number.POSITIVE_INFINITY,Iut=Qh/180,ap=Qh/2,fy=Qh/4,dP=Qh*2/3,cD=Math.log10,gg=Math.sign;function P2(d,s,C){return Math.abs(d-s)K-dt).pop(),s}function Dut(d){return typeof d=="symbol"||typeof d=="object"&&d!==null&&!(Symbol.toPrimitive in d||"toString"in d||"valueOf"in d)}function Y2(d){return!Dut(d)&&!isNaN(parseFloat(d))&&isFinite(d)}function Fut(d,s){const C=Math.round(d);return C-s<=d&&C+s>=d}function Rut(d,s,C){let B,K,dt;for(B=0,K=d.length;Bjt&&re=Math.min(s,C)-B&&d<=Math.max(s,C)+B}function _M(d,s,C){C=C||(_t=>d[_t]1;)dt=K+B>>1,C(dt)?K=dt:B=dt;return{lo:K,hi:B}}const ky=(d,s,C,B)=>_M(d,C,B?K=>{const dt=d[K][s];return dtd[K][s]_M(d,C,B=>d[B][s]>=C);function Vut(d,s,C){let B=0,K=d.length;for(;BB&&d[K-1]>C;)K--;return B>0||K{const B="_onData"+xM(C),K=d[C];Object.defineProperty(d,C,{configurable:!0,enumerable:!1,value(...dt){const _t=K.apply(this,dt);return d._chartjs.listeners.forEach(zt=>{typeof zt[B]=="function"&&zt[B](...dt)}),_t}})})}function gP(d,s){const C=d._chartjs;if(!C)return;const B=C.listeners,K=B.indexOf(s);K!==-1&&B.splice(K,1),!(B.length>0)&&(fD.forEach(dt=>{delete d[dt]}),delete d._chartjs)}function dD(d){const s=new Set(d);return s.size===d.length?d:Array.from(s)}const pD=function(){return typeof window>"u"?function(d){return d()}:window.requestAnimationFrame}();function mD(d,s){let C=[],B=!1;return function(...K){C=K,B||(B=!0,pD.call(window,()=>{B=!1,d.apply(s,C)}))}}function Wut(d,s){let C;return function(...B){return s?(clearTimeout(C),C=setTimeout(d,s,B)):d.apply(this,B),s}}const bM=d=>d==="start"?"left":d==="end"?"right":"center",$p=(d,s,C)=>d==="start"?s:d==="end"?C:(s+C)/2,qut=(d,s,C,B)=>d===(B?"left":"right")?C:d==="center"?(s+C)/2:s;function $ut(d,s,C){const B=s.length;let K=0,dt=B;if(d._sorted){const{iScale:_t,vScale:zt,_parsed:jt}=d,re=d.dataset&&d.dataset.options?d.dataset.options.spanGaps:null,oe=_t.axis,{min:we,max:tr,minDefined:fr,maxDefined:Mr}=_t.getUserBounds();if(fr){if(K=Math.min(ky(jt,oe,we).lo,C?B:ky(s,oe,_t.getPixelForValue(we)).lo),re){const xr=jt.slice(0,K+1).reverse().findIndex(Dr=>!Nh(Dr[zt.axis]));K-=Math.max(0,xr)}K=Jp(K,0,B-1)}if(Mr){let xr=Math.max(ky(jt,_t.axis,tr,!0).hi+1,C?0:ky(s,oe,_t.getPixelForValue(tr),!0).hi+1);if(re){const Dr=jt.slice(xr-1).findIndex(hn=>!Nh(hn[zt.axis]));xr+=Math.max(0,Dr)}dt=Jp(xr,K,B)-K}else dt=B-K}return{start:K,count:dt}}function Zut(d){const{xScale:s,yScale:C,_scaleRanges:B}=d,K={xmin:s.min,xmax:s.max,ymin:C.min,ymax:C.max};if(!B)return d._scaleRanges=K,!0;const dt=B.xmin!==s.min||B.xmax!==s.max||B.ymin!==C.min||B.ymax!==C.max;return Object.assign(B,K),dt}const N5=d=>d===0||d===1,vP=(d,s,C)=>-(Math.pow(2,10*(d-=1))*Math.sin((d-s)*sd/C)),yP=(d,s,C)=>Math.pow(2,-10*d)*Math.sin((d-s)*sd/C)+1,z2={linear:d=>d,easeInQuad:d=>d*d,easeOutQuad:d=>-d*(d-2),easeInOutQuad:d=>(d/=.5)<1?.5*d*d:-.5*(--d*(d-2)-1),easeInCubic:d=>d*d*d,easeOutCubic:d=>(d-=1)*d*d+1,easeInOutCubic:d=>(d/=.5)<1?.5*d*d*d:.5*((d-=2)*d*d+2),easeInQuart:d=>d*d*d*d,easeOutQuart:d=>-((d-=1)*d*d*d-1),easeInOutQuart:d=>(d/=.5)<1?.5*d*d*d*d:-.5*((d-=2)*d*d*d-2),easeInQuint:d=>d*d*d*d*d,easeOutQuint:d=>(d-=1)*d*d*d*d+1,easeInOutQuint:d=>(d/=.5)<1?.5*d*d*d*d*d:.5*((d-=2)*d*d*d*d+2),easeInSine:d=>-Math.cos(d*ap)+1,easeOutSine:d=>Math.sin(d*ap),easeInOutSine:d=>-.5*(Math.cos(Qh*d)-1),easeInExpo:d=>d===0?0:Math.pow(2,10*(d-1)),easeOutExpo:d=>d===1?1:-Math.pow(2,-10*d)+1,easeInOutExpo:d=>N5(d)?d:d<.5?.5*Math.pow(2,10*(d*2-1)):.5*(-Math.pow(2,-10*(d*2-1))+2),easeInCirc:d=>d>=1?d:-(Math.sqrt(1-d*d)-1),easeOutCirc:d=>Math.sqrt(1-(d-=1)*d),easeInOutCirc:d=>(d/=.5)<1?-.5*(Math.sqrt(1-d*d)-1):.5*(Math.sqrt(1-(d-=2)*d)+1),easeInElastic:d=>N5(d)?d:vP(d,.075,.3),easeOutElastic:d=>N5(d)?d:yP(d,.075,.3),easeInOutElastic(d){return N5(d)?d:d<.5?.5*vP(d*2,.1125,.45):.5+.5*yP(d*2-1,.1125,.45)},easeInBack(d){return d*d*((1.70158+1)*d-1.70158)},easeOutBack(d){return(d-=1)*d*((1.70158+1)*d+1.70158)+1},easeInOutBack(d){let s=1.70158;return(d/=.5)<1?.5*(d*d*(((s*=1.525)+1)*d-s)):.5*((d-=2)*d*(((s*=1.525)+1)*d+s)+2)},easeInBounce:d=>1-z2.easeOutBounce(1-d),easeOutBounce(d){return d<1/2.75?7.5625*d*d:d<2/2.75?7.5625*(d-=1.5/2.75)*d+.75:d<2.5/2.75?7.5625*(d-=2.25/2.75)*d+.9375:7.5625*(d-=2.625/2.75)*d+.984375},easeInOutBounce:d=>d<.5?z2.easeInBounce(d*2)*.5:z2.easeOutBounce(d*2-1)*.5+.5};function wM(d){if(d&&typeof d=="object"){const s=d.toString();return s==="[object CanvasPattern]"||s==="[object CanvasGradient]"}return!1}function xP(d){return wM(d)?d:new $2(d)}function W8(d){return wM(d)?d:new $2(d).saturate(.5).darken(.1).hexString()}const Gut=["x","y","borderWidth","radius","tension"],Yut=["color","borderColor","backgroundColor"];function Kut(d){d.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),d.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:s=>s!=="onProgress"&&s!=="onComplete"&&s!=="fn"}),d.set("animations",{colors:{type:"color",properties:Yut},numbers:{type:"number",properties:Gut}}),d.describe("animations",{_fallback:"animation"}),d.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:s=>s|0}}}})}function Xut(d){d.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}const _P=new Map;function Jut(d,s){s=s||{};const C=d+JSON.stringify(s);let B=_P.get(C);return B||(B=new Intl.NumberFormat(d,s),_P.set(C,B)),B}function kM(d,s,C){return Jut(s,C).format(d)}const Qut={values(d){return Kd(d)?d:""+d},numeric(d,s,C){if(d===0)return"0";const B=this.chart.options.locale;let K,dt=d;if(C.length>1){const re=Math.max(Math.abs(C[0].value),Math.abs(C[C.length-1].value));(re<1e-4||re>1e15)&&(K="scientific"),dt=tct(d,C)}const _t=cD(Math.abs(dt)),zt=isNaN(_t)?1:Math.max(Math.min(-1*Math.floor(_t),20),0),jt={notation:K,minimumFractionDigits:zt,maximumFractionDigits:zt};return Object.assign(jt,this.options.ticks.format),kM(d,B,jt)}};function tct(d,s){let C=s.length>3?s[2].value-s[1].value:s[1].value-s[0].value;return Math.abs(C)>=1&&d!==Math.floor(d)&&(C=d-Math.floor(d)),C}var gD={formatters:Qut};function ect(d){d.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(s,C)=>C.lineWidth,tickColor:(s,C)=>C.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:gD.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),d.route("scale.ticks","color","","color"),d.route("scale.grid","color","","borderColor"),d.route("scale.border","color","","borderColor"),d.route("scale.title","color","","color"),d.describe("scale",{_fallback:!1,_scriptable:s=>!s.startsWith("before")&&!s.startsWith("after")&&s!=="callback"&&s!=="parser",_indexable:s=>s!=="borderDash"&&s!=="tickBorderDash"&&s!=="dash"}),d.describe("scales",{_fallback:"scale"}),d.describe("scale.ticks",{_scriptable:s=>s!=="backdropPadding"&&s!=="callback",_indexable:s=>s!=="backdropPadding"})}const zy=Object.create(null),zA=Object.create(null);function I2(d,s){if(!s)return d;const C=s.split(".");for(let B=0,K=C.length;BB.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(B,K)=>W8(K.backgroundColor),this.hoverBorderColor=(B,K)=>W8(K.borderColor),this.hoverColor=(B,K)=>W8(K.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(s),this.apply(C)}set(s,C){return q8(this,s,C)}get(s){return I2(this,s)}describe(s,C){return q8(zA,s,C)}override(s,C){return q8(zy,s,C)}route(s,C,B,K){const dt=I2(this,s),_t=I2(this,B),zt="_"+C;Object.defineProperties(dt,{[zt]:{value:dt[C],writable:!0},[C]:{enumerable:!0,get(){const jt=this[zt],re=_t[K];return Sc(jt)?Object.assign({},re,jt):cc(jt,re)},set(jt){this[zt]=jt}}})}apply(s){s.forEach(C=>C(this))}}var Rd=new rct({_scriptable:d=>!d.startsWith("on"),_indexable:d=>d!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[Kut,Xut,ect]);function nct(d){return!d||Nh(d.size)||Nh(d.family)?null:(d.style?d.style+" ":"")+(d.weight?d.weight+" ":"")+d.size+"px "+d.family}function bP(d,s,C,B,K){let dt=s[K];return dt||(dt=s[K]=d.measureText(K).width,C.push(K)),dt>B&&(B=dt),B}function dy(d,s,C){const B=d.currentDevicePixelRatio,K=C!==0?Math.max(C/2,.5):0;return Math.round((s-K)*B)/B+K}function wP(d,s){!s&&!d||(s=s||d.getContext("2d"),s.save(),s.resetTransform(),s.clearRect(0,0,d.width,d.height),s.restore())}function IA(d,s,C,B){vD(d,s,C,B,null)}function vD(d,s,C,B,K){let dt,_t,zt,jt,re,oe,we,tr;const fr=s.pointStyle,Mr=s.rotation,xr=s.radius;let Dr=(Mr||0)*Iut;if(fr&&typeof fr=="object"&&(dt=fr.toString(),dt==="[object HTMLImageElement]"||dt==="[object HTMLCanvasElement]")){d.save(),d.translate(C,B),d.rotate(Dr),d.drawImage(fr,-fr.width/2,-fr.height/2,fr.width,fr.height),d.restore();return}if(!(isNaN(xr)||xr<=0)){switch(d.beginPath(),fr){default:K?d.ellipse(C,B,K/2,xr,0,0,sd):d.arc(C,B,xr,0,sd),d.closePath();break;case"triangle":oe=K?K/2:xr,d.moveTo(C+Math.sin(Dr)*oe,B-Math.cos(Dr)*xr),Dr+=dP,d.lineTo(C+Math.sin(Dr)*oe,B-Math.cos(Dr)*xr),Dr+=dP,d.lineTo(C+Math.sin(Dr)*oe,B-Math.cos(Dr)*xr),d.closePath();break;case"rectRounded":re=xr*.516,jt=xr-re,_t=Math.cos(Dr+fy)*jt,we=Math.cos(Dr+fy)*(K?K/2-re:jt),zt=Math.sin(Dr+fy)*jt,tr=Math.sin(Dr+fy)*(K?K/2-re:jt),d.arc(C-we,B-zt,re,Dr-Qh,Dr-ap),d.arc(C+tr,B-_t,re,Dr-ap,Dr),d.arc(C+we,B+zt,re,Dr,Dr+ap),d.arc(C-tr,B+_t,re,Dr+ap,Dr+Qh),d.closePath();break;case"rect":if(!Mr){jt=Math.SQRT1_2*xr,oe=K?K/2:jt,d.rect(C-oe,B-jt,2*oe,2*jt);break}Dr+=fy;case"rectRot":we=Math.cos(Dr)*(K?K/2:xr),_t=Math.cos(Dr)*xr,zt=Math.sin(Dr)*xr,tr=Math.sin(Dr)*(K?K/2:xr),d.moveTo(C-we,B-zt),d.lineTo(C+tr,B-_t),d.lineTo(C+we,B+zt),d.lineTo(C-tr,B+_t),d.closePath();break;case"crossRot":Dr+=fy;case"cross":we=Math.cos(Dr)*(K?K/2:xr),_t=Math.cos(Dr)*xr,zt=Math.sin(Dr)*xr,tr=Math.sin(Dr)*(K?K/2:xr),d.moveTo(C-we,B-zt),d.lineTo(C+we,B+zt),d.moveTo(C+tr,B-_t),d.lineTo(C-tr,B+_t);break;case"star":we=Math.cos(Dr)*(K?K/2:xr),_t=Math.cos(Dr)*xr,zt=Math.sin(Dr)*xr,tr=Math.sin(Dr)*(K?K/2:xr),d.moveTo(C-we,B-zt),d.lineTo(C+we,B+zt),d.moveTo(C+tr,B-_t),d.lineTo(C-tr,B+_t),Dr+=fy,we=Math.cos(Dr)*(K?K/2:xr),_t=Math.cos(Dr)*xr,zt=Math.sin(Dr)*xr,tr=Math.sin(Dr)*(K?K/2:xr),d.moveTo(C-we,B-zt),d.lineTo(C+we,B+zt),d.moveTo(C+tr,B-_t),d.lineTo(C-tr,B+_t);break;case"line":_t=K?K/2:Math.cos(Dr)*xr,zt=Math.sin(Dr)*xr,d.moveTo(C-_t,B-zt),d.lineTo(C+_t,B+zt);break;case"dash":d.moveTo(C,B),d.lineTo(C+Math.cos(Dr)*(K?K/2:xr),B+Math.sin(Dr)*xr);break;case!1:d.closePath();break}d.fill(),s.borderWidth>0&&d.stroke()}}function X2(d,s,C){return C=C||.5,!s||d&&d.x>s.left-C&&d.xs.top-C&&d.y0&&dt.strokeColor!=="";let jt,re;for(d.save(),d.font=K.string,oct(d,dt),jt=0;jt<_t.length;++jt)re=_t[jt],dt.backdrop&&lct(d,dt.backdrop),zt&&(dt.strokeColor&&(d.strokeStyle=dt.strokeColor),Nh(dt.strokeWidth)||(d.lineWidth=dt.strokeWidth),d.strokeText(re,C,B,dt.maxWidth)),d.fillText(re,C,B,dt.maxWidth),sct(d,C,B,re,dt),B+=Number(K.lineHeight);d.restore()}function k4(d,s){const{x:C,y:B,w:K,h:dt,radius:_t}=s;d.arc(C+_t.topLeft,B+_t.topLeft,_t.topLeft,1.5*Qh,Qh,!0),d.lineTo(C,B+dt-_t.bottomLeft),d.arc(C+_t.bottomLeft,B+dt-_t.bottomLeft,_t.bottomLeft,Qh,ap,!0),d.lineTo(C+K-_t.bottomRight,B+dt),d.arc(C+K-_t.bottomRight,B+dt-_t.bottomRight,_t.bottomRight,ap,0,!0),d.lineTo(C+K,B+_t.topRight),d.arc(C+K-_t.topRight,B+_t.topRight,_t.topRight,0,-ap,!0),d.lineTo(C+_t.topLeft,B)}const uct=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,cct=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function hct(d,s){const C=(""+d).match(uct);if(!C||C[1]==="normal")return s*1.2;switch(d=+C[2],C[3]){case"px":return d;case"%":d/=100;break}return s*d}const fct=d=>+d||0;function TM(d,s){const C={},B=Sc(s),K=B?Object.keys(s):s,dt=Sc(d)?B?_t=>cc(d[_t],d[s[_t]]):_t=>d[_t]:()=>d;for(const _t of K)C[_t]=fct(dt(_t));return C}function yD(d){return TM(d,{top:"y",right:"x",bottom:"y",left:"x"})}function d_(d){return TM(d,["topLeft","topRight","bottomLeft","bottomRight"])}function fm(d){const s=yD(d);return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function Qp(d,s){d=d||{},s=s||Rd.font;let C=cc(d.size,s.size);typeof C=="string"&&(C=parseInt(C,10));let B=cc(d.style,s.style);B&&!(""+B).match(cct)&&(console.warn('Invalid font style specified: "'+B+'"'),B=void 0);const K={family:cc(d.family,s.family),lineHeight:hct(cc(d.lineHeight,s.lineHeight),C),size:C,style:B,weight:cc(d.weight,s.weight),string:""};return K.string=nct(K),K}function j5(d,s,C,B){let K,dt,_t;for(K=0,dt=d.length;KC&&zt===0?0:zt+jt;return{min:_t(B,-Math.abs(dt)),max:_t(K,dt)}}function Dy(d,s){return Object.assign(Object.create(d),s)}function AM(d,s=[""],C,B,K=()=>d[0]){const dt=C||d;typeof B>"u"&&(B=wD("_fallback",d));const _t={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:d,_rootScopes:dt,_fallback:B,_getTarget:K,override:zt=>AM([zt,...d],s,dt,B)};return new Proxy(_t,{deleteProperty(zt,jt){return delete zt[jt],delete zt._keys,delete d[0][jt],!0},get(zt,jt){return _D(zt,jt,()=>bct(jt,s,d,zt))},getOwnPropertyDescriptor(zt,jt){return Reflect.getOwnPropertyDescriptor(zt._scopes[0],jt)},getPrototypeOf(){return Reflect.getPrototypeOf(d[0])},has(zt,jt){return TP(zt).includes(jt)},ownKeys(zt){return TP(zt)},set(zt,jt,re){const oe=zt._storage||(zt._storage=K());return zt[jt]=oe[jt]=re,delete zt._keys,!0}})}function b_(d,s,C,B){const K={_cacheable:!1,_proxy:d,_context:s,_subProxy:C,_stack:new Set,_descriptors:xD(d,B),setContext:dt=>b_(d,dt,C,B),override:dt=>b_(d.override(dt),s,C,B)};return new Proxy(K,{deleteProperty(dt,_t){return delete dt[_t],delete d[_t],!0},get(dt,_t,zt){return _D(dt,_t,()=>mct(dt,_t,zt))},getOwnPropertyDescriptor(dt,_t){return dt._descriptors.allKeys?Reflect.has(d,_t)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(d,_t)},getPrototypeOf(){return Reflect.getPrototypeOf(d)},has(dt,_t){return Reflect.has(d,_t)},ownKeys(){return Reflect.ownKeys(d)},set(dt,_t,zt){return d[_t]=zt,delete dt[_t],!0}})}function xD(d,s={scriptable:!0,indexable:!0}){const{_scriptable:C=s.scriptable,_indexable:B=s.indexable,_allKeys:K=s.allKeys}=d;return{allKeys:K,scriptable:C,indexable:B,isScriptable:b1(C)?C:()=>C,isIndexable:b1(B)?B:()=>B}}const pct=(d,s)=>d?d+xM(s):s,MM=(d,s)=>Sc(s)&&d!=="adapters"&&(Object.getPrototypeOf(s)===null||s.constructor===Object);function _D(d,s,C){if(Object.prototype.hasOwnProperty.call(d,s)||s==="constructor")return d[s];const B=C();return d[s]=B,B}function mct(d,s,C){const{_proxy:B,_context:K,_subProxy:dt,_descriptors:_t}=d;let zt=B[s];return b1(zt)&&_t.isScriptable(s)&&(zt=gct(s,zt,d,C)),Kd(zt)&&zt.length&&(zt=vct(s,zt,d,_t.isIndexable)),MM(s,zt)&&(zt=b_(zt,K,dt&&dt[s],_t)),zt}function gct(d,s,C,B){const{_proxy:K,_context:dt,_subProxy:_t,_stack:zt}=C;if(zt.has(d))throw new Error("Recursion detected: "+Array.from(zt).join("->")+"->"+d);zt.add(d);let jt=s(dt,_t||B);return zt.delete(d),MM(d,jt)&&(jt=SM(K._scopes,K,d,jt)),jt}function vct(d,s,C,B){const{_proxy:K,_context:dt,_subProxy:_t,_descriptors:zt}=C;if(typeof dt.index<"u"&&B(d))return s[dt.index%s.length];if(Sc(s[0])){const jt=s,re=K._scopes.filter(oe=>oe!==jt);s=[];for(const oe of jt){const we=SM(re,K,d,oe);s.push(b_(we,dt,_t&&_t[d],zt))}}return s}function bD(d,s,C){return b1(d)?d(s,C):d}const yct=(d,s)=>d===!0?s:typeof d=="string"?Py(s,d):void 0;function xct(d,s,C,B,K){for(const dt of s){const _t=yct(C,dt);if(_t){d.add(_t);const zt=bD(_t._fallback,C,K);if(typeof zt<"u"&&zt!==C&&zt!==B)return zt}else if(_t===!1&&typeof B<"u"&&C!==B)return null}return!1}function SM(d,s,C,B){const K=s._rootScopes,dt=bD(s._fallback,C,B),_t=[...d,...K],zt=new Set;zt.add(B);let jt=kP(zt,_t,C,dt||C,B);return jt===null||typeof dt<"u"&&dt!==C&&(jt=kP(zt,_t,dt,jt,B),jt===null)?!1:AM(Array.from(zt),[""],K,dt,()=>_ct(s,C,B))}function kP(d,s,C,B,K){for(;C;)C=xct(d,s,C,B,K);return C}function _ct(d,s,C){const B=d._getTarget();s in B||(B[s]={});const K=B[s];return Kd(K)&&Sc(C)?C:K||{}}function bct(d,s,C,B){let K;for(const dt of s)if(K=wD(pct(dt,d),C),typeof K<"u")return MM(d,K)?SM(C,B,d,K):K}function wD(d,s){for(const C of s){if(!C)continue;const B=C[d];if(typeof B<"u")return B}}function TP(d){let s=d._keys;return s||(s=d._keys=wct(d._scopes)),s}function wct(d){const s=new Set;for(const C of d)for(const B of Object.keys(C).filter(K=>!K.startsWith("_")))s.add(B);return Array.from(s)}const kct=Number.EPSILON||1e-14,w_=(d,s)=>sd==="x"?"y":"x";function Tct(d,s,C,B){const K=d.skip?s:d,dt=s,_t=C.skip?s:C,zt=PA(dt,K),jt=PA(_t,dt);let re=zt/(zt+jt),oe=jt/(zt+jt);re=isNaN(re)?0:re,oe=isNaN(oe)?0:oe;const we=B*re,tr=B*oe;return{previous:{x:dt.x-we*(_t.x-K.x),y:dt.y-we*(_t.y-K.y)},next:{x:dt.x+tr*(_t.x-K.x),y:dt.y+tr*(_t.y-K.y)}}}function Act(d,s,C){const B=d.length;let K,dt,_t,zt,jt,re=w_(d,0);for(let oe=0;oe!re.skip)),s.cubicInterpolationMode==="monotone")Sct(d,K);else{let re=B?d[d.length-1]:d[0];for(dt=0,_t=d.length;dt<_t;++dt)zt=d[dt],jt=Tct(re,zt,d[Math.min(dt+1,_t-(B?0:1))%_t],s.tension),zt.cp1x=jt.previous.x,zt.cp1y=jt.previous.y,zt.cp2x=jt.next.x,zt.cp2y=jt.next.y,re=zt}s.capBezierPoints&&Cct(d,C)}function CM(){return typeof window<"u"&&typeof document<"u"}function EM(d){let s=d.parentNode;return s&&s.toString()==="[object ShadowRoot]"&&(s=s.host),s}function T4(d,s,C){let B;return typeof d=="string"?(B=parseInt(d,10),d.indexOf("%")!==-1&&(B=B/100*s.parentNode[C])):B=d,B}const t6=d=>d.ownerDocument.defaultView.getComputedStyle(d,null);function Lct(d,s){return t6(d).getPropertyValue(s)}const Pct=["top","right","bottom","left"];function Sy(d,s,C){const B={};C=C?"-"+C:"";for(let K=0;K<4;K++){const dt=Pct[K];B[dt]=parseFloat(d[s+"-"+dt+C])||0}return B.width=B.left+B.right,B.height=B.top+B.bottom,B}const zct=(d,s,C)=>(d>0||s>0)&&(!C||!C.shadowRoot);function Ict(d,s){const C=d.touches,B=C&&C.length?C[0]:d,{offsetX:K,offsetY:dt}=B;let _t=!1,zt,jt;if(zct(K,dt,d.target))zt=K,jt=dt;else{const re=s.getBoundingClientRect();zt=B.clientX-re.left,jt=B.clientY-re.top,_t=!0}return{x:zt,y:jt,box:_t}}function gy(d,s){if("native"in d)return d;const{canvas:C,currentDevicePixelRatio:B}=s,K=t6(C),dt=K.boxSizing==="border-box",_t=Sy(K,"padding"),zt=Sy(K,"border","width"),{x:jt,y:re,box:oe}=Ict(d,C),we=_t.left+(oe&&zt.left),tr=_t.top+(oe&&zt.top);let{width:fr,height:Mr}=s;return dt&&(fr-=_t.width+zt.width,Mr-=_t.height+zt.height),{x:Math.round((jt-we)/fr*C.width/B),y:Math.round((re-tr)/Mr*C.height/B)}}function Oct(d,s,C){let B,K;if(s===void 0||C===void 0){const dt=d&&EM(d);if(!dt)s=d.clientWidth,C=d.clientHeight;else{const _t=dt.getBoundingClientRect(),zt=t6(dt),jt=Sy(zt,"border","width"),re=Sy(zt,"padding");s=_t.width-re.width-jt.width,C=_t.height-re.height-jt.height,B=T4(zt.maxWidth,dt,"clientWidth"),K=T4(zt.maxHeight,dt,"clientHeight")}}return{width:s,height:C,maxWidth:B||w4,maxHeight:K||w4}}const d1=d=>Math.round(d*10)/10;function Dct(d,s,C,B){const K=t6(d),dt=Sy(K,"margin"),_t=T4(K.maxWidth,d,"clientWidth")||w4,zt=T4(K.maxHeight,d,"clientHeight")||w4,jt=Oct(d,s,C);let{width:re,height:oe}=jt;if(K.boxSizing==="content-box"){const tr=Sy(K,"border","width"),fr=Sy(K,"padding");re-=fr.width+tr.width,oe-=fr.height+tr.height}return re=Math.max(0,re-dt.width),oe=Math.max(0,B?re/B:oe-dt.height),re=d1(Math.min(re,_t,jt.maxWidth)),oe=d1(Math.min(oe,zt,jt.maxHeight)),re&&!oe&&(oe=d1(re/2)),(s!==void 0||C!==void 0)&&B&&jt.height&&oe>jt.height&&(oe=jt.height,re=d1(Math.floor(oe*B))),{width:re,height:oe}}function AP(d,s,C){const B=s||1,K=d1(d.height*B),dt=d1(d.width*B);d.height=d1(d.height),d.width=d1(d.width);const _t=d.canvas;return _t.style&&(C||!_t.style.height&&!_t.style.width)&&(_t.style.height=`${d.height}px`,_t.style.width=`${d.width}px`),d.currentDevicePixelRatio!==B||_t.height!==K||_t.width!==dt?(d.currentDevicePixelRatio=B,_t.height=K,_t.width=dt,d.ctx.setTransform(B,0,0,B,0,0),!0):!1}const Fct=function(){let d=!1;try{const s={get passive(){return d=!0,!1}};CM()&&(window.addEventListener("test",null,s),window.removeEventListener("test",null,s))}catch{}return d}();function MP(d,s){const C=Lct(d,s),B=C&&C.match(/^(\d+)(\.\d+)?px$/);return B?+B[1]:void 0}function vy(d,s,C,B){return{x:d.x+C*(s.x-d.x),y:d.y+C*(s.y-d.y)}}function Rct(d,s,C,B){return{x:d.x+C*(s.x-d.x),y:B==="middle"?C<.5?d.y:s.y:B==="after"?C<1?d.y:s.y:C>0?s.y:d.y}}function Bct(d,s,C,B){const K={x:d.cp2x,y:d.cp2y},dt={x:s.cp1x,y:s.cp1y},_t=vy(d,K,C),zt=vy(K,dt,C),jt=vy(dt,s,C),re=vy(_t,zt,C),oe=vy(zt,jt,C);return vy(re,oe,C)}const Nct=function(d,s){return{x(C){return d+d+s-C},setWidth(C){s=C},textAlign(C){return C==="center"?C:C==="right"?"left":"right"},xPlus(C,B){return C-B},leftForLtr(C,B){return C-B}}},jct=function(){return{x(d){return d},setWidth(d){},textAlign(d){return d},xPlus(d,s){return d+s},leftForLtr(d,s){return d}}};function p_(d,s,C){return d?Nct(s,C):jct()}function TD(d,s){let C,B;(s==="ltr"||s==="rtl")&&(C=d.canvas.style,B=[C.getPropertyValue("direction"),C.getPropertyPriority("direction")],C.setProperty("direction",s,"important"),d.prevTextDirection=B)}function AD(d,s){s!==void 0&&(delete d.prevTextDirection,d.canvas.style.setProperty("direction",s[0],s[1]))}function MD(d){return d==="angle"?{between:K2,compare:Nut,normalize:$0}:{between:av,compare:(s,C)=>s-C,normalize:s=>s}}function SP({start:d,end:s,count:C,loop:B,style:K}){return{start:d%C,end:s%C,loop:B&&(s-d+1)%C===0,style:K}}function Uct(d,s,C){const{property:B,start:K,end:dt}=C,{between:_t,normalize:zt}=MD(B),jt=s.length;let{start:re,end:oe,loop:we}=d,tr,fr;if(we){for(re+=jt,oe+=jt,tr=0,fr=jt;trjt(K,on,hn)&&zt(K,on)!==0,Wn=()=>zt(dt,hn)===0||jt(dt,on,hn),ei=()=>xr||Qn(),Ri=()=>!xr||Wn();for(let qi=oe,nn=oe;qi<=we;++qi)Dt=s[qi%_t],!Dt.skip&&(hn=re(Dt[B]),hn!==on&&(xr=jt(hn,K,dt),Dr===null&&ei()&&(Dr=zt(hn,K)===0?qi:nn),Dr!==null&&Ri()&&(Mr.push(SP({start:Dr,end:qi,loop:tr,count:_t,style:fr})),Dr=null),nn=qi,on=hn));return Dr!==null&&Mr.push(SP({start:Dr,end:we,loop:tr,count:_t,style:fr})),Mr}function CD(d,s){const C=[],B=d.segments;for(let K=0;KK&&d[dt%s].skip;)dt--;return dt%=s,{start:K,end:dt}}function Hct(d,s,C,B){const K=d.length,dt=[];let _t=s,zt=d[s],jt;for(jt=s+1;jt<=C;++jt){const re=d[jt%K];re.skip||re.stop?zt.skip||(B=!1,dt.push({start:s%K,end:(jt-1)%K,loop:B}),s=_t=re.stop?jt:null):(_t=jt,zt.skip&&(s=jt)),zt=re}return _t!==null&&dt.push({start:s%K,end:_t%K,loop:B}),dt}function Wct(d,s){const C=d.points,B=d.options.spanGaps,K=C.length;if(!K)return[];const dt=!!d._loop,{start:_t,end:zt}=Vct(C,K,dt,B);if(B===!0)return CP(d,[{start:_t,end:zt,loop:dt}],C,s);const jt=zt<_t?zt+K:zt,re=!!d._fullLoop&&_t===0&&zt===K-1;return CP(d,Hct(C,_t,jt,re),C,s)}function CP(d,s,C,B){return!B||!B.setContext||!C?s:qct(d,s,C,B)}function qct(d,s,C,B){const K=d._chart.getContext(),dt=EP(d.options),{_datasetIndex:_t,options:{spanGaps:zt}}=d,jt=C.length,re=[];let oe=dt,we=s[0].start,tr=we;function fr(Mr,xr,Dr,hn){const Dt=zt?-1:1;if(Mr!==xr){for(Mr+=jt;C[Mr%jt].skip;)Mr-=Dt;for(;C[xr%jt].skip;)xr+=Dt;Mr%jt!==xr%jt&&(re.push({start:Mr%jt,end:xr%jt,loop:Dr,style:hn}),oe=hn,we=xr%jt)}}for(const Mr of s){we=zt?we:Mr.start;let xr=C[we%jt],Dr;for(tr=we+1;tr<=Mr.end;tr++){const hn=C[tr%jt];Dr=EP(B.setContext(Dy(K,{type:"segment",p0:xr,p1:hn,p0DataIndex:(tr-1)%jt,p1DataIndex:tr%jt,datasetIndex:_t}))),$ct(Dr,oe)&&fr(we,tr-1,Mr.loop,oe),xr=hn,oe=Dr}we{let d=0;return()=>d++})();function jh(d){return d==null}function Xd(d){if(Array.isArray&&Array.isArray(d))return!0;const o=Object.prototype.toString.call(d);return o.slice(0,7)==="[object"&&o.slice(-6)==="Array]"}function Lc(d){return d!==null&&Object.prototype.toString.call(d)==="[object Object]"}function r0(d){return(typeof d=="number"||d instanceof Number)&&isFinite(+d)}function sg(d,o){return r0(d)?d:o}function fc(d,o){return typeof d>"u"?o:d}const But=(d,o)=>typeof d=="string"&&d.endsWith("%")?parseFloat(d)/100:+d/o,lD=(d,o)=>typeof d=="string"&&d.endsWith("%")?parseFloat(d)/100*o:+d;function Rf(d,o,C){if(d&&typeof d.call=="function")return d.apply(C,o)}function Qh(d,o,C,B){let Y,dt,xt;if(Xd(d))for(dt=d.length,Y=0;Yd,x:d=>d.x,y:d=>d.y};function Uut(d){const o=d.split("."),C=[];let B="";for(const Y of o)B+=Y,B.endsWith("\\")?B=B.slice(0,-1)+".":(C.push(B),B="");return C}function Vut(d){const o=Uut(d);return C=>{for(const B of o){if(B==="")break;C=C&&C[B]}return C}}function zy(d,o){return(dP[o]||(dP[o]=Vut(o)))(d)}function b7(d){return d.charAt(0).toUpperCase()+d.slice(1)}const K2=d=>typeof d<"u",k1=d=>typeof d=="function",pP=(d,o)=>{if(d.size!==o.size)return!1;for(const C of d)if(!o.has(C))return!1;return!0};function Hut(d){return d.type==="mouseup"||d.type==="click"||d.type==="contextmenu"}const tf=Math.PI,ld=2*tf,Wut=ld+tf,A4=Number.POSITIVE_INFINITY,qut=tf/180,op=tf/2,py=tf/4,mP=tf*2/3,cD=Math.log10,vg=Math.sign;function O2(d,o,C){return Math.abs(d-o)Y-dt).pop(),o}function Zut(d){return typeof d=="symbol"||typeof d=="object"&&d!==null&&!(Symbol.toPrimitive in d||"toString"in d||"valueOf"in d)}function X2(d){return!Zut(d)&&!isNaN(parseFloat(d))&&isFinite(d)}function Gut(d,o){const C=Math.round(d);return C-o<=d&&C+o>=d}function Yut(d,o,C){let B,Y,dt;for(B=0,Y=d.length;Bjt&&re=Math.min(o,C)-B&&d<=Math.max(o,C)+B}function w7(d,o,C){C=C||(xt=>d[xt]1;)dt=Y+B>>1,C(dt)?Y=dt:B=dt;return{lo:Y,hi:B}}const Ay=(d,o,C,B)=>w7(d,C,B?Y=>{const dt=d[Y][o];return dtd[Y][o]w7(d,C,B=>d[B][o]>=C);function tct(d,o,C){let B=0,Y=d.length;for(;BB&&d[Y-1]>C;)Y--;return B>0||Y{const B="_onData"+b7(C),Y=d[C];Object.defineProperty(d,C,{configurable:!0,enumerable:!1,value(...dt){const xt=Y.apply(this,dt);return d._chartjs.listeners.forEach(Ct=>{typeof Ct[B]=="function"&&Ct[B](...dt)}),xt}})})}function yP(d,o){const C=d._chartjs;if(!C)return;const B=C.listeners,Y=B.indexOf(o);Y!==-1&&B.splice(Y,1),!(B.length>0)&&(fD.forEach(dt=>{delete d[dt]}),delete d._chartjs)}function dD(d){const o=new Set(d);return o.size===d.length?d:Array.from(o)}const pD=function(){return typeof window>"u"?function(d){return d()}:window.requestAnimationFrame}();function mD(d,o){let C=[],B=!1;return function(...Y){C=Y,B||(B=!0,pD.call(window,()=>{B=!1,d.apply(o,C)}))}}function rct(d,o){let C;return function(...B){return o?(clearTimeout(C),C=setTimeout(d,o,B)):d.apply(this,B),o}}const k7=d=>d==="start"?"left":d==="end"?"right":"center",Gp=(d,o,C)=>d==="start"?o:d==="end"?C:(o+C)/2,nct=(d,o,C,B)=>d===(B?"left":"right")?C:d==="center"?(o+C)/2:o;function ict(d,o,C){const B=o.length;let Y=0,dt=B;if(d._sorted){const{iScale:xt,vScale:Ct,_parsed:jt}=d,re=d.dataset&&d.dataset.options?d.dataset.options.spanGaps:null,ae=xt.axis,{min:we,max:Xe,minDefined:fr,maxDefined:kr}=xt.getUserBounds();if(fr){if(Y=Math.min(Ay(jt,ae,we).lo,C?B:Ay(o,ae,xt.getPixelForValue(we)).lo),re){const mr=jt.slice(0,Y+1).reverse().findIndex(Cr=>!jh(Cr[Ct.axis]));Y-=Math.max(0,mr)}Y=t0(Y,0,B-1)}if(kr){let mr=Math.max(Ay(jt,xt.axis,Xe,!0).hi+1,C?0:Ay(o,ae,xt.getPixelForValue(Xe),!0).hi+1);if(re){const Cr=jt.slice(mr-1).findIndex(Kr=>!jh(Kr[Ct.axis]));mr+=Math.max(0,Cr)}dt=t0(mr,Y,B)-Y}else dt=B-Y}return{start:Y,count:dt}}function act(d){const{xScale:o,yScale:C,_scaleRanges:B}=d,Y={xmin:o.min,xmax:o.max,ymin:C.min,ymax:C.max};if(!B)return d._scaleRanges=Y,!0;const dt=B.xmin!==o.min||B.xmax!==o.max||B.ymin!==C.min||B.ymax!==C.max;return Object.assign(B,Y),dt}const U5=d=>d===0||d===1,xP=(d,o,C)=>-(Math.pow(2,10*(d-=1))*Math.sin((d-o)*ld/C)),_P=(d,o,C)=>Math.pow(2,-10*d)*Math.sin((d-o)*ld/C)+1,D2={linear:d=>d,easeInQuad:d=>d*d,easeOutQuad:d=>-d*(d-2),easeInOutQuad:d=>(d/=.5)<1?.5*d*d:-.5*(--d*(d-2)-1),easeInCubic:d=>d*d*d,easeOutCubic:d=>(d-=1)*d*d+1,easeInOutCubic:d=>(d/=.5)<1?.5*d*d*d:.5*((d-=2)*d*d+2),easeInQuart:d=>d*d*d*d,easeOutQuart:d=>-((d-=1)*d*d*d-1),easeInOutQuart:d=>(d/=.5)<1?.5*d*d*d*d:-.5*((d-=2)*d*d*d-2),easeInQuint:d=>d*d*d*d*d,easeOutQuint:d=>(d-=1)*d*d*d*d+1,easeInOutQuint:d=>(d/=.5)<1?.5*d*d*d*d*d:.5*((d-=2)*d*d*d*d+2),easeInSine:d=>-Math.cos(d*op)+1,easeOutSine:d=>Math.sin(d*op),easeInOutSine:d=>-.5*(Math.cos(tf*d)-1),easeInExpo:d=>d===0?0:Math.pow(2,10*(d-1)),easeOutExpo:d=>d===1?1:-Math.pow(2,-10*d)+1,easeInOutExpo:d=>U5(d)?d:d<.5?.5*Math.pow(2,10*(d*2-1)):.5*(-Math.pow(2,-10*(d*2-1))+2),easeInCirc:d=>d>=1?d:-(Math.sqrt(1-d*d)-1),easeOutCirc:d=>Math.sqrt(1-(d-=1)*d),easeInOutCirc:d=>(d/=.5)<1?-.5*(Math.sqrt(1-d*d)-1):.5*(Math.sqrt(1-(d-=2)*d)+1),easeInElastic:d=>U5(d)?d:xP(d,.075,.3),easeOutElastic:d=>U5(d)?d:_P(d,.075,.3),easeInOutElastic(d){return U5(d)?d:d<.5?.5*xP(d*2,.1125,.45):.5+.5*_P(d*2-1,.1125,.45)},easeInBack(d){return d*d*((1.70158+1)*d-1.70158)},easeOutBack(d){return(d-=1)*d*((1.70158+1)*d+1.70158)+1},easeInOutBack(d){let o=1.70158;return(d/=.5)<1?.5*(d*d*(((o*=1.525)+1)*d-o)):.5*((d-=2)*d*(((o*=1.525)+1)*d+o)+2)},easeInBounce:d=>1-D2.easeOutBounce(1-d),easeOutBounce(d){return d<1/2.75?7.5625*d*d:d<2/2.75?7.5625*(d-=1.5/2.75)*d+.75:d<2.5/2.75?7.5625*(d-=2.25/2.75)*d+.9375:7.5625*(d-=2.625/2.75)*d+.984375},easeInOutBounce:d=>d<.5?D2.easeInBounce(d*2)*.5:D2.easeOutBounce(d*2-1)*.5+.5};function T7(d){if(d&&typeof d=="object"){const o=d.toString();return o==="[object CanvasPattern]"||o==="[object CanvasGradient]"}return!1}function bP(d){return T7(d)?d:new G2(d)}function $8(d){return T7(d)?d:new G2(d).saturate(.5).darken(.1).hexString()}const oct=["x","y","borderWidth","radius","tension"],sct=["color","borderColor","backgroundColor"];function lct(d){d.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),d.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:o=>o!=="onProgress"&&o!=="onComplete"&&o!=="fn"}),d.set("animations",{colors:{type:"color",properties:sct},numbers:{type:"number",properties:oct}}),d.describe("animations",{_fallback:"animation"}),d.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:o=>o|0}}}})}function uct(d){d.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}const wP=new Map;function cct(d,o){o=o||{};const C=d+JSON.stringify(o);let B=wP.get(C);return B||(B=new Intl.NumberFormat(d,o),wP.set(C,B)),B}function A7(d,o,C){return cct(o,C).format(d)}const hct={values(d){return Xd(d)?d:""+d},numeric(d,o,C){if(d===0)return"0";const B=this.chart.options.locale;let Y,dt=d;if(C.length>1){const re=Math.max(Math.abs(C[0].value),Math.abs(C[C.length-1].value));(re<1e-4||re>1e15)&&(Y="scientific"),dt=fct(d,C)}const xt=cD(Math.abs(dt)),Ct=isNaN(xt)?1:Math.max(Math.min(-1*Math.floor(xt),20),0),jt={notation:Y,minimumFractionDigits:Ct,maximumFractionDigits:Ct};return Object.assign(jt,this.options.ticks.format),A7(d,B,jt)}};function fct(d,o){let C=o.length>3?o[2].value-o[1].value:o[1].value-o[0].value;return Math.abs(C)>=1&&d!==Math.floor(d)&&(C=d-Math.floor(d)),C}var gD={formatters:hct};function dct(d){d.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(o,C)=>C.lineWidth,tickColor:(o,C)=>C.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:gD.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),d.route("scale.ticks","color","","color"),d.route("scale.grid","color","","borderColor"),d.route("scale.border","color","","borderColor"),d.route("scale.title","color","","color"),d.describe("scale",{_fallback:!1,_scriptable:o=>!o.startsWith("before")&&!o.startsWith("after")&&o!=="callback"&&o!=="parser",_indexable:o=>o!=="borderDash"&&o!=="tickBorderDash"&&o!=="dash"}),d.describe("scales",{_fallback:"scale"}),d.describe("scale.ticks",{_scriptable:o=>o!=="backdropPadding"&&o!=="callback",_indexable:o=>o!=="backdropPadding"})}const Oy=Object.create(null),OA=Object.create(null);function F2(d,o){if(!o)return d;const C=o.split(".");for(let B=0,Y=C.length;BB.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(B,Y)=>$8(Y.backgroundColor),this.hoverBorderColor=(B,Y)=>$8(Y.borderColor),this.hoverColor=(B,Y)=>$8(Y.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(o),this.apply(C)}set(o,C){return Z8(this,o,C)}get(o){return F2(this,o)}describe(o,C){return Z8(OA,o,C)}override(o,C){return Z8(Oy,o,C)}route(o,C,B,Y){const dt=F2(this,o),xt=F2(this,B),Ct="_"+C;Object.defineProperties(dt,{[Ct]:{value:dt[C],writable:!0},[C]:{enumerable:!0,get(){const jt=this[Ct],re=xt[Y];return Lc(jt)?Object.assign({},re,jt):fc(jt,re)},set(jt){this[Ct]=jt}}})}apply(o){o.forEach(C=>C(this))}}var Bd=new pct({_scriptable:d=>!d.startsWith("on"),_indexable:d=>d!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[lct,uct,dct]);function mct(d){return!d||jh(d.size)||jh(d.family)?null:(d.style?d.style+" ":"")+(d.weight?d.weight+" ":"")+d.size+"px "+d.family}function kP(d,o,C,B,Y){let dt=o[Y];return dt||(dt=o[Y]=d.measureText(Y).width,C.push(Y)),dt>B&&(B=dt),B}function my(d,o,C){const B=d.currentDevicePixelRatio,Y=C!==0?Math.max(C/2,.5):0;return Math.round((o-Y)*B)/B+Y}function TP(d,o){!o&&!d||(o=o||d.getContext("2d"),o.save(),o.resetTransform(),o.clearRect(0,0,d.width,d.height),o.restore())}function DA(d,o,C,B){vD(d,o,C,B,null)}function vD(d,o,C,B,Y){let dt,xt,Ct,jt,re,ae,we,Xe;const fr=o.pointStyle,kr=o.rotation,mr=o.radius;let Cr=(kr||0)*qut;if(fr&&typeof fr=="object"&&(dt=fr.toString(),dt==="[object HTMLImageElement]"||dt==="[object HTMLCanvasElement]")){d.save(),d.translate(C,B),d.rotate(Cr),d.drawImage(fr,-fr.width/2,-fr.height/2,fr.width,fr.height),d.restore();return}if(!(isNaN(mr)||mr<=0)){switch(d.beginPath(),fr){default:Y?d.ellipse(C,B,Y/2,mr,0,0,ld):d.arc(C,B,mr,0,ld),d.closePath();break;case"triangle":ae=Y?Y/2:mr,d.moveTo(C+Math.sin(Cr)*ae,B-Math.cos(Cr)*mr),Cr+=mP,d.lineTo(C+Math.sin(Cr)*ae,B-Math.cos(Cr)*mr),Cr+=mP,d.lineTo(C+Math.sin(Cr)*ae,B-Math.cos(Cr)*mr),d.closePath();break;case"rectRounded":re=mr*.516,jt=mr-re,xt=Math.cos(Cr+py)*jt,we=Math.cos(Cr+py)*(Y?Y/2-re:jt),Ct=Math.sin(Cr+py)*jt,Xe=Math.sin(Cr+py)*(Y?Y/2-re:jt),d.arc(C-we,B-Ct,re,Cr-tf,Cr-op),d.arc(C+Xe,B-xt,re,Cr-op,Cr),d.arc(C+we,B+Ct,re,Cr,Cr+op),d.arc(C-Xe,B+xt,re,Cr+op,Cr+tf),d.closePath();break;case"rect":if(!kr){jt=Math.SQRT1_2*mr,ae=Y?Y/2:jt,d.rect(C-ae,B-jt,2*ae,2*jt);break}Cr+=py;case"rectRot":we=Math.cos(Cr)*(Y?Y/2:mr),xt=Math.cos(Cr)*mr,Ct=Math.sin(Cr)*mr,Xe=Math.sin(Cr)*(Y?Y/2:mr),d.moveTo(C-we,B-Ct),d.lineTo(C+Xe,B-xt),d.lineTo(C+we,B+Ct),d.lineTo(C-Xe,B+xt),d.closePath();break;case"crossRot":Cr+=py;case"cross":we=Math.cos(Cr)*(Y?Y/2:mr),xt=Math.cos(Cr)*mr,Ct=Math.sin(Cr)*mr,Xe=Math.sin(Cr)*(Y?Y/2:mr),d.moveTo(C-we,B-Ct),d.lineTo(C+we,B+Ct),d.moveTo(C+Xe,B-xt),d.lineTo(C-Xe,B+xt);break;case"star":we=Math.cos(Cr)*(Y?Y/2:mr),xt=Math.cos(Cr)*mr,Ct=Math.sin(Cr)*mr,Xe=Math.sin(Cr)*(Y?Y/2:mr),d.moveTo(C-we,B-Ct),d.lineTo(C+we,B+Ct),d.moveTo(C+Xe,B-xt),d.lineTo(C-Xe,B+xt),Cr+=py,we=Math.cos(Cr)*(Y?Y/2:mr),xt=Math.cos(Cr)*mr,Ct=Math.sin(Cr)*mr,Xe=Math.sin(Cr)*(Y?Y/2:mr),d.moveTo(C-we,B-Ct),d.lineTo(C+we,B+Ct),d.moveTo(C+Xe,B-xt),d.lineTo(C-Xe,B+xt);break;case"line":xt=Y?Y/2:Math.cos(Cr)*mr,Ct=Math.sin(Cr)*mr,d.moveTo(C-xt,B-Ct),d.lineTo(C+xt,B+Ct);break;case"dash":d.moveTo(C,B),d.lineTo(C+Math.cos(Cr)*(Y?Y/2:mr),B+Math.sin(Cr)*mr);break;case!1:d.closePath();break}d.fill(),o.borderWidth>0&&d.stroke()}}function Q2(d,o,C){return C=C||.5,!o||d&&d.x>o.left-C&&d.xo.top-C&&d.y0&&dt.strokeColor!=="";let jt,re;for(d.save(),d.font=Y.string,yct(d,dt),jt=0;jt