Files
pyMC_Repeater/repeater/web/html/assets/Statistics-CdCqGf-R.js
T
2026-04-20 15:41:27 +01:00

1 line
19 KiB
JavaScript

import{r as e}from"./chunk-DECur_0Z.js";import{E as t,H as n,I as r,S as i,W as a,b as o,dt as s,f as c,g as l,j as u,k as d,l as f,m as p,o as m,r as h,s as g,u as _,ut as ee,w as v,x as te,z as y}from"./runtime-core.esm-bundler-IofF4kUm.js";import{t as b}from"./api-DGrRo_Ft.js";import{t as ne}from"./packets-BgkeSYWF.js";import{t as x}from"./_plugin-vue_export-helper-V-yks4gF.js";import{a as re,d as ie}from"./index-COnQNCNU.js";import{t as S}from"./plotly.min-Bnm7le34.js";import{n as ae,t as oe}from"./preferences-N3Pls1rF.js";import{_ as se,a as C,c as ce,d as le,f as ue,g as de,h as fe,i as pe,l as me,m as he,n as ge,o as _e,r as ve,s as ye,t as be,u as xe}from"./chart-DdrINt9G.js";import{t as w}from"./chartjs-adapter-date-fns.esm-CONKmChq.js";var T=e(S(),1),Se={class:`p-3 sm:p-6 space-y-4 sm:space-y-6`},Ce={class:`flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3`},we={class:`flex items-center gap-2 sm:gap-3`},Te=[`value`],Ee={class:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4`},De={class:`glass-card rounded-[15px] p-3 sm:p-6`},Oe={class:`relative h-40 sm:h-48 rounded-lg p-2 sm:p-4`},ke={key:0,class:`absolute inset-0 flex items-center justify-center bg-white/50 dark:bg-white/5 backdrop-blur-xs z-20`},Ae={key:1,class:`absolute inset-0 flex items-center justify-center bg-white/50 dark:bg-white/5 z-20`},je={class:`grid grid-cols-1 lg:grid-cols-2 gap-4 sm:gap-6 items-stretch`},Me={class:`glass-card rounded-[15px] p-3 sm:p-6 flex flex-col`},Ne={class:`relative flex-1 min-h-[12rem] sm:min-h-[16rem] rounded-lg`},Pe={key:0,class:`absolute inset-0 flex items-center justify-center bg-white/50 dark:bg-white/5 backdrop-blur-xs z-20`},Fe={class:`glass-card rounded-[15px] p-3 sm:p-6 flex flex-col`},Ie={class:`flex-1 flex flex-col justify-evenly`},Le={key:0,class:`flex items-center justify-center flex-1`},Re={key:1,class:`flex items-center justify-center flex-1`},ze={class:`w-28 sm:w-32 text-sm text-content-primary dark:text-content-primary truncate`},Be={class:`flex-1 h-12 bg-background-mute dark:bg-stroke/10 rounded overflow-hidden`},Ve={class:`w-20 text-sm text-content-secondary dark:text-content-muted text-right tabular-nums`},He={key:0,class:`glass-card rounded-[15px] p-6 sm:p-8 text-center`},Ue={key:1,class:`glass-card rounded-[15px] p-6 sm:p-8 text-center`},We={class:`text-content-secondary dark:text-content-muted text-sm`},E=x(l({name:`StatisticsView`,__name:`Statistics`,setup(e){C.register(pe,me,xe,ce,ye,ge,_e,le,de,se,fe,be,ve,he,ue);let l=ne(),x=re(),S=y(null),E=y(!1),D=()=>{S.value||x.isConnected||(S.value=window.setInterval($,3e4))},O=()=>{S.value&&=(clearInterval(S.value),null)},k=()=>{let e=document.documentElement.classList.contains(`dark`);return{gridColor:e?`rgba(255, 255, 255, 0.1)`:`rgba(0, 0, 0, 0.1)`,tickColor:e?`rgba(255, 255, 255, 0.7)`:`rgba(0, 0, 0, 0.7)`,legendColor:e?`rgba(255, 255, 255, 0.8)`:`rgba(0, 0, 0, 0.8)`,titleColor:e?`rgba(255, 255, 255, 0.8)`:`rgba(0, 0, 0, 0.8)`}},A=y(oe(`statistics_selectedHours`,24)),Ge=[{value:1,label:`1 Hour`},{value:6,label:`6 Hours`},{value:12,label:`12 Hours`},{value:24,label:`24 Hours`},{value:48,label:`2 Days`},{value:168,label:`1 Week`}];d(A,e=>ae(`statistics_selectedHours`,e));let j=y(null),M=y(null),N=y([]),P=y(null),F=y([]),I=y([]),L=y(!0),R=y(null),z=y({packetRate:!0,packetType:!0,noiseFloor:!1,routePie:!0,sparklines:!0}),B=y(!1),V=y(!1),H=y(!1),U=y(null),W=y(null),G=y(null),K=y(null),q=y(null),J=y(null),Y=y(null),X=m(()=>{let e=l.packetStats;return e?{totalRx:e.total_packets||0,totalTx:e.transmitted_packets||0}:{totalRx:0,totalTx:0}}),Z=(e,t)=>{if(e.length===0)return[];let n=Math.round(t*60*60*1e3/72),r=new Map;return e.forEach(([e,t])=>{let i=e;e>0x38d7ea4c68000?i=e/1e3:e>1e9&&e<0xe8d4a51000&&(i=e*1e3);let a=Math.floor(i/n)*n;r.has(a)||r.set(a,[]),r.get(a).push(t)}),Array.from(r.entries()).sort((e,t)=>e[0]-t[0]).map(([,e])=>e.reduce((e,t)=>e+t,0)/e.length)},Q=m(()=>{let e=[],t=[];if(j.value?.series){let n=j.value.series.find(e=>e.type===`rx_count`),r=j.value.series.find(e=>e.type===`tx_count`);n?.data&&(e=Z(n.data,A.value)),r?.data&&(t=Z(r.data,A.value))}return{totalPackets:e,transmittedPackets:t,droppedPackets:[],crcErrors:Z(I.value.map(e=>[e.timestamp>0xe8d4a51000?e.timestamp:e.timestamp*1e3,e.count]),A.value)}}),$=async()=>{try{L.value=!0,R.value=null,await Promise.all([l.fetchPacketStats({hours:A.value}),l.fetchSystemStats()]),L.value=!1,Ke()}catch(e){R.value=e instanceof Error?e.message:`Failed to fetch data`,L.value=!1}},Ke=async()=>{z.value={packetRate:!0,packetType:!0,noiseFloor:!0,routePie:!0,sparklines:!0};let e=[qe(),Je(),Ye(),Xe(),Ze()];try{await Promise.allSettled(e),await o(),!K.value||!q.value?setTimeout(()=>{et()},100):et()}catch(e){console.error(`Error loading chart data:`,e)}},qe=async()=>{try{let e=await b.get(`/metrics_graph_data`,{hours:A.value,resolution:`average`,metrics:`rx_count,tx_count`});e?.success&&(j.value=e.data)}catch{j.value=null}},Je=async()=>{try{let e=await b.get(`/packet_type_graph_data`,{hours:A.value,resolution:`average`,types:`all`});e?.success&&e.data&&(N.value=e.data.series||[])}catch{N.value=[]}},Ye=async()=>{try{let e=await b.get(`/route_stats`,{hours:A.value});e?.success&&e.data&&(P.value=e.data)}catch{P.value=null}},Xe=async()=>{try{let e={hours:A.value},t=await b.get(`/noise_floor_history`,e);if(t.success&&t.data){let e=t.data.history||[];Array.isArray(e)&&e.length>0&&(M.value={chart_data:e.map(e=>({timestamp:e.timestamp||Date.now()/1e3,noise_floor_dbm:e.noise_floor_dbm||e.noise_floor||-120}))},$e())}}catch{M.value={chart_data:[]}}},Ze=async()=>{try{let e=await b.get(`/crc_error_history`,{hours:A.value});e?.success&&e.data&&(I.value=e.data.history||[])}catch{I.value=[]}},Qe=()=>{z.value={packetRate:!0,packetType:!0,noiseFloor:!0,routePie:!0,sparklines:!0},tt(),B.value=!1,V.value=!1,H.value=!1,$()},$e=()=>{F.value=[],M.value?.chart_data&&M.value.chart_data.length>0&&(F.value=M.value.chart_data.map(e=>({timestamp:e.timestamp*1e3,snr:null,rssi:null,noiseFloor:e.noise_floor_dbm})))},et=()=>{if(!E.value){E.value=!0;try{nt(),rt(),it(),at(),setTimeout(()=>{z.value={packetRate:!1,packetType:!1,noiseFloor:!1,routePie:!1,sparklines:!1},setTimeout(()=>{let e=n(U.value),t=n(W.value),r=n(G.value);e&&e.update(`none`),t&&t.update(`none`),r&&r.update(`none`)},50)},100)}catch(e){console.error(`Error creating/updating charts:`,e),tt()}finally{E.value=!1}}},tt=()=>{try{U.value&&=(U.value.destroy(),null),W.value&&=(W.value.destroy(),null),G.value&&=(G.value.destroy(),null),Y.value&&T.default.purge(Y.value)}catch(e){console.error(`Error destroying charts:`,e)}},nt=()=>{if(!K.value)return;let e=K.value.getContext(`2d`);if(!e)return;let t=[],n=[];if(j.value?.series){let e=j.value.series.find(e=>e.type===`rx_count`),r=j.value.series.find(e=>e.type===`tx_count`);e?.data&&(t=e.data.map(([e,t])=>{let n=e;return n=e>0x38d7ea4c68000?e/1e3:e>0xe8d4a51000?e:e>1e9?e*1e3:Date.now(),{x:n,y:t}})),r?.data&&(n=r.data.map(([e,t])=>{let n=e;return n=e>0x38d7ea4c68000?e/1e3:e>0xe8d4a51000?e:e>1e9?e*1e3:Date.now(),{x:n,y:t}}))}if(t.length===0&&n.length===0){B.value=!0;return}B.value=!1,U.value&&=(U.value.destroy(),null);let i=Math.round(A.value*60*60*1e3/72),a=e=>{if(e.length===0)return[];let t=new Map;return e.forEach(e=>{let n=Math.floor(e.x/i)*i;t.has(n)||t.set(n,[]),t.get(n).push(e.y)}),Array.from(t.entries()).map(([e,t])=>({x:e,y:t.reduce((e,t)=>e+t,0)/t.length})).sort((e,t)=>e.x-t.x)},o=(e,t=3)=>{if(e.length<t)return e;let n=[];for(let r=0;r<e.length;r++){let i=Math.max(0,r-Math.floor(t/2)),a=Math.min(e.length,r+Math.ceil(t/2)),o=e.slice(i,a),s=o.reduce((e,t)=>e+t.y,0)/o.length;n.push({x:e[r].x,y:s})}return n},s=o(a(t)),c=o(a(n)),l=[...s.map(e=>e.y),...c.map(e=>e.y)],u=Math.min(...l),d=Math.max(...l),f=d-u||d*.1||.001,p=Math.max(0,u-f*.05),m=d+f*.05;try{let t=JSON.parse(JSON.stringify(s));U.value=r(new C(e,{type:`line`,data:{datasets:[{label:`TX/hr`,data:JSON.parse(JSON.stringify(c)),borderColor:`#F59E0B`,backgroundColor:`#F59E0B`,borderWidth:2,fill:`origin`,tension:.4,pointRadius:0,pointHoverRadius:3,order:1},{label:`RX/hr`,data:t,borderColor:`#C084FC`,backgroundColor:`#C084FC`,borderWidth:2,fill:`origin`,tension:.4,pointRadius:0,pointHoverRadius:3,order:2}]},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{display:!1},title:{display:!1},tooltip:{enabled:!0,backgroundColor:`rgba(0, 0, 0, 0.8)`,titleColor:`rgba(255, 255, 255, 0.9)`,bodyColor:`rgba(255, 255, 255, 0.8)`,borderColor:`rgba(255, 255, 255, 0.2)`,borderWidth:1,padding:12,displayColors:!0,callbacks:{title:function(e){let t=e[0]?.parsed?.x;return t==null?``:new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})},label:function(e){let t=e.dataset?.label||``,n=e.parsed?.y;return n==null?t:`${t}: ${n.toFixed(3)}`}}}},scales:{x:{type:`time`,time:{unit:`hour`,displayFormats:{hour:`HH:mm`}},min:Date.now()-A.value*3600*1e3,max:Date.now(),grid:{color:k().gridColor},ticks:{color:k().tickColor,maxTicksLimit:8}},y:{beginAtZero:!1,grid:{color:k().gridColor},ticks:{color:k().tickColor,callback:function(e){return typeof e==`number`?e.toFixed(3):e}},min:p,max:m}}}}))}catch(e){console.error(`Error creating packet rate chart:`,e),B.value=!0}},rt=()=>{if(!q.value)return;let e=q.value.getContext(`2d`);if(!e)return;let t=[],n=[],i=[`#60A5FA`,`#34D399`,`#FBBF24`,`#A78BFA`,`#F87171`,`#06B6D4`,`#84CC16`,`#F472B6`,`#10B981`];if(N.value.length>0)N.value.forEach(e=>{let r=e.data?e.data.reduce((e,t)=>e+t[1],0):0;r>0&&(t.push(e.name.replace(/\([^)]*\)/g,``).trim()),n.push(r))});else{V.value=!0;return}V.value=!1,W.value&&=(W.value.destroy(),null);try{let a=JSON.parse(JSON.stringify(t)),o=JSON.parse(JSON.stringify(n));W.value=r(new C(e,{type:`bar`,data:{labels:a,datasets:[{data:o,backgroundColor:i.slice(0,o.length),borderRadius:8,borderSkipped:!1}]},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},plugins:{legend:{display:!1}},scales:{x:{grid:{display:!1},ticks:{color:`rgba(255, 255, 255, 0.7)`,font:{size:10}}},y:{beginAtZero:!0,grid:{color:`rgba(255, 255, 255, 0.1)`},ticks:{color:`rgba(255, 255, 255, 0.7)`}}}}}))}catch(e){console.error(`Error creating packet type chart:`,e),V.value=!0}},it=()=>{if(!J.value)return;let e=J.value.getContext(`2d`);if(!e)return;let t=F.value.map(e=>({x:e.timestamp,y:e.noiseFloor})).filter(e=>e.y!==null&&e.y!==void 0),i=t.map(e=>e.y),a=i.length>0?Math.min(...i):-120,o=i.length>0?Math.max(...i):-110,s=o-a||1,c=a-s*.05,l=o+s*.05;if(G.value)try{let e=n(G.value),r=JSON.parse(JSON.stringify(t));e.data.datasets[0]&&(e.data.datasets[0].data=r),e.options?.scales?.x&&(e.options.scales.x.min=Date.now()-A.value*3600*1e3,e.options.scales.x.max=Date.now()),e.update(`active`);return}catch{G.value.destroy(),G.value=null}G.value=r(new C(e,{type:`scatter`,data:{datasets:[{label:`Noise Floor (dBm)`,data:JSON.parse(JSON.stringify(t)),borderWidth:0,backgroundColor:`rgba(245, 158, 11, 0.8)`,pointRadius:3,pointHoverRadius:5,pointStyle:`circle`}]},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{display:!0,position:`top`,labels:{color:k().legendColor,usePointStyle:!0,padding:20}},tooltip:{enabled:!0,backgroundColor:`rgba(0, 0, 0, 0.8)`,titleColor:`rgba(255, 255, 255, 0.9)`,bodyColor:`rgba(255, 255, 255, 0.8)`,borderColor:`rgba(255, 255, 255, 0.2)`,borderWidth:1,padding:12,displayColors:!0,callbacks:{title:function(e){let t=e[0]?.parsed?.x;return t==null?``:new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})},label:function(e){let t=e.dataset?.label||``,n=e.parsed?.y;return n==null?t:`${t}: ${n.toFixed(1)} dBm`}}}},scales:{x:{type:`time`,time:{unit:`hour`,displayFormats:{hour:`HH:mm`}},min:Date.now()-A.value*3600*1e3,max:Date.now(),grid:{color:k().gridColor},ticks:{color:k().tickColor,maxTicksLimit:8}},y:{type:`linear`,display:!0,title:{display:!0,text:`Noise Floor (dBm)`,color:k().titleColor},grid:{color:`rgba(245, 158, 11, 0.2)`},ticks:{color:`#F59E0B`,callback:function(e){return typeof e==`number`?e.toFixed(1):e}},min:c,max:l}}}}))},at=()=>{if(!Y.value)return;if(!P.value||!P.value.route_totals){H.value=!0;return}H.value=!1;let e=P.value.route_totals,t=Object.keys(e),n=Object.values(e),r=[`#3B82F6`,`#10B981`,`#F59E0B`,`#A78BFA`,`#F87171`];try{let e=JSON.parse(JSON.stringify(t)),i=JSON.parse(JSON.stringify(n)),a=i.reduce((e,t)=>e+t,0),o=i.map(e=>e/a*100),s=e.map((e,t)=>({type:`bar`,name:e,x:[o[t]],y:[``],orientation:`h`,marker:{color:r[t%r.length]},text:o[t]>=5?`${e} ${o[t].toFixed(0)}%`:``,textposition:`inside`,textfont:{color:`white`,size:11},hoverinfo:`none`,insidetextanchor:`middle`}));T.default.newPlot(Y.value,s,{paper_bgcolor:`rgba(0,0,0,0)`,plot_bgcolor:`rgba(0,0,0,0)`,font:{color:`rgba(255, 255, 255, 0.8)`,size:11},margin:{t:10,b:60,l:10,r:10},barmode:`stack`,showlegend:!0,legend:{orientation:`h`,x:0,y:-.3,xanchor:`left`,font:{color:`rgba(255, 255, 255, 0.8)`,size:10}},xaxis:{showgrid:!1,showticklabels:!1,zeroline:!1,range:[0,100]},yaxis:{showgrid:!1,showticklabels:!1,zeroline:!1},hovermode:!1,bargap:0},{responsive:!0,displayModeBar:!1,staticPlot:!0})}catch(e){console.error(`Error creating route treemap chart:`,e),H.value=!0}};return i(async()=>{await o(),$(),x.isConnected||D(),d(()=>x.isConnected,e=>{e?O():D()}),window.addEventListener(`resize`,()=>{setTimeout(()=>{n(U.value)?.resize(),n(W.value)?.resize(),n(G.value)?.resize(),Y.value&&T.default.Plots&&T.default.Plots.resize(Y.value)},100)})}),te(()=>{O(),U.value?.destroy(),W.value?.destroy(),G.value?.destroy(),Y.value&&T.default.purge(Y.value),window.removeEventListener(`resize`,()=>{})}),(e,n)=>(v(),_(`div`,Se,[g(`div`,Ce,[n[2]||=g(`h2`,{class:`text-xl sm:text-2xl font-bold text-content-primary dark:text-content-primary`},` Statistics `,-1),g(`div`,we,[n[1]||=g(`label`,{class:`text-content-secondary dark:text-content-muted text-xs sm:text-sm`},`Time Range:`,-1),u(g(`select`,{"onUpdate:modelValue":n[0]||=e=>A.value=e,onChange:Qe,class:`bg-white dark:bg-white/10 border border-stroke-subtle dark:border-stroke/20 rounded-lg px-2 sm:px-3 py-1.5 sm:py-2 text-content-primary dark:text-content-primary text-xs sm:text-sm focus:outline-hidden focus:border-primary dark:focus:border-accent-purple/50 transition-colors`},[(v(),_(h,null,t(Ge,e=>g(`option`,{key:e.value,value:e.value,class:`bg-white dark:bg-gray-800 text-content-primary dark:text-content-primary`},s(e.label),9,Te)),64))],544),[[ie,A.value]])])]),g(`div`,Ee,[p(w,{title:`Total RX`,value:X.value.totalRx,color:`#AAE8E8`,data:Q.value.totalPackets,loading:z.value.sparklines,variant:`classic`},null,8,[`value`,`data`,`loading`]),p(w,{title:`Total TX`,value:X.value.totalTx,color:`#FFC246`,data:Q.value.transmittedPackets,loading:z.value.sparklines,variant:`classic`},null,8,[`value`,`data`,`loading`]),p(w,{title:`CRC Errors`,value:I.value.reduce((e,t)=>e+t.count,0),color:`#F59E0B`,data:Q.value.crcErrors,loading:z.value.sparklines,variant:`classic`},null,8,[`value`,`data`,`loading`]),p(w,{title:`Packet Hash Cache`,value:a(l).systemStats?.duplicate_cache_size??0,color:`#9F7AEA`,data:[],loading:!1,variant:`smooth`,subtitle:`Entries expire after ${(()=>{let e=a(l).systemStats?.cache_ttl??3600,t=Math.floor(e/60);return t>=60?`${Math.floor(t/60)}h`:`${t}m`})()}`},null,8,[`value`,`subtitle`])]),g(`div`,De,[n[6]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-lg sm:text-xl font-semibold mb-3 sm:mb-4`},` Performance Metrics `,-1),g(`div`,null,[n[5]||=c(`<p class="text-content-secondary dark:text-content-muted text-xs sm:text-sm uppercase tracking-wide mb-2" data-v-bf282927> Packet Rate (RX/TX PER HOUR) </p><div class="flex items-center gap-3 sm:gap-6 mb-3 sm:mb-4" data-v-bf282927><div class="flex items-center gap-2" data-v-bf282927><div class="w-3 h-3 rounded-full bg-purple-400" data-v-bf282927></div><span class="text-content-secondary dark:text-content-muted text-sm" data-v-bf282927>RX/hr</span></div><div class="flex items-center gap-2" data-v-bf282927><div class="w-3 h-3 rounded-full bg-amber-400" data-v-bf282927></div><span class="text-content-secondary dark:text-content-muted text-sm" data-v-bf282927>TX/hr</span></div></div>`,2),g(`div`,Oe,[g(`canvas`,{ref_key:`packetRateCanvasRef`,ref:K,class:`w-full h-full relative z-10`},null,512),z.value.packetRate?(v(),_(`div`,ke,[...n[3]||=[g(`div`,{class:`text-center`},[g(`div`,{class:`animate-spin w-6 h-6 sm:w-8 sm:h-8 border-2 border-stroke-subtle dark:border-stroke/20 border-t-purple-600 dark:border-t-purple-400 rounded-full mx-auto mb-2`}),g(`div`,{class:`text-content-secondary dark:text-content-muted text-[10px] sm:text-xs`},` Loading packet rate data... `)],-1)]])):f(``,!0),B.value&&!z.value.packetRate?(v(),_(`div`,Ae,[...n[4]||=[g(`div`,{class:`text-center`},[g(`div`,{class:`text-red-700 dark:text-red-400 text-sm font-semibold mb-1`},` No Data Available `),g(`div`,{class:`text-content-secondary dark:text-content-muted text-xs`},` Packet rate data not found `)],-1)]])):f(``,!0)])])]),g(`div`,je,[g(`div`,Me,[n[8]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-lg sm:text-xl font-semibold mb-3 sm:mb-4`},` Noise Floor Over Time `,-1),g(`div`,Ne,[g(`canvas`,{ref_key:`signalMetricsCanvasRef`,ref:J,class:`w-full h-full`},null,512),z.value.noiseFloor?(v(),_(`div`,Pe,[...n[7]||=[g(`div`,{class:`text-center`},[g(`div`,{class:`animate-spin w-6 h-6 sm:w-8 sm:h-8 border-2 border-stroke-subtle dark:border-stroke/20 border-t-amber-600 dark:border-t-amber-400 rounded-full mx-auto mb-2`}),g(`div`,{class:`text-content-secondary dark:text-content-muted text-[10px] sm:text-xs`},` Loading noise floor data... `)],-1)]])):f(``,!0)])]),g(`div`,Fe,[n[11]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-lg sm:text-xl font-semibold mb-3 sm:mb-4`},` Route Distribution `,-1),g(`div`,Ie,[z.value.routePie?(v(),_(`div`,Le,[...n[9]||=[g(`div`,{class:`text-center`},[g(`div`,{class:`animate-spin w-6 h-6 border-2 border-stroke-subtle dark:border-stroke/20 border-t-green-600 dark:border-t-green-400 rounded-full mx-auto mb-2`}),g(`div`,{class:`text-content-secondary dark:text-content-muted text-xs`},` Loading route data... `)],-1)]])):H.value?(v(),_(`div`,Re,[...n[10]||=[g(`div`,{class:`text-center`},[g(`div`,{class:`text-red-700 dark:text-red-400 text-sm font-semibold mb-1`},` No Data Available `),g(`div`,{class:`text-content-secondary dark:text-content-muted text-xs`},` Route statistics not found `)],-1)]])):P.value?.route_totals?(v(!0),_(h,{key:2},t(P.value.route_totals,(e,t,n)=>(v(),_(`div`,{key:t,class:`flex items-center gap-3`},[g(`div`,ze,s(t),1),g(`div`,Be,[g(`div`,{class:`h-full rounded transition-all duration-300`,style:ee({width:`${e/Math.max(...Object.values(P.value.route_totals))*100}%`,backgroundColor:[`#3B82F6`,`#10B981`,`#F59E0B`,`#A78BFA`,`#F87171`][n%5]})},null,4)]),g(`div`,Ve,s(e.toLocaleString()),1)]))),128)):f(``,!0)])])]),L.value?(v(),_(`div`,He,[...n[12]||=[g(`div`,{class:`text-content-secondary dark:text-content-muted mb-2 text-sm`},` Loading statistics... `,-1),g(`div`,{class:`animate-spin w-6 h-6 sm:w-8 sm:h-8 border-2 border-stroke-subtle dark:border-stroke/20 border-t-content-primary dark:border-t-white/70 rounded-full mx-auto`},null,-1)]])):f(``,!0),R.value?(v(),_(`div`,Ue,[n[13]||=g(`div`,{class:`text-red-700 dark:text-red-400 mb-2 text-sm font-semibold`},` Failed to load statistics `,-1),g(`p`,We,s(R.value),1),g(`button`,{onClick:$,class:`mt-4 px-4 py-2 bg-primary hover:bg-primary/90 dark:bg-primary dark:hover:bg-primary/80 text-white font-medium rounded-lg border border-primary/20 dark:border-primary/30 transition-colors shadow-sm`},` Retry `)])):f(``,!0)]))}}),[[`__scopeId`,`data-v-bf282927`]]);export{E as default};