Files
pyMC_Repeater/repeater/web/html/assets/Statistics-S4HgWYku.js
T
2026-04-21 14:47:18 +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,K as i,S as a,b as o,f as s,ft as c,g as l,j as u,k as d,l as f,m as p,o as m,pt as h,r as g,s as _,u as v,w as y,x as ee,z as b}from"./runtime-core.esm-bundler-HnidnMFy.js";import{t as x}from"./api-CbM6k1ZB.js";import{t as te}from"./packets-C-dzvp0W.js";import{t as ne}from"./websocket-nXR7EYbj.js";import{t as S}from"./_plugin-vue_export-helper-B7aGp3iI.js";import{a as re,d as ie}from"./index-BFltqMtv.js";import{t as C}from"./plotly.min-Dl7ekyci.js";import{n as ae,t as oe}from"./preferences-Bv8i60GL.js";import{_ as se,a as w,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-B1uYMRrx.js";import{t as T}from"./chartjs-adapter-date-fns.esm-DnBoPdP1.js";var E=e(C(),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`},D=S(l({name:`StatisticsView`,__name:`Statistics`,setup(e){w.register(pe,me,xe,ce,ye,ge,_e,le,de,se,fe,be,ve,he,ue);let l=te(),S=ne(),C=b(!1),D=()=>{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)`}},O=b(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(O,e=>ae(`statistics_selectedHours`,e));let k=b(null),A=b(null),j=b([]),M=b(null),N=b([]),P=b([]),F=b(!0),I=b(null),L=b({packetRate:!0,packetType:!0,noiseFloor:!1,routePie:!0,sparklines:!0}),R=b(!1),z=b(!1),B=b(!1),V=b(null),H=b(null),U=b(null),W=b(null),G=b(null),K=b(null),q=b(null),J=m(()=>{let e=l.packetStats;return e?{totalRx:e.total_packets||0,totalTx:e.transmitted_packets||0}:{totalRx:0,totalTx:0}}),Y=(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)},X=m(()=>{let e=[],t=[];if(k.value?.series){let n=k.value.series.find(e=>e.type===`rx_count`),r=k.value.series.find(e=>e.type===`tx_count`);n?.data&&(e=Y(n.data,O.value)),r?.data&&(t=Y(r.data,O.value))}return{totalPackets:e,transmittedPackets:t,droppedPackets:[],crcErrors:Y(P.value.map(e=>[e.timestamp>0xe8d4a51000?e.timestamp:e.timestamp*1e3,e.count]),O.value)}}),Z=async()=>{try{F.value=!0,I.value=null,await Promise.all([l.fetchPacketStats({hours:O.value}),l.fetchSystemStats()]),F.value=!1,Ke()}catch(e){I.value=e instanceof Error?e.message:`Failed to fetch data`,F.value=!1}},Ke=async()=>{L.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(),!W.value||!G.value?setTimeout(()=>{Q()},100):Q()}catch(e){console.error(`Error loading chart data:`,e)}},qe=async()=>{try{let e=await x.get(`/metrics_graph_data`,{hours:O.value,resolution:`average`,metrics:`rx_count,tx_count`});e?.success&&(k.value=e.data)}catch{k.value=null}},Je=async()=>{try{let e=await x.get(`/packet_type_graph_data`,{hours:O.value,resolution:`average`,types:`all`});e?.success&&e.data&&(j.value=e.data.series||[])}catch{j.value=[]}},Ye=async()=>{try{let e=await x.get(`/route_stats`,{hours:O.value});e?.success&&e.data&&(M.value=e.data)}catch{M.value=null}},Xe=async()=>{try{let e={hours:O.value},t=await x.get(`/noise_floor_history`,e);if(t.success&&t.data){let e=t.data.history||[];Array.isArray(e)&&e.length>0&&(A.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{A.value={chart_data:[]}}},Ze=async()=>{try{let e=await x.get(`/crc_error_history`,{hours:O.value});e?.success&&e.data&&(P.value=e.data.history||[])}catch{P.value=[]}},Qe=()=>{L.value={packetRate:!0,packetType:!0,noiseFloor:!0,routePie:!0,sparklines:!0},$(),R.value=!1,z.value=!1,B.value=!1,Z()},$e=()=>{N.value=[],A.value?.chart_data&&A.value.chart_data.length>0&&(N.value=A.value.chart_data.map(e=>({timestamp:e.timestamp*1e3,snr:null,rssi:null,noiseFloor:e.noise_floor_dbm})))},Q=()=>{if(!C.value){C.value=!0;try{et(),tt(),nt(),rt(),setTimeout(()=>{L.value={packetRate:!1,packetType:!1,noiseFloor:!1,routePie:!1,sparklines:!1},setTimeout(()=>{let e=n(V.value),t=n(H.value),r=n(U.value);e&&e.update(`none`),t&&t.update(`none`),r&&r.update(`none`)},50)},100)}catch(e){console.error(`Error creating/updating charts:`,e),$()}finally{C.value=!1}}},$=()=>{try{V.value&&=(V.value.destroy(),null),H.value&&=(H.value.destroy(),null),U.value&&=(U.value.destroy(),null),q.value&&E.default.purge(q.value)}catch(e){console.error(`Error destroying charts:`,e)}},et=()=>{if(!W.value)return;let e=W.value.getContext(`2d`);if(!e)return;let t=[],n=[];if(k.value?.series){let e=k.value.series.find(e=>e.type===`rx_count`),r=k.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){R.value=!0;return}R.value=!1,V.value&&=(V.value.destroy(),null);let i=Math.round(O.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));V.value=r(new w(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()-O.value*3600*1e3,max:Date.now(),grid:{color:D().gridColor},ticks:{color:D().tickColor,maxTicksLimit:8}},y:{beginAtZero:!1,grid:{color:D().gridColor},ticks:{color:D().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),R.value=!0}},tt=()=>{if(!G.value)return;let e=G.value.getContext(`2d`);if(!e)return;let t=[],n=[],i=[`#60A5FA`,`#34D399`,`#FBBF24`,`#A78BFA`,`#F87171`,`#06B6D4`,`#84CC16`,`#F472B6`,`#10B981`];if(j.value.length>0)j.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{z.value=!0;return}z.value=!1,H.value&&=(H.value.destroy(),null);try{let a=JSON.parse(JSON.stringify(t)),o=JSON.parse(JSON.stringify(n));H.value=r(new w(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),z.value=!0}},nt=()=>{if(!K.value)return;let e=K.value.getContext(`2d`);if(!e)return;let t=N.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(U.value)try{let e=n(U.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()-O.value*3600*1e3,e.options.scales.x.max=Date.now()),e.update(`active`);return}catch{U.value.destroy(),U.value=null}U.value=r(new w(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:D().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()-O.value*3600*1e3,max:Date.now(),grid:{color:D().gridColor},ticks:{color:D().tickColor,maxTicksLimit:8}},y:{type:`linear`,display:!0,title:{display:!0,text:`Noise Floor (dBm)`,color:D().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}}}}))},rt=()=>{if(!q.value)return;if(!M.value||!M.value.route_totals){B.value=!0;return}B.value=!1;let e=M.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`}));E.default.newPlot(q.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),B.value=!0}};return a(async()=>{await o(),Z(),window.addEventListener(`resize`,()=>{setTimeout(()=>{n(V.value)?.resize(),n(H.value)?.resize(),n(U.value)?.resize(),q.value&&E.default.Plots&&E.default.Plots.resize(q.value)},100)})}),ee(()=>{V.value?.destroy(),H.value?.destroy(),U.value?.destroy(),q.value&&E.default.purge(q.value),window.removeEventListener(`resize`,()=>{})}),re(Z,{intervalMs:3e4,enabled:()=>!S.isConnected,immediate:!1}),(e,n)=>(y(),v(`div`,Se,[_(`div`,Ce,[n[2]||=_(`h2`,{class:`text-xl sm:text-2xl font-bold text-content-primary dark:text-content-primary`},` Statistics `,-1),_(`div`,we,[n[1]||=_(`label`,{class:`text-content-secondary dark:text-content-muted text-xs sm:text-sm`},`Time Range:`,-1),u(_(`select`,{"onUpdate:modelValue":n[0]||=e=>O.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`},[(y(),v(g,null,t(Ge,e=>_(`option`,{key:e.value,value:e.value,class:`bg-white dark:bg-gray-800 text-content-primary dark:text-content-primary`},h(e.label),9,Te)),64))],544),[[ie,O.value]])])]),_(`div`,Ee,[p(T,{title:`Total RX`,value:J.value.totalRx,color:`#AAE8E8`,data:X.value.totalPackets,loading:L.value.sparklines,variant:`classic`},null,8,[`value`,`data`,`loading`]),p(T,{title:`Total TX`,value:J.value.totalTx,color:`#FFC246`,data:X.value.transmittedPackets,loading:L.value.sparklines,variant:`classic`},null,8,[`value`,`data`,`loading`]),p(T,{title:`CRC Errors`,value:P.value.reduce((e,t)=>e+t.count,0),color:`#F59E0B`,data:X.value.crcErrors,loading:L.value.sparklines,variant:`classic`},null,8,[`value`,`data`,`loading`]),p(T,{title:`Packet Hash Cache`,value:i(l).systemStats?.duplicate_cache_size??0,color:`#9F7AEA`,data:[],loading:!1,variant:`smooth`,subtitle:`Entries expire after ${(()=>{let e=i(l).systemStats?.cache_ttl??3600,t=Math.floor(e/60);return t>=60?`${Math.floor(t/60)}h`:`${t}m`})()}`},null,8,[`value`,`subtitle`])]),_(`div`,De,[n[6]||=_(`h3`,{class:`text-content-primary dark:text-content-primary text-lg sm:text-xl font-semibold mb-3 sm:mb-4`},` Performance Metrics `,-1),_(`div`,null,[n[5]||=s(`<p class="text-content-secondary dark:text-content-muted text-xs sm:text-sm uppercase tracking-wide mb-2" data-v-54d032e1> Packet Rate (RX/TX PER HOUR) </p><div class="flex items-center gap-3 sm:gap-6 mb-3 sm:mb-4" data-v-54d032e1><div class="flex items-center gap-2" data-v-54d032e1><div class="w-3 h-3 rounded-full bg-purple-400" data-v-54d032e1></div><span class="text-content-secondary dark:text-content-muted text-sm" data-v-54d032e1>RX/hr</span></div><div class="flex items-center gap-2" data-v-54d032e1><div class="w-3 h-3 rounded-full bg-amber-400" data-v-54d032e1></div><span class="text-content-secondary dark:text-content-muted text-sm" data-v-54d032e1>TX/hr</span></div></div>`,2),_(`div`,Oe,[_(`canvas`,{ref_key:`packetRateCanvasRef`,ref:W,class:`w-full h-full relative z-10`},null,512),L.value.packetRate?(y(),v(`div`,ke,[...n[3]||=[_(`div`,{class:`text-center`},[_(`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`}),_(`div`,{class:`text-content-secondary dark:text-content-muted text-[10px] sm:text-xs`},` Loading packet rate data... `)],-1)]])):f(``,!0),R.value&&!L.value.packetRate?(y(),v(`div`,Ae,[...n[4]||=[_(`div`,{class:`text-center`},[_(`div`,{class:`text-red-700 dark:text-red-400 text-sm font-semibold mb-1`},` No Data Available `),_(`div`,{class:`text-content-secondary dark:text-content-muted text-xs`},` Packet rate data not found `)],-1)]])):f(``,!0)])])]),_(`div`,je,[_(`div`,Me,[n[8]||=_(`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),_(`div`,Ne,[_(`canvas`,{ref_key:`signalMetricsCanvasRef`,ref:K,class:`w-full h-full`},null,512),L.value.noiseFloor?(y(),v(`div`,Pe,[...n[7]||=[_(`div`,{class:`text-center`},[_(`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`}),_(`div`,{class:`text-content-secondary dark:text-content-muted text-[10px] sm:text-xs`},` Loading noise floor data... `)],-1)]])):f(``,!0)])]),_(`div`,Fe,[n[11]||=_(`h3`,{class:`text-content-primary dark:text-content-primary text-lg sm:text-xl font-semibold mb-3 sm:mb-4`},` Route Distribution `,-1),_(`div`,Ie,[L.value.routePie?(y(),v(`div`,Le,[...n[9]||=[_(`div`,{class:`text-center`},[_(`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`}),_(`div`,{class:`text-content-secondary dark:text-content-muted text-xs`},` Loading route data... `)],-1)]])):B.value?(y(),v(`div`,Re,[...n[10]||=[_(`div`,{class:`text-center`},[_(`div`,{class:`text-red-700 dark:text-red-400 text-sm font-semibold mb-1`},` No Data Available `),_(`div`,{class:`text-content-secondary dark:text-content-muted text-xs`},` Route statistics not found `)],-1)]])):M.value?.route_totals?(y(!0),v(g,{key:2},t(M.value.route_totals,(e,t,n)=>(y(),v(`div`,{key:t,class:`flex items-center gap-3`},[_(`div`,ze,h(t),1),_(`div`,Be,[_(`div`,{class:`h-full rounded transition-all duration-300`,style:c({width:`${e/Math.max(...Object.values(M.value.route_totals))*100}%`,backgroundColor:[`#3B82F6`,`#10B981`,`#F59E0B`,`#A78BFA`,`#F87171`][n%5]})},null,4)]),_(`div`,Ve,h(e.toLocaleString()),1)]))),128)):f(``,!0)])])]),F.value?(y(),v(`div`,He,[...n[12]||=[_(`div`,{class:`text-content-secondary dark:text-content-muted mb-2 text-sm`},` Loading statistics... `,-1),_(`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),I.value?(y(),v(`div`,Ue,[n[13]||=_(`div`,{class:`text-red-700 dark:text-red-400 mb-2 text-sm font-semibold`},` Failed to load statistics `,-1),_(`p`,We,h(I.value),1),_(`button`,{onClick:Z,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-54d032e1`]]);export{D as default};